Sha256: 55af11f2763579f798e2c6f56e12cb55db752c8276bba2a3c1d2dd6bd374fc19
Contents?: true
Size: 1.55 KB
Versions: 1
Compression:
Stored size: 1.55 KB
Contents
# frozen_string_literal: true module GitHubPages module HealthCheck class Resolver DEFAULT_RESOLVER_OPTIONS = { :retry_times => 2, :query_timeout => 5, :dnssec => true }.freeze PREFERS_AUTHORITATIVE_ANSWER = [ Dnsruby::Types::A, Dnsruby::Types::CAA, Dnsruby::Types::MX ].freeze class << self def default_resolver @default_resolver ||= Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS) end end attr_reader :domain def initialize(domain) @domain = domain end # rubocop:disable Metrics/AbcSize def query(type) if PREFERS_AUTHORITATIVE_ANSWER.include?(type) answer = authoritative_resolver.query(domain, type).answer return answer unless answer.empty? end self.class.default_resolver.query(domain, type).answer rescue Dnsruby::ResolvTimeout, Dnsruby::ResolvError self.class.default_resolver.query(domain, type).answer end # rubocop:enable Metrics/AbcSize private def authoritative_resolver return self.class.default_resolver if nameservers.nil? || nameservers.empty? Dnsruby::Resolver.new(DEFAULT_RESOLVER_OPTIONS.merge(:nameservers => nameservers)) end def nameservers @nameservers ||= begin self.class.default_resolver.query(domain, Dnsruby::Types::NS).answer.map do |rr| next rr.nsdname.to_s if rr.type == Dnsruby::Types::NS end.compact end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
github-pages-health-check-1.8.0 | lib/github-pages-health-check/resolver.rb |