Coverage for app / core / rate_limiter.py: 100%
10 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 17:54 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 17:54 +0000
1from slowapi import Limiter
2from slowapi.util import get_remote_address
3from starlette.requests import Request
4from app.core.config import settings
6def _rate_limit_key(request: Request) -> str:
7 forwarded = request.headers.get("X-Forwarded-For")
8 if forwarded:
9 return forwarded.split(",")[0].strip()
10 return request.client.host if request.client else "unknown"
12# Configure Limiter to use the centralized Redis storage
13limiter = Limiter(
14 key_func=_rate_limit_key,
15 storage_uri=settings.redis_url
16)