From 2ad50f52bfcdec22e62fd2925ab37bbc277893dc Mon Sep 17 00:00:00 2001 From: James Robinson Date: Tue, 21 May 2024 13:47:11 +0100 Subject: [PATCH 1/2] :bug: Continue processing groups even if attributes cannot be processed for one of them --- apricot/oauth/microsoft_entra_client.py | 35 ++++++++++++++----------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/apricot/oauth/microsoft_entra_client.py b/apricot/oauth/microsoft_entra_client.py index 4bc94c8..7ca1e07 100644 --- a/apricot/oauth/microsoft_entra_client.py +++ b/apricot/oauth/microsoft_entra_client.py @@ -1,5 +1,7 @@ from typing import Any, cast +from twisted.python import log + from apricot.types import JSONDict from .oauth_client import OAuthClient @@ -28,19 +30,19 @@ def extract_token(self, json_response: JSONDict) -> str: def groups(self) -> list[JSONDict]: output = [] - try: - queries = [ - "createdDateTime", - "displayName", - "id", - ] - group_data = self.query( - f"https://graph.microsoft.com/v1.0/groups?$select={','.join(queries)}" - ) - for group_dict in cast( - list[JSONDict], - sorted(group_data["value"], key=lambda group: group["createdDateTime"]), - ): + queries = [ + "createdDateTime", + "displayName", + "id", + ] + group_data = self.query( + f"https://graph.microsoft.com/v1.0/groups?$select={','.join(queries)}" + ) + for group_dict in cast( + list[JSONDict], + sorted(group_data["value"], key=lambda group: group["createdDateTime"]), + ): + try: group_uid = self.uid_cache.get_group_uid(group_dict["id"]) attributes: JSONDict = {} attributes["cn"] = group_dict.get("displayName", None) @@ -57,8 +59,11 @@ def groups(self) -> list[JSONDict]: if user["userPrincipalName"] ] output.append(attributes) - except KeyError: - pass + except KeyError as exc: + msg = ( + f"Failed to process group {group_dict} due to a missing key {exc}." + ) + log.msg(msg) return output def users(self) -> list[JSONDict]: From af0653abc5cf5f8f2347cf1236d5cb634b8733fe Mon Sep 17 00:00:00 2001 From: James Robinson Date: Tue, 21 May 2024 13:48:11 +0100 Subject: [PATCH 2/2] :bug: Ensure that userPrincipalName key exists before using it to construct group members --- apricot/oauth/microsoft_entra_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apricot/oauth/microsoft_entra_client.py b/apricot/oauth/microsoft_entra_client.py index 7ca1e07..eecfa41 100644 --- a/apricot/oauth/microsoft_entra_client.py +++ b/apricot/oauth/microsoft_entra_client.py @@ -56,7 +56,7 @@ def groups(self) -> list[JSONDict]: attributes["memberUid"] = [ str(user["userPrincipalName"]).split("@")[0] for user in members["value"] - if user["userPrincipalName"] + if user.get("userPrincipalName") ] output.append(attributes) except KeyError as exc: