trovesuite 1.0.12__tar.gz → 1.0.14__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.
- {trovesuite-1.0.12/src/trovesuite.egg-info → trovesuite-1.0.14}/PKG-INFO +1 -1
- {trovesuite-1.0.12 → trovesuite-1.0.14}/pyproject.toml +3 -3
- {trovesuite-1.0.12 → trovesuite-1.0.14}/setup.py +1 -1
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/auth/auth_service.py +68 -8
- {trovesuite-1.0.12 → trovesuite-1.0.14/src/trovesuite.egg-info}/PKG-INFO +1 -1
- {trovesuite-1.0.12 → trovesuite-1.0.14}/LICENSE +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/MANIFEST.in +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/README.md +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/requirements.txt +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/setup.cfg +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/__init__.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/auth/__init__.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/auth/auth_base.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/auth/auth_controller.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/auth/auth_read_dto.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/auth/auth_write_dto.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/configs/__init__.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/configs/database.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/configs/logging.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/configs/settings.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/entities/__init__.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/entities/health.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/entities/sh_response.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/notification/__init__.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/notification/notification_base.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/notification/notification_controller.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/notification/notification_read_dto.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/notification/notification_service.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/notification/notification_write_dto.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/storage/__init__.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/storage/storage_base.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/storage/storage_controller.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/storage/storage_read_dto.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/storage/storage_service.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/storage/storage_write_dto.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/utils/__init__.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/utils/helper.py +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite.egg-info/SOURCES.txt +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite.egg-info/dependency_links.txt +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite.egg-info/not-zip-safe +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite.egg-info/requires.txt +0 -0
- {trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: trovesuite
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.14
|
|
4
4
|
Summary: TroveSuite services package providing authentication, authorization, notifications, Azure Storage, and other enterprise services for TroveSuite applications
|
|
5
5
|
Home-page: https://dev.azure.com/brightgclt/trovesuite/_git/packages
|
|
6
6
|
Author: Bright Debrah Owusu
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "trovesuite"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.14"
|
|
8
8
|
description = "TroveSuite services package providing authentication, authorization, notifications, Azure Storage, and other enterprise services for TroveSuite applications"
|
|
9
9
|
authors = ["brightgclt <brightgclt@gmail.com>"]
|
|
10
10
|
license = "MIT"
|
|
@@ -58,7 +58,7 @@ Documentation = "https://dev.azure.com/brightgclt/trovesuite/_git/packages"
|
|
|
58
58
|
|
|
59
59
|
[project]
|
|
60
60
|
name = "trovesuite"
|
|
61
|
-
version = "1.0.
|
|
61
|
+
version = "1.0.14"
|
|
62
62
|
description = "TroveSuite services package providing authentication, authorization, notifications, Azure Storage, and other enterprise services for TroveSuite applications"
|
|
63
63
|
readme = "README.md"
|
|
64
64
|
license = {text = "MIT"}
|
|
@@ -121,7 +121,7 @@ Documentation = "https://dev.azure.com/brightgclt/trovesuite/_git/packages"
|
|
|
121
121
|
[tool.setuptools.packages.find]
|
|
122
122
|
where = ["src"]
|
|
123
123
|
include = ["trovesuite*"]
|
|
124
|
-
exclude = ["*
|
|
124
|
+
exclude = ["*test*"]
|
|
125
125
|
|
|
126
126
|
[tool.setuptools.package-dir]
|
|
127
127
|
"" = "src"
|
|
@@ -15,7 +15,7 @@ with open("pyproject.toml", "r", encoding="utf-8") as fh:
|
|
|
15
15
|
|
|
16
16
|
setup(
|
|
17
17
|
name="trovesuite",
|
|
18
|
-
version="1.0.
|
|
18
|
+
version="1.0.14",
|
|
19
19
|
author="Bright Debrah Owusu",
|
|
20
20
|
author_email="owusu.debrah@deladetech.com",
|
|
21
21
|
description="TroveSuite services package providing authentication, authorization, notifications, and other enterprise services for TroveSuite applications",
|
|
@@ -225,18 +225,61 @@ class AuthService:
|
|
|
225
225
|
(user_id,),
|
|
226
226
|
)
|
|
227
227
|
|
|
228
|
+
# ✅ NEW: Get system-level roles from main.system_user_groups and main.system_assign_roles
|
|
229
|
+
logger.info(f"Fetching system-level roles for user: {user_id}")
|
|
230
|
+
|
|
231
|
+
system_roles = DatabaseManager.execute_query(
|
|
232
|
+
"""
|
|
233
|
+
SELECT DISTINCT sug.group_id, sug.user_id, sar.role_id, sar.resource_type
|
|
234
|
+
FROM main.system_user_groups sug
|
|
235
|
+
INNER JOIN main.system_assign_roles sar ON sug.group_id = sar.group_id
|
|
236
|
+
WHERE sug.user_id = %s
|
|
237
|
+
AND sar.is_active = true
|
|
238
|
+
AND sar.delete_status = 'NOT_DELETED'
|
|
239
|
+
""",
|
|
240
|
+
(user_id,)
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
if system_roles:
|
|
244
|
+
logger.info(f"Found {len(system_roles)} system-level role(s) for user: {user_id}")
|
|
245
|
+
else:
|
|
246
|
+
logger.info(f"No system-level roles found for user: {user_id}")
|
|
247
|
+
|
|
248
|
+
# ✅ NEW: Also check for direct system role assignments (user_id in system_assign_roles)
|
|
249
|
+
direct_system_roles = DatabaseManager.execute_query(
|
|
250
|
+
"""
|
|
251
|
+
SELECT DISTINCT NULL as group_id, sar.user_id, sar.role_id, sar.resource_type
|
|
252
|
+
FROM main.system_assign_roles sar
|
|
253
|
+
WHERE sar.user_id = %s
|
|
254
|
+
AND sar.is_active = true
|
|
255
|
+
AND sar.delete_status = 'NOT_DELETED'
|
|
256
|
+
""",
|
|
257
|
+
(user_id,)
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
if direct_system_roles:
|
|
261
|
+
logger.info(f"Found {len(direct_system_roles)} direct system-level role assignment(s) for user: {user_id}")
|
|
262
|
+
system_roles.extend(direct_system_roles)
|
|
263
|
+
|
|
264
|
+
# ✅ NEW: Merge tenant-level and system-level roles
|
|
265
|
+
all_roles = get_user_roles + system_roles
|
|
266
|
+
logger.info(f"Total roles (tenant + system) for user {user_id}: {len(all_roles)}")
|
|
267
|
+
|
|
228
268
|
# GET permissions and Append to Role
|
|
229
269
|
get_user_roles_with_tenant_and_permissions = []
|
|
230
|
-
for role in
|
|
270
|
+
for role in all_roles:
|
|
231
271
|
permissions = DatabaseManager.execute_query(
|
|
232
272
|
f"""SELECT permission_id FROM {db_settings.MAIN_ROLE_PERMISSIONS_TABLE} WHERE role_id = %s""",
|
|
233
|
-
params=(role["role_id"],),
|
|
273
|
+
params=(role["role_id"],),
|
|
274
|
+
)
|
|
234
275
|
|
|
235
276
|
role_dict = {**role, "tenant_id": tenant_id, "permissions": [p['permission_id'] for p in permissions]}
|
|
236
277
|
get_user_roles_with_tenant_and_permissions.append(role_dict)
|
|
237
278
|
|
|
238
279
|
roles_dto = Helper.map_to_dto(get_user_roles_with_tenant_and_permissions, AuthServiceReadDto)
|
|
239
280
|
|
|
281
|
+
logger.info(f"Authorization successful for user: {user_id} with {len(roles_dto)} total role entries")
|
|
282
|
+
|
|
240
283
|
return Respons[AuthServiceReadDto](
|
|
241
284
|
detail="Authorized",
|
|
242
285
|
data=roles_dto,
|
|
@@ -249,7 +292,7 @@ class AuthService:
|
|
|
249
292
|
raise http_ex
|
|
250
293
|
|
|
251
294
|
except Exception as e:
|
|
252
|
-
logger.error("Authorization check failed for user: %s", str(e))
|
|
295
|
+
logger.error("Authorization check failed for user: %s - Error: %s", user_id, str(e), exc_info=True)
|
|
253
296
|
return Respons[AuthServiceReadDto](
|
|
254
297
|
detail=None,
|
|
255
298
|
data=[],
|
|
@@ -258,6 +301,7 @@ class AuthService:
|
|
|
258
301
|
error="Authorization check failed due to an internal error"
|
|
259
302
|
)
|
|
260
303
|
|
|
304
|
+
|
|
261
305
|
@staticmethod
|
|
262
306
|
def check_permission(users_data: list, action=None, resource_type=None) -> bool:
|
|
263
307
|
"""
|
|
@@ -302,18 +346,34 @@ class AuthService:
|
|
|
302
346
|
def authorize_user_from_token(token: str) -> Respons[AuthServiceReadDto]:
|
|
303
347
|
"""
|
|
304
348
|
Convenience method to authorize a user directly from a JWT token.
|
|
305
|
-
|
|
349
|
+
|
|
306
350
|
Args:
|
|
307
351
|
token: JWT token string
|
|
308
|
-
|
|
352
|
+
|
|
309
353
|
Returns:
|
|
310
354
|
Respons[AuthServiceReadDto]: Authorization result with user roles and permissions
|
|
311
|
-
|
|
355
|
+
|
|
312
356
|
Raises:
|
|
313
357
|
HTTPException: If token is invalid
|
|
314
358
|
"""
|
|
315
|
-
|
|
316
|
-
|
|
359
|
+
credentials_exception = HTTPException(
|
|
360
|
+
status_code=401,
|
|
361
|
+
detail="Could not validate credentials",
|
|
362
|
+
headers={"WWW-Authenticate": "Bearer"},
|
|
363
|
+
)
|
|
364
|
+
try:
|
|
365
|
+
payload = jwt.decode(token, db_settings.SECRET_KEY, algorithms=[db_settings.ALGORITHM])
|
|
366
|
+
user_id = payload.get("user_id")
|
|
367
|
+
tenant_id = payload.get("tenant_id")
|
|
368
|
+
|
|
369
|
+
if user_id is None or tenant_id is None:
|
|
370
|
+
raise credentials_exception
|
|
371
|
+
|
|
372
|
+
data = AuthServiceWriteDto(user_id=user_id, tenant_id=tenant_id)
|
|
373
|
+
return AuthService.authorize(data=data)
|
|
374
|
+
|
|
375
|
+
except jwt.InvalidTokenError as exc:
|
|
376
|
+
raise credentials_exception from exc
|
|
317
377
|
|
|
318
378
|
@staticmethod
|
|
319
379
|
def get_user_permissions(user_roles: list) -> list:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: trovesuite
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.14
|
|
4
4
|
Summary: TroveSuite services package providing authentication, authorization, notifications, Azure Storage, and other enterprise services for TroveSuite applications
|
|
5
5
|
Home-page: https://dev.azure.com/brightgclt/trovesuite/_git/packages
|
|
6
6
|
Author: Bright Debrah Owusu
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/notification/notification_controller.py
RENAMED
|
File without changes
|
{trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/notification/notification_read_dto.py
RENAMED
|
File without changes
|
|
File without changes
|
{trovesuite-1.0.12 → trovesuite-1.0.14}/src/trovesuite/notification/notification_write_dto.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|