jamlib 2.5.0a2.dev1__tar.gz → 2.5.0a2.dev2__tar.gz
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.
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/PKG-INFO +1 -1
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/__init__.py +1 -1
- jamlib-2.5.0a2.dev2/jam/ext/fastapi/__init__.py +11 -0
- jamlib-2.5.0a2.dev2/jam/ext/starlette/__init__.py +12 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/starlette/auth_backends.py +49 -1
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jamlib.egg-info/PKG-INFO +1 -1
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/pyproject.toml +1 -1
- jamlib-2.5.0a2.dev1/jam/ext/fastapi/__init__.py +0 -6
- jamlib-2.5.0a2.dev1/jam/ext/starlette/__init__.py +0 -7
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/LICENSE.md +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/README.md +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/__abc_instances__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/__logger__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/instance.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/jwt/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/jwt/lists/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/jwt/lists/json.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/jwt/lists/redis.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/jwt/tools.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/modules.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/builtin/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/builtin/github.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/builtin/gitlab.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/builtin/google.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/builtin/yandex.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/client.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/sessions/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/sessions/json.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/sessions/redis.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/exceptions/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/exceptions/jwt.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/exceptions/oauth2.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/exceptions/sessions.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/litestar/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/litestar/middlewares.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/litestar/plugins.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/litestar/value.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/starlette/value.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/instance.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/__utils__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/lists/__abc_list_repo__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/lists/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/lists/json.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/lists/redis.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/tools.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/types.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/modules.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/__abc_oauth2_repo__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/builtin/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/builtin/github.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/builtin/gitlab.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/builtin/google.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/builtin/yandex.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/client.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/otp/__abc_module__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/otp/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/otp/hotp.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/otp/totp.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/quick/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/quick/jwt.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/sessions/__abc_session_repo__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/sessions/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/sessions/json.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/sessions/redis.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/tests/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/tests/clients.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/tests/fakers.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/__init__.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/aes.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/await_maybe.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/config_maker.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/deprecated.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/otp_keys.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/rsa.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/salt_hash.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/xor.py +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jamlib.egg-info/SOURCES.txt +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jamlib.egg-info/dependency_links.txt +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jamlib.egg-info/requires.txt +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jamlib.egg-info/top_level.txt +0 -0
- {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jamlib
|
|
3
|
-
Version: 2.5.0a2.
|
|
3
|
+
Version: 2.5.0a2.dev2
|
|
4
4
|
Summary: Simple and universal library for authorization.
|
|
5
5
|
Author-email: Makridenko Adrian <adrianmakridenko@duck.com>, Ksenia Travnikova <kseniatravnikova@duck.com>
|
|
6
6
|
License: MIT License
|
|
@@ -23,7 +23,7 @@ class JWTBackend(AuthenticationBackend):
|
|
|
23
23
|
def __init__(
|
|
24
24
|
self,
|
|
25
25
|
jam: BaseJam,
|
|
26
|
-
cookie_name: Optional[str],
|
|
26
|
+
cookie_name: Optional[str] = None,
|
|
27
27
|
header_name: Optional[str] = "Authorization",
|
|
28
28
|
) -> None:
|
|
29
29
|
"""Constructor.
|
|
@@ -66,3 +66,51 @@ class JWTBackend(AuthenticationBackend):
|
|
|
66
66
|
raise AuthenticationError("Token verification failed.")
|
|
67
67
|
|
|
68
68
|
return AuthCredentials(["authenticated"]), Payload(payload=payload)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class SessionBackend(AuthenticationBackend):
|
|
72
|
+
"""Sessions backend for starlette."""
|
|
73
|
+
|
|
74
|
+
def __init__(
|
|
75
|
+
self,
|
|
76
|
+
jam: BaseJam,
|
|
77
|
+
cookie_name: Optional[str] = "sessionId",
|
|
78
|
+
header_name: Optional[str] = None,
|
|
79
|
+
) -> None:
|
|
80
|
+
"""Constructor.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
jam (BaseJam): Jam instance
|
|
84
|
+
cookie_name (str | None): Session id cookie name
|
|
85
|
+
header_name (str | None): Session id header name
|
|
86
|
+
"""
|
|
87
|
+
self._jam = jam
|
|
88
|
+
self.cookie_name = cookie_name
|
|
89
|
+
self.header_name = header_name
|
|
90
|
+
|
|
91
|
+
async def authenticate(
|
|
92
|
+
self, conn: HTTPConnection
|
|
93
|
+
) -> Optional[tuple[AuthCredentials, BaseUser]]:
|
|
94
|
+
"""Starlette authentication handler."""
|
|
95
|
+
session_id = None
|
|
96
|
+
|
|
97
|
+
if self.cookie_name:
|
|
98
|
+
session_id = conn.cookies.get(self.cookie_name)
|
|
99
|
+
|
|
100
|
+
if not session_id and self.header_name:
|
|
101
|
+
header = conn.headers.get(self.header_name)
|
|
102
|
+
if header and header.startswith("Bearer "):
|
|
103
|
+
session_id = header.split("Bearer ")[1]
|
|
104
|
+
|
|
105
|
+
if not session_id:
|
|
106
|
+
return None
|
|
107
|
+
|
|
108
|
+
try:
|
|
109
|
+
payload: dict[str, Any] = await await_maybe(
|
|
110
|
+
self._jam.get_session(session_id)
|
|
111
|
+
)
|
|
112
|
+
except Exception as e:
|
|
113
|
+
logger.warning(f"Token verify error: {e}")
|
|
114
|
+
raise AuthenticationError("Token verification failed.")
|
|
115
|
+
|
|
116
|
+
return AuthCredentials(["authenticated"]), Payload(payload=payload)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jamlib
|
|
3
|
-
Version: 2.5.0a2.
|
|
3
|
+
Version: 2.5.0a2.dev2
|
|
4
4
|
Summary: Simple and universal library for authorization.
|
|
5
5
|
Author-email: Makridenko Adrian <adrianmakridenko@duck.com>, Ksenia Travnikova <kseniatravnikova@duck.com>
|
|
6
6
|
License: MIT License
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|