Module: SPF::Util
- Defined in:
- lib/spf/util.rb
Class Method Summary collapse
- .hostname ⇒ Object
- .ip_address_reverse(ip_address) ⇒ Object
- .ip_address_to_string(ip_address) ⇒ Object
- .ipv4_address_to_ipv6(ipv4_address) ⇒ Object
- .ipv4_mapped_ipv6_address_pattern ⇒ Object
- .ipv6_address_is_ipv4_mapped(ipv6_address) ⇒ Object
- .ipv6_address_to_ipv4(ipv6_address) ⇒ Object
- .sanitize_string(string) ⇒ Object
- .valid_domain_for_ip_address(sever, request, ip_address, domain, find_best_match = false, accept_any_domain = false) ⇒ Object
Class Method Details
.hostname ⇒ Object
47 48 49 50 51 |
# File 'lib/spf/util.rb', line 47 def self.hostname return @hostname ||= Socket.gethostbyname(Socket.gethostname).first rescue SocketError return @hostname ||= Socket.gethostname end |
.ip_address_reverse(ip_address) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/spf/util.rb', line 78 def self.ip_address_reverse(ip_address) unless IP::V4 === ip_address or IP::V6 === ip_address raise SPF::InvalidOptionValueError.new('IP::V4 or IP::V6 address expected') end # Treat IPv4-mapped IPv6 addresses as IPv4 addresses: ip_address = ipv6_address_to_ipv4(ip_address) if ip_address.ipv4_mapped? case ip_address when IP::V4 octets = ip_address.to_addr.split('.').first(ip_address.pfxlen / 8) return "#{octets .reverse.join('.')}.in-addr.arpa." when IP::V6 nibbles = ip_address.to_hex .split('') .first(ip_address.pfxlen / 4) return "#{nibbles.reverse.join('.')}.ip6.arpa." end end |
.ip_address_to_string(ip_address) ⇒ Object
71 72 73 74 75 76 |
# File 'lib/spf/util.rb', line 71 def self.ip_address_to_string(ip_address) unless IP::V4 === ip_address or IP::V6 === ip_address raise SPF::InvalidOptionValueError.new('IP::V4 or IP::V6 address expected') end return ip_address.to_addr end |
.ipv4_address_to_ipv6(ipv4_address) ⇒ Object
53 54 55 56 57 58 |
# File 'lib/spf/util.rb', line 53 def self.ipv4_address_to_ipv6(ipv4_address) unless IP::V4 === ipv4_address raise SPF::InvalidOptionValueError.new('IP::V4 address expected') end return IP.new("::ffff:#{ipv4_address.to_addr}/#{ipv4_address.pfxlen - 32 + 128}") end |
.ipv4_mapped_ipv6_address_pattern ⇒ Object
43 44 45 |
# File 'lib/spf/util.rb', line 43 def self.ipv4_mapped_ipv6_address_pattern /^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})/i end |
.ipv6_address_is_ipv4_mapped(ipv6_address) ⇒ Object
67 68 69 |
# File 'lib/spf/util.rb', line 67 def self.ipv6_address_is_ipv4_mapped(ipv6_address) return ipv6_address.ipv4_mapped? end |
.ipv6_address_to_ipv4(ipv6_address) ⇒ Object
60 61 62 63 64 65 |
# File 'lib/spf/util.rb', line 60 def self.ipv6_address_to_ipv4(ipv6_address) unless IP::V6 === ipv6_address and ipv6_address.ipv4_mapped? raise SPF::InvalidOptionValueError, 'IPv4-mapped IP::V6 address expected' end return ipv6_address.native end |
.sanitize_string(string) ⇒ Object
102 103 104 105 106 107 108 |
# File 'lib/spf/util.rb', line 102 def self.sanitize_string(string) return \ string && string. gsub(/([\x00-\x1f\x7f-\xff])/) { |c| sprintf('\x%02x', c.ord) }. gsub(/([\u{0100}-\u{ffff}])/) { |u| sprintf('\x{%04x}', u.ord) } end |
.valid_domain_for_ip_address(sever, request, ip_address, domain, find_best_match = false, accept_any_domain = false) ⇒ Object
94 95 96 97 98 99 100 |
# File 'lib/spf/util.rb', line 94 def self.valid_domain_for_ip_address( sever, request, ip_address, domain, find_best_match = false, accept_any_domain = false ) # TODO end |