41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
from fastapi import FastAPI, Depends, HTTPException, Request
|
|
from fastapi.responses import RedirectResponse, JSONResponse
|
|
from app.cabletv.utils.auth import get_current_user, exchange_code_for_token
|
|
|
|
app = FastAPI()
|
|
|
|
@app.get("/")
|
|
async def root():
|
|
return {"message": "IPTV Updater API"}
|
|
|
|
@app.get("/protected")
|
|
async def protected_route(request: Request, user = Depends(get_current_user)):
|
|
if isinstance(user, RedirectResponse):
|
|
return 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)
|
|
|
|
response = JSONResponse(content={
|
|
"message": "Authentication successful",
|
|
"id_token": tokens["id_token"]
|
|
})
|
|
|
|
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)}"
|
|
) |