11from datetime import timedelta
2- from typing import Any
2+ from typing import Annotated , Any
33
4- from fastapi import APIRouter , Body , Depends , HTTPException
4+ from fastapi import APIRouter , Depends , HTTPException
55from fastapi .security import OAuth2PasswordRequestForm
6- from sqlalchemy .orm import Session
76
8- from app import crud , models , schemas
9- from app .api import deps
7+ from app import crud
8+ from app .api . deps import CurrentUser , SessionDep
109from app .core import security
1110from app .core .config import settings
1211from app .core .security import get_password_hash
12+ from app .models import Message , NewPassword , Token , UserOut
1313from app .utils import (
1414 generate_password_reset_token ,
1515 send_reset_password_email ,
1919router = APIRouter ()
2020
2121
22- @router .post ("/login/access-token" , response_model = schemas . Token )
22+ @router .post ("/login/access-token" )
2323def login_access_token (
24- db : Session = Depends ( deps . get_db ) , form_data : OAuth2PasswordRequestForm = Depends ()
25- ) -> Any :
24+ session : SessionDep , form_data : Annotated [ OAuth2PasswordRequestForm , Depends ()]
25+ ) -> Token :
2626 """
2727 OAuth2 compatible token login, get an access token for future requests
2828 """
29- user = crud .user . authenticate (
30- db , email = form_data .username , password = form_data .password
29+ user = crud .authenticate (
30+ session = session , email = form_data .username , password = form_data .password
3131 )
3232 if not user :
3333 raise HTTPException (status_code = 400 , detail = "Incorrect email or password" )
34- elif not crud . user .is_active ( user ) :
34+ elif not user .is_active :
3535 raise HTTPException (status_code = 400 , detail = "Inactive user" )
3636 access_token_expires = timedelta (minutes = settings .ACCESS_TOKEN_EXPIRE_MINUTES )
37- return {
38- " access_token" : security .create_access_token (
37+ return Token (
38+ access_token = security .create_access_token (
3939 user .id , expires_delta = access_token_expires
40- ),
41- "token_type" : "bearer" ,
42- }
40+ )
41+ )
4342
4443
45- @router .post ("/login/test-token" , response_model = schemas . User )
46- def test_token (current_user : models . User = Depends ( deps . get_current_user ) ) -> Any :
44+ @router .post ("/login/test-token" , response_model = UserOut )
45+ def test_token (current_user : CurrentUser ) -> Any :
4746 """
4847 Test access token
4948 """
5049 return current_user
5150
5251
53- @router .post ("/password-recovery/{email}" , response_model = schemas . Msg )
54- def recover_password (email : str , db : Session = Depends ( deps . get_db )) -> Any :
52+ @router .post ("/password-recovery/{email}" )
53+ def recover_password (email : str , session : SessionDep ) -> Message :
5554 """
5655 Password Recovery
5756 """
58- user = crud .user . get_by_email ( db , email = email )
57+ user = crud .get_user_by_email ( session = session , email = email )
5958
6059 if not user :
6160 raise HTTPException (
@@ -66,31 +65,30 @@ def recover_password(email: str, db: Session = Depends(deps.get_db)) -> Any:
6665 send_reset_password_email (
6766 email_to = user .email , email = email , token = password_reset_token
6867 )
69- return { "msg" : " Password recovery email sent"}
68+ return Message ( message = " Password recovery email sent")
7069
7170
72- @router .post ("/reset-password/" , response_model = schemas . Msg )
71+ @router .post ("/reset-password/" )
7372def reset_password (
74- token : str = Body (...),
75- new_password : str = Body (...),
76- db : Session = Depends (deps .get_db ),
77- ) -> Any :
73+ session : SessionDep ,
74+ body : NewPassword ,
75+ ) -> Message :
7876 """
7977 Reset password
8078 """
81- email = verify_password_reset_token (token )
79+ email = verify_password_reset_token (token = body . token )
8280 if not email :
8381 raise HTTPException (status_code = 400 , detail = "Invalid token" )
84- user = crud .user . get_by_email ( db , email = email )
82+ user = crud .get_user_by_email ( session = session , email = email )
8583 if not user :
8684 raise HTTPException (
8785 status_code = 404 ,
8886 detail = "The user with this username does not exist in the system." ,
8987 )
90- elif not crud . user .is_active ( user ) :
88+ elif not user .is_active :
9189 raise HTTPException (status_code = 400 , detail = "Inactive user" )
92- hashed_password = get_password_hash (new_password )
90+ hashed_password = get_password_hash (password = body . new_password )
9391 user .hashed_password = hashed_password
94- db .add (user )
95- db .commit ()
96- return { "msg" : " Password updated successfully"}
92+ session .add (user )
93+ session .commit ()
94+ return Message ( message = " Password updated successfully")
0 commit comments