from fastapi import FastAPI, Request, Depends, Form, HTTPException from fastapi.responses import RedirectResponse, HTMLResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from starlette.middleware.sessions import SessionMiddleware from db.models import Base, engine, SessionLocal, get_db, User from auth.session import get_current_user, login_user, logout_user from auth import webauthn, oidc import uvicorn app = FastAPI() app.add_middleware(SessionMiddleware, secret_key="my_secret_key") app.include_router(webauthn.router) app.include_router(oidc.router) app.mount("/static", StaticFiles(directory="static"), name="static") templates = Jinja2Templates(directory="templates") # DB Base.metadata.create_all(bind=engine) @app.get("/", response_class=HTMLResponse) def home(request: Request, user: User = Depends(get_current_user)): if not user: return RedirectResponse(url="/login", status_code=303) return templates.TemplateResponse("index.html", {"request": request, "user": user}) @app.get("/login", response_class=HTMLResponse) def login_form(request: Request): return templates.TemplateResponse("login.html", {"request": request}) if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)