class PhisherPhinder::CachedGeoipClient
Public Class Methods
new(client, expiry_time)
click to toggle source
# File lib/phisher_phinder/cached_geoip_client.rb, line 5 def initialize(client, expiry_time) @client = client @expiry_time = expiry_time @lang = 'en' end
Public Instance Methods
lookup(ip_address)
click to toggle source
# File lib/phisher_phinder/cached_geoip_client.rb, line 11 def lookup(ip_address) cached_record = retrieve_cached_record(ip_address) if cached_record && cached_record_valid?(cached_record) cached_record else refresh_cache(ip_address, cached_record) end end
Private Instance Methods
cached_record_valid?(cached_record)
click to toggle source
# File lib/phisher_phinder/cached_geoip_client.rb, line 26 def cached_record_valid?(cached_record) cached_record.updated_at > @expiry_time end
refresh_cache(ip_address, cached_record)
click to toggle source
# File lib/phisher_phinder/cached_geoip_client.rb, line 30 def refresh_cache(ip_address, cached_record) lookup_result = @client.insights(ip_address) if cached_record cached_record.update( location_accuracy_radius: lookup_result.location.accuracy_radius, latitude: lookup_result.location.latitude, longitude: lookup_result.location.longitude, time_zone: lookup_result.location.time_zone, city_name: (lookup_result.city.names ? lookup_result.city.names[@lang] : nil), city_geoname_id: lookup_result.city.geoname_id, city_confidence: lookup_result.city.confidence, country_name: lookup_result.country.names[@lang], country_geoname_id: lookup_result.country.geoname_id, country_iso_code: lookup_result.country.iso_code, country_confidence: lookup_result.country.confidence, continent_name: lookup_result.continent.names[@lang], continent_geoname_id: lookup_result.continent.geoname_id, postal_code: lookup_result.postal.code, postal_code_confidence: lookup_result.postal.confidence, registered_country_name: lookup_result.registered_country.names[@lang], registered_country_geoname_id: lookup_result.registered_country.geoname_id, registered_country_iso_code: lookup_result.registered_country.iso_code, autonomous_system_organisation: lookup_result.traits.autonomous_system_organization, autonomous_system_number: lookup_result.traits.autonomous_system_number, isp: lookup_result.traits.isp, network: lookup_result.traits.network, organisation: lookup_result.traits.organization, static_ip_score: lookup_result.traits.static_ip_score, user_type: lookup_result.traits.user_type ) cached_record else PhisherPhinder::GeoipIpData.create( ip_address: ip_address, location_accuracy_radius: lookup_result.location.accuracy_radius, latitude: lookup_result.location.latitude, longitude: lookup_result.location.longitude, time_zone: lookup_result.location.time_zone, city_name: (lookup_result.city.names ? lookup_result.city.names[@lang] : nil), city_geoname_id: lookup_result.city.geoname_id, city_confidence: lookup_result.city.confidence, country_name: lookup_result.country.names[@lang], country_geoname_id: lookup_result.country.geoname_id, country_iso_code: lookup_result.country.iso_code, country_confidence: lookup_result.country.confidence, continent_name: lookup_result.continent.names[@lang], continent_geoname_id: lookup_result.continent.geoname_id, postal_code: lookup_result.postal.code, postal_code_confidence: lookup_result.postal.confidence, registered_country_name: lookup_result.registered_country.names[@lang], registered_country_geoname_id: lookup_result.registered_country.geoname_id, registered_country_iso_code: lookup_result.registered_country.iso_code, autonomous_system_organisation: lookup_result.traits.autonomous_system_organization, autonomous_system_number: lookup_result.traits.autonomous_system_number, isp: lookup_result.traits.isp, network: lookup_result.traits.network, organisation: lookup_result.traits.organization, static_ip_score: lookup_result.traits.static_ip_score, user_type: lookup_result.traits.user_type ) end end
retrieve_cached_record(ip_address)
click to toggle source
# File lib/phisher_phinder/cached_geoip_client.rb, line 22 def retrieve_cached_record(ip_address) PhisherPhinder::GeoipIpData.first(ip_address: ip_address) end