dj-jwt-auth 1.5.6__py3-none-any.whl → 1.5.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dj-jwt-auth
3
- Version: 1.5.6
3
+ Version: 1.5.8
4
4
  Summary: A Django package for JSON Web Token validation and verification. Using PyJWT.
5
5
  Home-page: https://www.example.com/
6
6
  Author: Konstantin Seleznev
@@ -2,20 +2,20 @@ django_jwt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  django_jwt/config.py,sha256=-9JkGjMXRVNmQYPvrEwaoJacu068nySNfjMyo5DtXcw,1550
3
3
  django_jwt/exceptions.py,sha256=vFJcGOCSZvxJRbSeMgWgPUM9wcXu6CSHblpwMzhV-Ic,198
4
4
  django_jwt/middleware.py,sha256=4PiF0-v13aLjvTyeyumQqYFimb6gCDHBgm6KooPGZdM,1176
5
- django_jwt/pkce.py,sha256=HYIQI0vKSmQkYIqTj3cciIT01ldkjhqlYiXkYcnNSGc,711
5
+ django_jwt/pkce.py,sha256=j-v2ffCw0X3JW7ak8vfNeSZI-dACOvHbi1eLmJ0R8gM,685
6
6
  django_jwt/roles.py,sha256=SaHK3o8T8USS4ZhG4SrHPlZQV2lMb2t1UZHT6IQtBvA,143
7
- django_jwt/settings.py,sha256=4mc8daSDKs3uYlRJBuS4CP7_CtKD3VrLWvaBjJ6yJV8,1837
7
+ django_jwt/settings.py,sha256=pXQ8WUU4LGBe6PQxCLTLM_2_b1CCSgehqim3yJDqZdw,1922
8
8
  django_jwt/urls.py,sha256=ZhcnRcQ1MBRh-bS7fTa-Vkz8yuWUhv-G_uRXKLnKAs0,320
9
- django_jwt/user.py,sha256=lQ7AIdI4J-d2e1oCQIIyQKnXtjqCYD14e4WOhF2LbYs,5292
10
- django_jwt/utils.py,sha256=Gz8cH0cD3y_cvW8FwRoCFgShBrYvcB7XBF0GWx0n2qQ,1485
11
- django_jwt/views.py,sha256=MDuMPzmEAjWR6lB8ZyiozAJYH49MaiYeztE1we_u-9M,4352
9
+ django_jwt/user.py,sha256=FZLspkoCcVbT9Nsdg7B6yjI3stx19HMlOyRcBFjHnrs,5290
10
+ django_jwt/utils.py,sha256=uIFw1JMldE_blC7YkaZbY7rpcawP2E6zsdLyuZRwJoA,1645
11
+ django_jwt/views.py,sha256=jQW3YrW-Oed54KqxjDMaBOQ-dxEnqTAcBEXlQSK-zCE,4231
12
12
  django_jwt/templates/django-jwt-index.html,sha256=y8f0v2WbRAFxnIU799I_MZCVsjn1sbdh7bypjdWB0lA,1353
13
13
  django_jwt/templates/admin/login.html,sha256=Nihyu0IGvDDZVvQDITXozwlj6XCQ0B8gqlyHLqVNyJc,275
14
14
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  tests/models.py,sha256=4uonwXuAvJGlITpuxFazyoeA_CSUYMyN7Vj1gEWJTH4,308
16
16
  tests/test.py,sha256=nD1sm_nH0l9ADnwavySPdhgrNOvLX7nLYol7w306TFU,9720
17
17
  tests/urls.py,sha256=D5FhDSVAudurkrpkCZZPnDvgXSgifwFVB3nAlYBg7uQ,212
18
- dj_jwt_auth-1.5.6.dist-info/METADATA,sha256=jgfJxaxVrgPgzLwbR4xR7_ofMjYRosK78hmePUR0qVM,4369
19
- dj_jwt_auth-1.5.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
20
- dj_jwt_auth-1.5.6.dist-info/top_level.txt,sha256=58O7TdK-yECZcbmPc52KNlBFpjIUlENuZubCxaSOxus,17
21
- dj_jwt_auth-1.5.6.dist-info/RECORD,,
18
+ dj_jwt_auth-1.5.8.dist-info/METADATA,sha256=KRwEjwyLJwXqsg9F4YbxC1AjbGZ2Dduk06NnAaAj4n8,4369
19
+ dj_jwt_auth-1.5.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
20
+ dj_jwt_auth-1.5.8.dist-info/top_level.txt,sha256=58O7TdK-yECZcbmPc52KNlBFpjIUlENuZubCxaSOxus,17
21
+ dj_jwt_auth-1.5.8.dist-info/RECORD,,
django_jwt/pkce.py CHANGED
@@ -1,14 +1,14 @@
1
1
  import base64
2
2
  import hashlib
3
- import random
4
- import string
3
+
4
+ from django_jwt.utils import get_random_string
5
5
 
6
6
 
7
7
  class PKCESecret:
8
8
  """PKCE secret."""
9
9
 
10
10
  def __init__(self, length: int = 128):
11
- self.value = "".join(random.choices(string.ascii_letters + string.digits, k=length))
11
+ self.value = get_random_string(length)
12
12
 
13
13
  def __str__(self) -> str:
14
14
  return self.value
django_jwt/settings.py CHANGED
@@ -42,8 +42,11 @@ OIDC_ADMIN_ISSUER = getattr(settings, "OIDC_ADMIN_ISSUER", None)
42
42
  OIDC_ADMIN_CLIENT_ID = getattr(settings, "OIDC_ADMIN_CLIENT_ID", "cs-completeanatomy-admin")
43
43
  OIDC_ADMIN_SCOPE = getattr(settings, "OIDC_ADMIN_SCOPE", "openid")
44
44
  OIDC_ADMIN_ROLES = getattr(settings, "OIDC_ADMIN_ROLES", [])
45
+ OIDC_ADMIN_REDIRECT_URI = getattr(settings, "OIDC_ADMIN_REDIRECT_URI", None)
45
46
  OIDC_AUTHORIZATION_BACKEND = getattr(
46
- settings, "OIDC_AUTHORIZATION_BACKEND", "django.contrib.auth.backends.ModelBackend",
47
+ settings,
48
+ "OIDC_AUTHORIZATION_BACKEND",
49
+ "django.contrib.auth.backends.ModelBackend",
47
50
  )
48
51
 
49
52
  if not OIDC_ADMIN_ISSUER:
django_jwt/user.py CHANGED
@@ -43,7 +43,7 @@ class UserHandler:
43
43
  """Collect user data from KeyCloak"""
44
44
 
45
45
  user_data = oidc_handler.get_user_info(self.access_token)
46
- log.info(f"User data: {self.kwargs}, access_token: {self.access_token}")
46
+ log.info(f"User data: {user_data}, access_token: {self.access_token}")
47
47
  self.kwargs["email"] = user_data["email"].lower()
48
48
  self.kwargs.update(mapper(user_data))
49
49
 
django_jwt/utils.py CHANGED
@@ -1,5 +1,7 @@
1
1
  import base64
2
2
  import json
3
+ import random
4
+ import string
3
5
 
4
6
  import jwt
5
7
  import requests
@@ -8,6 +10,10 @@ from django_jwt import settings
8
10
  from django_jwt.config import config
9
11
 
10
12
 
13
+ def get_random_string(k: int = 32) -> str:
14
+ return "".join(random.choices(string.ascii_letters + string.digits + "-._~", k=k))
15
+
16
+
11
17
  def get_alg(token: str) -> str:
12
18
  header = json.loads(base64.b64decode(token.split(".")[0] + "==="))
13
19
  return header["alg"]
django_jwt/views.py CHANGED
@@ -1,10 +1,7 @@
1
1
  import base64
2
- import random
3
- import string
4
2
  from logging import getLogger
5
3
  from urllib.parse import urlencode
6
4
 
7
- from django.conf import settings
8
5
  from django.contrib.auth import login
9
6
  from django.core.cache import cache
10
7
  from django.http.response import HttpResponse
@@ -18,7 +15,7 @@ from django_jwt.config import config
18
15
  from django_jwt.exceptions import BadRequestException, ConfigException
19
16
  from django_jwt.pkce import PKCESecret
20
17
  from django_jwt.user import UserHandler, role_handler
21
- from django_jwt.utils import get_access_token, oidc_handler
18
+ from django_jwt.utils import get_access_token, get_random_string, oidc_handler
22
19
 
23
20
  log = getLogger(__name__)
24
21
 
@@ -60,12 +57,11 @@ class AbsView(View):
60
57
  class StartOIDCAuthView(AbsView):
61
58
  def get(self, request):
62
59
  pkce_secret = PKCESecret()
63
- redirect_uri = request.build_absolute_uri(reverse("receive_redirect_view"))
60
+ redirect_uri = jwt_settings.OIDC_ADMIN_REDIRECT_URI
61
+ if not redirect_uri:
62
+ redirect_uri = request.build_absolute_uri(reverse("receive_redirect_view"))
64
63
  authorization_endpoint = config.admin().get("authorization_endpoint")
65
- state = base64.urlsafe_b64encode(
66
- "".join(random.choices(string.ascii_letters + string.digits + "-._~", k=32)).encode()
67
- ).decode()
68
- random_nonce = "".join(random.choices(string.ascii_letters + string.digits + "-._~", k=32))
64
+ state = base64.urlsafe_b64encode(get_random_string().encode()).decode()
69
65
  params = {
70
66
  "client_id": jwt_settings.OIDC_ADMIN_CLIENT_ID,
71
67
  "redirect_uri": redirect_uri,
@@ -75,7 +71,7 @@ class StartOIDCAuthView(AbsView):
75
71
  "code_challenge": pkce_secret.challenge,
76
72
  "code_challenge_method": pkce_secret.challenge_method,
77
73
  "ui_locales": "en",
78
- "nonce": random_nonce,
74
+ "nonce": get_random_string(),
79
75
  }
80
76
  cache.set(state, str(pkce_secret), timeout=600)
81
77
  log.info(f"OIDC Admin login: {authorization_endpoint}?{urlencode(params)}")