123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- # Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
- require 'cache'
- class GeoIp::ZammadGeoIp
- def self.location(address)
- # check cache
- cache_key = "zammadgeoip::#{address}"
- cache = Cache.get( cache_key )
- return cache if cache
- # do lookup
- host = 'https://geo.zammad.com'
- url = "/lookup?ip=#{CGI.escape address}"
- data = {}
- begin
- response = UserAgent.get(
- "#{host}#{url}",
- {},
- {
- json: true,
- open_timeout: 2,
- read_timeout: 4,
- },
- )
- if !response.success? && response.code.to_s !~ /^40.$/
- fail "ERROR: #{response.code}/#{response.body}"
- end
- data = response.data
- # compat. map
- if data && data['country_code2']
- data['country_code'] = data['country_code2']
- end
- Cache.write( cache_key, data, { expires_in: 90.days } )
- rescue => e
- Rails.logger.error "#{host}#{url}: #{e.inspect}"
- Cache.write( cache_key, data, { expires_in: 60.minutes } )
- end
- data
- end
- end
|