forked from mirrors/LibreTranslate
decrease counter if the user wait after the slowdown notice
This commit is contained in:
parent
ec382054db
commit
adfdc8c9e5
2 changed files with 23 additions and 2 deletions
10
app/app.py
10
app/app.py
|
@ -25,6 +25,7 @@ def get_version():
|
|||
except:
|
||||
return "?"
|
||||
|
||||
|
||||
def get_upload_dir():
|
||||
upload_dir = os.path.join(tempfile.gettempdir(), "libretranslate-files-translate")
|
||||
|
||||
|
@ -33,6 +34,7 @@ def get_upload_dir():
|
|||
|
||||
return upload_dir
|
||||
|
||||
|
||||
def get_req_api_key():
|
||||
if request.is_json:
|
||||
json = get_json_dict(request)
|
||||
|
@ -42,6 +44,7 @@ def get_req_api_key():
|
|||
|
||||
return ak
|
||||
|
||||
|
||||
def get_json_dict(request):
|
||||
d = request.get_json()
|
||||
if not isinstance(d, dict):
|
||||
|
@ -162,8 +165,13 @@ def create_app(args):
|
|||
def access_check(f):
|
||||
@wraps(f)
|
||||
def func(*a, **kw):
|
||||
if flood.is_banned(get_remote_address()):
|
||||
ip = get_remote_address()
|
||||
|
||||
if flood.is_banned(ip):
|
||||
abort(403, description="Too many request limits violations")
|
||||
else:
|
||||
if flood.has_violation(ip):
|
||||
flood.decrease(ip)
|
||||
|
||||
if args.api_keys and args.require_api_key_origin:
|
||||
ak = get_req_api_key()
|
||||
|
|
13
app/flood.py
13
app/flood.py
|
@ -19,6 +19,8 @@ def setup(violations_threshold=100):
|
|||
active = True
|
||||
threshold = violations_threshold
|
||||
|
||||
print(violations_threshold)
|
||||
|
||||
scheduler = BackgroundScheduler()
|
||||
scheduler.add_job(func=clear_banned, trigger="interval", weeks=4)
|
||||
scheduler.start()
|
||||
|
@ -31,6 +33,17 @@ def report(request_ip):
|
|||
if active:
|
||||
banned[request_ip] = banned.get(request_ip, 0)
|
||||
banned[request_ip] += 1
|
||||
print(banned[request_ip])
|
||||
|
||||
|
||||
def decrease(request_ip):
|
||||
if banned[request_ip] > 0:
|
||||
banned[request_ip] -= 1
|
||||
print('decrease', request_ip)
|
||||
|
||||
|
||||
def has_violation(request_ip):
|
||||
return request_ip in banned and banned[request_ip] > 0
|
||||
|
||||
|
||||
def is_banned(request_ip):
|
||||
|
|
Loading…
Reference in a new issue