munch-ease-backend/api/auth.py
2025-10-18 17:05:48 +11:00

44 lines
1.3 KiB
Python

from __future__ import annotations
import aiosqlite
from fastapi import APIRouter, Depends, Request
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder
import persons
from common import ProblemDetails, ApiModel
from main import get_db, cookie_person, error_response
router = APIRouter(prefix="/auth", tags=["auth"])
class LoginBody(ApiModel):
username: str
@router.post(
"/login",
response_model=None,
operation_id="login",
summary="Login and set user_id cookie",
responses={
404: {"model": ProblemDetails, "description": "Person not found", "content": {"application/problem+json": {}}}
},
)
async def login(data: LoginBody, conn: aiosqlite.Connection = Depends(get_db), request: Request | None = None) -> persons.Person | JSONResponse:
person = await persons.get_by_name(conn, data.username)
if not person:
return error_response(request, 404, "Person not found")
response = JSONResponse(content=jsonable_encoder(person))
response.set_cookie(key="user_id", value=str(person.id))
return response
@router.post(
"/refresh",
operation_id="refresh",
summary="Refresh current user from cookie",
)
async def current_user(user: persons.Person = Depends(cookie_person)) -> persons.Person:
return user