updated validator

This commit is contained in:
olegphenomenon 2021-12-30 14:13:47 +02:00
parent 66c5b3b6ae
commit e10f4aa186
2 changed files with 27 additions and 19 deletions

View file

@ -4,19 +4,20 @@ module Domains
extend self extend self
def run(hostname:) def run(hostname:, nameserver_address:)
validate(hostname) validate(hostname: hostname, nameserver_address: nameserver_address)
end end
private private
def validate(hostname) def validate(hostname: , nameserver_address:)
resolver = setup_resolver resolver = Resolver.new
resolver.nameserver = nameserver_address
result = resolver.query(hostname, Dnsruby::Types.SOA) result = resolver.query(hostname, Dnsruby::Types.SOA)
return { result: false, reason: 'authority' } if result.authority.empty? return { result: false, reason: 'answer' } if result.answer.empty?
decision = result.authority.all? do |a| decision = result.answer.all? do |a|
a.serial.present? a.serial.present?
end end
@ -31,10 +32,16 @@ module Domains
return { result: false, reason: 'exception', error_info: e } return { result: false, reason: 'exception', error_info: e }
end end
def setup_resolver 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' timeout = ENV['nameserver_validation_timeout'] || '1'
dns_servers = ENV['dnssec_resolver_ips'].to_s.split(',').map(&:strip) # dns_servers = ENV['dnssec_resolver_ips'].to_s.split(',').map(&:strip)
Resolver.new({nameserver: dns_servers, timeout: timeout.to_i}) # Resolver.new({nameserver: dns_servers, timeout: timeout.to_i})
resolver = Resolver.new
resolver.nameserver = nameserver_address
end end
def logger def logger

View file

@ -5,10 +5,10 @@ require 'resolv'
class NameserverRecordValidationJob < ApplicationJob class NameserverRecordValidationJob < ApplicationJob
include Dnsruby include Dnsruby
def perform(nameserver = nil) def perform(domain_name: nil, nameserver_address: nil)
if nameserver.nil? if nameserver_address.nil?
Nameserver.all.map do |nameserver| Nameserver.all.map do |nameserver|
result = Domains::NameserverValidator.run(hostname: nameserver.hostname) result = Domains::NameserverValidator.run(hostname: nameserver.domain.name, nameserver_address: nameserver.hostname)
if result[:result] if result[:result]
true true
@ -18,8 +18,8 @@ class NameserverRecordValidationJob < ApplicationJob
end end
end end
else else
result = Domains::NameserverValidator.run(hostname: nameserver.hostname) result = Domains::NameserverValidator.run(hostname: domain_name, nameserver_address: nameserver_address)
return parse_result(result, nameserver) unless result[:result] return parse_result(result, nameserver_address) unless result[:result]
true true
end end
@ -30,12 +30,12 @@ class NameserverRecordValidationJob < ApplicationJob
def parse_result(result, nameserver) def parse_result(result, nameserver)
text = "" text = ""
case result[:reason] case result[:reason]
when 'authority' when 'answer'
text = "Authority information about nameserver hostname **#{nameserver.hostname}** doesn't present" text = "No any answer come from **#{nameserver}**"
when 'serial' when 'serial'
text = "Serial number for nameserver hostname **#{nameserver.hostname}** doesn't present" text = "Serial number for nameserver hostname **#{nameserver}** doesn't present"
when 'not found' when 'not found'
text = "Seems nameserver hostname **#{nameserver.hostname}** doesn't exist" text = "Seems nameserver hostname **#{nameserver}** doesn't exist"
when 'exception' when 'exception'
text = "Something goes wrong, exception name: **#{result[:error_info]}**" text = "Something goes wrong, exception name: **#{result[:error_info]}**"
end end
@ -59,7 +59,8 @@ class NameserverRecordValidationJob < ApplicationJob
end end
def inform_to_registrar(text:, nameserver:) def inform_to_registrar(text:, nameserver:)
nameserver.domain.registrar.notifications.create!(text: text) # nameserver.domain.registrar.notifications.create!(text: text)
"NEED TO DO!"
end end
def logger def logger