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