mirror of
https://github.com/internetee/registry.git
synced 2025-07-21 10:16:01 +02:00
Merge remote-tracking branch 'origin/master' into 1763-registrar-bulk-renew
This commit is contained in:
commit
00a65b3b01
40 changed files with 818 additions and 160 deletions
53
app/interactions/domains/delete_confirm/base.rb
Normal file
53
app/interactions/domains/delete_confirm/base.rb
Normal file
|
@ -0,0 +1,53 @@
|
|||
module Domains
|
||||
module DeleteConfirm
|
||||
class Base < ActiveInteraction::Base
|
||||
object :domain,
|
||||
class: Domain,
|
||||
description: 'Domain to confirm release'
|
||||
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.is_admin = true
|
||||
domain.registrant_verification_token = nil
|
||||
domain.registrant_verification_asked_at = nil
|
||||
domain.pending_json = {}
|
||||
clear_statuses
|
||||
domain.save
|
||||
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
|
17
app/interactions/domains/delete_confirm/process_action.rb
Normal file
17
app/interactions/domains/delete_confirm/process_action.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
module Domains
|
||||
module DeleteConfirm
|
||||
class ProcessAction < Base
|
||||
def execute
|
||||
::PaperTrail.request.whodunnit = "interaction - #{self.class.name} - #{action} by"\
|
||||
" #{initiator}"
|
||||
|
||||
case action
|
||||
when RegistrantVerification::CONFIRMED
|
||||
compose(ProcessDeleteConfirmed, inputs)
|
||||
when RegistrantVerification::REJECTED
|
||||
compose(ProcessDeleteRejected, inputs)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,50 @@
|
|||
module Domains
|
||||
module DeleteConfirm
|
||||
class ProcessDeleteConfirmed < Base
|
||||
def execute
|
||||
notify_registrar(:poll_pending_delete_confirmed_by_registrant)
|
||||
domain.apply_pending_delete!
|
||||
raise_errors!(domain)
|
||||
end
|
||||
|
||||
def apply_pending_delete!
|
||||
preclean_pendings
|
||||
clean_pendings!
|
||||
DomainDeleteMailer.accepted(domain).deliver_now
|
||||
domain.set_pending_delete!
|
||||
end
|
||||
|
||||
def set_pending_delete!
|
||||
unless domain.pending_deletable?
|
||||
add_epp_error
|
||||
return
|
||||
end
|
||||
|
||||
domain.delete_date = delete_date
|
||||
domain.statuses << DomainStatus::PENDING_DELETE
|
||||
set_server_hold if server_holdable?
|
||||
domain.save(validate: false)
|
||||
end
|
||||
|
||||
def set_server_hold
|
||||
domain.statuses << DomainStatus::SERVER_HOLD
|
||||
domain.outzone_at = Time.current
|
||||
end
|
||||
|
||||
def server_holdable?
|
||||
return false if domain.statuses.include?(DomainStatus::SERVER_HOLD)
|
||||
return false if domain.statuses.include?(DomainStatus::SERVER_MANUAL_INZONE)
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
def delete_date
|
||||
Time.zone.today + Setting.redemption_grace_period.days + 1.day
|
||||
end
|
||||
|
||||
def add_epp_error
|
||||
domain.add_epp_error('2304', nil, nil, I18n.t(:object_status_prohibits_operation))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,32 @@
|
|||
module Domains
|
||||
module DeleteConfirm
|
||||
class ProcessDeleteRejected < Base
|
||||
def execute
|
||||
domain.cancel_pending_delete
|
||||
notify_registrar(:poll_pending_delete_rejected_by_registrant)
|
||||
domain.save(validate: false)
|
||||
raise_errors!(domain)
|
||||
|
||||
send_domain_delete_rejected_email
|
||||
end
|
||||
|
||||
def send_domain_delete_rejected_email
|
||||
if domain.registrant_verification_token.blank?
|
||||
warn "EMAIL NOT DELIVERED: registrant_verification_token is missing for #{domain.name}"
|
||||
elsif domain.registrant_verification_asked_at.blank?
|
||||
warn "EMAIL NOT DELIVERED: registrant_verification_asked_at is missing for #{domain.name}"
|
||||
else
|
||||
send_email
|
||||
end
|
||||
end
|
||||
|
||||
def warn(message)
|
||||
Rails.logger.warn(message)
|
||||
end
|
||||
|
||||
def send_email
|
||||
DomainDeleteMailer.rejected(domain).deliver_now
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,5 +1,5 @@
|
|||
module Domains
|
||||
module DeleteConfirm
|
||||
module DeleteConfirmEmail
|
||||
class SendRequest < ActiveInteraction::Base
|
||||
object :domain,
|
||||
class: Domain,
|
48
app/interactions/whois/delete_record.rb
Normal file
48
app/interactions/whois/delete_record.rb
Normal file
|
@ -0,0 +1,48 @@
|
|||
module Whois
|
||||
class DeleteRecord < ActiveInteraction::Base
|
||||
string :name
|
||||
string :type
|
||||
|
||||
validates :type, inclusion: { in: %w[reserved blocked domain disputed zone] }
|
||||
|
||||
def execute
|
||||
send "delete_#{type}", name
|
||||
end
|
||||
|
||||
# 1. deleting own
|
||||
# 2. trying to regenerate reserved in order domain is still in the list
|
||||
def delete_domain(name)
|
||||
WhoisRecord.where(name: name).destroy_all
|
||||
|
||||
BlockedDomain.find_by(name: name).try(:generate_data)
|
||||
ReservedDomain.find_by(name: name).try(:generate_data)
|
||||
Dispute.active.find_by(domain_name: name).try(:generate_data)
|
||||
end
|
||||
|
||||
def delete_reserved(name)
|
||||
remove_status_from_whois(domain_name: name, domain_status: 'Reserved')
|
||||
end
|
||||
|
||||
def delete_blocked(name)
|
||||
delete_reserved(name)
|
||||
end
|
||||
|
||||
def delete_disputed(name)
|
||||
return if Dispute.active.find_by(domain_name: name).present?
|
||||
|
||||
remove_status_from_whois(domain_name: name, domain_status: 'disputed')
|
||||
end
|
||||
|
||||
def delete_zone(name)
|
||||
WhoisRecord.where(name: name).destroy_all
|
||||
Whois::Record.where(name: name).destroy_all
|
||||
end
|
||||
|
||||
def remove_status_from_whois(domain_name:, domain_status:)
|
||||
Whois::Record.where(name: domain_name).each do |r|
|
||||
r.json['status'] = r.json['status'].delete_if { |status| status == domain_status }
|
||||
r.json['status'].blank? ? r.destroy : r.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
39
app/interactions/whois/update.rb
Normal file
39
app/interactions/whois/update.rb
Normal file
|
@ -0,0 +1,39 @@
|
|||
module Whois
|
||||
class Update < ActiveInteraction::Base
|
||||
array :names
|
||||
string :type
|
||||
|
||||
validates :type, inclusion: { in: %w[reserved blocked domain disputed zone] }
|
||||
|
||||
def execute
|
||||
::PaperTrail.request.whodunnit = "job - #{self.class.name} - #{type}"
|
||||
|
||||
klass = determine_class
|
||||
|
||||
Array(names).each do |name|
|
||||
record = find_record(klass, name)
|
||||
if record
|
||||
Whois::UpdateRecord.run(record: record, type: type)
|
||||
else
|
||||
Whois::DeleteRecord.run(name: name, type: type)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def determine_class
|
||||
case type
|
||||
when 'reserved' then ReservedDomain
|
||||
when 'blocked' then BlockedDomain
|
||||
when 'domain' then Domain
|
||||
when 'disputed' then Dispute.active
|
||||
else DNS::Zone
|
||||
end
|
||||
end
|
||||
|
||||
def find_record(klass, name)
|
||||
klass == DNS::Zone ? klass.find_by(origin: name) : klass.find_by(name: name)
|
||||
end
|
||||
end
|
||||
end
|
32
app/interactions/whois/update_record.rb
Normal file
32
app/interactions/whois/update_record.rb
Normal file
|
@ -0,0 +1,32 @@
|
|||
module Whois
|
||||
class UpdateRecord < ActiveInteraction::Base
|
||||
interface :record
|
||||
string :type
|
||||
|
||||
validates :type, inclusion: { in: %w[reserved blocked domain disputed zone] }
|
||||
|
||||
def execute
|
||||
send "update_#{type}", record
|
||||
end
|
||||
|
||||
def update_domain(domain)
|
||||
domain.whois_record ? domain.whois_record.save : domain.create_whois_record
|
||||
end
|
||||
|
||||
def update_reserved(record)
|
||||
record.generate_data
|
||||
end
|
||||
|
||||
def update_blocked(record)
|
||||
update_reserved(record)
|
||||
end
|
||||
|
||||
def update_disputed(record)
|
||||
update_reserved(record)
|
||||
end
|
||||
|
||||
def update_zone(record)
|
||||
update_reserved(record)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue