LibreTranslate/app/flood.py

48 lines
976 B
Python
Raw Normal View History

2021-05-16 15:50:22 +00:00
import atexit
from apscheduler.schedulers.background import BackgroundScheduler
banned = {}
active = False
threshold = -1
2021-05-18 03:41:02 +00:00
2021-05-16 15:50:22 +00:00
def clear_banned():
global banned
banned = {}
2021-05-18 03:41:02 +00:00
def setup(violations_threshold=100):
2021-05-16 15:50:22 +00:00
global active
global threshold
active = True
threshold = violations_threshold
scheduler = BackgroundScheduler()
scheduler.add_job(func=clear_banned, trigger="interval", weeks=4)
scheduler.start()
# Shut down the scheduler when exiting the app
atexit.register(lambda: scheduler.shutdown())
def report(request_ip):
2021-05-16 15:52:39 +00:00
if active:
banned[request_ip] = banned.get(request_ip, 0)
banned[request_ip] += 1
def decrease(request_ip):
if banned[request_ip] > 0:
banned[request_ip] -= 1
def has_violation(request_ip):
return request_ip in banned and banned[request_ip] > 0
2021-05-16 15:50:22 +00:00
2021-05-18 03:41:02 +00:00
2021-05-16 15:50:22 +00:00
def is_banned(request_ip):
# More than X offences?
2021-05-16 15:59:39 +00:00
return active and banned.get(request_ip, 0) >= threshold