Use central method for appending legaldocs to domains/contacts

This commit is contained in:
Karl Erik Õunapuu 2020-12-29 15:21:03 +02:00
parent 7caa544c83
commit 50bf708b6a
No known key found for this signature in database
GPG key ID: C9DD647298A34764
10 changed files with 61 additions and 73 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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?