Coverage for routes\users.py: 89%
27 statements
« prev ^ index » next coverage.py v7.1.0, created at 2023-02-05 19:00 +0800
« prev ^ index » next coverage.py v7.1.0, created at 2023-02-05 19:00 +0800
1from auth.hash_password import HashPassword
2from auth.jwt_handler import create_access_token
3from database.connection import Database
4from fastapi import APIRouter, Depends, HTTPException, status
5from fastapi.security import OAuth2PasswordRequestForm
6from models.users import User, TokenResponse
8user_router = APIRouter(
9 tags=["User"],
10)
12user_database = Database(User)
13hash_password = HashPassword()
16@user_router.post("/signup")
17async def sign_user_up(user: User) -> dict:
18 user_exist = await User.find_one(User.email == user.email)
20 if user_exist:
21 raise HTTPException(
22 status_code=status.HTTP_409_CONFLICT,
23 detail="User with email provided exists already."
24 )
25 hashed_password = hash_password.create_hash(user.password)
26 user.password = hashed_password
27 await user_database.save(user)
28 return {
29 "message": "User created successfully"
30 }
33@user_router.post("/signin", response_model=TokenResponse)
34async def sign_user_in(user: OAuth2PasswordRequestForm = Depends()) -> dict:
35 user_exist = await User.find_one(User.email == user.username)
36 if not user_exist:
37 raise HTTPException(
38 status_code=status.HTTP_404_NOT_FOUND,
39 detail="User with email does not exist."
40 )
41 if hash_password.verify_hash(user.password, user_exist.password):
42 access_token = create_access_token(user_exist.email)
43 return {
44 "access_token": access_token,
45 "token_type": "Bearer"
46 }
48 raise HTTPException(
49 status_code=status.HTTP_401_UNAUTHORIZED,
50 detail="Invalid details passed."
51 )