Encryptors 2.50__tar.gz → 2.51__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 (99) hide show
  1. {encryptors-2.50 → encryptors-2.51}/PKG-INFO +1 -1
  2. {encryptors-2.50 → encryptors-2.51}/setup.py +1 -1
  3. {encryptors-2.50 → encryptors-2.51}/src/Encryptors.egg-info/PKG-INFO +1 -1
  4. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Database/Connection.py +11 -0
  5. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/JwtTokenHelper.py +28 -40
  6. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Models/TokenClaims.py +0 -1
  7. {encryptors-2.50 → encryptors-2.51}/README.md +0 -0
  8. {encryptors-2.50 → encryptors-2.51}/setup.cfg +0 -0
  9. {encryptors-2.50 → encryptors-2.51}/src/Encryptors.egg-info/SOURCES.txt +0 -0
  10. {encryptors-2.50 → encryptors-2.51}/src/Encryptors.egg-info/dependency_links.txt +0 -0
  11. {encryptors-2.50 → encryptors-2.51}/src/Encryptors.egg-info/entry_points.txt +0 -0
  12. {encryptors-2.50 → encryptors-2.51}/src/Encryptors.egg-info/requires.txt +0 -0
  13. {encryptors-2.50 → encryptors-2.51}/src/Encryptors.egg-info/top_level.txt +0 -0
  14. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Cache/Redis.py +0 -0
  15. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Cache/__init__.py +0 -0
  16. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Cli/__init__.py +0 -0
  17. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Database/BaseRepository.py +0 -0
  18. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Database/__init__.py +0 -0
  19. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Decorators/Grpc.py +0 -0
  20. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Decorators/PublicResolver.py +0 -0
  21. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Decorators/Retry.py +0 -0
  22. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Decorators/SecureResolver.py +0 -0
  23. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Decorators/SqlDataNormalizer.py +0 -0
  24. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Decorators/__init__.py +0 -0
  25. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Encryptor/Aes.py +0 -0
  26. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Encryptor/Argon2.py +0 -0
  27. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Encryptor/Bcrypt.py +0 -0
  28. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Encryptor/Jwt.py +0 -0
  29. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Encryptor/Rsa.py +0 -0
  30. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Encryptor/Sha512.py +0 -0
  31. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Encryptor/__init__.py +0 -0
  32. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Exception/ControlledException.py +0 -0
  33. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Exception/__init__.py +0 -0
  34. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Graphql/Extensions/AuditExtension.py +0 -0
  35. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Graphql/Extensions/__init__.py +0 -0
  36. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Graphql/Models/__init__.py +0 -0
  37. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Graphql/_Exceptions/__init__.py +0 -0
  38. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Graphql/_Helpers/_AuditHelper.py +0 -0
  39. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Graphql/_Helpers/_ExtractAuthToken.py +0 -0
  40. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Graphql/_Helpers/_TenantPolicy.py +0 -0
  41. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Graphql/_Helpers/_TokenService.py +0 -0
  42. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Graphql/_Helpers/__init__.py +0 -0
  43. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Graphql/__init__.py +0 -0
  44. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/AuditDispatcher.py +0 -0
  45. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/AzureClassifier.py +0 -0
  46. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/GrpcConnection.py +0 -0
  47. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/JwtAuthTokenService.py +0 -0
  48. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/KeyVaultService.py +0 -0
  49. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/Resilience.py +0 -0
  50. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/ResponseDecryptor.py +0 -0
  51. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/WebsocketClient.py +0 -0
  52. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/_AuthTokenProcessor.py +0 -0
  53. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/_Ports.py +0 -0
  54. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Helpers/__init__.py +0 -0
  55. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Http/APIClient.py +0 -0
  56. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Http/_Helpers.py +0 -0
  57. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Http/__init__.py +0 -0
  58. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Messaging/AzureServiceBus.py +0 -0
  59. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Messaging/Kafka.py +0 -0
  60. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Messaging/RabbitMQ.py +0 -0
  61. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Messaging/__init__.py +0 -0
  62. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Models/ApiResponse.py +0 -0
  63. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Models/AuditConfig.py +0 -0
  64. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Models/Notification.py +0 -0
  65. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Models/Response.py +0 -0
  66. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Models/Token.py +0 -0
  67. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Models/_Audit.py +0 -0
  68. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Models/__init__.py +0 -0
  69. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Rest/Context/RequestContext.py +0 -0
  70. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Rest/Context/__init__.py +0 -0
  71. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Rest/Middlewares/RequestContextMiddleware.py +0 -0
  72. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Rest/Middlewares/__init__.py +0 -0
  73. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Rest/__init__.py +0 -0
  74. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Enums/Constant.py +0 -0
  75. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Enums/FileType.py +0 -0
  76. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Enums/GrahpqlOperation.py +0 -0
  77. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Enums/Message.py +0 -0
  78. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Enums/Profile.py +0 -0
  79. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Enums/StatusCode.py +0 -0
  80. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Enums/__init__.py +0 -0
  81. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Logger.py +0 -0
  82. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/CaseConverter.py +0 -0
  83. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/CodeGenerator.py +0 -0
  84. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/DataNormalizer.py +0 -0
  85. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/DataUtils.py +0 -0
  86. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/DateUtils.py +0 -0
  87. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/FileMetaData.py +0 -0
  88. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/HashValidator.py +0 -0
  89. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/Mapper.py +0 -0
  90. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/PasswordGenerator.py +0 -0
  91. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/QueryGenerator.py +0 -0
  92. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/RsaUtils.py +0 -0
  93. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/TextProcessor.py +0 -0
  94. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/Utils/__init__.py +0 -0
  95. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Shared/__init__.py +0 -0
  96. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Storage/AzureBlobStorage.py +0 -0
  97. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Storage/S3Storage.py +0 -0
  98. {encryptors-2.50 → encryptors-2.51}/src/Osdental/Storage/__init__.py +0 -0
  99. {encryptors-2.50 → encryptors-2.51}/src/Osdental/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Encryptors
3
- Version: 2.50
3
+ Version: 2.51
4
4
  Summary: End-to-end algorithm library
5
5
  Author: OSDental LLC
6
6
  Author-email: support@osdental.ai
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
  # ANDERSON REVISAR EL CACHE LOCAL DEL KEYVAULT PARA VALIDAR SI FUNCIONA
3
3
  setup(
4
4
  name="Encryptors",
5
- version="2.50",
5
+ version="2.51",
6
6
  author="OSDental LLC",
7
7
  author_email="support@osdental.ai",
8
8
  description="End-to-end algorithm library",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Encryptors
3
- Version: 2.50
3
+ Version: 2.51
4
4
  Summary: End-to-end algorithm library
5
5
  Author: OSDental LLC
6
6
  Author-email: support@osdental.ai
@@ -74,6 +74,17 @@ class Connection:
74
74
  self.initialized = True
75
75
  logger.info("db.connection_ready url=%s", self._safe_url(db_url))
76
76
 
77
+ @staticmethod
78
+ def _safe_url(db_url: str) -> str:
79
+ """Enmascara contraseñas del connection string para logging seguro."""
80
+ import re
81
+ return re.sub(
82
+ r"(password|pwd)=[^;]+",
83
+ r"\1=***",
84
+ db_url,
85
+ flags=re.IGNORECASE
86
+ )
87
+
77
88
  def _ensure_connection_resiliency(self, db_url: str) -> str:
78
89
  """
79
90
  Agrega parámetros resilientes por defecto para Azure SQL
@@ -3,8 +3,10 @@ from datetime import datetime, timedelta, timezone
3
3
  from jwcrypto import jwk
4
4
  from jwcrypto import jwt
5
5
  from jwcrypto import jwe
6
+ from jwcrypto.jwt import JWTExpired
6
7
  from Osdental.Models.TokenClaims import TokenValidationOptions
7
-
8
+ from Osdental.Exception.ControlledException import UnauthorizedException
9
+ from Osdental.Shared.Enums.StatusCode import StatusCode
8
10
 
9
11
  class JwtTokenHelper:
10
12
 
@@ -78,37 +80,43 @@ class JwtTokenHelper:
78
80
  Desencripta y verifica firma.
79
81
 
80
82
  NO valida:
81
- - expiration
82
83
  - issuer
83
84
  - audience
84
85
 
85
86
  Retorna claims incluso si el token está expirado.
86
87
  """
87
88
 
88
- encrypted = jwe.JWE()
89
+ try:
90
+ encrypted = jwe.JWE()
89
91
 
90
- encrypted.deserialize(
91
- token
92
- )
92
+ encrypted.deserialize(
93
+ token
94
+ )
93
95
 
94
- encrypted.decrypt(
95
- self._private_key
96
- )
96
+ encrypted.decrypt(
97
+ self._private_key
98
+ )
97
99
 
98
- inner_token = (
99
- encrypted.payload.decode()
100
- )
100
+ inner_token = (
101
+ encrypted.payload.decode()
102
+ )
101
103
 
102
- verified = jwt.JWT()
104
+ verified = jwt.JWT()
103
105
 
104
- verified.deserialize(
105
- jwt=inner_token,
106
- key=self._public_key,
107
- )
106
+ verified.deserialize(
107
+ jwt=inner_token,
108
+ key=self._public_key,
109
+ )
108
110
 
109
- return json.loads(
110
- verified.claims
111
- )
111
+ return json.loads(
112
+ verified.claims
113
+ )
114
+
115
+ except JWTExpired:
116
+ raise UnauthorizedException(
117
+ message="Token expired",
118
+ status_code=StatusCode.UNAUTHORIZED
119
+ )
112
120
 
113
121
  def validate_claims(
114
122
  self,
@@ -143,26 +151,6 @@ class JwtTokenHelper:
143
151
  )
144
152
 
145
153
 
146
- if options.validate_expiration:
147
-
148
- exp = claims.get("exp")
149
-
150
- if exp is None:
151
- raise ValueError(
152
- "exp claim not found"
153
- )
154
-
155
- now = int(
156
- datetime.now(
157
- timezone.utc
158
- ).timestamp()
159
- )
160
-
161
- if now > exp:
162
- raise ValueError(
163
- "Token expired"
164
- )
165
-
166
154
  def validate_token(
167
155
  self,
168
156
  token: str,
@@ -7,7 +7,6 @@ class TokenValidationOptions:
7
7
  issuer: Optional[str] = None
8
8
  audience: Optional[str] = None
9
9
 
10
- validate_expiration: bool = True
11
10
  validate_issuer: bool = True
12
11
  validate_audience: bool = True
13
12
 
File without changes
File without changes