1
- from flask import Blueprint , request , jsonify
2
- from flask_jwt_extended import create_access_token , create_refresh_token , jwt_required , get_jwt
3
- from src .models import User
4
- from .PayloadValidator import PayloadValidator
5
- from .Constants import Constants as AuthConstants
6
- from src .Utils import Constants
7
- import base64
1
+ from flask import Blueprint
2
+ from flask_jwt_extended import jwt_required
3
+ from src .services .auth_service import AuthService
8
4
9
5
auth_bp = Blueprint ("Auth" ,__name__ )
10
6
@@ -22,95 +18,21 @@ def login():
22
18
"""
23
19
This endpoint will authenticate the user and create the token, returning a JWT pair (header, payload) cryptographed as standard with HS256
24
20
"""
25
- try :
26
- request_user , request_password = str (base64 .b64decode ((request .headers .get ("Authorization" ).split (" " )[1 ])), encoding = "utf-8" ).split (":" )
27
- user = User .by_id (request_user )
28
- if not user or not User .validate_password (user , request_password ):
29
- return jsonify ({
30
- "error" : "invalid username or password. check your input payload"
31
- }), Constants .HTTP_BAD_REQUEST .value
32
- access_token = _add_additional_claims (user .username )
33
- refresh_token = create_refresh_token (identity = user .username )
34
- return jsonify ({
35
- "message" : "Logged in" ,
36
- "token" : {
37
- "access" : access_token ,
38
- "refresh" : refresh_token
39
- }
40
- }), Constants .HTTP_OK .value
41
- except KeyError :
42
- return jsonify ({
43
- "error" : "one or more required fields were not provided. Check your input payload"
44
- }), Constants .HTTP_BAD_REQUEST .value
45
- except ValueError :
46
- return jsonify ({
47
- "error" : "Invalid Authorization parameters"
48
- }), Constants .HTTP_UNAUTHORIZED .value
49
21
50
- def _add_additional_claims (username : str ):
51
- additional_claims = {
52
- "perm" : ["log" ]
53
- }
54
- if username == 'admin' :
55
- additional_claims ["perm" ].append ("create_user" )
56
- return create_access_token (identity = username , additional_claims = additional_claims )
22
+ return AuthService .login ()
57
23
58
- @auth_bp .post ("/changePassword" )
59
- @jwt_required ()
24
+ @auth_bp .post ("/user/password" )
60
25
def change_password ():
61
26
"""
62
27
Endpoint to allow chaning the password of an user. Only users with admin privileges can perform this acction
63
28
Args:
64
29
"""
65
- try :
66
- data = request .json
67
- claims = get_jwt ()
68
- if claims ["sub" ] != data ["username" ]:
69
- return jsonify ({
70
- "message" : "Invalid token for the provided username."
71
- }), Constants .HTTP_UNAUTHORIZED .value
72
- user = _get_user ()
73
- user .set_password (data ['password' ])
74
- user .save ()
75
- return jsonify ({
76
- "message" : f'Password changed for user { user .username } '
77
- }), Constants .HTTP_OK .value
78
- except KeyError as e :
79
- return jsonify ({
80
- "message" : str (e )
81
- }), Constants .HTTP_BAD_REQUEST .value
82
- except ValueError :
83
- return jsonify ({
84
- "message" : AuthConstants .MISSING_AUTH .value
85
- }), Constants .HTTP_UNAUTHORIZED .value
86
-
87
- @auth_bp .delete ("/deleteUser" )
30
+ return AuthService .change_password ()
31
+
32
+ @auth_bp .delete ("/user" )
88
33
@jwt_required ()
89
34
def delete_user ():
90
35
"""
91
36
Endpoint to allow deletion of an user. Only users with admin rights can access this resource.
92
37
"""
93
- try :
94
- user = _get_user ()
95
- claims = get_jwt ()
96
- if AuthConstants .CLAIM_CREATE_USER .value not in claims ["perm" ]:
97
- return jsonify ({
98
- "message" : AuthConstants .MISSING_AUTH .value
99
- }), Constants .HTTP_UNAUTHORIZED .value
100
- user .delete ()
101
- return jsonify ({
102
- "message" : "User deleted"
103
- }), Constants .HTTP_OK .value
104
- except KeyError as e :
105
- return jsonify ({
106
- "message" : str (e )
107
- }), Constants .HTTP_BAD_REQUEST .value
108
-
109
- def _get_user ():
110
- """Retrieves the user that will have their password changed"""
111
- data = request .json
112
- PayloadValidator .validate_payload (data )
113
- user = User .by_id (data ['username' ])
114
- if not user :
115
- raise KeyError ("User not found" )
116
- return user
38
+ return AuthService .delete_user ()
0 commit comments