mirror of
https://github.com/internetee/registry.git
synced 2025-07-30 22:46:22 +02:00
43 lines
1.2 KiB
Ruby
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
|