From 512f94d7f68976637ef3bb7a1ab05ca142216ac1 Mon Sep 17 00:00:00 2001 From: Thomas Williams Date: Wed, 21 Aug 2024 11:54:10 +0100 Subject: [PATCH 1/2] Updated geoip to check history before doing lookup --- log.py | 94 ++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 59 insertions(+), 35 deletions(-) diff --git a/log.py b/log.py index 5dedf89..43ccd9b 100644 --- a/log.py +++ b/log.py @@ -108,45 +108,69 @@ class logsManager: try: - if 'delayUntil' in locals() and datetime.now() < delayUntil: - - print("Rate limit exceeded. Please wait before trying again.") - return None + conn = pyodbc.connect(self.conn_str) + cursor = conn.cursor() + timeThreshold = datetime.now() - timedelta(days=1) - url = f"https://ipinfo.io/{ip}?token={token}" + cursor.execute("SELECT blockedipaddress, hostname, city, region, country, loc, org, postal, timezone FROM monutil_geoip WHERE logtime >= ?", timeThreshold) - response = requests.get(url) - response.raise_for_status() - data = response.json() - - if response.status_code == 429: - - print("Rate limit exceeded. Please wait before trying again.") - today = datetime.now() - - if today.month == 12: - - delayUntil = datetime(today.year + 1, 1, 1) - - else: - - delayUntil = datetime(today.year, today.month + 1, 1) - - return None - - geoinfo = { - "ip": data.get("ip"), - "hostname": data.get("hostname"), - "city": data.get("city"), - "region": data.get("region"), - "country": data.get("country"), - "loc": data.get("loc"), - "org": data.get("org"), - "postal": data.get("postal"), - "timezone": data.get("timezone"), - } + rows = cursor.fetchall() + geoinfo = [] + + for row in rows: + geoinfo = { + "ip": row.blockedipaddress, + "hostname": row.hostname, + "city": row.city, + "region": row.region, + "country": row.country, + "loc": row.loc, + "org": row.org, + "postal": row.postal, + "timezone": row.timezone, + } + + if not geoinfo: + + if 'delayUntil' in locals() and datetime.now() < delayUntil: + + print("Rate limit exceeded. Please wait before trying again.") + return None + + url = f"https://ipinfo.io/{ip}?token={token}" + + response = requests.get(url) + response.raise_for_status() + data = response.json() + if response.status_code == 429: + + print("Rate limit exceeded. Please wait before trying again.") + today = datetime.now() + + if today.month == 12: + + delayUntil = datetime(today.year + 1, 1, 1) + + else: + + delayUntil = datetime(today.year, today.month + 1, 1) + + return None + + geoinfo = { + "ip": data.get("ip"), + "hostname": data.get("hostname"), + "city": data.get("city"), + "region": data.get("region"), + "country": data.get("country"), + "loc": data.get("loc"), + "org": data.get("org"), + "postal": data.get("postal"), + "timezone": data.get("timezone"), + } + return geoinfo except Exception as e: From 0ebd1abdd76ab089d2031e1f20cd5990104822b6 Mon Sep 17 00:00:00 2001 From: Thomas Williams Date: Wed, 21 Aug 2024 12:15:48 +0100 Subject: [PATCH 2/2] Bug Fix --- log.py | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/log.py b/log.py index 43ccd9b..d14cb5e 100644 --- a/log.py +++ b/log.py @@ -107,12 +107,12 @@ class logsManager: global delayUntil try: - + conn = pyodbc.connect(self.conn_str) cursor = conn.cursor() timeThreshold = datetime.now() - timedelta(days=1) - cursor.execute("SELECT blockedipaddress, hostname, city, region, country, loc, org, postal, timezone FROM monutil_geoip WHERE logtime >= ?", timeThreshold) + cursor.execute("SELECT blockedipaddress, monutil_geoip.hostname, city, region, country, loc, org, postal, timezone FROM monutil_geoip INNER JOIN monutil_ipblock ON monutil_geoip.logID = monutil_ipblock.logID WHERE logtime >= ? AND blockedipaddress = ?", timeThreshold, ip) rows = cursor.fetchall() @@ -130,24 +130,24 @@ class logsManager: "postal": row.postal, "timezone": row.timezone, } - + if not geoinfo: - + if 'delayUntil' in locals() and datetime.now() < delayUntil: print("Rate limit exceeded. Please wait before trying again.") return None - url = f"https://ipinfo.io/{ip}?token={token}" + url = f"https://ipinfo.io/{ip}?token={token}" - response = requests.get(url) - response.raise_for_status() - data = response.json() + response = requests.get(url) + response.raise_for_status() + data = response.json() - if response.status_code == 429: + if response.status_code == 429: - print("Rate limit exceeded. Please wait before trying again.") - today = datetime.now() + print("Rate limit exceeded. Please wait before trying again.") + today = datetime.now() if today.month == 12: @@ -159,17 +159,17 @@ class logsManager: return None - geoinfo = { - "ip": data.get("ip"), - "hostname": data.get("hostname"), - "city": data.get("city"), - "region": data.get("region"), - "country": data.get("country"), - "loc": data.get("loc"), - "org": data.get("org"), - "postal": data.get("postal"), - "timezone": data.get("timezone"), - } + geoinfo = { + "ip": data.get("ip"), + "hostname": data.get("hostname"), + "city": data.get("city"), + "region": data.get("region"), + "country": data.get("country"), + "loc": data.get("loc"), + "org": data.get("org"), + "postal": data.get("postal"), + "timezone": data.get("timezone"), + } return geoinfo