Skip to content

Commit de504a0

Browse files
committed
Add more DRY
1 parent 66def3b commit de504a0

File tree

2 files changed

+36
-32
lines changed

2 files changed

+36
-32
lines changed

flask_jwt_extended/utils.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
from flask import _request_ctx_stack as ctx_stack
88

99
from flask_jwt_extended.config import config
10+
from flask_jwt_extended.exceptions import (
11+
RevokedTokenError, UserClaimsVerificationError, WrongTokenError
12+
)
1013
from flask_jwt_extended.tokens import decode_jwt
1114

1215

@@ -153,9 +156,31 @@ def token_in_blacklist(*args, **kwargs):
153156
return jwt_manager._token_in_blacklist_callback(*args, **kwargs)
154157

155158

156-
def verify_token_claims(*args, **kwargs):
159+
def verify_token_type(decoded_token, expected_type):
160+
if decoded_token['type'] != expected_type:
161+
raise WrongTokenError('Only {} tokens are allowed'.format(expected_type))
162+
163+
164+
def verify_token_not_blacklisted(decoded_token, request_type):
165+
if not config.blacklist_enabled:
166+
return
167+
if not has_token_in_blacklist_callback():
168+
raise RuntimeError("A token_in_blacklist_callback must be provided via "
169+
"the '@token_in_blacklist_loader' if "
170+
"JWT_BLACKLIST_ENABLED is True")
171+
if config.blacklist_access_tokens and request_type == 'access':
172+
if token_in_blacklist(decoded_token):
173+
raise RevokedTokenError('Token has been revoked')
174+
if config.blacklist_refresh_tokens and request_type == 'refresh':
175+
if token_in_blacklist(decoded_token):
176+
raise RevokedTokenError('Token has been revoked')
177+
178+
179+
def verify_token_claims(jwt_data):
157180
jwt_manager = _get_jwt_manager()
158-
return jwt_manager._claims_verification_callback(*args, **kwargs)
181+
user_claims = jwt_data[config.user_claims_key]
182+
if not jwt_manager._claims_verification_callback(user_claims):
183+
raise UserClaimsVerificationError('User claims verification failed')
159184

160185

161186
def get_csrf_token(encoded_token):

flask_jwt_extended/view_decorators.py

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,12 @@
1010

1111
from flask_jwt_extended.config import config
1212
from flask_jwt_extended.exceptions import (
13-
InvalidHeaderError, NoAuthorizationError, WrongTokenError,
14-
FreshTokenRequired, CSRFError, UserLoadError, RevokedTokenError,
15-
UserClaimsVerificationError
13+
CSRFError, FreshTokenRequired, InvalidHeaderError, NoAuthorizationError,
14+
UserLoadError
1615
)
1716
from flask_jwt_extended.utils import (
18-
has_user_loader, user_loader, token_in_blacklist, decode_token,
19-
has_token_in_blacklist_callback, verify_token_claims
17+
decode_token, has_user_loader, user_loader, verify_token_claims,
18+
verify_token_not_blacklisted, verify_token_type
2019
)
2120

2221

@@ -35,8 +34,7 @@ def wrapper(*args, **kwargs):
3534
if request.method not in config.exempt_methods:
3635
jwt_data = _decode_jwt_from_request(request_type='access')
3736
ctx_stack.top.jwt = jwt_data
38-
if not verify_token_claims(jwt_data[config.user_claims_key]):
39-
raise UserClaimsVerificationError('User claims verification failed')
37+
verify_token_claims(jwt_data)
4038
_load_user(jwt_data[config.identity_claim_key])
4139
return fn(*args, **kwargs)
4240
return wrapper
@@ -61,8 +59,7 @@ def wrapper(*args, **kwargs):
6159
try:
6260
jwt_data = _decode_jwt_from_request(request_type='access')
6361
ctx_stack.top.jwt = jwt_data
64-
if not verify_token_claims(jwt_data[config.user_claims_key]):
65-
raise UserClaimsVerificationError('User claims verification failed')
62+
verify_token_claims(jwt_data)
6663
_load_user(jwt_data[config.identity_claim_key])
6764
except (NoAuthorizationError, InvalidHeaderError):
6865
pass
@@ -93,8 +90,7 @@ def wrapper(*args, **kwargs):
9390
now = timegm(datetime.utcnow().utctimetuple())
9491
if fresh < now:
9592
raise FreshTokenRequired('Fresh token required')
96-
if not verify_token_claims(jwt_data[config.user_claims_key]):
97-
raise UserClaimsVerificationError('User claims verification failed')
93+
verify_token_claims(jwt_data)
9894
_load_user(jwt_data[config.identity_claim_key])
9995
return fn(*args, **kwargs)
10096
return wrapper
@@ -126,21 +122,6 @@ def _load_user(identity):
126122
ctx_stack.top.jwt_user = user
127123

128124

129-
def _token_blacklisted(decoded_token, request_type):
130-
if not config.blacklist_enabled:
131-
return False
132-
if not has_token_in_blacklist_callback():
133-
raise RuntimeError("A token_in_blacklist_callback must be provided via "
134-
"the '@token_in_blacklist_loader' if "
135-
"JWT_BLACKLIST_ENABLED is True")
136-
137-
if config.blacklist_access_tokens and request_type == 'access':
138-
return token_in_blacklist(decoded_token)
139-
if config.blacklist_refresh_tokens and request_type == 'refresh':
140-
return token_in_blacklist(decoded_token)
141-
return False
142-
143-
144125
def _decode_jwt_from_headers():
145126
header_name = config.header_name
146127
header_type = config.header_type
@@ -207,11 +188,9 @@ def _decode_jwt_from_request(request_type):
207188
decoded_token = _decode_jwt_from_cookies(request_type)
208189

209190
# Make sure the type of token we received matches the request type we expect
210-
if decoded_token['type'] != request_type:
211-
raise WrongTokenError('Only {} tokens are allowed'.format(request_type))
191+
verify_token_type(decoded_token, expected_type=request_type)
212192

213193
# If blacklisting is enabled, see if this token has been revoked
214-
if _token_blacklisted(decoded_token, request_type):
215-
raise RevokedTokenError('Token has been revoked')
194+
verify_token_not_blacklisted(decoded_token, request_type)
216195

217196
return decoded_token

0 commit comments

Comments
 (0)