module Legitbot::Validators::Domains::ClassMethods

def check_domains?

def check_domains?
  instance_variable_defined?(:@valid_domains)
end

def domains(*list, reverse: true)

def domains(*list, reverse: true)
  @valid_domains = list.flatten.map { |d| Resolv::DNS::Name.create(d) }
  @validate_reverse_record = reverse
end

def find_subdomain_record(domains)

def find_subdomain_record(domains)
  domains.find do |d|
    @valid_domains.any? { |vd| d.subdomain_of?(vd) }
  end
end

def reverse_domains(ip)

def reverse_domains(ip)
  resolver.getnames(ip)
rescue Resolv::ResolvError
  nil
end

def reverse_ip(record)

def reverse_ip(record)
  return nil if record.nil?
  resolver.getaddress(record.to_s).to_s
rescue Resolv::ResolvError
  nil
end

def valid_domain?(ip)

def valid_domain?(ip)
  return true unless check_domains?
  return true if @valid_domains.empty?
  domains = reverse_domains(ip)
  return false if domains.empty?
  record = find_subdomain_record(domains)
  return false unless record
  return true unless @validate_reverse_record
  ip == reverse_ip(record)
end