28 lines
680 B
Python
28 lines
680 B
Python
|
|
"""Auth endpoints: login, logout."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from auth import login, logout, require_auth
|
||
|
|
from fastapi import APIRouter, Depends, Response
|
||
|
|
from pydantic import BaseModel, EmailStr, Field
|
||
|
|
|
||
|
|
router = APIRouter(prefix="/api/auth", tags=["auth"])
|
||
|
|
|
||
|
|
|
||
|
|
class LoginRequest(BaseModel):
|
||
|
|
email: EmailStr
|
||
|
|
password: str = Field(min_length=8, max_length=256)
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/login")
|
||
|
|
def auth_login(body: LoginRequest):
|
||
|
|
return login(body.email, body.password)
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/logout")
|
||
|
|
def auth_logout(response: Response, session: dict = Depends(require_auth)):
|
||
|
|
token = session.get("token")
|
||
|
|
if token:
|
||
|
|
logout(token)
|
||
|
|
return {"ok": True}
|