From 50bf708b6a98e4a6b0dc857d60e1b37c6ddb008a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20Erik=20=C3=95unapuu?= Date: Tue, 29 Dec 2020 15:21:03 +0200 Subject: [PATCH] Use central method for appending legaldocs to domains/contacts --- .../process_update_confirmed.rb | 3 +- app/models/actions/base_action.rb | 24 +++++++++++ app/models/actions/contact_create.rb | 10 +---- app/models/actions/contact_delete.rb | 10 +---- app/models/actions/contact_update.rb | 9 +---- app/models/actions/domain_create.rb | 40 +++++++++---------- app/models/actions/domain_update.rb | 12 +----- app/models/epp/domain.rb | 15 ------- lib/deserializers/xml/domain_create.rb | 5 +++ lib/deserializers/xml/domain_update.rb | 6 ++- 10 files changed, 61 insertions(+), 73 deletions(-) create mode 100644 app/models/actions/base_action.rb diff --git a/app/interactions/domains/update_confirm/process_update_confirmed.rb b/app/interactions/domains/update_confirm/process_update_confirmed.rb index 320f0071f..2e57cddd8 100644 --- a/app/interactions/domains/update_confirm/process_update_confirmed.rb +++ b/app/interactions/domains/update_confirm/process_update_confirmed.rb @@ -21,8 +21,9 @@ module Domains end def update_domain + frame_json = domain.pending_json['frame'] user = ApiUser.find(domain.pending_json['current_user_id']) - frame = domain.pending_json['frame'] ? domain.pending_json['frame'].with_indifferent_access : {} + frame = frame_json ? frame_json.with_indifferent_access : {} domain.upid = user.registrar.id if user.registrar domain.up_date = Time.zone.now diff --git a/app/models/actions/base_action.rb b/app/models/actions/base_action.rb new file mode 100644 index 000000000..f29526753 --- /dev/null +++ b/app/models/actions/base_action.rb @@ -0,0 +1,24 @@ +module Actions + class BaseAction + def self.maybe_attach_legal_doc(entity, legal_doc) + return unless legal_doc + return if legal_doc[:body].starts_with?(ENV['legal_documents_dir']) + + entity.legal_documents.create( + document_type: legal_doc[:type], + body: legal_doc[:body] + ) + end + + def self.attach_legal_doc_to_new(entity, legal_doc, domain: true) + return unless legal_doc + + doc = LegalDocument.create( + documentable_type: domain ? Domain : Contact, + document_type: legal_doc[:type], + body: legal_doc[:body] + ) + entity.legal_documents = [doc] + end + end +end diff --git a/app/models/actions/contact_create.rb b/app/models/actions/contact_create.rb index 22fabc7b9..9c700f858 100644 --- a/app/models/actions/contact_create.rb +++ b/app/models/actions/contact_create.rb @@ -59,15 +59,7 @@ module Actions end def maybe_attach_legal_doc - return unless legal_document - - doc = LegalDocument.create( - documentable_type: Contact, - document_type: legal_document[:type], body: legal_document[:body] - ) - - contact.legal_documents = [doc] - contact.legal_document_id = doc.id + Actions::BaseAction.attach_legal_doc_to_new(contact, legal_document, domain: false) end def commit diff --git a/app/models/actions/contact_delete.rb b/app/models/actions/contact_delete.rb index 59032d566..2923b7de0 100644 --- a/app/models/actions/contact_delete.rb +++ b/app/models/actions/contact_delete.rb @@ -23,15 +23,7 @@ module Actions end def maybe_attach_legal_doc - return unless legal_document - - document = contact.legal_documents.create( - document_type: legal_document[:type], - body: legal_document[:body] - ) - - contact.legal_document_id = document.id - contact.save + Actions::BaseAction.maybe_attach_legal_doc(contact, legal_document) end def commit diff --git a/app/models/actions/contact_update.rb b/app/models/actions/contact_update.rb index 7ca7b6b04..cba8fad51 100644 --- a/app/models/actions/contact_update.rb +++ b/app/models/actions/contact_update.rb @@ -42,14 +42,7 @@ module Actions end def maybe_attach_legal_doc - return unless legal_document - - document = contact.legal_documents.create( - document_type: legal_document[:type], - body: legal_document[:body] - ) - - contact.legal_document_id = document.id + Actions::BaseAction.maybe_attach_legal_doc(contact, legal_document) end def maybe_update_ident diff --git a/app/models/actions/domain_create.rb b/app/models/actions/domain_create.rb index 2d351e470..7362be088 100644 --- a/app/models/actions/domain_create.rb +++ b/app/models/actions/domain_create.rb @@ -18,6 +18,7 @@ module Actions assign_tech_contacts domain.attach_default_contacts assign_expiry_time + maybe_attach_legal_doc commit end @@ -30,25 +31,33 @@ module Actions if dn.at_auction? domain.add_epp_error('2306', nil, nil, 'Parameter value policy error: domain is at auction') elsif dn.awaiting_payment? - domain.add_epp_error('2003', nil, nil, 'Required parameter missing; reserved>pw element required for reserved domains') + domain.add_epp_error('2003', nil, nil, 'Required parameter missing; reserved>pw element' \ + ' required for reserved domains') elsif dn.pending_registration? if params[:reserved_pw].blank? - domain.add_epp_error('2003', nil, nil, 'Required parameter missing; reserved>pw element is required') + domain.add_epp_error('2003', nil, nil, 'Required parameter missing; reserved>pw ' \ + 'element is required') else unless dn.available_with_code?(params[:reserved_pw]) - domain.add_epp_error('2202', nil, nil, 'Invalid authorization information; invalid reserved>pw value') + domain.add_epp_error('2202', nil, nil, 'Invalid authorization information; invalid ' \ + 'reserved>pw value') end end end end def assign_registrant - domain.add_epp_error('2306', nil, nil, %i[registrant cannot_be_missing]) and return unless params[:registrant_id] + unless params[:registrant_id] + domain.add_epp_error('2306', nil, nil, %i[registrant cannot_be_missing]) + return + end regt = Registrant.find_by(code: params[:registrant_id]) - domain.add_epp_error('2303', 'registrant', params[:registrant_id], %i[registrant not_found]) and return unless regt - - domain.registrant = regt + if regt + domain.registrant = regt + else + domain.add_epp_error('2303', 'registrant', params[:registrant_id], %i[registrant not_found]) + end end def assign_domain_attributes @@ -90,8 +99,8 @@ module Actions def assign_expiry_time period = domain.period.to_i plural_period_unit_name = (domain.period_unit == 'm' ? 'months' : 'years').to_sym - expire_time = (Time.zone.now.advance(plural_period_unit_name => period) + 1.day).beginning_of_day - domain.expire_time = expire_time + exp = (Time.zone.now.advance(plural_period_unit_name => period) + 1.day).beginning_of_day + domain.expire_time = exp end def debit_registrar @@ -119,15 +128,7 @@ module Actions end def maybe_attach_legal_doc - return unless legal_document - - doc = LegalDocument.create( - documentable_type: Contact, - document_type: legal_document[:type], body: legal_document[:body] - ) - - contact.legal_documents = [doc] - contact.legal_document_id = doc.id + Actions::BaseAction.attach_legal_doc_to_new(domain, params[:legal_document], domain: true) end def commit @@ -135,9 +136,8 @@ module Actions domain.errors.delete(:name_dirty) if domain.errors[:puny_label].any? return false if domain.errors.any? end - # @domain.add_legal_file_to_new(params[:parsed_frame]) - debit_registrar + debit_registrar return false if domain.errors.any? process_auction_and_disputes diff --git a/app/models/actions/domain_update.rb b/app/models/actions/domain_update.rb index 0c06db6f2..b2c5c514c 100644 --- a/app/models/actions/domain_update.rb +++ b/app/models/actions/domain_update.rb @@ -18,6 +18,7 @@ module Actions assign_tech_contact_changes assign_requested_statuses assign_dnssec_modifications + maybe_attach_legal_doc commit end @@ -189,7 +190,6 @@ module Actions if domain.statuses.include?(s[:status]) rem << s[:status] else - STDOUT << 'AAAAAH' domain.add_epp_error('2303', 'status', s[:status], %i[statuses not_found]) invalid = true end @@ -224,15 +224,7 @@ module Actions end def maybe_attach_legal_doc - return unless legal_document - - doc = LegalDocument.create( - documentable_type: Contact, - document_type: legal_document[:type], body: legal_document[:body] - ) - - contact.legal_documents = [doc] - contact.legal_document_id = doc.id + Actions::BaseAction.maybe_attach_legal_doc(domain, params[:legal_document]) end def commit diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb index 697787183..b9b9710e2 100644 --- a/app/models/epp/domain.rb +++ b/app/models/epp/domain.rb @@ -114,21 +114,6 @@ class Epp::Domain < Domain admin_contacts << registrant if admin_domain_contacts.blank? && !registrant.org? end - # Adding legal doc to domain and - # if something goes wrong - raise Rollback error - def add_legal_file_to_new frame - legal_document_data = ::Deserializers::Xml::LegalDocument.new(frame).call - return unless legal_document_data - return if legal_document_data[:body].starts_with?(ENV['legal_documents_dir']) - - doc = LegalDocument.create(documentable_type: Domain, document_type: legal_document_data[:type], - body: legal_document_data[:body]) - self.legal_documents = [doc] - - frame.css("legalDocument").first.content = doc.path if doc&.persisted? - self.legal_document_id = doc.id - end - def apply_pending_delete! preclean_pendings statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION) diff --git a/lib/deserializers/xml/domain_create.rb b/lib/deserializers/xml/domain_create.rb index d1d621573..e251dad88 100644 --- a/lib/deserializers/xml/domain_create.rb +++ b/lib/deserializers/xml/domain_create.rb @@ -19,6 +19,7 @@ module Deserializers obj[:tech_domain_contacts_attributes] = tech_contacts obj[:nameservers_attributes] = nameservers obj[:dnskeys_attributes] = dns_keys + obj[:legal_document] = legal_document obj end @@ -42,6 +43,10 @@ module Deserializers def dns_keys @dns_keys ||= ::Deserializers::Xml::DnssecKeys.new(frame).key_data end + + def legal_document + @legal_document ||= ::Deserializers::Xml::LegalDocument.new(frame).call + end end end end diff --git a/lib/deserializers/xml/domain_update.rb b/lib/deserializers/xml/domain_update.rb index 4a6a5b74b..b48f1e4aa 100644 --- a/lib/deserializers/xml/domain_update.rb +++ b/lib/deserializers/xml/domain_update.rb @@ -16,7 +16,7 @@ module Deserializers obj = { domain: frame.css('name')&.text, registrant: registrant, contacts: contacts, auth_info: if_present('authInfo > pw'), nameservers: nameservers, registrar_id: registrar, statuses: statuses, dns_keys: dns_keys, - reserved_pw: if_present('reserved > pw') } + reserved_pw: if_present('reserved > pw'), legal_document: legal_document } obj.reject { |_key, val| val.blank? } end @@ -85,6 +85,10 @@ module Deserializers statuses end + def legal_document + @legal_document ||= ::Deserializers::Xml::LegalDocument.new(frame).call + end + def if_present(css_path) return if frame.css(css_path).blank?