Merge pull request #1830 from internetee/1828-send-poll-message-to-registrant-on-applying-and-removing-registry-lock

Registry lock: Notify Registrar by EPP notification
This commit is contained in:
Timo Võhmar 2021-02-11 13:14:44 +02:00 committed by GitHub
commit a3cca9149b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 7 deletions

View file

@ -12,6 +12,7 @@ module Concerns
statuses << DomainStatus::SERVER_DELETE_PROHIBITED statuses << DomainStatus::SERVER_DELETE_PROHIBITED
statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED statuses << DomainStatus::SERVER_TRANSFER_PROHIBITED
self.locked_by_registrant_at = Time.zone.now self.locked_by_registrant_at = Time.zone.now
alert_registrar_lock_changes!(lock: true)
save! save!
end end
@ -42,10 +43,21 @@ module Concerns
statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED) statuses.delete(DomainStatus::SERVER_DELETE_PROHIBITED)
statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED) statuses.delete(DomainStatus::SERVER_TRANSFER_PROHIBITED)
self.locked_by_registrant_at = nil self.locked_by_registrant_at = nil
alert_registrar_lock_changes!(lock: false)
save! save!
end end
end end
def alert_registrar_lock_changes!(lock: true)
translation = lock ? 'locked' : 'unlocked'
registrar.notifications.create!(
text: I18n.t("notifications.texts.registrar_#{translation}",
domain_name: name),
attached_obj_id: name,
attached_obj_type: self.class.name
)
end
end end
end end
end end

View file

@ -25,6 +25,10 @@ class Notification < ApplicationRecord
'' ''
end end
def registry_lock?
text.include?('has been locked') || text.include?('has been unlocked')
end
private private
def set_defaults def set_defaults

View file

@ -15,12 +15,22 @@ xml.epp_head do
end if @object end if @object
end end
if @notification.action&.contact if @notification.action&.contact || @notification.registry_lock?
render(partial: 'epp/poll/action', if @notification.registry_lock?
locals: { state = @notification.text.include?('unlocked') ? 'unlock' : 'lock'
builder: xml, xml.extension do
action: @notification.action xml.tag!('changePoll:changeData',
}) 'xmlns:changePoll': 'https://epp.tld.ee/schema/changePoll-1.0.xsd') do
xml.tag!('changePoll:operation', state)
end
end
else
render(partial: 'epp/poll/action',
locals: {
builder: xml,
action: @notification.action,
})
end
end end
render('epp/shared/trID', builder: xml) render('epp/shared/trID', builder: xml)

View file

@ -6,3 +6,5 @@ en:
It was associated with registrant %{old_registrant_code} It was associated with registrant %{old_registrant_code}
and contacts %{old_contacts_codes}. and contacts %{old_contacts_codes}.
contact_update: Contact %{contact} has been updated by registrant contact_update: Contact %{contact} has been updated by registrant
registrar_locked: Domain %{domain_name} has been locked by registrant
registrar_unlocked: Domain %{domain_name} has been unlocked by registrant

View file

@ -1,5 +1,4 @@
require "test_helper" require "test_helper"
class DomainUpdateConfirmJobTest < ActiveSupport::TestCase class DomainUpdateConfirmJobTest < ActiveSupport::TestCase
def setup def setup
super super
@ -19,6 +18,22 @@ class DomainUpdateConfirmJobTest < ActiveSupport::TestCase
super super
end end
def test_registrant_locked_domain
refute @domain.locked_by_registrant?
@domain.apply_registry_lock
assert @domain.locked_by_registrant?
assert_equal(@domain.registrar.notifications.last.text, "Domain #{@domain.name} has been locked by registrant")
end
def test_registrant_unlocked_domain
refute @domain.locked_by_registrant?
@domain.apply_registry_lock
assert @domain.locked_by_registrant?
@domain.remove_registry_lock
refute @domain.locked_by_registrant?
assert_equal(@domain.registrar.notifications.last.text, "Domain #{@domain.name} has been unlocked by registrant")
end
def test_rejected_registrant_verification_notifies_registrar def test_rejected_registrant_verification_notifies_registrar
DomainUpdateConfirmJob.perform_now(@domain.id, RegistrantVerification::REJECTED) DomainUpdateConfirmJob.perform_now(@domain.id, RegistrantVerification::REJECTED)