Varken/varken/helpers.py
2018-12-04 19:16:00 -05:00

78 lines
2.1 KiB
Python

import os
import time
import tarfile
import hashlib
import geoip2.database
import logging
from json.decoder import JSONDecodeError
from os.path import abspath, join
from requests.exceptions import InvalidSchema, SSLError
from urllib.request import urlretrieve
logger = logging.getLogger('Varken')
def geoip_download():
tar_dbfile = abspath(join('.', 'data', 'GeoLite2-City.tar.gz'))
url = 'http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz'
urlretrieve(url, tar_dbfile)
tar = tarfile.open(tar_dbfile, 'r:gz')
for files in tar.getmembers():
if 'GeoLite2-City.mmdb' in files.name:
files.name = os.path.basename(files.name)
tar.extract(files, abspath(join('.', 'data')))
os.remove(tar_dbfile)
def geo_lookup(ipaddress):
dbfile = abspath(join('.', 'data', 'GeoLite2-City.mmdb'))
now = time.time()
try:
dbinfo = os.stat(dbfile)
db_age = now - dbinfo.st_ctime
if db_age > (35 * 86400):
os.remove(dbfile)
geoip_download()
except FileNotFoundError:
geoip_download()
reader = geoip2.database.Reader(dbfile)
return reader.city(ipaddress)
def hashit(string):
encoded = string.encode()
hashed = hashlib.md5(encoded).hexdigest()
return hashed
def connection_handler(session, request, verify):
s = session
r = request
v = verify
return_json = False
try:
get = s.send(r, verify=v)
if get.status_code == 401:
logger.info('Your api key is incorrect for {}'.format(r.url))
elif get.status_code == 404:
logger.info('This url doesnt even resolve: {}'.format(r.url))
elif get.status_code == 200:
try:
return_json = get.json()
except JSONDecodeError:
logger.info('No JSON response... BORKED! Let us know in discord')
except InvalidSchema:
logger.info('You added http(s):// in the config file. Don't do that.')
except SSLError as e:
logger.info('Either your host is unreachable or you have an ssl issue.')
logger.info('The issue was: {}'.format(e))
return return_json