nlbone 0.3.0__tar.gz → 0.3.1__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 (65) hide show
  1. {nlbone-0.3.0 → nlbone-0.3.1}/PKG-INFO +1 -1
  2. {nlbone-0.3.0 → nlbone-0.3.1}/pyproject.toml +1 -1
  3. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/auth/keycloak.py +12 -4
  4. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/dependencies/auth.py +17 -6
  5. {nlbone-0.3.0 → nlbone-0.3.1}/.gitignore +0 -0
  6. {nlbone-0.3.0 → nlbone-0.3.1}/LICENSE +0 -0
  7. {nlbone-0.3.0 → nlbone-0.3.1}/README.md +0 -0
  8. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/__init__.py +0 -0
  9. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/__init__.py +0 -0
  10. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/auth/__init__.py +0 -0
  11. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/db/__init__.py +0 -0
  12. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/db/memory.py +0 -0
  13. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/db/postgres.py +0 -0
  14. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/db/sqlalchemy/__init__.py +0 -0
  15. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/db/sqlalchemy/base.py +0 -0
  16. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/db/sqlalchemy/engine.py +0 -0
  17. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/db/sqlalchemy/query_builder.py +0 -0
  18. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/db/sqlalchemy/schema.py +0 -0
  19. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/http_clients/__init__.py +0 -0
  20. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/http_clients/email_gateway.py +0 -0
  21. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/http_clients/uploadchi.py +0 -0
  22. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/http_clients/uploadchi_async.py +0 -0
  23. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/messaging/__init__.py +0 -0
  24. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/adapters/messaging/redis.py +0 -0
  25. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/config/__init__.py +0 -0
  26. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/config/logging.py +0 -0
  27. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/config/settings.py +0 -0
  28. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/container.py +0 -0
  29. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/__init__.py +0 -0
  30. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/application/__init__.py +0 -0
  31. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/application/services/__init__.py +0 -0
  32. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/application/services.py +0 -0
  33. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/application/use_cases/__init__.py +0 -0
  34. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/application/use_cases/register_user.py +0 -0
  35. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/domain/__init__.py +0 -0
  36. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/domain/events.py +0 -0
  37. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/domain/models.py +0 -0
  38. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/ports/__init__.py +0 -0
  39. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/ports/auth.py +0 -0
  40. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/ports/files.py +0 -0
  41. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/ports/messaging.py +0 -0
  42. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/core/ports/repo.py +0 -0
  43. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/__init__.py +0 -0
  44. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/__init__.py +0 -0
  45. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/dependencies/__init__.py +0 -0
  46. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/dependencies/db.py +0 -0
  47. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/exception_handlers.py +0 -0
  48. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/exceptions.py +0 -0
  49. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/middleware/__init__.py +0 -0
  50. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/middleware/access_log.py +0 -0
  51. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/middleware/add_request_context.py +0 -0
  52. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/middleware/authentication.py +0 -0
  53. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/pagination/__init__.py +0 -0
  54. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/pagination/offset_base.py +0 -0
  55. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/routers.py +0 -0
  56. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/api/schemas.py +0 -0
  57. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/cli/__init__.py +0 -0
  58. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/cli/init_db.py +0 -0
  59. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/cli/main.py +0 -0
  60. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/jobs/__init__.py +0 -0
  61. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/interfaces/jobs/sync_tokens.py +0 -0
  62. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/types.py +0 -0
  63. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/utils/__init__.py +0 -0
  64. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/utils/context.py +0 -0
  65. {nlbone-0.3.0 → nlbone-0.3.1}/src/nlbone/utils/time.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nlbone
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Backbone package for interfaces and infrastructure in Python projects
5
5
  Author-email: Amir Hosein Kahkbazzadeh <a.khakbazzadeh@gmail.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "nlbone"
7
- version = "0.3.0"
7
+ version = "0.3.1"
8
8
  description = "Backbone package for interfaces and infrastructure in Python projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -43,15 +43,23 @@ class KeycloakAuthService(AuthService):
43
43
  print(f"Failed to get client token: {e}")
44
44
  return None
45
45
 
46
- def is_client_token(self, token: str, allowed_clients: set[str] | None = None) -> bool:
46
+ def get_client_id(self, token: str):
47
47
  data = self.verify_token(token)
48
48
  if not data:
49
- return False
49
+ return None
50
50
 
51
- is_service_account = bool(data.get("username").startswith('service-account-'))
51
+ is_service_account = bool(data.get("username").startswith("service-account-"))
52
52
  client_id = data.get("client_id")
53
53
 
54
54
  if not is_service_account or not client_id:
55
+ return None
56
+
57
+ return client_id
58
+
59
+ def is_client_token(self, token: str, allowed_clients: set[str] | None = None) -> bool:
60
+ client_id = self.get_client_id(token)
61
+
62
+ if not client_id:
55
63
  return False
56
64
 
57
65
  if allowed_clients is not None and client_id not in allowed_clients:
@@ -62,4 +70,4 @@ class KeycloakAuthService(AuthService):
62
70
  def client_has_access(self, token: str, permissions: list[str], allowed_clients: set[str] | None = None) -> bool:
63
71
  if not self.is_client_token(token, allowed_clients):
64
72
  return False
65
- return self.has_access(token, permissions)
73
+ return self.has_access(token, permissions)
@@ -5,6 +5,20 @@ from nlbone.interfaces.api.exceptions import ForbiddenException, UnauthorizedExc
5
5
  from nlbone.utils.context import current_request
6
6
 
7
7
 
8
+ def current_user_id() -> int:
9
+ user_id = current_request().state.user_id
10
+ if user_id is not None:
11
+ return int(user_id)
12
+ raise UnauthorizedException()
13
+
14
+
15
+ def current_client_id() -> str:
16
+ request = current_request()
17
+ if client_id := KeycloakAuthService().get_client_id(request.state.token):
18
+ return str(client_id)
19
+ raise UnauthorizedException()
20
+
21
+
8
22
  def client_has_access(*, permissions=None):
9
23
  def decorator(func):
10
24
  @functools.wraps(func)
@@ -19,12 +33,10 @@ def client_has_access(*, permissions=None):
19
33
  return decorator
20
34
 
21
35
 
22
-
23
36
  def user_authenticated(func):
24
37
  @functools.wraps(func)
25
38
  async def wrapper(*args, **kwargs):
26
- request = current_request()
27
- if not request.state.user_id:
39
+ if not current_user_id():
28
40
  raise UnauthorizedException()
29
41
  return await func(*args, **kwargs)
30
42
 
@@ -36,7 +48,7 @@ def has_access(*, permissions=None):
36
48
  @functools.wraps(func)
37
49
  def wrapper(*args, **kwargs):
38
50
  request = current_request()
39
- if not request.state.user_id:
51
+ if not current_user_id():
40
52
  raise UnauthorizedException()
41
53
  if not KeycloakAuthService().has_access(request.state.token, permissions=permissions):
42
54
  raise ForbiddenException(f"Forbidden {permissions}")
@@ -44,5 +56,4 @@ def has_access(*, permissions=None):
44
56
  return func(*args, **kwargs)
45
57
 
46
58
  return wrapper
47
- return decorator
48
-
59
+ return decorator
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes