Implement Phase 1: Session Management and Dashboard

This commit is contained in:
Jo Eskil
2025-11-13 17:08:24 +01:00
parent 382f0ec782
commit 90a40381ab
3 changed files with 67 additions and 5 deletions

37
main.py
View File

@@ -1,14 +1,38 @@
import asyncio
import json
from fastapi import FastAPI, WebSocket
from fastapi.responses import HTMLResponse
from fastapi import FastAPI, WebSocket, Request, Depends
from fastapi.responses import HTMLResponse, RedirectResponse
from starlette.websockets import WebSocketDisconnect
from starlette.middleware.base import BaseHTTPMiddleware
from sqlalchemy.orm import Session
from chat_listeners import listen_youtube_chat, listen_twitch_chat
from auth import router as auth_router # Import the auth router
from auth import router as auth_router, serializer
from database import get_db, User
app = FastAPI()
class SessionMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next):
response = await call_next(request)
session_cookie = request.cookies.get("session")
if session_cookie:
try:
data = serializer.loads(session_cookie, max_age=3600 * 24 * 7) # 1 week
db = next(get_db())
user = db.query(User).filter(User.id == data["user_id"]).first()
request.state.user = user
except Exception:
request.state.user = None
else:
request.state.user = None
return response
app.add_middleware(SessionMiddleware)
def get_current_user(request: Request):
return request.state.user
app.include_router(auth_router, prefix="/auth") # Include the auth router
connected_clients = []
@@ -40,6 +64,13 @@ async def get_login_page():
with open("login.html", "r") as f:
return f.read()
@app.get("/dashboard", response_class=HTMLResponse)
async def get_dashboard(user: User = Depends(get_current_user)):
if not user:
return RedirectResponse(url="/login")
with open("dashboard.html", "r") as f:
return f.read()
@app.get("/overlay", response_class=HTMLResponse)
async def get_overlay():
with open("index.html", "r") as f: