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.
Files changed (101) hide show
  1. {jamlib-3.0.0b11.dev0/src/jamlib.egg-info → jamlib-3.0.0b12.dev1}/PKG-INFO +1 -1
  2. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/pyproject.toml +1 -1
  3. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/__init__.py +1 -1
  4. jamlib-3.0.0b12.dev1/src/jam/ext/litestar/__init__.py +23 -0
  5. jamlib-3.0.0b12.dev1/src/jam/ext/litestar/middleware.py +50 -0
  6. jamlib-3.0.0b12.dev1/src/jam/ext/litestar/objects.py +44 -0
  7. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/litestar/plugins.py +32 -6
  8. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1/src/jamlib.egg-info}/PKG-INFO +1 -1
  9. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jamlib.egg-info/SOURCES.txt +2 -0
  10. jamlib-3.0.0b11.dev0/src/jam/ext/litestar/__init__.py +0 -7
  11. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/LICENSE.md +0 -0
  12. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/README.md +0 -0
  13. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/setup.cfg +0 -0
  14. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/__base__.py +0 -0
  15. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/__base_encoder__.py +0 -0
  16. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/__deprecated__.py +0 -0
  17. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/__base__.py +0 -0
  18. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/__init__.py +0 -0
  19. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/instance.py +0 -0
  20. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/jwt/__init__.py +0 -0
  21. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/__base__.py +0 -0
  22. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/__init__.py +0 -0
  23. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/builtin/__init__.py +0 -0
  24. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/builtin/github.py +0 -0
  25. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/builtin/gitlab.py +0 -0
  26. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/builtin/google.py +0 -0
  27. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/builtin/yandex.py +0 -0
  28. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/oauth2/client.py +0 -0
  29. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/sessions/__base__.py +0 -0
  30. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/sessions/__init__.py +0 -0
  31. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/sessions/json.py +0 -0
  32. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/aio/sessions/redis.py +0 -0
  33. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/encoders.py +0 -0
  34. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/__init__.py +0 -0
  35. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/base.py +0 -0
  36. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/jwt.py +0 -0
  37. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/oauth2.py +0 -0
  38. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/paseto.py +0 -0
  39. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/plugins.py +0 -0
  40. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/exceptions/sessions.py +0 -0
  41. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/__init__.py +0 -0
  42. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/fastapi/__init__.py +0 -0
  43. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/flask/__init__.py +0 -0
  44. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/flask/extensions.py +0 -0
  45. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/starlette/__init__.py +0 -0
  46. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/starlette/auth_backends.py +0 -0
  47. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/ext/starlette/value.py +0 -0
  48. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/instance.py +0 -0
  49. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/__algorithms__.py +0 -0
  50. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/__base__.py +0 -0
  51. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/__init__.py +0 -0
  52. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/__types__.py +0 -0
  53. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/lists/__abc_list_repo__.py +0 -0
  54. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/lists/__init__.py +0 -0
  55. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/lists/json.py +0 -0
  56. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/lists/redis.py +0 -0
  57. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/module.py +0 -0
  58. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/jwt/utils.py +0 -0
  59. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/logger.py +0 -0
  60. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/__base__.py +0 -0
  61. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/__init__.py +0 -0
  62. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/builtin/__init__.py +0 -0
  63. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/builtin/github.py +0 -0
  64. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/builtin/gitlab.py +0 -0
  65. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/builtin/google.py +0 -0
  66. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/builtin/yandex.py +0 -0
  67. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/oauth2/client.py +0 -0
  68. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/otp/__base__.py +0 -0
  69. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/otp/__init__.py +0 -0
  70. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/otp/hotp.py +0 -0
  71. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/otp/totp.py +0 -0
  72. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/__base__.py +0 -0
  73. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/__init__.py +0 -0
  74. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/utils.py +0 -0
  75. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/v1.py +0 -0
  76. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/v2.py +0 -0
  77. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/v3.py +0 -0
  78. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/paseto/v4.py +0 -0
  79. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/py.typed +0 -0
  80. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/sessions/__base__.py +0 -0
  81. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/sessions/__init__.py +0 -0
  82. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/sessions/json.py +0 -0
  83. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/sessions/redis.py +0 -0
  84. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/tests/__init__.py +0 -0
  85. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/tests/clients.py +0 -0
  86. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/tests/fakers.py +0 -0
  87. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/__init__.py +0 -0
  88. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/aes.py +0 -0
  89. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/await_maybe.py +0 -0
  90. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/basic_auth.py +0 -0
  91. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/config_maker.py +0 -0
  92. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/ed.py +0 -0
  93. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/otp_keys.py +0 -0
  94. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/rsa.py +0 -0
  95. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/salt_hash.py +0 -0
  96. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/symmetric.py +0 -0
  97. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/xchacha20poly1305.py +0 -0
  98. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jam/utils/xor.py +0 -0
  99. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jamlib.egg-info/dependency_links.txt +0 -0
  100. {jamlib-3.0.0b11.dev0 → jamlib-3.0.0b12.dev1}/src/jamlib.egg-info/requires.txt +0 -0
  101. {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.0b11.dev0
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "jamlib"
3
- version = "3.0.0b11.dev0"
3
+ version = "3.0.0b12.dev1"
4
4
  description = "Simple and universal library for authorization."
5
5
  authors = [
6
6
  {name = "Makridenko Adrian",email = "adrianmakridenko@duck.com"},
@@ -12,5 +12,5 @@ from jam.encoders import JsonEncoder
12
12
  from jam.instance import Jam
13
13
 
14
14
 
15
- __version__ = "3.0.0b10.dev0"
15
+ __version__ = "3.0.0b12.dev1"
16
16
  __all__ = ["Jam", "JsonEncoder", "BaseJam", "BaseEncoder"]
@@ -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
- _AUTH_MODULE: Callable
19
+ MODULE: Callable
19
20
 
20
21
  def _setup_config(self, config: dict[str, Any]) -> None:
21
- self._auth = self._AUTH_MODULE(**config)
22
+ self._auth = self.MODULE(**config)
22
23
 
23
24
 
24
25
  class JamJWTPlugin(BasePlugin):
25
26
  """JWT plugin for litestar."""
26
27
 
27
- _AUTH_MODULE = JWT
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
- (__config_maker__(config, pointer)) if config else None
57
+ __config_maker__(config, pointer) if config else None
48
58
  )
49
59
 
50
- def on_app_init(self, app_config: AppConfig) -> AppConfig: # noqa: D102
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.0b11.dev0
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
@@ -1,7 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """
4
- Litestar integration.
5
-
6
- Litestar docs: https://docs.litestar.dev
7
- """
File without changes
File without changes