mirror of
https://github.com/internetee/registry.git
synced 2025-08-04 08:52:04 +02:00
53 lines
1.4 KiB
Ruby
53 lines
1.4 KiB
Ruby
module Concerns::Domain::Lockable
|
|
extend ActiveSupport::Concern
|
|
|
|
def apply_registry_lock
|
|
return unless registry_lockable?
|
|
return if locked_by_registrant?
|
|
|
|
transaction do
|
|
statuses << DomainStatus::SERVER_UPDATE_PROHIBITED
|
|
statuses << DomainStatus::SERVER_DELETE_PROHIBITED
|
|
statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED
|
|
self.locked_by_registrant_at = Time.zone.now
|
|
save
|
|
end
|
|
end
|
|
|
|
def registry_lockable?
|
|
(statuses & [
|
|
DomainStatus::PENDING_DELETE_CONFIRMATION,
|
|
DomainStatus::PENDING_CREATE,
|
|
DomainStatus::PENDING_UPDATE,
|
|
DomainStatus::PENDING_DELETE,
|
|
DomainStatus::PENDING_RENEW,
|
|
DomainStatus::PENDING_TRANSFER,
|
|
DomainStatus::FORCE_DELETE,
|
|
]).empty?
|
|
end
|
|
|
|
def locked_by_registrant?
|
|
return false unless locked_by_registrant_at
|
|
|
|
lock_statuses = [
|
|
DomainStatus::SERVER_UPDATE_PROHIBITED,
|
|
DomainStatus::SERVER_DELETE_PROHIBITED,
|
|
DomainStatus::SERVER_TRANSFER_PROHIBITED,
|
|
]
|
|
|
|
(statuses & lock_statuses).count == 3
|
|
end
|
|
|
|
def remove_registry_lock
|
|
return unless locked_by_registrant?
|
|
|
|
transaction do
|
|
statuses.delete(DomainStatus::SERVER_UPDATE_PROHIBITED)
|
|
statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED)
|
|
statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED)
|
|
self.locked_by_registrant_at = nil
|
|
|
|
save
|
|
end
|
|
end
|
|
end
|