Spaces:
Configuration error
Configuration error
| import json | |
| from fastapi import APIRouter, Request, Depends, Form | |
| from fastapi.responses import HTMLResponse, RedirectResponse | |
| from sqlalchemy.orm import Session | |
| from database import get_db, User | |
| from auth import hash_password, verify_password, create_access_token, get_user_from_request | |
| router = APIRouter(prefix="/auth", tags=["auth"]) | |
| async def login_page(request: Request, db: Session = Depends(get_db)): | |
| from fastapi.templating import Jinja2Templates | |
| templates = Jinja2Templates(directory="templates") | |
| user = get_user_from_request(request, db) | |
| if user: | |
| return RedirectResponse(url="/dashboard", status_code=302) | |
| return templates.TemplateResponse("login.html", {"request": request, "user": None, "error": None}) | |
| async def login( | |
| request: Request, | |
| email: str = Form(...), | |
| password: str = Form(...), | |
| db: Session = Depends(get_db), | |
| ): | |
| from fastapi.templating import Jinja2Templates | |
| templates = Jinja2Templates(directory="templates") | |
| user = db.query(User).filter(User.email == email).first() | |
| if not user or not verify_password(password, user.password_hash): | |
| return templates.TemplateResponse("login.html", { | |
| "request": request, | |
| "user": None, | |
| "error": "Invalid email or password", | |
| }) | |
| token = create_access_token({"sub": user.id}) | |
| response = RedirectResponse(url="/dashboard", status_code=302) | |
| response.set_cookie("session_token", token, httponly=True, samesite="lax", max_age=86400) | |
| return response | |
| async def register_page(request: Request, db: Session = Depends(get_db)): | |
| from fastapi.templating import Jinja2Templates | |
| templates = Jinja2Templates(directory="templates") | |
| user = get_user_from_request(request, db) | |
| if user: | |
| return RedirectResponse(url="/dashboard", status_code=302) | |
| return templates.TemplateResponse("register.html", {"request": request, "user": None, "error": None}) | |
| async def register( | |
| request: Request, | |
| name: str = Form(...), | |
| email: str = Form(...), | |
| password: str = Form(...), | |
| db: Session = Depends(get_db), | |
| ): | |
| from fastapi.templating import Jinja2Templates | |
| templates = Jinja2Templates(directory="templates") | |
| existing = db.query(User).filter(User.email == email).first() | |
| if existing: | |
| return templates.TemplateResponse("register.html", { | |
| "request": request, | |
| "user": None, | |
| "error": "An account with this email already exists", | |
| }) | |
| user = User( | |
| name=name, | |
| email=email, | |
| password_hash=hash_password(password), | |
| ) | |
| db.add(user) | |
| db.commit() | |
| db.refresh(user) | |
| token = create_access_token({"sub": user.id}) | |
| response = RedirectResponse(url="/dashboard", status_code=302) | |
| response.set_cookie("session_token", token, httponly=True, samesite="lax", max_age=86400) | |
| return response | |
| async def logout(): | |
| response = RedirectResponse(url="/auth/login", status_code=302) | |
| response.delete_cookie("session_token") | |
| return response | |