from fastapi import FastAPI, Depends, HTTPException, APIRouter from fastapi.requests import Request from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from sqlalchemy.orm import Session from auth import verify_token, oauth2_scheme from database import get_db, get_user_by_email import auth import tts app = FastAPI() router = APIRouter() templates = Jinja2Templates(directory="templates") # Include the authentication router with the prefix '/auth' app.include_router(auth.router, prefix="/auth") # Include the TTS router with the prefix '/tts' app.include_router(tts.router, prefix="/tts") # Dependency for verifying the user's token def get_current_user(token: str = Depends(verify_token)): if not token: raise HTTPException(status_code=401, detail="Token not valid") return token @app.get("/login", response_class=HTMLResponse) async def login(request: Request): return templates.TemplateResponse("login.html", {"request": request}) @app.get("/register", response_class=HTMLResponse) async def register(request: Request): return templates.TemplateResponse("register.html", {"request": request}) @app.get("/verify/{verification_token}", response_class=HTMLResponse) async def verify_email(verification_token: str, request: Request): # Perform verification and return an appropriate template return templates.TemplateResponse("verify.html", {"request": request}) # User authentication (protected route) @app.get("/protected", response_model=str) async def protected_route(request: Request, token: str = Depends(oauth2_scheme), db: Session = Depends(get_db)): # Verify the access token user = verify_token(token, "your-secret-key", "HS256") if user is None: raise HTTPException(status_code=401, detail="Invalid or expired token") # Check if the user exists in the database db_user = get_user_by_email(db, user) # Modify this to match your database query if db_user is None: raise HTTPException(status_code=401, detail="User not found in the database") # The user exists in the database, and you can render the protected route template return templates.TemplateResponse("protected.html", {"request": request, "user": db_user.username})