From cc6009534436554174cab7294cc175b451cbe784 Mon Sep 17 00:00:00 2001 From: Ross Scroggs Date: Sun, 6 Dec 2020 17:56:49 -0800 Subject: [PATCH] Map / to %2F in group email address for Group Settings API (#1288) * Map / to %2F in group email address for Group Settings API * Make update deviceuserstate consistent with other deviceuser commands gam update deviceuserstate [id] ... --- src/gam/gapi/cloudidentity/devices.py | 10 ++++++---- src/gam/gapi/directory/groups.py | 16 ++++++++++------ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/gam/gapi/cloudidentity/devices.py b/src/gam/gapi/cloudidentity/devices.py index 04d4e49e..29b7c16d 100644 --- a/src/gam/gapi/cloudidentity/devices.py +++ b/src/gam/gapi/cloudidentity/devices.py @@ -135,12 +135,14 @@ def update_state(): client_id = f'{customer}-gam' body = {} i = 3 + deviceuser = sys.argv[i] + if deviceuser == 'id': + i += 1 + deviceuser = sys.argv[i] + i += 1 while i < len(sys.argv): myarg = sys.argv[i].lower().replace('_', '') - if myarg == 'id': - deviceuser = sys.argv[i+1] - i += 2 - elif myarg == 'clientid': + if myarg == 'clientid': client_id = f'{customer}-{sys.argv[i+1]}' i += 2 elif myarg in ['assettag', 'assettags']: diff --git a/src/gam/gapi/directory/groups.py b/src/gam/gapi/directory/groups.py index b58adb06..e4eb4ccf 100644 --- a/src/gam/gapi/directory/groups.py +++ b/src/gam/gapi/directory/groups.py @@ -15,6 +15,10 @@ def GroupIsAbuseOrPostmaster(emailAddr): return emailAddr.startswith('abuse@') or emailAddr.startswith('postmaster@') +def mapGroupEmailForSettings(emailAddr): + return emailAddr.replace('/', '%2F') + + def create(): cd = gapi_directory.build() body = {'email': gam.normalizeEmailAddressOrUID(sys.argv[3], noUid=True)} @@ -67,7 +71,7 @@ def create(): gapi_errors.ErrorReason.SERVICE_LIMIT, gapi_errors.ErrorReason.NOT_FOUND ], - groupUniqueId=body['email'], + groupUniqueId=mapGroupEmailForSettings(body['email']), fields='*') if current_settings is not None: gs_body = dict( @@ -75,7 +79,7 @@ def create(): if gs_body: gapi.call(gs.groups(), 'update', - groupUniqueId=body['email'], + groupUniqueId=mapGroupEmailForSettings(body['email']), retry_reasons=[ gapi_errors.ErrorReason.SERVICE_LIMIT, gapi_errors.ErrorReason.NOT_FOUND @@ -170,7 +174,7 @@ def info(group_name=None): 'get', throw_reasons=[gapi_errors.ErrorReason.AUTH_ERROR], retry_reasons=[gapi_errors.ErrorReason.SERVICE_LIMIT], - groupUniqueId=basic_info['email'] + groupUniqueId=mapGroupEmailForSettings(basic_info['email']) ) # Use email address retrieved from cd since GS API doesn't support uid if settings is None: settings = {} @@ -589,7 +593,7 @@ def print_(): gapi_errors.ErrorReason.SERVICE_LIMIT, gapi_errors.ErrorReason.INVALID ], - groupUniqueId=groupEmail, + groupUniqueId=mapGroupEmailForSettings(groupEmail), fields=gsfields) if settings: for key in settings: @@ -1174,7 +1178,7 @@ def update(): gs.groups(), 'get', retry_reasons=[gapi_errors.ErrorReason.SERVICE_LIMIT], - groupUniqueId=group, + groupUniqueId=mapGroupEmailForSettings(group), fields='*') if current_settings is not None: gs_body = dict( @@ -1185,7 +1189,7 @@ def update(): gs.groups(), 'update', retry_reasons=[gapi_errors.ErrorReason.SERVICE_LIMIT], - groupUniqueId=group, + groupUniqueId=mapGroupEmailForSettings(group), body=gs_body) print(f'updated group {group}')