python-jwt
Advanced tools
| var DOCUMENTATION_OPTIONS = { | ||
| URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), | ||
| VERSION: '3.3.1', | ||
| VERSION: '3.3.2', | ||
| LANGUAGE: 'None', | ||
@@ -5,0 +5,0 @@ COLLAPSE_INDEX: false, |
@@ -8,3 +8,3 @@ | ||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
| <title>Index — python-jwt 3.3.1 documentation</title> | ||
| <title>Index — python-jwt 3.3.2 documentation</title> | ||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | ||
@@ -28,3 +28,3 @@ <link rel="stylesheet" href="_static/nature.css" type="text/css" /> | ||
| >modules</a> |</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.1 documentation</a> »</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.2 documentation</a> »</li> | ||
| <li class="nav-item nav-item-this"><a href="">Index</a></li> | ||
@@ -126,3 +126,3 @@ </ul> | ||
| >modules</a> |</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.1 documentation</a> »</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.2 documentation</a> »</li> | ||
| <li class="nav-item nav-item-this"><a href="">Index</a></li> | ||
@@ -129,0 +129,0 @@ </ul> |
@@ -8,3 +8,3 @@ | ||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
| <title>python_jwt module — python-jwt 3.3.1 documentation</title> | ||
| <title>python_jwt module — python-jwt 3.3.2 documentation</title> | ||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | ||
@@ -28,3 +28,3 @@ <link rel="stylesheet" href="_static/nature.css" type="text/css" /> | ||
| >modules</a> |</li> | ||
| <li class="nav-item nav-item-0"><a href="#">python-jwt 3.3.1 documentation</a> »</li> | ||
| <li class="nav-item nav-item-0"><a href="#">python-jwt 3.3.2 documentation</a> »</li> | ||
| <li class="nav-item nav-item-this"><a href="">python_jwt module</a></li> | ||
@@ -208,3 +208,3 @@ </ul> | ||
| >modules</a> |</li> | ||
| <li class="nav-item nav-item-0"><a href="#">python-jwt 3.3.1 documentation</a> »</li> | ||
| <li class="nav-item nav-item-0"><a href="#">python-jwt 3.3.2 documentation</a> »</li> | ||
| <li class="nav-item nav-item-this"><a href="">python_jwt module</a></li> | ||
@@ -211,0 +211,0 @@ </ul> |
@@ -8,3 +8,3 @@ | ||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
| <title>Python Module Index — python-jwt 3.3.1 documentation</title> | ||
| <title>Python Module Index — python-jwt 3.3.2 documentation</title> | ||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | ||
@@ -35,3 +35,3 @@ <link rel="stylesheet" href="_static/nature.css" type="text/css" /> | ||
| >modules</a> |</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.1 documentation</a> »</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.2 documentation</a> »</li> | ||
| <li class="nav-item nav-item-this"><a href="">Python Module Index</a></li> | ||
@@ -94,3 +94,3 @@ </ul> | ||
| >modules</a> |</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.1 documentation</a> »</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.2 documentation</a> »</li> | ||
| <li class="nav-item nav-item-this"><a href="">Python Module Index</a></li> | ||
@@ -97,0 +97,0 @@ </ul> |
@@ -8,3 +8,3 @@ | ||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
| <title>Search — python-jwt 3.3.1 documentation</title> | ||
| <title>Search — python-jwt 3.3.2 documentation</title> | ||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | ||
@@ -34,3 +34,3 @@ <link rel="stylesheet" href="_static/nature.css" type="text/css" /> | ||
| >modules</a> |</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.1 documentation</a> »</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.2 documentation</a> »</li> | ||
| <li class="nav-item nav-item-this"><a href="">Search</a></li> | ||
@@ -86,3 +86,3 @@ </ul> | ||
| >modules</a> |</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.1 documentation</a> »</li> | ||
| <li class="nav-item nav-item-0"><a href="index.html">python-jwt 3.3.2 documentation</a> »</li> | ||
| <li class="nav-item nav-item-this"><a href="">Search</a></li> | ||
@@ -89,0 +89,0 @@ </ul> |
+1
-1
@@ -55,3 +55,3 @@ # -*- coding: utf-8 -*- | ||
| # The full version, including alpha/beta/rc tags. | ||
| release = '3.3.1' | ||
| release = '3.3.2' | ||
@@ -58,0 +58,0 @@ # The language for content autogenerated by Sphinx. Refer to documentation |
+1
-1
| Metadata-Version: 2.1 | ||
| Name: python_jwt | ||
| Version: 3.3.1 | ||
| Version: 3.3.2 | ||
| Summary: Module for generating and verifying JSON Web Tokens | ||
@@ -5,0 +5,0 @@ Home-page: https://github.com/davedoesdev/python-jwt |
| Metadata-Version: 2.1 | ||
| Name: python-jwt | ||
| Version: 3.3.1 | ||
| Version: 3.3.2 | ||
| Summary: Module for generating and verifying JSON Web Tokens | ||
@@ -5,0 +5,0 @@ Home-page: https://github.com/davedoesdev/python-jwt |
+1
-1
@@ -9,3 +9,3 @@ import os | ||
| name='python_jwt', | ||
| version='3.3.1', | ||
| version='3.3.2', | ||
| description="Module for generating and verifying JSON Web Tokens", | ||
@@ -12,0 +12,0 @@ long_description=read('README.md'), |
+2
-2
@@ -35,3 +35,3 @@ /*jslint node: true */ | ||
| async function verify(time, sjwt, iat_skew, key, alg) { | ||
| const { header, payload } = jwtVerify(sjwt, await import_key(key, alg), { | ||
| const { protectedHeader, payload } = await jwtVerify(sjwt, await import_key(key, alg), { | ||
| algorithms: [ alg ], | ||
@@ -41,3 +41,3 @@ clockTolerance: iat_skew, | ||
| }); | ||
| process.stdout.write(JSON.stringify([header, payload])); | ||
| process.stdout.write(JSON.stringify([protectedHeader, payload])); | ||
| } | ||
@@ -44,0 +44,0 @@ |
+79
-52
@@ -22,3 +22,3 @@ """ test generation and verification of tokens """ | ||
| #pylint: disable=R0912 | ||
| #pylint: disable=R0912,too-many-locals,too-many-statements | ||
| def _setup(alg, priv_type, pub_type, exp, iat_skew, nbf, jti_size, keyless, expected): | ||
@@ -30,2 +30,47 @@ """ setup tests """ | ||
| tick = timedelta(milliseconds=15000 if pub_type == 'jose' and exp < iat_skew else 1500) | ||
| class ClaimsChecker(Vows.Context): | ||
| """ Check claims in token """ | ||
| def topic(self, token): | ||
| """ Get just the claims """ | ||
| _, claims = token | ||
| return claims | ||
| def payload_keys_should_be_as_expected(self, claims): | ||
| """ Check keys """ | ||
| expect(list(claims.keys())).to_be_like(keys if jti_size or callable(privk) else [key for key in keys if key != 'jti']) | ||
| def payload_values_should_match(self, claims): | ||
| """ Check values """ | ||
| for x in payload: #pylint: disable=consider-using-dict-items | ||
| expect(claims[x]).to_equal(payload[x]) | ||
| def jti_size_should_be_as_expected(self, claims): | ||
| """ Check jti size """ | ||
| if jti_size and not callable(privk): # don't assume format of externally-generated JTIs | ||
| expect(len(base64url_decode(claims['jti']))).to_equal(jti_size) | ||
| class UniqueClaimsChecker(ClaimsChecker): | ||
| """ Check JTIs in token are unique """ | ||
| def jtis_should_be_unique(self, claims): | ||
| """ Check jtis """ | ||
| if jti_size or callable(privk): | ||
| expect(is_string(claims['jti'])).to_be_true() | ||
| expect(jtis).Not.to_include(claims['jti']) | ||
| jtis[claims['jti']] = True | ||
| class HeaderChecker(Vows.Context): | ||
| """ Check header in token """ | ||
| def topic(self, token): | ||
| """ Get just the header """ | ||
| header, _ = token | ||
| return header | ||
| def header_should_be_as_expected(self, header): | ||
| """ Check header """ | ||
| expect(header).to_equal({ | ||
| 'alg': 'none' if keyless else alg, | ||
| 'typ': 'JWT' | ||
| }) | ||
| @Vows.batch #pylint: disable=unused-variable | ||
@@ -66,37 +111,8 @@ class GenerateJWT(Vows.Context): #pylint: disable=unused-variable | ||
| class CheckClaims(Vows.Context): | ||
| """ Check claims in token """ | ||
| def topic(self, token): | ||
| """ Get just the claims """ | ||
| _, claims = token | ||
| return claims | ||
| def payload_keys_should_be_as_expected(self, claims): | ||
| """ Check keys """ | ||
| expect(list(claims.keys())).to_be_like(keys if jti_size or callable(privk) else [key for key in keys if key != 'jti']) | ||
| def payload_values_should_match(self, claims): | ||
| """ Check values """ | ||
| for x in payload: #pylint: disable=consider-using-dict-items | ||
| expect(claims[x]).to_equal(payload[x]) | ||
| def jtis_should_be_unique(self, claims): | ||
| """ Check jtis """ | ||
| if jti_size or callable(privk): | ||
| expect(is_string(claims['jti'])).to_be_true() | ||
| expect(jtis).Not.to_include(claims['jti']) | ||
| jtis[claims['jti']] = True | ||
| def jti_size_should_be_as_expected(self, claims): | ||
| """ Check jti size """ | ||
| if jti_size and not callable(privk): # don't assume format of externally-generated JTIs | ||
| expect(len(base64url_decode(claims['jti']))).to_equal(jti_size) | ||
| def header_should_be_as_expected(self, token): | ||
| class CheckClaims(UniqueClaimsChecker): | ||
| """ Check claims """ | ||
| pass | ||
| class CheckHeader(HeaderChecker): | ||
| """ Check header """ | ||
| header, _ = token | ||
| expect(header).to_equal({ | ||
| 'alg': 'none' if keyless else alg, | ||
| 'typ': 'JWT' | ||
| }) | ||
| pass | ||
@@ -111,10 +127,20 @@ class VerifyJWTWithGeneratedKey(Vows.Context): | ||
| pubk = None if keyless else generated_keys[alg] | ||
| return jwt.verify_jwt(sjwt, pubk, ['none'] if keyless else [alg], | ||
| timedelta(seconds=iat_skew)) | ||
| try: | ||
| return jwt.verify_jwt(sjwt, pubk, ['none'] if keyless else [alg], | ||
| timedelta(seconds=iat_skew)) | ||
| except: | ||
| if keyless and expected: | ||
| print(alg, priv_type, pub_type, exp, iat_skew, nbf, keyless, expected) | ||
| raise | ||
| def should_fail_to_verify(self, r): | ||
| """ Should fail to verify with minted key """ | ||
| if keyless and expected: | ||
| expect(r).to_be_instance_of(tuple) | ||
| else: | ||
| if keyless and expected: | ||
| class CheckClaims(ClaimsChecker): | ||
| """ Check claims """ | ||
| pass | ||
| class CheckHeader(HeaderChecker): | ||
| """ Check header """ | ||
| pass | ||
| else: | ||
| def should_fail_to_verify(self, r): | ||
| """ Should fail to verify with minted key """ | ||
| expect(r).to_be_an_error() | ||
@@ -134,12 +160,13 @@ | ||
| def should_verify_as_expected(self, r): | ||
| """ Check verified or not, as per expected arg """ | ||
| try: | ||
| if expected: | ||
| expect(r).to_be_instance_of(tuple) | ||
| else: | ||
| expect(r).to_be_an_error() | ||
| except: | ||
| print(alg, priv_type, pub_type, exp, iat_skew, nbf, keyless, expected) | ||
| raise | ||
| if expected: | ||
| class CheckClaims(ClaimsChecker): | ||
| """ Check claims """ | ||
| pass | ||
| class CheckHeader(HeaderChecker): | ||
| """ Check header """ | ||
| pass | ||
| else: | ||
| def should_fail_to_verify(self, r): | ||
| """ Should fail to verify, per expected arg """ | ||
| expect(r).to_be_an_error() | ||
@@ -146,0 +173,0 @@ #pylint: disable=W0621,dangerous-default-value |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
1041832
0.22%15144
0.16%