mirror of
https://github.com/internetee/registry.git
synced 2025-07-21 10:16:01 +02:00
parent
c586932418
commit
a5db4e3bfb
4 changed files with 64 additions and 47 deletions
7
.reek
7
.reek
|
@ -103,13 +103,11 @@ UncommunicativeVariableName:
|
||||||
- Epp::Contact#attrs_from
|
- Epp::Contact#attrs_from
|
||||||
- Epp::Contact#check_availability
|
- Epp::Contact#check_availability
|
||||||
- Epp::Domain#check_availability
|
- Epp::Domain#check_availability
|
||||||
- Epp::Domain#copy_and_transfer_contact
|
|
||||||
- Epp::Domain#domain_contact_attrs_from
|
- Epp::Domain#domain_contact_attrs_from
|
||||||
- Epp::Domain#domain_status_list_from
|
- Epp::Domain#domain_status_list_from
|
||||||
- Epp::Domain#domain_statuses_attrs
|
- Epp::Domain#domain_statuses_attrs
|
||||||
- Epp::Domain#nameservers_from
|
- Epp::Domain#nameservers_from
|
||||||
- Epp::Domain#parse_period_unit_from_frame
|
- Epp::Domain#parse_period_unit_from_frame
|
||||||
- Epp::Domain#transfer_domain_contacts
|
|
||||||
- Epp::Domain#validate_contacts
|
- Epp::Domain#validate_contacts
|
||||||
- Invoice#cancel_overdue_invoices
|
- Invoice#cancel_overdue_invoices
|
||||||
- Legacy::Db
|
- Legacy::Db
|
||||||
|
@ -317,7 +315,6 @@ DuplicateMethodCall:
|
||||||
- Epp::Domain#parse_legal_document_from_frame
|
- Epp::Domain#parse_legal_document_from_frame
|
||||||
- Epp::Domain#query_transfer
|
- Epp::Domain#query_transfer
|
||||||
- Epp::Domain#renew
|
- Epp::Domain#renew
|
||||||
- Epp::Domain#transfer_domain_contacts
|
|
||||||
- Epp::Domain#update
|
- Epp::Domain#update
|
||||||
- Epp::Domain#validate_contacts
|
- Epp::Domain#validate_contacts
|
||||||
- Epp::Domain#validate_exp_dates
|
- Epp::Domain#validate_exp_dates
|
||||||
|
@ -795,7 +792,6 @@ TooManyStatements:
|
||||||
- Epp::Domain#approve_transfer
|
- Epp::Domain#approve_transfer
|
||||||
- Epp::Domain#attrs_from
|
- Epp::Domain#attrs_from
|
||||||
- Epp::Domain#check_availability
|
- Epp::Domain#check_availability
|
||||||
- Epp::Domain#copy_and_transfer_contact
|
|
||||||
- Epp::Domain#destroy_attrs
|
- Epp::Domain#destroy_attrs
|
||||||
- Epp::Domain#dnskeys_attrs
|
- Epp::Domain#dnskeys_attrs
|
||||||
- Epp::Domain#domain_contact_attrs_from
|
- Epp::Domain#domain_contact_attrs_from
|
||||||
|
@ -811,7 +807,6 @@ TooManyStatements:
|
||||||
- Epp::Domain#reject_transfer
|
- Epp::Domain#reject_transfer
|
||||||
- Epp::Domain#renew
|
- Epp::Domain#renew
|
||||||
- Epp::Domain#transfer
|
- Epp::Domain#transfer
|
||||||
- Epp::Domain#transfer_domain_contacts
|
|
||||||
- Epp::Domain#update
|
- Epp::Domain#update
|
||||||
- Epp::Domain#validate_contacts
|
- Epp::Domain#validate_contacts
|
||||||
- Invoice#cancel
|
- Invoice#cancel
|
||||||
|
@ -881,7 +876,6 @@ UtilityFunction:
|
||||||
- EppErrors#construct_msg_args_and_value
|
- EppErrors#construct_msg_args_and_value
|
||||||
- Versions#user_from_id_role_username
|
- Versions#user_from_id_role_username
|
||||||
- Depp::Keyrelay#expiry
|
- Depp::Keyrelay#expiry
|
||||||
- Epp::Domain#copy_and_transfer_contact
|
|
||||||
- Epp::Domain#nameservers_from
|
- Epp::Domain#nameservers_from
|
||||||
- Epp::Domain::DnsSecKeys#mark
|
- Epp::Domain::DnsSecKeys#mark
|
||||||
- Epp::Domain::DnsSecKeys#xm_copy
|
- Epp::Domain::DnsSecKeys#xm_copy
|
||||||
|
@ -956,7 +950,6 @@ FeatureEnvy:
|
||||||
- Epp::Domain#destroy_attrs
|
- Epp::Domain#destroy_attrs
|
||||||
- Epp::Domain#domain_contact_attrs_from
|
- Epp::Domain#domain_contact_attrs_from
|
||||||
- Epp::Domain#domain_status_list_from
|
- Epp::Domain#domain_status_list_from
|
||||||
- Epp::Domain#transfer_domain_contacts
|
|
||||||
- LegalDocument#calc_checksum
|
- LegalDocument#calc_checksum
|
||||||
- Nameserver#find_by_hash_params
|
- Nameserver#find_by_hash_params
|
||||||
- RegistrantUser#find_or_create_by_idc_data
|
- RegistrantUser#find_or_create_by_idc_data
|
||||||
|
|
|
@ -6,8 +6,18 @@ module Concerns::Domain::Transferable
|
||||||
end
|
end
|
||||||
|
|
||||||
def transfer(new_registrar)
|
def transfer(new_registrar)
|
||||||
|
old_registrar = registrar
|
||||||
|
|
||||||
self.registrar = new_registrar
|
self.registrar = new_registrar
|
||||||
regenerate_transfer_code
|
regenerate_transfer_code
|
||||||
|
|
||||||
|
domain_transfers.create!(
|
||||||
|
transfer_requested_at: Time.zone.now,
|
||||||
|
transfer_from: old_registrar,
|
||||||
|
transfer_to: new_registrar
|
||||||
|
)
|
||||||
|
|
||||||
|
transfer_contacts(new_registrar.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -16,5 +26,43 @@ module Concerns::Domain::Transferable
|
||||||
self.transfer_code = SecureRandom.hex
|
self.transfer_code = SecureRandom.hex
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def transfer_contacts(registrar_id)
|
||||||
|
transfer_registrant(registrar_id)
|
||||||
|
transfer_domain_contacts(registrar_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def transfer_registrant(registrar_id)
|
||||||
|
return if registrant.registrar_id == registrar_id
|
||||||
|
self.registrant_id = copy_and_transfer_contact(registrant_id, registrar_id).id
|
||||||
|
end
|
||||||
|
|
||||||
|
def transfer_domain_contacts(registrar_id)
|
||||||
|
copied_ids = []
|
||||||
|
contacts.each do |c|
|
||||||
|
next if copied_ids.include?(c.id) || c.registrar_id == registrar_id
|
||||||
|
|
||||||
|
if registrant_id_was == c.id # registrant was copied previously, do not copy it again
|
||||||
|
oc = OpenStruct.new(id: registrant_id)
|
||||||
|
else
|
||||||
|
oc = copy_and_transfer_contact(c.id, registrar_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
domain_contacts.where(contact_id: c.id).update_all({ contact_id: oc.id }) # n+1 workaround
|
||||||
|
copied_ids << c.id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def copy_and_transfer_contact(contact_id, registrar_id)
|
||||||
|
c = Contact.find(contact_id) # n+1 workaround
|
||||||
|
oc = c.deep_clone
|
||||||
|
oc.code = nil
|
||||||
|
oc.registrar_id = registrar_id
|
||||||
|
oc.copy_from_id = c.id
|
||||||
|
oc.generate_code
|
||||||
|
oc.remove_address unless Contact.address_processing?
|
||||||
|
oc.save!(validate: false)
|
||||||
|
oc
|
||||||
|
end
|
||||||
|
|
||||||
alias_method :regenerate_transfer_code, :generate_transfer_code
|
alias_method :regenerate_transfer_code, :generate_transfer_code
|
||||||
end
|
end
|
||||||
|
|
|
@ -641,46 +641,6 @@ class Epp::Domain < Domain
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: Eager load problems here. Investigate how it's possible not to query contact again
|
|
||||||
# Check if versioning works with update_column
|
|
||||||
def transfer_contacts(registrar_id)
|
|
||||||
transfer_registrant(registrar_id)
|
|
||||||
transfer_domain_contacts(registrar_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def copy_and_transfer_contact(contact_id, registrar_id)
|
|
||||||
c = Contact.find(contact_id) # n+1 workaround
|
|
||||||
oc = c.deep_clone
|
|
||||||
oc.code = nil
|
|
||||||
oc.registrar_id = registrar_id
|
|
||||||
oc.copy_from_id = c.id
|
|
||||||
oc.generate_code
|
|
||||||
oc.remove_address unless Contact.address_processing?
|
|
||||||
oc.save!(validate: false)
|
|
||||||
oc
|
|
||||||
end
|
|
||||||
|
|
||||||
def transfer_registrant(registrar_id)
|
|
||||||
return if registrant.registrar_id == registrar_id
|
|
||||||
self.registrant_id = copy_and_transfer_contact(registrant_id, registrar_id).id
|
|
||||||
end
|
|
||||||
|
|
||||||
def transfer_domain_contacts(registrar_id)
|
|
||||||
copied_ids = []
|
|
||||||
contacts.each do |c|
|
|
||||||
next if copied_ids.include?(c.id) || c.registrar_id == registrar_id
|
|
||||||
|
|
||||||
if registrant_id_was == c.id # registrant was copied previously, do not copy it again
|
|
||||||
oc = OpenStruct.new(id: registrant_id)
|
|
||||||
else
|
|
||||||
oc = copy_and_transfer_contact(c.id, registrar_id)
|
|
||||||
end
|
|
||||||
|
|
||||||
domain_contacts.where(contact_id: c.id).update_all({ contact_id: oc.id }) # n+1 workaround
|
|
||||||
copied_ids << c.id
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# rubocop: enable Metrics/PerceivedComplexity
|
# rubocop: enable Metrics/PerceivedComplexity
|
||||||
# rubocop: enable Metrics/CyclomaticComplexity
|
# rubocop: enable Metrics/CyclomaticComplexity
|
||||||
# rubocop: disable Metrics/MethodLength
|
# rubocop: disable Metrics/MethodLength
|
||||||
|
|
|
@ -39,4 +39,20 @@ class DomainTest < ActiveSupport::TestCase
|
||||||
assert_equal new_registrar, @domain.registrar
|
assert_equal new_registrar, @domain.registrar
|
||||||
refute_same @domain.transfer_code, old_transfer_code
|
refute_same @domain.transfer_code, old_transfer_code
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_transfer_creates_domain_transfer_object
|
||||||
|
new_registrar = registrars(:goodnames)
|
||||||
|
|
||||||
|
assert_difference 'DomainTransfer.count' do
|
||||||
|
@domain.transfer(new_registrar)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_transfer_copies_contacts
|
||||||
|
new_registrar = registrars(:goodnames)
|
||||||
|
|
||||||
|
assert_difference 'Contact.count', 2 do
|
||||||
|
@domain.transfer(new_registrar)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue