37 lines
939 B
Python
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
|