mirror of
https://github.com/Lost-MSth/Arcaea-server.git
synced 2025-12-14 08:06:23 +08:00
- Add limiter for login and API login - Add some config options - Delete `setting.py` files
32 lines
929 B
Python
32 lines
929 B
Python
from limits import parse_many, strategies
|
|
from limits.storage import storage_from_string
|
|
|
|
|
|
class ArcLimiter:
|
|
storage = storage_from_string("memory://")
|
|
strategy = strategies.FixedWindowRateLimiter(storage)
|
|
|
|
def __init__(self, limit_str: str = None, namespace: str = None):
|
|
self._limits: list = None
|
|
self.limits = limit_str
|
|
self.namespace = namespace
|
|
|
|
@property
|
|
def limits(self) -> list:
|
|
return self._limits
|
|
|
|
@limits.setter
|
|
def limits(self, value: str):
|
|
if value is None:
|
|
return
|
|
self._limits = parse_many(value)
|
|
|
|
def hit(self, key: str, cost: int = 1) -> bool:
|
|
flag = True
|
|
for limit in self.limits:
|
|
flag &= self.strategy.hit(limit, self.namespace, key, cost)
|
|
return flag
|
|
|
|
def test(self, key: str) -> bool:
|
|
return all(self.strategy.test(limit, self.namespace, key) for limit in self.limits)
|