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