from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse, RedirectResponse, JSONResponse from fastapi.templating import Jinja2Templates from fastapi.responses import HTMLResponse from starlette.middleware.sessions import SessionMiddleware from fastapi.staticfiles import StaticFiles # from starlette.middleware.proxy_headers import ProxyHeadersMiddleware import os # BEFORE creating the FastAPI app os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" # Routers from app.routes import auth, youtube from app.config import templates # For rendering HTML templates app = FastAPI() app.mount("/static", StaticFiles(directory="static"), name="static") # Set a secret key for session cookies (Use a strong key in production!) app.add_middleware(SessionMiddleware, secret_key="CHANGE_THIS_SECRET") # Include our routers app.include_router(auth.router) app.include_router(youtube.router) # 1) Root route => Decide if user is logged in; if not, go to /login @app.get("/", response_class=HTMLResponse) async def root_redirect(request: Request): token = request.cookies.get("token") if token: return RedirectResponse(url="/videos", status_code=303) else: return RedirectResponse(url="/login", status_code=303) # 2) Show the login form (GET /login) @app.get("/login", response_class=HTMLResponse) async def login_form(request: Request): return templates.TemplateResponse("login.html", {"request": request}) @app.get("/logout") async def logout(): response = RedirectResponse(url="/login") response.delete_cookie("token") return response # @app.get("/", response_class=HTMLResponse) # async def read_root(request: Request): # return templates.TemplateResponse("login.html", {"request": request}) @app.get("/success", response_class=HTMLResponse) async def read_success(request: Request): return templates.TemplateResponse("success.html", {"request": request})