loapi/app/middleware.py
2025-12-28 19:01:46 -06:00

40 lines
1.0 KiB
Python

from typing import Callable
from fastapi import Request, Response
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.errors import RateLimitExceeded
from slowapi.middleware import SlowAPIMiddleware
from slowapi.util import get_remote_address
from app.config import settings
from app.logging import get_logger
logger = get_logger(__name__)
# Rate limiter
limiter = Limiter(
key_func=get_remote_address,
default_limits=[f"{settings.rate_limit_requests}/{settings.rate_limit_period}"] if settings.rate_limit_enabled else []
)
async def logging_middleware(request: Request, call_next: Callable) -> Response:
"""Log all requests and responses."""
logger.debug(
"Request received",
method=request.method,
url=str(request.url),
client_ip=get_remote_address(request)
)
response = await call_next(request)
logger.debug(
"Response sent",
status_code=response.status_code,
method=request.method,
url=str(request.url)
)
return response