diff --git a/backend/src/app/api/v1/auth.py b/backend/src/app/api/v1/auth.py index aa466ca..a4c44f1 100644 --- a/backend/src/app/api/v1/auth.py +++ b/backend/src/app/api/v1/auth.py @@ -15,6 +15,7 @@ from app.api.schemas import ( UserRegister, UserResponse, ) +from app.infra.rate_limiter import limiter from app.infra.redis_client import ( LoginAttemptTracker, TokenBlacklist, @@ -22,7 +23,6 @@ from app.infra.redis_client import ( get_token_blacklist, ) from app.infra.security import decode_refresh_token, get_subject -from app.main import limiter from app.services.auth_service import AuthService router = APIRouter(prefix="/auth", tags=["auth"]) diff --git a/backend/src/app/infra/rate_limiter.py b/backend/src/app/infra/rate_limiter.py new file mode 100644 index 0000000..11ec201 --- /dev/null +++ b/backend/src/app/infra/rate_limiter.py @@ -0,0 +1,7 @@ +"""Rate limiter instance for the application.""" + +from slowapi import Limiter +from slowapi.util import get_remote_address + +# Global rate limiter instance +limiter = Limiter(key_func=get_remote_address, default_limits=["1000/hour"]) diff --git a/backend/src/app/main.py b/backend/src/app/main.py index dd8f143..e53a0d1 100644 --- a/backend/src/app/main.py +++ b/backend/src/app/main.py @@ -4,19 +4,16 @@ from contextlib import asynccontextmanager from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware -from slowapi import Limiter, _rate_limit_exceeded_handler +from slowapi import _rate_limit_exceeded_handler from slowapi.errors import RateLimitExceeded -from slowapi.util import get_remote_address from starlette.middleware.base import BaseHTTPMiddleware from app.api.v1 import assets, auth, batch, folders, shares, uploads from app.infra.config import get_settings +from app.infra.rate_limiter import limiter settings = get_settings() -# Rate limiter -limiter = Limiter(key_func=get_remote_address, default_limits=["1000/hour"]) - @asynccontextmanager async def lifespan(app: FastAPI):