diff options
Diffstat (limited to 'app/util/log.py')
-rw-r--r-- | app/util/log.py | 84 |
1 files changed, 0 insertions, 84 deletions
diff --git a/app/util/log.py b/app/util/log.py deleted file mode 100644 index 58a56f9..0000000 --- a/app/util/log.py +++ /dev/null @@ -1,84 +0,0 @@ -import requests -import datetime -from ua_parser import user_agent_parser - -from database import SessionLocal -import config -from models import Link, Log - -""" -Create a new log whenever a link is visited -""" - - -def ip_to_location(ip): - if not config.IP_TO_LOCATION: - return "-, -", "-" - - url = f"https://api.ip2location.io/?key={config.API_KEY}&ip={ip}" - response = requests.get(url) - data = response.json() - - if response.status_code != 200: - config.LOG.error( - "Error with IP2Location API. Perhaps the API is down." - ) - return "-, -", "-" - - if "error" in data: - config.LOG.error( - "Error with IP2Location API. Likely wrong API key or insufficient" - " funds." - ) - return "-, -", "-" - - location = "" - # Sometimes a certain name may not be present, so always check - if "city_name" in data: - location += data["city_name"] - - if "region_name" in data: - location += f', {data["region_name"]}' - - if "country_name" in data: - location += f', {data["country_name"]}' - - isp = data["as"] - return location, isp - - -def log(link, ip, user_agent): - db = SessionLocal() - - # Get the redirect link and owner of the link - redirect_link, owner = ( - db.query(Link.redirect_link, Link.owner) - .filter(Link.link == link) - .first() - ) - - # Get the location and ISP of the user - location, isp = ip_to_location(ip) - - ua_string = user_agent_parser.Parse(user_agent) - browser = ua_string["user_agent"]["family"] - os = f'{ua_string["os"]["family"]} {ua_string["os"]["major"]}' - - # Create the log and commit it to the database - new_log = Log( - owner=owner, - link=link, - timestamp=datetime.datetime.utcnow(), - ip=ip, - location=location, - browser=browser, - os=os, - user_agent=user_agent, - isp=isp, - ) - db.add(new_log) - db.commit() - db.close() - - # Return the redirect link in order to properly redirect the user - return redirect_link |