munch-ease-backend/api/auth.py

45 lines
1.3 KiB
Python
Raw Normal View History

2025-10-18 05:50:43 +00:00
from __future__ import annotations
import aiosqlite
from fastapi import APIRouter, Depends, Request
2025-10-18 06:05:48 +00:00
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder
2025-10-18 05:50:43 +00:00
import persons
2025-10-18 06:05:48 +00:00
from common import ProblemDetails, ApiModel
from api.deps import get_db, cookie_person, error_response
2025-10-18 05:50:43 +00:00
router = APIRouter(prefix="/auth", tags=["auth"])
2025-10-18 06:05:48 +00:00
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(request: Request, data: LoginBody, conn: aiosqlite.Connection = Depends(get_db)) -> persons.Person | JSONResponse:
2025-10-18 06:05:48 +00:00
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
2025-10-18 05:50:43 +00:00
2025-10-18 06:05:48 +00:00
@router.post(
"/refresh",
operation_id="refresh",
summary="Refresh current user from cookie",
)
2025-10-18 05:50:43 +00:00
async def current_user(user: persons.Person = Depends(cookie_person)) -> persons.Person:
2025-10-18 06:05:48 +00:00
return user