Revert "geoip-city-wsgi: update geoip-city-wsgi"

This reverts commit 864fab7b040f999cd6143c1d9f04779c528badbb.

We are missing python-iso3116 in EPEL 7 which is needed by the new
version of geoip-city-wsgi. Reverting until we have another solution.
This commit is contained in:
Adrian Reber 2020-03-31 16:28:27 +02:00 committed by Pierre-Yves Chibon
parent db1366a81d
commit c32d715483
2 changed files with 14 additions and 35 deletions

View file

@ -11,14 +11,14 @@
# accelerator) in front of the application server running this WSGI,
# to avoid looking "behind" the real client's own forward HTTP proxy.
from string import zfill, atoi, strip, replace
from paste.wsgiwrappers import *
from iso3166 import countries
import geoip2.database
import geoip2.errors
import GeoIP
import json
global gi
gi = geoip2.database.Reader("/usr/share/GeoIP/GeoLite2-City.mmdb")
gi = GeoIP.open("/usr/share/GeoIP/GeoLiteCity.dat", GeoIP.GEOIP_STANDARD)
gi.set_charset(GeoIP.GEOIP_CHARSET_UTF8)
def real_client_ip(xforwardedfor):
@ -32,18 +32,18 @@ def get_client_ip(environ, request):
request_data = request.GET
if 'ip' in request_data:
client_ip = request_data['ip'].strip()
client_ip = strip(request_data['ip'])
elif 'X-Forwarded-For' in request.headers and 'geoip_city.noreverseproxy' not in environ:
client_ip = real_client_ip(request.headers['X-Forwarded-For'].strip())
client_ip = real_client_ip(strip(request.headers['X-Forwarded-For']))
else:
client_ip = request.environ['REMOTE_ADDR']
client_ip = unicode(client_ip, 'utf8', 'replace')
return client_ip
def application(environ, start_response):
request = WSGIRequest(environ)
response = WSGIResponse()
results = {}
code = 500
try:
@ -51,39 +51,15 @@ def application(environ, start_response):
if client_ip is None:
code = 400
raise Exception
data = gi.city(client_ip)
if data is None:
results = gi.record_by_addr(client_ip)
if results is None:
code = 404
raise Exception
except geoip2.errors.AddressNotFoundError:
response.status_code = 404
return response(environ, start_response)
except:
response.status_code=code
return response(environ, start_response)
results['ip'] = client_ip
# map geoip2 data to a structure that matches the prior geoip format
results['city'] = data.city.name
results['region_name'] = data.subdivisions.most_specific.name
results['region'] = data.subdivisions.most_specific.iso_code
results['postal_code'] = data.postal.code
results['country_name'] = data.country.name
results['country_code'] = data.country.iso_code
results['time_zone'] = data.location.time_zone
results['latitude'] = data.location.latitude
results['longitude'] = data.location.longitude
results['metro_code'] = data.location.metro_code
results['dma_code'] = data.location.metro_code
# geoip2 no longer includes country_code3, so it has to be pulled
# from iso3166.countries
if data.country.iso_code in countries:
results['country_code3'] = countries[data.country.iso_code].alpha3
else:
results['country_code3'] = None
results = json.dumps(results)
response.headers['Content-Length'] = str(len(results))
response.write(results)

View file

@ -11,13 +11,16 @@
- geoip-city-wsgi
- geoip-city-wsgi/app
- name: install geolite2-city
package: name=geolite2-city state=present
- name: install GeoIP-data
package: name=GeoIP-data state=present
tags:
- packages
- geoip-city-wsgi
- geoip-city-wsgi/app
- name: link the data file to the one we use
file: state=link dest=/usr/share/GeoIP/GeoIPCity.dat src=/usr/share/GeoIP/GeoLiteCity.dat
- name: install geoip-city-wsgi.conf file
copy: >
src="geoip-city-wsgi.conf"