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})