Spaces:
Sleeping
Sleeping
File size: 1,927 Bytes
1256bd3 b0f2d3d 1256bd3 b0f2d3d b815660 bc52259 1256bd3 bc52259 1256bd3 b815660 1256bd3 b815660 1256bd3 b0f2d3d 1256bd3 b0f2d3d 1256bd3 b0f2d3d 1256bd3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
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})
|