jamlib 3.0.0b11.dev0__tar.gz → 3.0.0b12.dev1__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-3.0.0b11.dev0/src/jamlib.egg-info → jamlib-3.0.0b12.dev1}/PKG-INFO +1 -1
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/pyproject.toml +1 -1
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/__init__.py +1 -1
- jamlib-3.0.0b12.dev1/src/jam/ext/litestar/__init__.py +23 -0
- jamlib-3.0.0b12.dev1/src/jam/ext/litestar/middleware.py +50 -0
- jamlib-3.0.0b12.dev1/src/jam/ext/litestar/objects.py +44 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/litestar/plugins.py +32 -6
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1/src/jamlib.egg-info}/PKG-INFO +1 -1
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jamlib.egg-info/SOURCES.txt +2 -0
- jamlib-3.0.0b11.dev0/src/jam/ext/litestar/__init__.py +0 -7
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/LICENSE.md +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/README.md +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/setup.cfg +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/__base__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/__base_encoder__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/__deprecated__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/__base__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/instance.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/jwt/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/__base__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/builtin/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/builtin/github.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/builtin/gitlab.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/builtin/google.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/builtin/yandex.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/client.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/sessions/__base__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/sessions/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/sessions/json.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/sessions/redis.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/encoders.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/base.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/jwt.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/oauth2.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/paseto.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/plugins.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/sessions.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/fastapi/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/flask/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/flask/extensions.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/starlette/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/starlette/auth_backends.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/starlette/value.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/instance.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/__algorithms__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/__base__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/__types__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/lists/__abc_list_repo__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/lists/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/lists/json.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/lists/redis.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/module.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/utils.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/logger.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/__base__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/builtin/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/builtin/github.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/builtin/gitlab.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/builtin/google.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/builtin/yandex.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/client.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/otp/__base__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/otp/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/otp/hotp.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/otp/totp.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/__base__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/utils.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/v1.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/v2.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/v3.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/v4.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/py.typed +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/sessions/__base__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/sessions/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/sessions/json.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/sessions/redis.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/tests/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/tests/clients.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/tests/fakers.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/__init__.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/aes.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/await_maybe.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/basic_auth.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/config_maker.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/ed.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/otp_keys.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/rsa.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/salt_hash.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/symmetric.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/xchacha20poly1305.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/xor.py +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jamlib.egg-info/dependency_links.txt +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jamlib.egg-info/requires.txt +0 -0
- {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jamlib.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jamlib
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.0b12.dev1
|
|
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: Apache-2.0
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Litestar integration.
|
|
5
|
+
|
|
6
|
+
Litestar docs: https://docs.litestar.dev
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from .objects import (
|
|
10
|
+
BaseUser,
|
|
11
|
+
SimpleUser,
|
|
12
|
+
Token
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
from .plugins import BasePlugin, JamJWTPlugin
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"BaseUser",
|
|
19
|
+
"SimpleUser",
|
|
20
|
+
"Token",
|
|
21
|
+
"BasePlugin",
|
|
22
|
+
"JamJWTPlugin",
|
|
23
|
+
]
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
from litestar.connection import ASGIConnection
|
|
4
|
+
from litestar.middleware import (
|
|
5
|
+
AbstractAuthenticationMiddleware,
|
|
6
|
+
AuthenticationResult,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
from jam.exceptions import JamLitestarPluginConfigError
|
|
10
|
+
from jam.ext.litestar.objects import BaseUser, Token
|
|
11
|
+
from jam.jwt import JWT
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class JWTMiddleware(AbstractAuthenticationMiddleware):
|
|
15
|
+
"""Middleware created by jam plugin."""
|
|
16
|
+
|
|
17
|
+
HEADER_NAME: str | None
|
|
18
|
+
COOKIE_NAME: str | None
|
|
19
|
+
AUTH_MODULE: JWT
|
|
20
|
+
USER: type[BaseUser]
|
|
21
|
+
|
|
22
|
+
def __get_auth_token(self, connection: ASGIConnection) -> str | None:
|
|
23
|
+
if self.HEADER_NAME:
|
|
24
|
+
token = connection.headers.get(self.HEADER_NAME, None)
|
|
25
|
+
elif self.COOKIE_NAME:
|
|
26
|
+
token = connection.cookies.get(self.COOKIE_NAME, None)
|
|
27
|
+
else:
|
|
28
|
+
raise JamLitestarPluginConfigError(
|
|
29
|
+
message="No header or cookie name provided for JWT authentication.",
|
|
30
|
+
details={
|
|
31
|
+
"header_name": self.HEADER_NAME,
|
|
32
|
+
"cookie_name": self.COOKIE_NAME,
|
|
33
|
+
},
|
|
34
|
+
)
|
|
35
|
+
return token
|
|
36
|
+
|
|
37
|
+
async def authenticate_request( # noqa
|
|
38
|
+
self, connection: ASGIConnection
|
|
39
|
+
) -> AuthenticationResult:
|
|
40
|
+
token = self.__get_auth_token(connection)
|
|
41
|
+
token_model = Token(token=token)
|
|
42
|
+
if not token:
|
|
43
|
+
return AuthenticationResult(None, auth=token_model)
|
|
44
|
+
try:
|
|
45
|
+
data = self.AUTH_MODULE.decode(token)
|
|
46
|
+
user = self.USER.from_payload(data)
|
|
47
|
+
|
|
48
|
+
return AuthenticationResult(user, token_model)
|
|
49
|
+
except Exception:
|
|
50
|
+
raise Exception # TODO: нормальная ошибка
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from typing import Any, TypeVar
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
User = TypeVar("User", bound="BaseUser")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclass(slots=True)
|
|
14
|
+
class Token:
|
|
15
|
+
"""Data for Authresult."""
|
|
16
|
+
|
|
17
|
+
token: str | None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class BaseUser(ABC):
|
|
22
|
+
"""Abstract user model for AuthResult."""
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
@abstractmethod
|
|
26
|
+
def from_payload(cls, payload: dict[str, Any]) -> User:
|
|
27
|
+
"""Build model from payload.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
payload (dict[str, Any]): Payload for your data.
|
|
31
|
+
"""
|
|
32
|
+
raise NotImplementedError
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@dataclass
|
|
36
|
+
class SimpleUser(BaseUser):
|
|
37
|
+
"""Simple user with payload."""
|
|
38
|
+
|
|
39
|
+
payload: dict[str, Any]
|
|
40
|
+
|
|
41
|
+
@classmethod
|
|
42
|
+
def from_payload(cls, payload: dict[str, Any]) -> SimpleUser:
|
|
43
|
+
"""Set payload=payload."""
|
|
44
|
+
return cls(payload)
|
|
@@ -8,6 +8,7 @@ from litestar.di import Provide
|
|
|
8
8
|
from litestar.plugins import InitPlugin
|
|
9
9
|
|
|
10
10
|
from jam.exceptions import JamLitestarPluginConfigError
|
|
11
|
+
from jam.ext.litestar.objects import BaseUser
|
|
11
12
|
from jam.jwt import JWT
|
|
12
13
|
from jam.utils.config_maker import GENERIC_POINTER, __config_maker__
|
|
13
14
|
|
|
@@ -15,16 +16,16 @@ from jam.utils.config_maker import GENERIC_POINTER, __config_maker__
|
|
|
15
16
|
class BasePlugin(InitPlugin):
|
|
16
17
|
"""Base Litestar plugin."""
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
MODULE: Callable
|
|
19
20
|
|
|
20
21
|
def _setup_config(self, config: dict[str, Any]) -> None:
|
|
21
|
-
self._auth = self.
|
|
22
|
+
self._auth = self.MODULE(**config)
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
class JamJWTPlugin(BasePlugin):
|
|
25
26
|
"""JWT plugin for litestar."""
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
MODULE = JWT
|
|
28
29
|
|
|
29
30
|
def __init__( # noqa
|
|
30
31
|
self,
|
|
@@ -32,9 +33,11 @@ class JamJWTPlugin(BasePlugin):
|
|
|
32
33
|
pointer: str = GENERIC_POINTER,
|
|
33
34
|
cookie_name: str | None = None,
|
|
34
35
|
header_name: str | None = None,
|
|
36
|
+
middleware: bool = True,
|
|
37
|
+
middleware_user: type[BaseUser] | None = None,
|
|
35
38
|
**kwargs,
|
|
36
39
|
) -> None:
|
|
37
|
-
if not cookie_name and not header_name:
|
|
40
|
+
if middleware and (not cookie_name and not header_name):
|
|
38
41
|
raise JamLitestarPluginConfigError(
|
|
39
42
|
message="Cookie name and header name cannot be both None.",
|
|
40
43
|
details={
|
|
@@ -42,13 +45,36 @@ class JamJWTPlugin(BasePlugin):
|
|
|
42
45
|
"header_name": header_name,
|
|
43
46
|
},
|
|
44
47
|
)
|
|
48
|
+
if middleware and not middleware_user:
|
|
49
|
+
raise JamLitestarPluginConfigError(
|
|
50
|
+
message="Middleware user cannot be None when middleware is True.",
|
|
51
|
+
details={
|
|
52
|
+
"middleware_user": middleware_user,
|
|
53
|
+
},
|
|
54
|
+
)
|
|
45
55
|
|
|
46
56
|
_config: dict[str, Any] | None = (
|
|
47
|
-
|
|
57
|
+
__config_maker__(config, pointer) if config else None
|
|
48
58
|
)
|
|
49
59
|
|
|
50
|
-
|
|
60
|
+
self._auth = self.MODULE(**(_config if _config else kwargs))
|
|
61
|
+
self._middleware = None
|
|
62
|
+
|
|
63
|
+
if middleware:
|
|
64
|
+
from jam.ext.litestar.middleware import JWTMiddleware
|
|
65
|
+
|
|
66
|
+
_middleware = JWTMiddleware
|
|
67
|
+
_middleware.COOKIE_NAME = cookie_name
|
|
68
|
+
_middleware.HEADER_NAME = header_name
|
|
69
|
+
_middleware.AUTH_MODULE = self._auth
|
|
70
|
+
_middleware.USER = middleware_user # type: ignore
|
|
71
|
+
self._middleware = _middleware
|
|
72
|
+
|
|
73
|
+
def on_app_init(self, app_config: AppConfig) -> AppConfig: # noqa
|
|
51
74
|
app_config.dependencies["jwt"] = Provide(
|
|
52
75
|
lambda: self._auth, sync_to_thread=True
|
|
53
76
|
)
|
|
77
|
+
app_config.middleware.append(
|
|
78
|
+
self._middleware
|
|
79
|
+
) if self._middleware else None
|
|
54
80
|
return app_config
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jamlib
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.0b12.dev1
|
|
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: Apache-2.0
|
|
@@ -37,6 +37,8 @@ src/jam/ext/fastapi/__init__.py
|
|
|
37
37
|
src/jam/ext/flask/__init__.py
|
|
38
38
|
src/jam/ext/flask/extensions.py
|
|
39
39
|
src/jam/ext/litestar/__init__.py
|
|
40
|
+
src/jam/ext/litestar/middleware.py
|
|
41
|
+
src/jam/ext/litestar/objects.py
|
|
40
42
|
src/jam/ext/litestar/plugins.py
|
|
41
43
|
src/jam/ext/starlette/__init__.py
|
|
42
44
|
src/jam/ext/starlette/auth_backends.py
|
|
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
|
|
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
|