diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb new file mode 100644 index 000000000..fa44bc589 --- /dev/null +++ b/app/models/concerns/domain/force_delete.rb @@ -0,0 +1,58 @@ +module Concerns::Domain::ForceDelete + extend ActiveSupport::Concern + + included do + alias_attribute :force_delete_time, :force_delete_at + end + + def force_deletable? + !statuses.include?(DomainStatus::FORCE_DELETE) + end + + def force_delete? + statuses.include?(DomainStatus::FORCE_DELETE) + end + + def set_force_delete + self.statuses_backup = statuses + statuses.delete(DomainStatus::CLIENT_DELETE_PROHIBITED) + statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED) + statuses.delete(DomainStatus::PENDING_UPDATE) + statuses.delete(DomainStatus::PENDING_TRANSFER) + statuses.delete(DomainStatus::PENDING_RENEW) + statuses.delete(DomainStatus::PENDING_CREATE) + + statuses.delete(DomainStatus::FORCE_DELETE) + statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED) + statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) + statuses.delete(DomainStatus::SERVER_UPDATE_PROHIBITED) + statuses.delete(DomainStatus::SERVER_MANUAL_INZONE) + statuses.delete(DomainStatus::PENDING_DELETE) + + statuses << DomainStatus::FORCE_DELETE + statuses << DomainStatus::SERVER_RENEW_PROHIBITED + statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED + statuses << DomainStatus::SERVER_UPDATE_PROHIBITED + statuses << DomainStatus::PENDING_DELETE + + if (statuses & [DomainStatus::SERVER_HOLD, DomainStatus::CLIENT_HOLD]).empty? + statuses << DomainStatus::SERVER_MANUAL_INZONE + end + + self.force_delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day unless force_delete_at + save!(validate: false) + end + + def unset_force_delete + s = [] + s << DomainStatus::EXPIRED if statuses.include?(DomainStatus::EXPIRED) + s << DomainStatus::SERVER_HOLD if statuses.include?(DomainStatus::SERVER_HOLD) + s << DomainStatus::DELETE_CANDIDATE if statuses.include?(DomainStatus::DELETE_CANDIDATE) + + self.statuses = (statuses_backup + s).uniq + + self.force_delete_at = nil + self.statuses_backup = [] + save(validate: false) + end +end diff --git a/app/models/concerns/statuses.rb b/app/models/concerns/statuses.rb deleted file mode 100644 index 454f43d94..000000000 --- a/app/models/concerns/statuses.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Statuses - extend ActiveSupport::Concern - - def force_delete? - statuses.include?(DomainStatus::FORCE_DELETE) - end -end diff --git a/app/models/domain.rb b/app/models/domain.rb index be450fb80..0117c16d1 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -2,9 +2,9 @@ class Domain < ActiveRecord::Base include UserEvents include Versions # version/domain_version.rb - include Statuses include Concerns::Domain::Expirable include Concerns::Domain::Activatable + include Concerns::Domain::ForceDelete has_paper_trail class_name: "DomainVersion", meta: { children: :children_log } @@ -13,7 +13,6 @@ class Domain < ActiveRecord::Base attr_accessor :legal_document_id alias_attribute :on_hold_time, :outzone_at - alias_attribute :force_delete_time, :force_delete_at alias_attribute :outzone_time, :outzone_at alias_attribute :delete_time, :delete_at @@ -422,10 +421,6 @@ class Domain < ActiveRecord::Base end # rubocop: enable Metrics/CyclomaticComplexity - def force_deletable? - !statuses.include?(DomainStatus::FORCE_DELETE) - end - def registrant_verification_asked? registrant_verification_asked_at.present? && registrant_verification_token.present? end @@ -538,64 +533,6 @@ class Domain < ActiveRecord::Base end # rubocop:enable Lint/Loop - # rubocop:disable Metrics/AbcSize - # rubocop:disable Metrics/MethodLength - def set_force_delete - self.statuses_backup = statuses - statuses.delete(DomainStatus::CLIENT_DELETE_PROHIBITED) - statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED) - statuses.delete(DomainStatus::PENDING_UPDATE) - statuses.delete(DomainStatus::PENDING_TRANSFER) - statuses.delete(DomainStatus::PENDING_RENEW) - statuses.delete(DomainStatus::PENDING_CREATE) - - statuses.delete(DomainStatus::FORCE_DELETE) - statuses.delete(DomainStatus::SERVER_RENEW_PROHIBITED) - statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) - statuses.delete(DomainStatus::SERVER_UPDATE_PROHIBITED) - statuses.delete(DomainStatus::SERVER_MANUAL_INZONE) - statuses.delete(DomainStatus::PENDING_DELETE) - - statuses << DomainStatus::FORCE_DELETE - statuses << DomainStatus::SERVER_RENEW_PROHIBITED - statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED - statuses << DomainStatus::SERVER_UPDATE_PROHIBITED - statuses << DomainStatus::PENDING_DELETE - - if (statuses & [DomainStatus::SERVER_HOLD, DomainStatus::CLIENT_HOLD]).empty? - statuses << DomainStatus::SERVER_MANUAL_INZONE - end - - self.force_delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day unless force_delete_at - - transaction do - save!(validate: false) - registrar.messages.create!( - body: I18n.t('force_delete_set_on_domain', domain: name) - ) - - DomainDeleteForcedEmailJob.enqueue(id) - - return true - end - false - end - # rubocop: enable Metrics/MethodLength - # rubocop:enable Metrics/AbcSize - - def unset_force_delete - s = [] - s << DomainStatus::EXPIRED if statuses.include?(DomainStatus::EXPIRED) - s << DomainStatus::SERVER_HOLD if statuses.include?(DomainStatus::SERVER_HOLD) - s << DomainStatus::DELETE_CANDIDATE if statuses.include?(DomainStatus::DELETE_CANDIDATE) - - self.statuses = (statuses_backup + s).uniq - - self.force_delete_at = nil - self.statuses_backup = [] - save(validate: false) - end - def set_graceful_expired self.outzone_at = expire_time + self.class.expire_warning_period self.delete_at = outzone_at + self.class.redemption_grace_period