diff --git a/src/gam/__init__.py b/src/gam/__init__.py index 4b9c4e71..6cd78c0e 100755 --- a/src/gam/__init__.py +++ b/src/gam/__init__.py @@ -9445,13 +9445,6 @@ def doDeprovUser(users): print(f'Done deprovisioning {user}') -def doDeleteUser(): - cd = buildGAPIObject('directory') - user_email = normalizeEmailAddressOrUID(sys.argv[3]) - print(f'Deleting account for {user_email}') - gapi.call(cd.users(), 'delete', userKey=user_email) - - def doUndeleteUser(): cd = buildGAPIObject('directory') user = normalizeEmailAddressOrUID(sys.argv[3]) @@ -11626,7 +11619,7 @@ def ProcessGAMCommand(args): elif command == 'delete': argument = sys.argv[2].lower() if argument == 'user': - doDeleteUser() + gapi_directory_users.delete() elif argument == 'group': gapi_directory_groups.delete() elif argument == 'device': diff --git a/src/gam/gapi/directory/users.py b/src/gam/gapi/directory/users.py index 495d1fe4..e8192109 100644 --- a/src/gam/gapi/directory/users.py +++ b/src/gam/gapi/directory/users.py @@ -1,11 +1,28 @@ +import sys from time import sleep import gam +from gam import display from gam import gapi from gam.gapi import directory as gapi_directory from gam.gapi import errors as gapi_errors +def delete(): + cd = gapi_directory.build() + user_email = gam.normalizeEmailAddressOrUID(sys.argv[3]) + print(f'Deleting account for {user_email}') + try: + gapi.call(cd.users(), + 'delete', + userKey=user_email, + throw_reasons=[gapi_errors.ErrorReason.CONDITION_NOT_MET]) + except gam.gapi.errors.GapiConditionNotMetError as err: + display.print_error( + f'{err} The user {user_email} may be (or have recently been) on Google Vault Hold and thus not eligible for deletion. You can check holds with "gam user show vaultholds".' + ) + + def get_primary(email): '''returns primary email of user or empty if email is not a user primary or alias address.'''