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.
Files changed (86) hide show
  1. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/PKG-INFO +1 -1
  2. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/__init__.py +1 -1
  3. jamlib-2.5.0a2.dev2/jam/ext/fastapi/__init__.py +11 -0
  4. jamlib-2.5.0a2.dev2/jam/ext/starlette/__init__.py +12 -0
  5. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/starlette/auth_backends.py +49 -1
  6. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jamlib.egg-info/PKG-INFO +1 -1
  7. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/pyproject.toml +1 -1
  8. jamlib-2.5.0a2.dev1/jam/ext/fastapi/__init__.py +0 -6
  9. jamlib-2.5.0a2.dev1/jam/ext/starlette/__init__.py +0 -7
  10. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/LICENSE.md +0 -0
  11. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/README.md +0 -0
  12. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/__abc_instances__.py +0 -0
  13. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/__logger__.py +0 -0
  14. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/__init__.py +0 -0
  15. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/instance.py +0 -0
  16. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/jwt/__init__.py +0 -0
  17. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/jwt/lists/__init__.py +0 -0
  18. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/jwt/lists/json.py +0 -0
  19. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/jwt/lists/redis.py +0 -0
  20. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/jwt/tools.py +0 -0
  21. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/modules.py +0 -0
  22. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/__init__.py +0 -0
  23. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/builtin/__init__.py +0 -0
  24. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/builtin/github.py +0 -0
  25. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/builtin/gitlab.py +0 -0
  26. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/builtin/google.py +0 -0
  27. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/builtin/yandex.py +0 -0
  28. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/oauth2/client.py +0 -0
  29. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/sessions/__init__.py +0 -0
  30. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/sessions/json.py +0 -0
  31. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/aio/sessions/redis.py +0 -0
  32. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/exceptions/__init__.py +0 -0
  33. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/exceptions/jwt.py +0 -0
  34. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/exceptions/oauth2.py +0 -0
  35. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/exceptions/sessions.py +0 -0
  36. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/__init__.py +0 -0
  37. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/litestar/__init__.py +0 -0
  38. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/litestar/middlewares.py +0 -0
  39. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/litestar/plugins.py +0 -0
  40. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/litestar/value.py +0 -0
  41. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/ext/starlette/value.py +0 -0
  42. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/instance.py +0 -0
  43. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/__init__.py +0 -0
  44. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/__utils__.py +0 -0
  45. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/lists/__abc_list_repo__.py +0 -0
  46. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/lists/__init__.py +0 -0
  47. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/lists/json.py +0 -0
  48. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/lists/redis.py +0 -0
  49. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/tools.py +0 -0
  50. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/jwt/types.py +0 -0
  51. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/modules.py +0 -0
  52. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/__abc_oauth2_repo__.py +0 -0
  53. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/__init__.py +0 -0
  54. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/builtin/__init__.py +0 -0
  55. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/builtin/github.py +0 -0
  56. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/builtin/gitlab.py +0 -0
  57. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/builtin/google.py +0 -0
  58. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/builtin/yandex.py +0 -0
  59. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/oauth2/client.py +0 -0
  60. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/otp/__abc_module__.py +0 -0
  61. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/otp/__init__.py +0 -0
  62. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/otp/hotp.py +0 -0
  63. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/otp/totp.py +0 -0
  64. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/quick/__init__.py +0 -0
  65. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/quick/jwt.py +0 -0
  66. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/sessions/__abc_session_repo__.py +0 -0
  67. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/sessions/__init__.py +0 -0
  68. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/sessions/json.py +0 -0
  69. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/sessions/redis.py +0 -0
  70. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/tests/__init__.py +0 -0
  71. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/tests/clients.py +0 -0
  72. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/tests/fakers.py +0 -0
  73. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/__init__.py +0 -0
  74. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/aes.py +0 -0
  75. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/await_maybe.py +0 -0
  76. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/config_maker.py +0 -0
  77. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/deprecated.py +0 -0
  78. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/otp_keys.py +0 -0
  79. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/rsa.py +0 -0
  80. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/salt_hash.py +0 -0
  81. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jam/utils/xor.py +0 -0
  82. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jamlib.egg-info/SOURCES.txt +0 -0
  83. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jamlib.egg-info/dependency_links.txt +0 -0
  84. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jamlib.egg-info/requires.txt +0 -0
  85. {jamlib-2.5.0a2.dev1 → jamlib-2.5.0a2.dev2}/jamlib.egg-info/top_level.txt +0 -0
  86. {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.dev1
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
@@ -11,5 +11,5 @@ from jam.__abc_instances__ import BaseJam
11
11
  from jam.instance import Jam
12
12
 
13
13
 
14
- __version__ = "2.5.0a2.dev1"
14
+ __version__ = "2.5.0a2.dev2"
15
15
  __all__ = ["Jam", "BaseJam"]
@@ -0,0 +1,11 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ """FastAPI integration.
4
+
5
+ FastAPI docs: https://fastapi.tiangolo.com/
6
+ """
7
+
8
+ from jam.ext.starlette import JWTBackend, SessionBackend
9
+
10
+
11
+ __all__ = ["JWTBackend", "SessionBackend"]
@@ -0,0 +1,12 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ """
4
+ Starlette integration.
5
+
6
+ Starlette docs: https://starlette.dev
7
+ """
8
+
9
+ from .auth_backends import JWTBackend, SessionBackend
10
+
11
+
12
+ __all__ = ["JWTBackend", "SessionBackend"]
@@ -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.dev1
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "jamlib"
3
- version = "2.5.0a2.dev1"
3
+ version = "2.5.0a2.dev2"
4
4
  description = "Simple and universal library for authorization."
5
5
  authors = [
6
6
  {name = "Makridenko Adrian",email = "adrianmakridenko@duck.com"},
@@ -1,6 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """FastAPI integration.
4
-
5
- FastAPI docs: https://fastapi.tiangolo.com/
6
- """
@@ -1,7 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """
4
- Starlette integration.
5
-
6
- Starlette docs: https://starlette.dev
7
- """
File without changes
File without changes
File without changes