Files
simple-nanoshare/my_modules/functions.py
T

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")