diff --git a/app/controllers/concerns/epp/common.rb b/app/controllers/concerns/epp/common.rb index 23b9d0f3c..5f204fdf3 100644 --- a/app/controllers/concerns/epp/common.rb +++ b/app/controllers/concerns/epp/common.rb @@ -42,6 +42,9 @@ module Epp::Common obj.construct_epp_errors @errors += obj.errors[:epp_errors] end + + # for debugging + @errors << {code: '1', msg: 'handle_errors was executed when there were actually no errors'} if @errors.blank? render '/epp/error' end diff --git a/app/helpers/epp/domains_helper.rb b/app/helpers/epp/domains_helper.rb index 566f5ebd2..89c750d39 100644 --- a/app/helpers/epp/domains_helper.rb +++ b/app/helpers/epp/domains_helper.rb @@ -3,7 +3,7 @@ module Epp::DomainsHelper Domain.transaction do @domain = Domain.new(domain_create_params) - handle_errors(@domain) and return unless @domain.attach_objects(@ph, parsed_frame) + handle_errors(@domain) and return unless @domain.parse_and_attach_domain_dependencies(@ph, parsed_frame) handle_errors(@domain) and return unless @domain.save render '/epp/domains/success' @@ -38,8 +38,10 @@ module Epp::DomainsHelper @domain = find_domain handle_errors(@domain) and return unless @domain - handle_errors(@domain) and return unless @domain.attach_objects(@ph, parsed_frame.css('add')) - handle_errors(@domain) and return unless @domain.detach_objects(@ph, parsed_frame.css('rem')) + handle_errors(@domain) and return unless @domain.parse_and_attach_domain_dependencies(@ph, parsed_frame.css('add')) + handle_errors(@domain) and return unless @domain.parse_and_detach_domain_dependencies(parsed_frame.css('rem')) + handle_errors(@domain) and return unless @domain.parse_and_update_domain_dependencies(parsed_frame.css('chg')) + handle_errors(@domain) and return unless @domain.parse_and_update_domain_attributes(parsed_frame.css('chg')) handle_errors(@domain) and return unless @domain.save render '/epp/domains/success' diff --git a/app/models/domain.rb b/app/models/domain.rb index 74cf668b7..765df58c4 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -51,7 +51,7 @@ class Domain < ActiveRecord::Base ### CREATE & UPDATE ### - def attach_objects(ph, parsed_frame) + def parse_and_attach_domain_dependencies(ph, parsed_frame) attach_owner_contact(ph[:registrant]) if ph[:registrant] attach_contacts(self.class.parse_contacts_from_frame(parsed_frame)) attach_nameservers(self.class.parse_nameservers_from_frame(parsed_frame)) @@ -60,7 +60,7 @@ class Domain < ActiveRecord::Base errors.empty? end - def detach_objects(ph, parsed_frame) + def parse_and_detach_domain_dependencies(parsed_frame) detach_contacts(self.class.parse_contacts_from_frame(parsed_frame)) detach_nameservers(self.class.parse_nameservers_from_frame(parsed_frame)) detach_statuses(self.class.parse_statuses_from_frame(parsed_frame)) @@ -68,6 +68,19 @@ class Domain < ActiveRecord::Base errors.empty? end + def parse_and_update_domain_dependencies(parsed_frame) + owner_contact_code = parsed_frame.css('registrant').try(:text) + attach_owner_contact(owner_contact_code) if owner_contact_code.present? + + errors.empty? + end + + def parse_and_update_domain_attributes(parsed_frame) + assign_attributes(self.class.parse_update_params_from_frame(parsed_frame)) + + errors.empty? + end + def attach_owner_contact(code) self.owner_contact = Contact.find_by(code: code) @@ -324,6 +337,15 @@ class Domain < ActiveRecord::Base res end + def parse_update_params_from_frame(parsed_frame) + ret = {} + return ret if parsed_frame.blank? + + ret[:auth_info] = parsed_frame.css('pw').try(:text) + + ret.compact + end + def check_availability(domains) domains = [domains] if domains.is_a?(String) diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 0ff8683e7..779a2209c 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -309,7 +309,19 @@ describe 'EPP Domain', epp: true do expect(response[:results][2][:result_code]).to eq('2303') expect(response[:results][2][:msg]).to eq('Status was not found') expect(response[:results][2][:value]).to eq('clientHold') + end + it 'updates a domain' do + Fabricate(:contact, code: 'mak21') + epp_request('domains/update_add_objects.xml') + response = epp_request('domains/update.xml') + + expect(response[:results][0][:result_code]).to eq('1000') + + d = Domain.last + + expect(d.owner_contact_code).to eq('mak21') + expect(d.auth_info).to eq('2BARfoo') end end diff --git a/spec/epp/requests/domains/update.xml b/spec/epp/requests/domains/update.xml index d3a5b9a6c..b5372b013 100644 --- a/spec/epp/requests/domains/update.xml +++ b/spec/epp/requests/domains/update.xml @@ -5,24 +5,8 @@ example.ee - - - ns1.example.com - ns2.example.com - - mak21 - Payment overdue. - - - - ns1.example.com - - sh8013 - - - sh8013 + mak21 2BARfoo diff --git a/spec/support/epp.rb b/spec/support/epp.rb index fb85caf36..262fd5779 100644 --- a/spec/support/epp.rb +++ b/spec/support/epp.rb @@ -42,6 +42,11 @@ module Epp obj end + #print output + def po(r) + puts r[:parsed].to_s + end + ### REQUEST TEMPLATES ### def domain_create_xml(xml_params={})