class PhisherPhinder::ExtendedIpFactory

Public Class Methods

new(geoip_client:) click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 6
def initialize(geoip_client:)
  @geoip_client = geoip_client
end

Public Instance Methods

build(ip_string) click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 10
def build(ip_string)
  return nil unless ip_string

  ip = IPAddr.new(ip_string)

  if non_public_ip?(ip) || ip.ipv6?
    SimpleIp.new(ip_address: ip)
  else
    ExtendedIp.new(ip_address: ip, geoip_ip_data: geoip_data(ip_string))
  end
rescue IPAddr::InvalidAddressError
end

Private Instance Methods

geoip_data(ip_string) click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 48
def geoip_data(ip_string)
  @geoip_client.lookup(ip_string)
rescue MaxMind::GeoIP2::AddressNotFoundError, MaxMind::GeoIP2::AddressReservedError
end
ipv4_class_a_private?(ip) click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 36
def ipv4_class_a_private?(ip)
  IPAddr.new('10.0.0.1/8').include?(ip)
end
ipv4_class_b_private?(ip) click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 40
def ipv4_class_b_private?(ip)
  IPAddr.new('172.16.0.0/12').include?(ip)
end
ipv4_class_c_private?(ip) click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 44
def ipv4_class_c_private?(ip)
  IPAddr.new('192.168.0.0/16').include?(ip)
end
localhost_ip?(ip) click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 32
def localhost_ip?(ip)
  ip.loopback?
end
non_public_ip?(ip) click to toggle source
# File lib/phisher_phinder/extended_ip_factory.rb, line 25
def non_public_ip?(ip)
  localhost_ip?(ip) ||
    ipv4_class_a_private?(ip) ||
    ipv4_class_b_private?(ip) ||
    ipv4_class_c_private?(ip)
end