mirror of
https://github.com/internetee/registry.git
synced 2025-08-05 17:28:18 +02:00
51 lines
1.4 KiB
Ruby
51 lines
1.4 KiB
Ruby
module Domains
|
|
module NameserverValidator
|
|
include Dnsruby
|
|
|
|
extend self
|
|
|
|
def run(domain_name:, nameserver_address:)
|
|
validate(hostname: domain_name, nameserver_address: nameserver_address)
|
|
end
|
|
|
|
private
|
|
|
|
def validate(hostname: , nameserver_address:)
|
|
resolver = Resolver.new
|
|
resolver.nameserver = nameserver_address
|
|
result = resolver.query(hostname, Dnsruby::Types.SOA)
|
|
|
|
return { result: false, reason: 'answer' } if result.answer.empty?
|
|
|
|
decision = result.answer.all? do |a|
|
|
a.serial.present?
|
|
end
|
|
|
|
return { result: false, reason: 'serial' } unless decision
|
|
|
|
{ result: true, reason: '' }
|
|
rescue Dnsruby::NXDomain => e
|
|
logger.info "#{e} - seems hostname don't found"
|
|
return { result: false, reason: 'not found' }
|
|
rescue StandardError => e
|
|
logger.info e
|
|
return { result: false, reason: 'exception', error_info: e }
|
|
end
|
|
|
|
def setup_resolver(nameserver_address)
|
|
# resolver.do_validation=true
|
|
# resolver.query_timeout=1
|
|
# resolver.single_resolvers[0].server='ns.tld.ee'
|
|
timeout = ENV['nameserver_validation_timeout'] || '1'
|
|
# dns_servers = ENV['dnssec_resolver_ips'].to_s.split(',').map(&:strip)
|
|
# Resolver.new({nameserver: dns_servers, timeout: timeout.to_i})
|
|
resolver = Resolver.new
|
|
resolver.nameserver = nameserver_address
|
|
|
|
end
|
|
|
|
def logger
|
|
@logger ||= Rails.logger
|
|
end
|
|
end
|
|
end
|