32 lines
944 B
Python
32 lines
944 B
Python
from quart_common.web.request import (
|
|
get_ip,
|
|
get_my_ip_address,
|
|
get_local_ip_addresses,
|
|
generate_all_ips,
|
|
replace_last_ip_segment,
|
|
get_request_context,
|
|
is_valid_uuid,
|
|
)
|
|
from quart_common.web.env import is_development_environment, is_testing_environment
|
|
|
|
from flask_limiter import Limiter
|
|
|
|
# Limiter Key Gen
|
|
def custom_limit_key():
|
|
ip = get_ip()
|
|
# if THE_IP_BOT_MANAGER.is_client_ip_always_allowed(ip):
|
|
# return None # No key, no increment, no enforcement
|
|
parts = [part for part in ip.split(':') if part] # remove empty parts caused by ::
|
|
return f":{'.'.join(parts)}:"
|
|
|
|
def enforce_custom_limit(limiter:Limiter, key:str, limit_count: int = 3, window_sec: int = 60):
|
|
custom_key = custom_limit_key()
|
|
if custom_key is None:
|
|
return None
|
|
|
|
key = f"{key}{custom_key.rstrip(':')}"
|
|
|
|
current = limiter.storage.incr(key, expiry=window_sec)
|
|
if current > limit_count:
|
|
raise LookupError("To Many 404 Requests")
|