diff --git a/app/interactions/domain_update_confirm_interaction/base.rb b/app/interactions/domain_update_confirm_interaction/base.rb deleted file mode 100644 index 1a1f61b12..000000000 --- a/app/interactions/domain_update_confirm_interaction/base.rb +++ /dev/null @@ -1,49 +0,0 @@ -module DomainUpdateConfirmInteraction - class Base < ActiveInteraction::Base - object :domain, - class: Domain, - description: 'Domain to confirm update' - string :action - string :initiator, - default: nil - - validates :domain, :action, presence: true - validates :action, inclusion: { in: [RegistrantVerification::CONFIRMED, - RegistrantVerification::REJECTED] } - - def raise_errors!(domain) - return unless domain.errors.any? - - message = "domain #{domain.name} failed with errors #{domain.errors.full_messages}" - throw message - end - - def notify_registrar(message_key) - domain.registrar.notifications.create!( - text: "#{I18n.t(message_key)}: #{domain.name}", - attached_obj_id: domain.id, - attached_obj_type: domain.class.to_s - ) - end - - def preclean_pendings - domain.registrant_verification_token = nil - domain.registrant_verification_asked_at = nil - end - - def clean_pendings! - domain.registrant_verification_token = nil - domain.registrant_verification_asked_at = nil - domain.pending_json = {} - clear_statuses - end - - def clear_statuses - domain.statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION) - domain.statuses.delete(DomainStatus::PENDING_UPDATE) - domain.statuses.delete(DomainStatus::PENDING_DELETE) - domain.status_notes[DomainStatus::PENDING_UPDATE] = '' - domain.status_notes[DomainStatus::PENDING_DELETE] = '' - end - end -end diff --git a/app/interactions/domain_update_confirm_interaction/process_action.rb b/app/interactions/domain_update_confirm_interaction/process_action.rb deleted file mode 100644 index 9def919d1..000000000 --- a/app/interactions/domain_update_confirm_interaction/process_action.rb +++ /dev/null @@ -1,15 +0,0 @@ -module DomainUpdateConfirmInteraction - class ProcessAction < Base - def execute - ::PaperTrail.request.whodunnit = "interaction - #{self.class.name} - #{action} by"\ - " #{initiator}" - - case action - when RegistrantVerification::CONFIRMED - compose(ProcessUpdateConfirmed, inputs) - when RegistrantVerification::REJECTED - compose(ProcessUpdateRejected, inputs) - end - end - end -end diff --git a/app/interactions/domain_update_confirm_interaction/process_update_confirmed.rb b/app/interactions/domain_update_confirm_interaction/process_update_confirmed.rb deleted file mode 100644 index 0e173c533..000000000 --- a/app/interactions/domain_update_confirm_interaction/process_update_confirmed.rb +++ /dev/null @@ -1,34 +0,0 @@ -module DomainUpdateConfirmInteraction - class ProcessUpdateConfirmed < Base - def execute - ActiveRecord::Base.transaction do - domain.is_admin = true - old_registrant = domain.registrant - notify_registrar(:poll_pending_update_confirmed_by_registrant) - - apply_pending_update! - raise_errors!(domain) - RegistrantChange.new(domain: domain, old_registrant: old_registrant).confirm - end - end - - def apply_pending_update! - preclean_pendings - update_domain - clean_pendings! - domain.save! - - WhoisRecord.find_by(domain_id: domain.id).save # need to reload model - end - - # rubocop:disable Metrics/AbcSize - def update_domain - user = ApiUser.find(domain.pending_json['current_user_id']) - frame = Nokogiri::XML(domain.pending_json['frame']) - domain.upid = user.registrar.id if user.registrar - domain.up_date = Time.zone.now - domain.update(frame, user, false) - end - # rubocop:enable Metrics/AbcSize - end -end diff --git a/app/interactions/domain_update_confirm_interaction/process_update_rejected.rb b/app/interactions/domain_update_confirm_interaction/process_update_rejected.rb deleted file mode 100644 index 390f8db49..000000000 --- a/app/interactions/domain_update_confirm_interaction/process_update_rejected.rb +++ /dev/null @@ -1,16 +0,0 @@ -module DomainUpdateConfirmInteraction - class ProcessUpdateRejected < Base - def execute - ActiveRecord::Base.transaction do - RegistrantChangeMailer.rejected(domain: domain, - registrar: domain.registrar, - registrant: domain.registrant).deliver_now - - notify_registrar(:poll_pending_update_rejected_by_registrant) - - preclean_pendings - clean_pendings! - end - end - end -end diff --git a/app/interactions/domains/update_confirm/base.rb b/app/interactions/domains/update_confirm/base.rb new file mode 100644 index 000000000..ab5584c03 --- /dev/null +++ b/app/interactions/domains/update_confirm/base.rb @@ -0,0 +1,51 @@ +module Domains + module UpdateConfirm + class Base < ActiveInteraction::Base + object :domain, + class: Domain, + description: 'Domain to confirm update' + string :action + string :initiator, + default: nil + + validates :domain, :action, presence: true + validates :action, inclusion: { in: [RegistrantVerification::CONFIRMED, + RegistrantVerification::REJECTED] } + + def raise_errors!(domain) + return unless domain.errors.any? + + message = "domain #{domain.name} failed with errors #{domain.errors.full_messages}" + throw message + end + + def notify_registrar(message_key) + domain.registrar.notifications.create!( + text: "#{I18n.t(message_key)}: #{domain.name}", + attached_obj_id: domain.id, + attached_obj_type: domain.class.to_s + ) + end + + def preclean_pendings + domain.registrant_verification_token = nil + domain.registrant_verification_asked_at = nil + end + + def clean_pendings! + domain.registrant_verification_token = nil + domain.registrant_verification_asked_at = nil + domain.pending_json = {} + clear_statuses + end + + def clear_statuses + domain.statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION) + domain.statuses.delete(DomainStatus::PENDING_UPDATE) + domain.statuses.delete(DomainStatus::PENDING_DELETE) + domain.status_notes[DomainStatus::PENDING_UPDATE] = '' + domain.status_notes[DomainStatus::PENDING_DELETE] = '' + end + end + end +end diff --git a/app/interactions/domains/update_confirm/process_action.rb b/app/interactions/domains/update_confirm/process_action.rb new file mode 100644 index 000000000..6ef8d0fe6 --- /dev/null +++ b/app/interactions/domains/update_confirm/process_action.rb @@ -0,0 +1,17 @@ +module Domains + module UpdateConfirm + class ProcessAction < Base + def execute + ::PaperTrail.request.whodunnit = "interaction - #{self.class.name} - #{action} by"\ + " #{initiator}" + + case action + when RegistrantVerification::CONFIRMED + compose(ProcessUpdateConfirmed, inputs) + when RegistrantVerification::REJECTED + compose(ProcessUpdateRejected, inputs) + end + end + end + end +end diff --git a/app/interactions/domains/update_confirm/process_update_confirmed.rb b/app/interactions/domains/update_confirm/process_update_confirmed.rb new file mode 100644 index 000000000..0402994dd --- /dev/null +++ b/app/interactions/domains/update_confirm/process_update_confirmed.rb @@ -0,0 +1,36 @@ +module Domains + module UpdateConfirm + class ProcessUpdateConfirmed < Base + def execute + ActiveRecord::Base.transaction do + domain.is_admin = true + old_registrant = domain.registrant + notify_registrar(:poll_pending_update_confirmed_by_registrant) + + apply_pending_update! + raise_errors!(domain) + RegistrantChange.new(domain: domain, old_registrant: old_registrant).confirm + end + end + + def apply_pending_update! + preclean_pendings + update_domain + clean_pendings! + domain.save! + + WhoisRecord.find_by(domain_id: domain.id).save # need to reload model + end + + # rubocop:disable Metrics/AbcSize + def update_domain + user = ApiUser.find(domain.pending_json['current_user_id']) + frame = Nokogiri::XML(domain.pending_json['frame']) + domain.upid = user.registrar.id if user.registrar + domain.up_date = Time.zone.now + domain.update(frame, user, false) + end + # rubocop:enable Metrics/AbcSize + end + end +end diff --git a/app/interactions/domains/update_confirm/process_update_rejected.rb b/app/interactions/domains/update_confirm/process_update_rejected.rb new file mode 100644 index 000000000..1d7b75b0e --- /dev/null +++ b/app/interactions/domains/update_confirm/process_update_rejected.rb @@ -0,0 +1,18 @@ +module Domains + module UpdateConfirm + class ProcessUpdateRejected < Base + def execute + ActiveRecord::Base.transaction do + RegistrantChangeMailer.rejected(domain: domain, + registrar: domain.registrar, + registrant: domain.registrant).deliver_now + + notify_registrar(:poll_pending_update_rejected_by_registrant) + + preclean_pendings + clean_pendings! + end + end + end + end +end diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb index 8f1fd1688..403318ca6 100644 --- a/app/jobs/domain_update_confirm_job.rb +++ b/app/jobs/domain_update_confirm_job.rb @@ -3,8 +3,8 @@ class DomainUpdateConfirmJob < ApplicationJob def perform(domain_id, action, initiator = nil) domain = Epp::Domain.find(domain_id) - DomainUpdateConfirmInteraction::ProcessAction.run(domain: domain, - action: action, - initiator: initiator) + Domains::UpdateConfirm::ProcessAction.run(domain: domain, + action: action, + initiator: initiator) end end