Add User login route

This commit is contained in:
Esa Kataja
2024-11-09 16:25:05 +02:00
parent aecf382070
commit e620d5c19e
2 changed files with 90 additions and 19 deletions
+42 -8
View File
@@ -1,6 +1,10 @@
from fastapi import APIRouter
from fastapi import APIRouter, Response
import bcrypt
from models.user import UserIn, UserOut, UserCredentials
from models.general import Message
from lib.database import get_all_users, get_user_by_username
from models import User
router = APIRouter(
prefix="/user",
@@ -9,11 +13,41 @@ router = APIRouter(
)
@router.get("/")
async def get_users():
return {"users": ["user1", "user2", "user3"]}
@router.get("/", response_model=list[UserOut])
async def get_users() -> list[UserOut]:
"""Get all users"""
return get_all_users()
@router.post("/login")
async def login():
return {"token": "token"}
@router.post(
"/login",
responses={
200: {"model": UserOut, "description": "Login successful"},
400: {"model": Message},
404: {"model": Message},
},
)
async def login(user: UserCredentials):
"""Login a user"""
user_from_db: UserIn = get_user_by_username(user.username)
if user_from_db is None:
return Response(
status_code=404,
media_type="application/json",
content=Message(
message="User not found", message_type="error"
).model_dump_json(),
)
password = user.password.encode("utf-8")
if bcrypt.checkpw(password, user_from_db.password.encode("utf-8")):
return UserOut(**user_from_db.model_dump())
return Response(
status_code=400,
media_type="application/json",
content=Message(
message="Invalid password", message_type="error"
).model_dump_json(),
)