mirror of
https://github.com/internetee/registry.git
synced 2025-07-30 06:26:15 +02:00
Merge pull request #2375 from internetee/2374-deprecated-validation-events
Prevent deprecated validation events
This commit is contained in:
commit
a580c22d71
4 changed files with 52 additions and 30 deletions
|
@ -37,12 +37,11 @@ module Actions
|
||||||
end
|
end
|
||||||
|
|
||||||
def maybe_filtering_old_failed_records
|
def maybe_filtering_old_failed_records
|
||||||
if contact.validation_events.count > 1
|
validation_events = contact.validation_events
|
||||||
contact.validation_events.order!(created_at: :asc)
|
return unless validation_events.count > 1
|
||||||
while contact.validation_events.count >= 1
|
|
||||||
contact.validation_events.first.destroy
|
validation_events.order!(created_at: :asc)
|
||||||
end
|
validation_events.first.destroy while validation_events.count >= 1
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def maybe_remove_address
|
def maybe_remove_address
|
||||||
|
@ -116,8 +115,9 @@ module Actions
|
||||||
contact.email_history = old_email
|
contact.email_history = old_email
|
||||||
updated = contact.save
|
updated = contact.save
|
||||||
|
|
||||||
if updated && email_changed && contact.registrant?
|
if updated && email_changed
|
||||||
ContactMailer.email_changed(contact: contact, old_email: old_email).deliver_now
|
contact.validation_events.where('event_data @> ?', { 'email': old_email }.to_json).destroy_all
|
||||||
|
ContactMailer.email_changed(contact: contact, old_email: old_email).deliver_now if contact.registrant?
|
||||||
end
|
end
|
||||||
|
|
||||||
updated
|
updated
|
||||||
|
|
|
@ -26,33 +26,27 @@ module Actions
|
||||||
Rails.env.test? && check_level == 'smtp' ? :mx : check_level.to_sym
|
Rails.env.test? && check_level == 'smtp' ? :mx : check_level.to_sym
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def destroy_old_validations(validation_events, minimum_size, check_level)
|
||||||
|
return unless validation_events.count > minimum_size && @check_level == check_level
|
||||||
|
|
||||||
|
validation_events.order!(created_at: :asc)
|
||||||
|
validation_events.first.destroy while validation_events.count > minimum_size
|
||||||
|
end
|
||||||
|
|
||||||
def filtering_old_failed_records(result)
|
def filtering_old_failed_records(result)
|
||||||
if @check_level == "mx" && !result.success && validation_eventable.validation_events.count > 3
|
events = validation_eventable.validation_events
|
||||||
validation_eventable.validation_events.order!(created_at: :asc)
|
|
||||||
while validation_eventable.validation_events.count > 3
|
|
||||||
validation_eventable.validation_events.first.destroy
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if @check_level == "mx" && result.success && validation_eventable.validation_events.count > 1
|
destroy_old_validations(events, ValidationEvent::MX_CHECK, 'mx') unless result.success
|
||||||
validation_eventable.validation_events.order!(created_at: :asc)
|
|
||||||
while validation_eventable.validation_events.count > 1
|
|
||||||
validation_eventable.validation_events.first.destroy
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if @check_level == "smtp" && validation_eventable.validation_events.count > 1
|
destroy_old_validations(events, ValidationEvent::REDEEM_EVENTS_COUNT_BY_LEVEL[:mx], 'mx') if result.success
|
||||||
validation_eventable.validation_events.order!(created_at: :asc)
|
|
||||||
while validation_eventable.validation_events.count > 1
|
destroy_old_validations(events, ValidationEvent::REDEEM_EVENTS_COUNT_BY_LEVEL[:smtp], 'smtp')
|
||||||
validation_eventable.validation_events.first.destroy
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def save_result(result)
|
def save_result(result)
|
||||||
contacts = Contact.where(email: email)
|
contacts = Contact.where(email: email)
|
||||||
|
|
||||||
if !result.success && @check_level == "mx"
|
if !result.success && @check_level == 'mx'
|
||||||
result_validation = Actions::AAndAaaaEmailValidation.call(email: @email, value: 'A')
|
result_validation = Actions::AAndAaaaEmailValidation.call(email: @email, value: 'A')
|
||||||
output_a_and_aaaa_validation_results(email: @email,
|
output_a_and_aaaa_validation_results(email: @email,
|
||||||
result: result_validation,
|
result: result_validation,
|
||||||
|
@ -96,8 +90,7 @@ module Actions
|
||||||
when 'AAAA'
|
when 'AAAA'
|
||||||
ress = dns.getresources domain, Resolv::DNS::Resource::IN::AAAA
|
ress = dns.getresources domain, Resolv::DNS::Resource::IN::AAAA
|
||||||
end
|
end
|
||||||
|
result = ress.map(&:address)
|
||||||
result = ress.map { |r| r.address }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
result
|
result
|
||||||
|
|
|
@ -15,7 +15,7 @@ class Contact < ApplicationRecord
|
||||||
has_many :domain_contacts
|
has_many :domain_contacts
|
||||||
has_many :domains, through: :domain_contacts
|
has_many :domains, through: :domain_contacts
|
||||||
has_many :legal_documents, as: :documentable
|
has_many :legal_documents, as: :documentable
|
||||||
has_many :validation_events, as: :validation_eventable
|
has_many :validation_events, as: :validation_eventable, dependent: :destroy
|
||||||
has_many :registrant_domains, class_name: 'Domain', foreign_key: 'registrant_id'
|
has_many :registrant_domains, class_name: 'Domain', foreign_key: 'registrant_id'
|
||||||
has_many :actions, dependent: :destroy
|
has_many :actions, dependent: :destroy
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,35 @@ class EppContactUpdateBaseTest < EppTestCase
|
||||||
assert_emails 1
|
assert_emails 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_destroy_old_validation_when_email_is_changed
|
||||||
|
@contact.verify_email
|
||||||
|
old_validation_event = @contact.validation_events.first
|
||||||
|
@contact.update_columns(code: @contact.code.upcase)
|
||||||
|
|
||||||
|
request_xml = <<-XML
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<epp xmlns="#{Xsd::Schema.filename(for_prefix: 'epp-ee', for_version: '1.0')}">
|
||||||
|
<command>
|
||||||
|
<update>
|
||||||
|
<contact:update xmlns:contact="#{Xsd::Schema.filename(for_prefix: 'contact-ee', for_version: '1.1')}">
|
||||||
|
<contact:id>john-001</contact:id>
|
||||||
|
<contact:chg>
|
||||||
|
<contact:email>john-new@inbox.test</contact:email>
|
||||||
|
</contact:chg>
|
||||||
|
</contact:update>
|
||||||
|
</update>
|
||||||
|
</command>
|
||||||
|
</epp>
|
||||||
|
XML
|
||||||
|
|
||||||
|
post epp_update_path, params: { frame: request_xml },
|
||||||
|
headers: { 'HTTP_COOKIE' => 'session=api_bestnames' }
|
||||||
|
|
||||||
|
assert_raises(ActiveRecord::RecordNotFound) do
|
||||||
|
ValidationEvent.find(old_validation_event.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_skips_notifying_contact_when_email_is_not_changed
|
def test_skips_notifying_contact_when_email_is_not_changed
|
||||||
assert_equal 'john-001', @contact.code
|
assert_equal 'john-001', @contact.code
|
||||||
assert_equal 'john@inbox.test', @contact.email
|
assert_equal 'john@inbox.test', @contact.email
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue