Add User login route
This commit is contained in:
+42
-8
@@ -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(),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user