added record for successfully validated nameservers

This commit is contained in:
olegphenomenon 2022-01-06 15:23:21 +02:00
parent d896e5f716
commit a9a95e373c
3 changed files with 39 additions and 3 deletions

View file

@ -7,14 +7,18 @@ class NameserverRecordValidationJob < ApplicationJob
def perform(domain_name: nil)
if domain_name.nil?
domains = Domain.all.select { |domain| domain.nameservers.exists? }.
select { |domain| domain.created_at < Time.zone.now - 8.hours }
domains = Domain.all.select { |domain| domain.created_at < Time.zone.now - NameserverValidator::VALIDATION_DOMAIN_PERIOD }
.select { |domain| domain.nameservers.exists? }
domains.each do |domain|
domain.nameservers.each do |nameserver|
next if nameserver.nameserver_failed_validation? || nameserver.validated?
result = NameserverValidator.run(domain_name: domain.name, hostname: nameserver.hostname)
if result[:result]
add_nameserver_to_succesfully(nameserver)
true
else
parse_result(result, nameserver)
@ -26,10 +30,16 @@ class NameserverRecordValidationJob < ApplicationJob
domain = Domain.find_by(name: domain_name)
return logger.info 'Domain not found' if domain.nil?
return logger.info 'It should take 8 hours after the domain was created' if domain.created_at > Time.zone.now - 8.hours
if domain.created_at > Time.zone.now - NameserverValidator::VALIDATION_DOMAIN_PERIOD
return logger.info "It should take #{NameserverValidator::VALIDATION_DOMAIN_PERIOD} hours after the domain was created"
end
return logger.info 'Domain not has nameservers' if domain.nameservers.empty?
domain.nameservers.each do |nameserver|
next if nameserver.nameserver_failed_validation?
result = NameserverValidator.run(domain_name: domain.name, hostname: nameserver.hostname)
if result[:result]
@ -44,6 +54,14 @@ class NameserverRecordValidationJob < ApplicationJob
private
def add_nameserver_to_succesfully(nameserver)
nameserver.validation_counter = nil
nameserver.failed_validation_reason = nil
nameserver.validation_datetime = Time.zone.now
nameserver.save
end
def parse_result(result, nameserver)
text = ""
case result[:reason]

View file

@ -34,6 +34,8 @@ class Nameserver < ApplicationRecord
delegate :name, to: :domain, prefix: true
scope :non_validated, -> { where(validation_datetime: nil) }
self.ignored_columns = %w[legacy_domain_id]
def epp_code_map
@ -53,6 +55,18 @@ class Nameserver < ApplicationRecord
}
end
def nameserver_failed_validation?
return false if validation_counter.nil?
validation_counter >= NameserverValidator::VALID_NAMESERVER_COUNT_THRESHOLD
end
def validated?
return false if validation_datetime.nil?
validation_datetime + NameserverValidator::VALIDATION_NAMESERVER_PERIOD > Time.zone.now
end
def to_s
hostname
end

View file

@ -3,6 +3,10 @@ module NameserverValidator
extend self
VALIDATION_NAMESERVER_PERIOD = 1.year.freeze
VALIDATION_DOMAIN_PERIOD = 8.hours.freeze
VALID_NAMESERVER_COUNT_THRESHOLD = 3
def run(domain_name:, hostname:)
validate(domain_name: domain_name, hostname: hostname)
end