class Coppertone::Mechanism::MX

Implements the MX mechanism.

Public Class Methods

label() click to toggle source
# File lib/coppertone/mechanism/mx.rb, line 39
def self.label
  'mx'
end

Public Instance Methods

check_a_record_limit(request_context, count) click to toggle source
# File lib/coppertone/mechanism/mx.rb, line 32
def check_a_record_limit(request_context, count)
  limit = request_context.dns_lookups_per_mx_mechanism_limit
  return unless limit && count > limit

  raise Coppertone::MXLimitExceededError
end
ip_checker(macro_context, request_context) click to toggle source
# File lib/coppertone/mechanism/mx.rb, line 20
def ip_checker(macro_context, request_context)
  Coppertone::Utils::IPInDomainChecker.new(macro_context,
                                           request_context)
end
look_up_mx_exchanges(request_context, target_name) click to toggle source
# File lib/coppertone/mechanism/mx.rb, line 25
def look_up_mx_exchanges(request_context, target_name)
  dns_client = request_context.dns_client
  dns_client.fetch_mx_records(target_name).map do |mx|
    mx[:exchange]
  end
end
match_target_name(macro_context, request_context, target_name) click to toggle source
# File lib/coppertone/mechanism/mx.rb, line 7
def match_target_name(macro_context, request_context, target_name)
  mx_exchange_names = look_up_mx_exchanges(request_context, target_name)

  count = 0
  checker = ip_checker(macro_context, request_context)
  matched_record = mx_exchange_names.find do |mx|
    count += 1
    check_a_record_limit(request_context, count)
    checker.check(mx, ip_v4_cidr_length, ip_v6_cidr_length)
  end
  !matched_record.nil?
end