Skip to content

Commit 54ed26b

Browse files
committed
Merge pull request jpadilla#125 from mark-adams/refactor-private-apis
Moved claims validation into a separate private method to make it simpler to understand the code.
2 parents 51edd9f + 624cef3 commit 54ed26b

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

jwt/api.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,9 @@ def decode(self, jwt, key='', verify=True, algorithms=None, **kwargs):
114114

115115
if verify:
116116
self._verify_signature(payload, signing_input, header, signature,
117-
key, algorithms, **kwargs)
117+
key, algorithms)
118+
119+
self._validate_claims(payload, **kwargs)
118120

119121
return payload
120122

@@ -157,20 +159,13 @@ def _load(self, jwt):
157159
return (payload, signing_input, header, signature)
158160

159161
def _verify_signature(self, payload, signing_input, header, signature,
160-
key='', algorithms=None, verify_expiration=True, leeway=0,
161-
audience=None, issuer=None):
162+
key='', algorithms=None):
162163

163164
alg = header['alg']
164165

165166
if algorithms is not None and alg not in algorithms:
166167
raise InvalidAlgorithmError('The specified alg value is not allowed')
167168

168-
if isinstance(leeway, timedelta):
169-
leeway = timedelta_total_seconds(leeway)
170-
171-
if not isinstance(audience, (string_types, type(None))):
172-
raise TypeError('audience must be a string or None')
173-
174169
try:
175170
alg_obj = self._algorithms[alg]
176171
key = alg_obj.prepare_key(key)
@@ -181,6 +176,14 @@ def _verify_signature(self, payload, signing_input, header, signature,
181176
except KeyError:
182177
raise InvalidAlgorithmError('Algorithm not supported')
183178

179+
def _validate_claims(self, payload, verify_expiration=True, leeway=0,
180+
audience=None, issuer=None):
181+
if isinstance(leeway, timedelta):
182+
leeway = timedelta_total_seconds(leeway)
183+
184+
if not isinstance(audience, (string_types, type(None))):
185+
raise TypeError('audience must be a string or None')
186+
184187
if 'iat' in payload:
185188
try:
186189
int(payload['iat'])
@@ -228,6 +231,7 @@ def _verify_signature(self, payload, signing_input, header, signature,
228231
if payload.get('iss') != issuer:
229232
raise InvalidIssuerError('Invalid issuer')
230233

234+
231235
_jwt_global_obj = PyJWT()
232236
encode = _jwt_global_obj.encode
233237
decode = _jwt_global_obj.decode

tests/test_api.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -479,9 +479,6 @@ def test_decode_with_expiration_with_leeway(self):
479479
for leeway in (3, timedelta(seconds=3)):
480480
self.jwt.decode(jwt_message, secret, leeway=leeway)
481481

482-
self.jwt._verify_signature(decoded_payload, signing, header,
483-
signature, secret, leeway=leeway)
484-
485482
# With 1 seconds, should fail
486483
for leeway in (1, timedelta(seconds=1)):
487484
with self.assertRaises(ExpiredSignatureError):

0 commit comments

Comments
 (0)