diff --git a/app/jobs/nameserver_record_validation_job.rb b/app/jobs/nameserver_record_validation_job.rb index da32196c3..11c0038b7 100644 --- a/app/jobs/nameserver_record_validation_job.rb +++ b/app/jobs/nameserver_record_validation_job.rb @@ -14,7 +14,7 @@ class NameserverRecordValidationJob < ApplicationJob domain.nameservers.each do |nameserver| next if nameserver.nameserver_failed_validation? || nameserver.validated? - result = NameserverValidator.run(domain_name: domain.name, hostname: nameserver.hostname) + result = NameserverValidator.run(domain_name: domain.name, nameserver: nameserver) if result[:result] add_nameserver_to_succesfully(nameserver) @@ -40,7 +40,7 @@ class NameserverRecordValidationJob < ApplicationJob domain.nameservers.each do |nameserver| next if nameserver.nameserver_failed_validation? - result = NameserverValidator.run(domain_name: domain.name, hostname: nameserver.hostname) + result = NameserverValidator.run(domain_name: domain.name, nameserver: nameserver) if result[:result] add_nameserver_to_succesfully(nameserver) @@ -87,9 +87,9 @@ class NameserverRecordValidationJob < ApplicationJob when 'not found' text = "Seems nameserver hostname **#{nameserver.hostname}** doesn't exist" when 'exception' - text = "Something goes wrong, exception reason: **#{result[:error_info]}**" + text = "Something went wrong, exception reason: **#{result[:error_info]}**" when 'domain' - text = "#{domain} not found in zone" + text = "#{domain} zone is not in nameserver**#{nameserver.hostname}**" end logger.info text diff --git a/app/services/nameserver_validator.rb b/app/services/nameserver_validator.rb index aaa1f00a3..25ebf16b0 100644 --- a/app/services/nameserver_validator.rb +++ b/app/services/nameserver_validator.rb @@ -7,13 +7,28 @@ module NameserverValidator VALIDATION_DOMAIN_PERIOD = 8.hours.freeze VALID_NAMESERVER_COUNT_THRESHOLD = 3 - def run(domain_name:, hostname:) - validate(domain_name: domain_name, hostname: hostname) + def run(domain_name:, nameserver:) + result_response = validate(domain_name: domain_name, hostname: nameserver.hostname) + + unless result_response[:result] && result_response[:reason] == :exception + if result_response[:error_info].to_s.include? "Nameserver invalid!" + if nameserver.ipv4.present? + p "+++++++" + result_response = validate(domain_name: domain_name, hostname: nameserver.ipv4) + elsif nameserver.ipv6.present? + result_response = validate(domain_name: domain_name, hostname: nameserver.ipv6) + end + + result_response + end + end + + result_response end private - def validate(domain_name: , hostname:) + def validate(domain_name:, hostname:) resolver = setup_resolver(hostname) result = resolver.query(domain_name, 'SOA', 'IN') @@ -44,6 +59,7 @@ module NameserverValidator def setup_resolver(hostname) resolver = Dnsruby::Resolver.new + resolver.query_timeout = 2 resolver.retry_times = 3 resolver.recurse = 0 # Send out non-recursive queries # disable caching otherwise SOA is cached from first nameserver queried