From 77845473ae110f77b45a4db3da7fcb6d68356adf Mon Sep 17 00:00:00 2001 From: theborch Date: Wed, 5 Mar 2025 09:09:49 -0600 Subject: [PATCH 1/6] fix:add 409 conflict --- src/britive/exceptions/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/britive/exceptions/__init__.py b/src/britive/exceptions/__init__.py index ff8d271..779a2f2 100644 --- a/src/britive/exceptions/__init__.py +++ b/src/britive/exceptions/__init__.py @@ -22,6 +22,10 @@ class ApprovalWorkflowTimedOut(BritiveException): pass +class Conflict(BritiveException): + pass + + class ForbiddenRequest(BritiveException): pass @@ -165,6 +169,7 @@ class UserNotAssociatedWithDefaultIdentityProvider(BritiveException): 403: ForbiddenRequest, 404: NotFound, 405: MethodNotAllowed, + 409: Conflict, 500: InternalServerError, 503: ServiceUnavailable, } From 712917dd294a097d2635876120330c077c910864 Mon Sep 17 00:00:00 2001 From: theborch Date: Wed, 5 Mar 2025 09:10:10 -0600 Subject: [PATCH 2/6] fix:missing zero in PP errors --- src/britive/exceptions/badrequest.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/britive/exceptions/badrequest.py b/src/britive/exceptions/badrequest.py index fe5bb6b..4c56f76 100644 --- a/src/britive/exceptions/badrequest.py +++ b/src/britive/exceptions/badrequest.py @@ -473,12 +473,12 @@ class GenericError(BritiveBadRequestException): 'PF-0002': ProfileFavoriteDeleteError, 'PF-0003': ProfileFavoriteReadError, # Profile Policy related - 'PP-001': ProfilePolicyPermissionsError, - 'PP-002': ProfilePolicyInvalidTokenError, - 'PP-003': ProfilePolicyCreationError, - 'PP-004': ProfilePolicyUpdateError, - 'PP-005': ProfilePolicyGenericError, - 'PP-006': ProfilePolicyCreationUpdateError, + 'PP-0001': ProfilePolicyPermissionsError, + 'PP-0002': ProfilePolicyInvalidTokenError, + 'PP-0003': ProfilePolicyCreationError, + 'PP-0004': ProfilePolicyUpdateError, + 'PP-0005': ProfilePolicyGenericError, + 'PP-0006': ProfilePolicyCreationUpdateError, # Profile request related 'PR-0001': ProfileRequestError, # Access Broker related From 81f06601db1af30746fe5e99baa49fede8567c49 Mon Sep 17 00:00:00 2001 From: theborch Date: Wed, 5 Mar 2025 09:10:33 -0600 Subject: [PATCH 3/6] fix:raise specific error for DNS validation --- src/britive/helpers/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/britive/helpers/utils.py b/src/britive/helpers/utils.py index e7a9167..a40240d 100644 --- a/src/britive/helpers/utils.py +++ b/src/britive/helpers/utils.py @@ -6,7 +6,7 @@ from britive.exceptions import BritiveException, InvalidFederationProvider, allowed_exceptions from britive.exceptions.badrequest import bad_request_code_map from britive.exceptions.generic import generic_code_map -from britive.exceptions.unauthorized import unauthorized_code_map +from britive.exceptions.unauthorized import InvalidTenantError, unauthorized_code_map from britive.federation_providers import ( AwsFederationProvider, AzureSystemAssignedManagedIdentityFederationProvider, @@ -69,7 +69,7 @@ def parse_tenant(tenant: str) -> str: socket.getaddrinfo(host=resolved_domain, port=443) # validate the hostname is real return resolved_domain # and if so set the tenant accordingly except socket.gaierror as e: - raise Exception(f'Invalid tenant provided: {tenant}. DNS resolution failed.') from e + raise InvalidTenantError(f'Invalid tenant provided: {tenant}. DNS resolution failed.') from e def response_has_no_content(response) -> bool: From f2cda3ad98a1dc36584ae4413ad2df86d40f7a39 Mon Sep 17 00:00:00 2001 From: theborch Date: Wed, 5 Mar 2025 09:10:55 -0600 Subject: [PATCH 4/6] fix:typo in type hints --- src/britive/my_access.py | 4 ++-- src/britive/my_resources.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/britive/my_access.py b/src/britive/my_access.py index 51c0853..c325024 100644 --- a/src/britive/my_access.py +++ b/src/britive/my_access.py @@ -53,14 +53,14 @@ def __init__(self, britive) -> None: self.withdraw_approval_request = __my_requests.withdraw_approval_request self.withdraw_approval_request_by_name = __my_requests.withdraw_approval_request_by_name - def list(self, filter_text: str = None, search_text: str = None, size: int = None) -> list: + def list(self, filter_text: str = None, search_text: str = None, size: int = None) -> dict: """ List the access details for the current user. :param filter_text: filter details by key, using eq|co|sw operators, e.g. `filter_text='key co text'` :param search_text: filter details by search text. :param size: reduce the size of the response to the specified limit. - :return: List of profiles. + :return: Dict of access details. """ params = {'type': 'sdk'} diff --git a/src/britive/my_resources.py b/src/britive/my_resources.py index d41fb58..331629c 100644 --- a/src/britive/my_resources.py +++ b/src/britive/my_resources.py @@ -51,7 +51,7 @@ def __init__(self, britive) -> None: self.withdraw_approval_request_by_name = __my_requests.withdraw_approval_request_by_name # Let's just mimic my_access.list functionality for now. - def list(self, filter_text: str = None, list_type: str = None, search_text: str = None, size: int = None) -> list: + def list(self, filter_text: str = None, list_type: str = None, search_text: str = None, size: int = None) -> dict: """ List the resource details for the current user. @@ -59,7 +59,7 @@ def list(self, filter_text: str = None, list_type: str = None, search_text: str :param list_type: filter resources by type, e.g. `list_type='frequently-used'` :param search_text: filter resources by search text. :param size: reduce the size of the response to the specified limit. - :return: List of profiles. + :return: Dict of resource details. """ params = {} From 780a7fbfb40cf85cbf5d17ab7a5ee6ea3be9b51a Mon Sep 17 00:00:00 2001 From: theborch Date: Wed, 5 Mar 2025 15:41:26 -0600 Subject: [PATCH 5/6] fix:missing jmespath dependency --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5c047fd..ec998d8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,8 @@ classifiers = [ license = {file = "LICENSE"} requires-python = ">=3.9" dependencies = [ - "requests>=2.32.0" + "requests>=2.32.0", + "jmespath>=1.0.1" ] dynamic = ["version"] keywords = ["britive", "cpam", "identity", "jit"] From a5555c881c1ffb008e78ab273f1ebdef57dcd9b5 Mon Sep 17 00:00:00 2001 From: theborch Date: Wed, 5 Mar 2025 09:17:36 -0600 Subject: [PATCH 6/6] v4.1.1 --- CHANGELOG.md | 25 +++++++++++++++++++++++++ src/britive/__init__.py | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f47fd2..28c2dd0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,30 @@ # Change Log (v2.8.1+) +## v4.1.1 [2025-03-05] + +__What's New:__ + +* None + +__Enhancements:__ + +* None + +__Bug Fixes:__ + +* Added missing `409 Conflict` to `exceptions.allowed_exceptions` +* Added missing zero in the `PP-` errors in `exceptions.badrequest` +* Raise specific `InvalidTenantError` when DNS resolution fails in `helpers.utils.parse_tenant`. +* Updated type hint typo, from `list` to `dict`, in `[my_access|my_resources].list`. + +__Dependencies:__ + +* `jmespath >= 1.0.1` + +__Other:__ + +* None + ## v4.1.0 [2025-02-28] __What's New:__ diff --git a/src/britive/__init__.py b/src/britive/__init__.py index fa721b4..47cbba7 100644 --- a/src/britive/__init__.py +++ b/src/britive/__init__.py @@ -1 +1 @@ -__version__ = '4.1.0' +__version__ = '4.1.1'