X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/99ccffe4a9c0521d1202c4f0f1a37f8ef2dc0634..9d106676b8b122b5458360c28e9ab14363d11aea:/lib/osm.rb diff --git a/lib/osm.rb b/lib/osm.rb index 502bc307a..cd3a2156c 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -505,20 +505,16 @@ module OSM end def self.ip_to_country(ip_address) - Timer.timeout(4) do - ipinfo = Quova::IpInfo.new(ip_address) if defined?(QUOVA_USERNAME) - - if ipinfo && ipinfo.status == Quova::SUCCESS - country = ipinfo.country_code - else - country = http_client.get("http://api.hostip.info/country.php?ip=#{ip_address}").body - country = "GB" if country == "UK" - end + ipinfo = geoip_database.country(ip_address) if defined?(GEOIP_DATABASE) - return country.upcase + if ipinfo + country = ipinfo.country_code2 + else + country = http_client.get("http://api.hostip.info/country.php?ip=#{ip_address}").body + country = "GB" if country == "UK" end - return nil + return country rescue StandardError return nil end @@ -526,7 +522,7 @@ module OSM def self.ip_location(ip_address) code = OSM.ip_to_country(ip_address) - if code && country = Country.find_by_code(code) + if code && country = Country.find(code) return { :minlon => country.min_lon, :minlat => country.min_lat, :maxlon => country.max_lon, :maxlat => country.max_lat } end @@ -577,4 +573,9 @@ module OSM def self.http_client=(client) @http_client = client end + + # Return the GeoIP database handle + def self.geoip_database + @geoip_database ||= GeoIP.new(GEOIP_DATABASE) if defined?(GEOIP_DATABASE) + end end