from fastapi import FastAPI from starlette.middleware.sessions import SessionMiddleware from starlette.requests import Request from starlette.responses import HTMLResponse from starlette.templating import Jinja2Templates from app.core.config import settings from app.api.v1.api import api_router app = FastAPI(title=settings.PROJECT_NAME) # 1. Add Session Middleware # This is required for Authlib to store the temporary state during the OAuth dance app.add_middleware( SessionMiddleware, secret_key=settings.SECRET_KEY, https_only=False # Set to True in production with SSL ) # 2. Include API Routers app.include_router(api_router) # 3. Simple Frontend for demonstration templates = Jinja2Templates(directory="app/templates") @app.get("/", response_class=HTMLResponse) async def root(request: Request): user = request.session.get("user") return templates.TemplateResponse("index.html", {"request": request, "user": user}) if __name__ == "__main__": import uvicorn uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True)