22 lines
548 B
Python
22 lines
548 B
Python
from __future__ import annotations
|
|
|
|
import time
|
|
|
|
from . import settings
|
|
|
|
_ACCESS_REQUEST_RATE: dict[str, list[float]] = {}
|
|
|
|
|
|
def rate_limit_allow(ip: str) -> bool:
|
|
if settings.ACCESS_REQUEST_RATE_LIMIT <= 0:
|
|
return True
|
|
now = time.time()
|
|
window_start = now - settings.ACCESS_REQUEST_RATE_WINDOW_SEC
|
|
bucket = _ACCESS_REQUEST_RATE.setdefault(ip, [])
|
|
bucket[:] = [t for t in bucket if t >= window_start]
|
|
if len(bucket) >= settings.ACCESS_REQUEST_RATE_LIMIT:
|
|
return False
|
|
bucket.append(now)
|
|
return True
|
|
|