internetee-registry/app/interactions/actions/a_and_aaaa_email_validation.rb
2023-05-18 11:15:20 +03:00

43 lines
1.2 KiB
Ruby

module Actions
module AAndAaaaEmailValidation
extend self
def call(email:, value:)
check_for_records_value(email: email, value: value)
end
private
def check_for_records_value(email:, value:)
email_domain = Mail::Address.new(email).domain
dns_servers = ENV['dnssec_resolver_ips'].to_s.split(',').map(&:strip)
resolve_a_and_aaaa_records(dns_servers: dns_servers, email_domain: email_domain, value: value)
end
def resolve_a_and_aaaa_records(dns_servers:, email_domain:, value:)
Resolv::DNS.open(nameserver: dns_servers, ndots: 1, search: []) do |dns|
dns.timeouts = (ENV['a_and_aaaa_validation_timeout'] || 1).to_i
case value
when 'A'
resolve_a_records(dns: dns, hostname: email_domain)
when 'AAAA'
resolve_aaaa_records(dns: dns, hostname: email_domain)
else
[]
end
end
end
def resolve_a_records(dns:, hostname:)
resources = dns.getresources(hostname, Resolv::DNS::Resource::IN::A)
resources.map(&:address)
end
def resolve_aaaa_records(dns:, hostname:)
resources = dns.getresources(hostname, Resolv::DNS::Resource::IN::AAAA)
resources.map(&:address)
end
end
end