loapi/app/middleware.py
2025-12-29 14:19:33 -06:00

37 lines
939 B
Python

from typing import Callable, Any
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)
async def logging_middleware(request: Request, call_next: Callable[[Request], Any]) -> Any:
"""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