from fastapi import FastAPI, Depends, HTTPException, Request, Response from fastapi.responses import RedirectResponse, JSONResponse from app.cabletv.utils.auth import get_current_user, exchange_code_for_token from fastapi.middleware.cors import CORSMiddleware from starlette.middleware.sessions import SessionMiddleware app = FastAPI() # Add CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Add session middleware app.add_middleware(SessionMiddleware, secret_key="your-secret-key") @app.get("/protected") async def protected_route(request: Request, user = Depends(get_current_user)): return {"message": "Protected content", "user": user['Username']} @app.get("/auth/callback") async def auth_callback(request: Request, code: str): try: redirect_uri = str(request.base_url) tokens = exchange_code_for_token(code, redirect_uri) # For browser requests, redirect to protected page is_browser = "text/html" in request.headers.get("accept", "") if is_browser: response = RedirectResponse(url="/protected") else: response = JSONResponse(content={ "message": "Authentication successful", "id_token": tokens["id_token"] }) # Set the token cookie response.set_cookie( key="token", value=tokens["id_token"], httponly=True, secure=True, samesite="lax" ) return response except Exception as e: raise HTTPException( status_code=400, detail=f"Authentication failed: {str(e)}" )