diff --git a/backend/main.py b/backend/main.py index fc611897dcd17b0b2d8c097e1f007bead927e2f3..dd487b7c0c52498637307f73e605facc8b32a9e7 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,4 +1,4 @@ -import datetime +from datetime import datetime, timedelta from uuid import UUID from fastapi import Depends, FastAPI, HTTPException, Request, status @@ -18,6 +18,7 @@ create_database() app = FastAPI() +# CORS handling origins = [settings.customer_url, settings.worker_url] app.add_middleware( CORSMiddleware, @@ -26,14 +27,18 @@ app.add_middleware( allow_methods=["*"], allow_headers=["*"], ) + +# Rate Limiting for some endpoints limiter = Limiter(key_func=get_remote_address) app.state.limiter = limiter app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) + +# Authentication setup oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") oauth2_tokener = Serializer(settings.signing_key) -# Dependency +# DB Dependency def get_db(): db = SessionLocal() try: @@ -42,6 +47,7 @@ def get_db(): db.close() +# Routes @app.post("/item/prepare", response_model=schemas.Item) @limiter.limit("2/minute") def add_item( @@ -72,10 +78,7 @@ def get_item(item_uuid: str, db: Session = Depends(get_db)): @app.get("/items", response_model=list[schemas.Item]) def get_items(token: str = Depends(oauth2_scheme), db: Session = Depends(get_db)): - if ( - datetime.datetime.fromtimestamp(oauth2_tokener.loads(token)) - < datetime.datetime.now() - ): + if datetime.fromtimestamp(oauth2_tokener.loads(token)) < datetime.now(): raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid authentication credentials", @@ -114,10 +117,7 @@ def verify_supporter(form_data: OAuth2PasswordRequestForm = Depends()): raise HTTPException(status_code=400, detail="Incorrect username or password") return { "access_token": oauth2_tokener.dumps( - ( - datetime.datetime.now() - + datetime.timedelta(minutes=settings.token_lifetime) - ).timestamp() + (datetime.now() + timedelta(minutes=settings.token_lifetime)).timestamp() ), "token_type": "bearer", }