From ba481325478e3ea92b567a9260120a1712712b20 Mon Sep 17 00:00:00 2001 From: olegphenomenon Date: Thu, 23 Dec 2021 14:39:52 +0200 Subject: [PATCH] update mx condition for invalid emails --- app/interactions/actions/email_check.rb | 34 ++++++++++++++++++- .../domains/force_delete_email/base.rb | 2 ++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/app/interactions/actions/email_check.rb b/app/interactions/actions/email_check.rb index 7c1796c93..776b7bafb 100644 --- a/app/interactions/actions/email_check.rb +++ b/app/interactions/actions/email_check.rb @@ -50,12 +50,44 @@ module Actions end def save_result(result) - validation_eventable.validation_events.create(validation_event_attrs(result)) + if !result.success && @check_level == "mx" + email_domain = Mail::Address.new(@email).domain + + result_validation = check_for_records_value(domain: email_domain, value: 'A') + result_validation = check_for_records_value(domain: email_domain, value: 'AAAA') if result_validation.empty? + + result_validation.present? ? result.success = true : result.success = false + + validation_eventable.validation_events.create(validation_event_attrs(result)) + else + validation_eventable.validation_events.create(validation_event_attrs(result)) + end rescue ActiveRecord::RecordNotSaved logger.info "Cannot save validation result for #{log_object_id}" true end + def check_for_records_value(domain:, value:) + result = nil + dns_servers = ENV['dnssec_resolver_ips'].to_s.split(',').map(&:strip) + + Resolv::DNS.open({ nameserver: dns_servers }) do |dns| + dns.timeouts = ENV['a_and_aaaa_validation_timeout'] || 1 + ress = nil + + case value + when 'A' + ress = dns.getresources domain, Resolv::DNS::Resource::IN::A + when 'AAAA' + ress = dns.getresources domain, Resolv::DNS::Resource::IN::AAAA + end + + result = ress.map { |r| r.address } + end + + result + end + def validation_event_attrs(result) { event_data: event_data(result), diff --git a/app/interactions/domains/force_delete_email/base.rb b/app/interactions/domains/force_delete_email/base.rb index 4078a7b3d..f22244045 100644 --- a/app/interactions/domains/force_delete_email/base.rb +++ b/app/interactions/domains/force_delete_email/base.rb @@ -12,6 +12,8 @@ module Domains Domain.where(registrant_id: registrant_ids) domains.each do |domain| + next if domain.expired? + before_execute_force_delete(domain) end end