jamlib 2.6.0b0.dev1__tar.gz → 2.6.0b0.dev3__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 (98) hide show
  1. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/PKG-INFO +1 -1
  2. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/pyproject.toml +2 -1
  3. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/__init__.py +1 -1
  4. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/instance.py +51 -0
  5. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/instance.py +29 -1
  6. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/paseto/utils.py +17 -5
  7. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jamlib.egg-info/PKG-INFO +1 -1
  8. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/LICENSE.md +0 -0
  9. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/README.md +0 -0
  10. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/setup.cfg +0 -0
  11. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/__abc_encoder__.py +0 -0
  12. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/__abc_instances__.py +0 -0
  13. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/__deprecated__.py +0 -0
  14. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/__logger__.py +0 -0
  15. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/__init__.py +0 -0
  16. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/jwt/__init__.py +0 -0
  17. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/jwt/lists/__init__.py +0 -0
  18. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/jwt/lists/json.py +0 -0
  19. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/jwt/lists/redis.py +0 -0
  20. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/jwt/tools.py +0 -0
  21. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/modules.py +0 -0
  22. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/oauth2/__init__.py +0 -0
  23. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/oauth2/builtin/__init__.py +0 -0
  24. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/oauth2/builtin/github.py +0 -0
  25. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/oauth2/builtin/gitlab.py +0 -0
  26. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/oauth2/builtin/google.py +0 -0
  27. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/oauth2/builtin/yandex.py +0 -0
  28. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/oauth2/client.py +0 -0
  29. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/sessions/__init__.py +0 -0
  30. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/sessions/json.py +0 -0
  31. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/aio/sessions/redis.py +0 -0
  32. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/encoders.py +0 -0
  33. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/exceptions/__init__.py +0 -0
  34. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/exceptions/jwt.py +0 -0
  35. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/exceptions/oauth2.py +0 -0
  36. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/exceptions/sessions.py +0 -0
  37. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/__init__.py +0 -0
  38. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/fastapi/__init__.py +0 -0
  39. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/flask/__init__.py +0 -0
  40. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/flask/extensions.py +0 -0
  41. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/litestar/__init__.py +0 -0
  42. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/litestar/middlewares.py +0 -0
  43. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/litestar/plugins.py +0 -0
  44. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/litestar/value.py +0 -0
  45. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/starlette/__init__.py +0 -0
  46. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/starlette/auth_backends.py +0 -0
  47. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/ext/starlette/value.py +0 -0
  48. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/jwt/__init__.py +0 -0
  49. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/jwt/__utils__.py +0 -0
  50. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/jwt/lists/__abc_list_repo__.py +0 -0
  51. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/jwt/lists/__init__.py +0 -0
  52. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/jwt/lists/json.py +0 -0
  53. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/jwt/lists/redis.py +0 -0
  54. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/jwt/tools.py +0 -0
  55. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/jwt/types.py +0 -0
  56. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/modules.py +0 -0
  57. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/oauth2/__abc_oauth2_repo__.py +0 -0
  58. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/oauth2/__init__.py +0 -0
  59. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/oauth2/builtin/__init__.py +0 -0
  60. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/oauth2/builtin/github.py +0 -0
  61. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/oauth2/builtin/gitlab.py +0 -0
  62. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/oauth2/builtin/google.py +0 -0
  63. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/oauth2/builtin/yandex.py +0 -0
  64. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/oauth2/client.py +0 -0
  65. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/otp/__abc_module__.py +0 -0
  66. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/otp/__init__.py +0 -0
  67. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/otp/hotp.py +0 -0
  68. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/otp/totp.py +0 -0
  69. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/paseto/__abc_paseto_repo__.py +0 -0
  70. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/paseto/__init__.py +0 -0
  71. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/paseto/v1.py +0 -0
  72. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/paseto/v2.py +0 -0
  73. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/paseto/v3.py +0 -0
  74. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/paseto/v4.py +0 -0
  75. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/quick/__init__.py +0 -0
  76. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/quick/jwt.py +0 -0
  77. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/sessions/__abc_session_repo__.py +0 -0
  78. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/sessions/__init__.py +0 -0
  79. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/sessions/json.py +0 -0
  80. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/sessions/redis.py +0 -0
  81. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/tests/__init__.py +0 -0
  82. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/tests/clients.py +0 -0
  83. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/tests/fakers.py +0 -0
  84. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/__init__.py +0 -0
  85. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/aes.py +0 -0
  86. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/await_maybe.py +0 -0
  87. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/config_maker.py +0 -0
  88. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/ed.py +0 -0
  89. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/otp_keys.py +0 -0
  90. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/rsa.py +0 -0
  91. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/salt_hash.py +0 -0
  92. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/symmetric.py +0 -0
  93. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/xchacha20poly1305.py +0 -0
  94. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jam/utils/xor.py +0 -0
  95. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jamlib.egg-info/SOURCES.txt +0 -0
  96. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jamlib.egg-info/dependency_links.txt +0 -0
  97. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/src/jamlib.egg-info/requires.txt +0 -0
  98. {jamlib-2.6.0b0.dev1 → jamlib-2.6.0b0.dev3}/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: 2.6.0b0.dev1
3
+ Version: 2.6.0b0.dev3
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.6.0b0.dev1"
3
+ version = "2.6.0b0.dev3"
4
4
  description = "Simple and universal library for authorization."
5
5
  authors = [
6
6
  {name = "Makridenko Adrian",email = "adrianmakridenko@duck.com"},
@@ -81,6 +81,7 @@ dev = [
81
81
  "icecream>=2.1.4",
82
82
  "isort>=6.0.1",
83
83
  "pre-commit>=4.2.0",
84
+ "pyrefly>=0.39.1",
84
85
  "ruff>=0.11.2",
85
86
  "uvicorn>=0.37.0",
86
87
  ]
@@ -13,5 +13,5 @@ from jam.encoders import JsonEncoder
13
13
  from jam.instance import Jam
14
14
 
15
15
 
16
- __version__ = "2.6.0b0.dev1"
16
+ __version__ = "2.6.0b0.dev3"
17
17
  __all__ = ["Jam", "JsonEncoder", "BaseJam", "BaseEncoder"]
@@ -8,6 +8,7 @@ from jam.__abc_instances__ import BaseJam
8
8
  from jam.__deprecated__ import deprecated
9
9
  from jam.__logger__ import logger
10
10
  from jam.aio.modules import JWTModule, OAuth2Module, SessionModule
11
+ from jam.paseto import BasePASETO
11
12
  from jam.utils.config_maker import __config_maker__, __module_loader__
12
13
 
13
14
 
@@ -18,6 +19,7 @@ class Jam(BaseJam):
18
19
  "jwt": "jam.aio.modules.JWTModule",
19
20
  "session": "jam.aio.modules.SessionModule",
20
21
  "oauth2": "jam.aio.modules.OAuth2Module",
22
+ "paseto": "jam.paseto.utils.init_paseto_instance",
21
23
  }
22
24
 
23
25
  def __init__(
@@ -34,6 +36,7 @@ class Jam(BaseJam):
34
36
  self.jwt: Optional[JWTModule] = None
35
37
  self.session: Optional[SessionModule] = None
36
38
  self.oauth2: Optional[OAuth2Module] = None
39
+ self.paseto: Optional[BasePASETO] = None
37
40
 
38
41
  config = __config_maker__(config, pointer)
39
42
 
@@ -589,3 +592,51 @@ class Jam(BaseJam):
589
592
  return await self.oauth2.client_credentials_flow(
590
593
  provider, scope, **extra_params
591
594
  )
595
+
596
+ async def paseto_make_payload(
597
+ self, exp: Optional[int] = None, **data: dict[str, Any]
598
+ ) -> dict[str, Any]:
599
+ """Generate payload for PASETO.
600
+
601
+ Args:
602
+ exp (int | None): Token expire
603
+ data (dict[str, Any]): Custom data
604
+
605
+ Returns:
606
+ dict: Payload
607
+ """
608
+ from jam.paseto.utils import payload_maker
609
+
610
+ return payload_maker(expire=exp, data=data)
611
+
612
+ async def paseto_create(
613
+ self,
614
+ payload: dict[str, Any],
615
+ footer: Optional[Union[dict[str, Any], str]],
616
+ ) -> str:
617
+ """Create new PASETO.
618
+
619
+ Args:
620
+ payload (dict[str, Any]): Payload
621
+ footer (dict | str | None): Footer
622
+
623
+ Returns:
624
+ str: New token
625
+ """
626
+ return self.paseto.encode(payload=payload, footer=footer)
627
+
628
+ async def paseto_decode(
629
+ self, token: str, check_exp: bool = True, check_list: bool = True
630
+ ) -> dict[str, Union[dict, Union[str, dict, None]]]:
631
+ """Decode PASETO.
632
+
633
+ Args:
634
+ token (str): Token
635
+ check_exp (bool): Check exp in payload
636
+ check_list (bool): Check token in list
637
+
638
+ Returns:
639
+ dict: {'payload' PAYLOAD, 'footer': FOOTER}
640
+ """
641
+ payload, footer = self.paseto.decode(token)
642
+ return {"payload": payload, "footer": footer}
@@ -602,6 +602,15 @@ class Jam(BaseJam):
602
602
  def paseto_make_payload(
603
603
  self, exp: Optional[int] = None, **data: dict[str, Any]
604
604
  ) -> dict[str, Any]:
605
+ """Generate payload for PASETO.
606
+
607
+ Args:
608
+ exp (int | None): Token expire
609
+ data (dict[str, Any]): Custom data
610
+
611
+ Returns:
612
+ dict: Payload
613
+ """
605
614
  from jam.paseto.utils import payload_maker
606
615
 
607
616
  return payload_maker(expire=exp, data=data)
@@ -611,10 +620,29 @@ class Jam(BaseJam):
611
620
  payload: dict[str, Any],
612
621
  footer: Optional[Union[dict[str, Any], str]],
613
622
  ) -> str:
623
+ """Create new PASETO.
624
+
625
+ Args:
626
+ payload (dict[str, Any]): Payload
627
+ footer (dict | str | None): Footer
628
+
629
+ Returns:
630
+ str: New token
631
+ """
614
632
  return self.paseto.encode(payload=payload, footer=footer)
615
633
 
616
634
  def paseto_decode(
617
- self, token: str
635
+ self, token: str, check_exp: bool = True, check_list: bool = True
618
636
  ) -> dict[str, Union[dict, Union[str, dict, None]]]:
637
+ """Decode PASETO.
638
+
639
+ Args:
640
+ token (str): Token
641
+ check_exp (bool): Check exp in payload
642
+ check_list (bool): Check token in list
643
+
644
+ Returns:
645
+ dict: {'payload' PAYLOAD, 'footer': FOOTER}
646
+ """
619
647
  payload, footer = self.paseto.decode(token)
620
648
  return {"payload": payload, "footer": footer}
@@ -3,8 +3,9 @@
3
3
  import base64
4
4
  import hashlib
5
5
  import hmac
6
+ import os.path
6
7
  from datetime import datetime
7
- from typing import Any, Literal, Union
8
+ from typing import Any, Literal, Optional, Union
8
9
  from uuid import uuid4
9
10
 
10
11
  from jam.paseto import PASETO
@@ -67,7 +68,7 @@ def base64url_encode(data: Union[bytes, str]) -> bytes:
67
68
  def init_paseto_instance(
68
69
  version: Literal["v1", "v2", "v3", "v4"],
69
70
  purpose: Literal["public", "local"],
70
- key: Union[str, bytes, Any], # TODO: path to keys
71
+ key: Union[str, bytes, Any],
71
72
  **kwargs,
72
73
  ) -> PASETO:
73
74
  """Init paseto instance.
@@ -83,6 +84,11 @@ def init_paseto_instance(
83
84
  """
84
85
  from jam.utils.config_maker import __module_loader__
85
86
 
87
+ if os.path.isfile(key):
88
+ with open(key) as file:
89
+ key = file.read()
90
+ key = key
91
+
86
92
  # FIXME: Fix custom module init
87
93
  if kwargs.get("module", None):
88
94
  _paseto: type[PASETO] = __module_loader__(kwargs["module"])
@@ -95,7 +101,9 @@ def init_paseto_instance(
95
101
  return _paseto.key(purpose, key)
96
102
 
97
103
 
98
- def payload_maker(expire: int, data: dict[str, Any]) -> dict[str, Any]:
104
+ def payload_maker(
105
+ expire: Optional[int], data: dict[str, Any]
106
+ ) -> dict[str, Any]:
99
107
  """Generate PASETO payload.
100
108
 
101
109
  ```json
@@ -110,13 +118,17 @@ def payload_maker(expire: int, data: dict[str, Any]) -> dict[str, Any]:
110
118
  ```
111
119
 
112
120
  Args:
113
- expire (int): Token lifetime
121
+ expire (int | None): Token lifetime
114
122
  data (dict[str, Any]): Custom data
115
123
 
116
124
  Returns:
117
125
  dict: Payload
118
126
  """
119
127
  now = datetime.now().timestamp()
120
- _payload = {"iat": now, "exp": expire + now, "pit": str(uuid4())}
128
+ _payload = {
129
+ "iat": now,
130
+ "exp": (expire + now) if expire else None,
131
+ "pit": str(uuid4()),
132
+ }
121
133
 
122
134
  return _payload | data
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jamlib
3
- Version: 2.6.0b0.dev1
3
+ Version: 2.6.0b0.dev3
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