mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-01-22 05:18:11 -05:00
99 lines
2.8 KiB
Python
99 lines
2.8 KiB
Python
#!/usr/bin/python
|
|
# The contents of this file are subject to the Common Public Attribution
|
|
# License Version 1.0. (the "License"); you may not use this file except in
|
|
# compliance with the License. You may obtain a copy of the License at
|
|
# http://code.reddit.com/LICENSE. The License is based on the Mozilla Public
|
|
# License Version 1.1, but Sections 14 and 15 have been added to cover use of
|
|
# software over a computer network and provide for limited attribution for the
|
|
# Original Developer. In addition, Exhibit A has been modified to be consistent
|
|
# with Exhibit B.
|
|
#
|
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
|
# the specific language governing rights and limitations under the License.
|
|
#
|
|
# The Original Code is reddit.
|
|
#
|
|
# The Original Developer is the Initial Developer. The Initial Developer of
|
|
# the Original Code is reddit Inc.
|
|
#
|
|
# All portions of the code written by reddit are Copyright (c) 2006-2015 reddit
|
|
# Inc. All Rights Reserved.
|
|
###############################################################################
|
|
"""
|
|
This is a tiny Flask app used for geoip lookups against a maxmind database.
|
|
|
|
If you are using this service be sure to set `geoip_location` in your ini file.
|
|
|
|
"""
|
|
|
|
import json
|
|
|
|
import GeoIP
|
|
from flask import Flask, make_response
|
|
|
|
application = Flask(__name__)
|
|
|
|
# SET THESE PATHS TO YOUR MAXMIND GEOIP LEGACY DATABASES
|
|
# http://dev.maxmind.com/geoip/legacy/geolite/
|
|
COUNTRY_DB_PATH = '/usr/share/GeoIP/GeoIP.dat'
|
|
CITY_DB_PATH = '/usr/share/GeoIP/GeoIPCity.dat'
|
|
ORG_DB_PATH = '/usr/share/GeoIP/GeoIPOrg.dat'
|
|
|
|
|
|
try:
|
|
gc = GeoIP.open(COUNTRY_DB_PATH, GeoIP.GEOIP_MEMORY_CACHE)
|
|
except:
|
|
gc = None
|
|
|
|
try:
|
|
gi = GeoIP.open(CITY_DB_PATH, GeoIP.GEOIP_MEMORY_CACHE)
|
|
except:
|
|
gi = None
|
|
|
|
try:
|
|
go = GeoIP.open(ORG_DB_PATH, GeoIP.GEOIP_MEMORY_CACHE)
|
|
except:
|
|
go = None
|
|
|
|
|
|
def json_response(result):
|
|
json_output = json.dumps(result, ensure_ascii=False, encoding='iso-8859-1')
|
|
response = make_response(json_output.encode('utf-8'), 200)
|
|
response.headers['Content-Type'] = 'application/json; charset=utf-8'
|
|
return response
|
|
|
|
|
|
@application.route('/geoip/<ips>')
|
|
def get_record(ips):
|
|
result = {}
|
|
ips = ips.split('+')
|
|
|
|
if gi:
|
|
for ip in ips:
|
|
result[ip] = gi.record_by_addr(ip)
|
|
elif gc:
|
|
for ip in ips:
|
|
result[ip] = {
|
|
'country_code': gc.country_code_by_addr(ip),
|
|
'country_name': gc.country_name_by_addr(ip),
|
|
}
|
|
|
|
return json_response(result)
|
|
|
|
|
|
@application.route('/org/<ips>')
|
|
def get_organizations(ips):
|
|
result = {}
|
|
ips = ips.split('+')
|
|
|
|
if go:
|
|
for ip in ips:
|
|
result[ip] = go.org_by_addr(ip)
|
|
|
|
return json_response(result)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
application.run()
|