1010from app .core import security
1111from app .core .config import settings
1212from app .core .security import get_password_hash
13- from app .utils import (
13+ from app .utilities import (
1414 generate_password_reset_token ,
1515 send_reset_password_email ,
1616 verify_password_reset_token ,
2020
2121
2222@router .post ("/login/access-token" , response_model = schemas .Token )
23- def login_access_token (
24- db : Session = Depends (deps .get_db ), form_data : OAuth2PasswordRequestForm = Depends ()
25- ) -> Any :
23+ def login_access_token (db : Session = Depends (deps .get_db ), form_data : OAuth2PasswordRequestForm = Depends ()) -> Any :
2624 """
2725 OAuth2 compatible token login, get an access token for future requests
2826 """
29- user = crud .user .authenticate (
30- db , email = form_data .username , password = form_data .password
31- )
27+ user = crud .user .authenticate (db , email = form_data .username , password = form_data .password )
3228 if not user :
3329 raise HTTPException (status_code = 400 , detail = "Incorrect email or password" )
3430 elif not crud .user .is_active (user ):
3531 raise HTTPException (status_code = 400 , detail = "Inactive user" )
36- access_token_expires = timedelta (minutes = settings .ACCESS_TOKEN_EXPIRE_MINUTES )
32+ access_token_expires = timedelta (seconds = settings .ACCESS_TOKEN_EXPIRE_SECONDS )
33+ refresh_token_expires = timedelta (seconds = settings .REFRESH_TOKEN_EXPIRE_SECONDS )
34+ refresh_token = security .create_refresh_token (user .id , expires_delta = refresh_token_expires )
35+ crud .token .create (db = db , obj_in = refresh_token , user_obj = user )
3736 return {
38- "access_token" : security .create_access_token (
39- user .id , expires_delta = access_token_expires
40- ),
37+ "access_token" : security .create_access_token (user .id , expires_delta = access_token_expires ),
38+ "refresh_token" : refresh_token ,
4139 "token_type" : "bearer" ,
4240 }
4341
4442
45- @router .post ("/login/test-token" , response_model = schemas .User )
46- def test_token (current_user : models .User = Depends (deps .get_current_user )) -> Any :
43+ @router .post ("/login/refresh-token" , response_model = schemas .Token )
44+ def refresh_token (
45+ db : Session = Depends (deps .get_db ),
46+ current_user : models .User = Depends (deps .get_refresh_user ),
47+ ) -> Any :
4748 """
48- Test access token
49+ Refresh tokens for future requests
4950 """
50- return current_user
51+ access_token_expires = timedelta (seconds = settings .ACCESS_TOKEN_EXPIRE_SECONDS )
52+ refresh_token_expires = timedelta (seconds = settings .REFRESH_TOKEN_EXPIRE_SECONDS )
53+ refresh_token = security .create_refresh_token (current_user .id , expires_delta = refresh_token_expires )
54+ crud .token .create (db = db , obj_in = refresh_token , user_obj = current_user )
55+ access_token = security .create_access_token (current_user .id , expires_delta = access_token_expires )
56+ return {
57+ "access_token" : access_token ,
58+ "refresh_token" : refresh_token ,
59+ "token_type" : "bearer" ,
60+ }
61+
62+
63+ @router .post ("/login/revoke-token" , response_model = schemas .Msg )
64+ def revoke_token (
65+ db : Session = Depends (deps .get_db ),
66+ current_user : models .User = Depends (deps .get_refresh_user ),
67+ ) -> Any :
68+ """
69+ Revoke a refresh token
70+ """
71+ return {"msg" : "Token revoked" }
5172
5273
5374@router .post ("/password-recovery/{email}" , response_model = schemas .Msg )
@@ -56,20 +77,17 @@ def recover_password(email: str, db: Session = Depends(deps.get_db)) -> Any:
5677 Password Recovery
5778 """
5879 user = crud .user .get_by_email (db , email = email )
59-
6080 if not user :
6181 raise HTTPException (
6282 status_code = 404 ,
63- detail = "The user with this username does not exist in the system." ,
83+ detail = "This user does not exist in the system." ,
6484 )
6585 password_reset_token = generate_password_reset_token (email = email )
66- send_reset_password_email (
67- email_to = user .email , email = email , token = password_reset_token
68- )
69- return {"msg" : "Password recovery email sent" }
86+ send_reset_password_email (email_to = user .email , email = email , token = password_reset_token )
87+ return {"msg" : "Password recovery email sent." }
7088
7189
72- @router .post ("/reset-password/ " , response_model = schemas .Msg )
90+ @router .post ("/reset-password" , response_model = schemas .Msg )
7391def reset_password (
7492 token : str = Body (...),
7593 new_password : str = Body (...),
@@ -85,12 +103,12 @@ def reset_password(
85103 if not user :
86104 raise HTTPException (
87105 status_code = 404 ,
88- detail = "The user with this username does not exist in the system." ,
106+ detail = "This user does not exist in the system." ,
89107 )
90108 elif not crud .user .is_active (user ):
91109 raise HTTPException (status_code = 400 , detail = "Inactive user" )
92110 hashed_password = get_password_hash (new_password )
93111 user .hashed_password = hashed_password
94112 db .add (user )
95113 db .commit ()
96- return {"msg" : "Password updated successfully" }
114+ return {"msg" : "Password updated successfully. " }
0 commit comments