Added option oneitemperrow to 'gam print admins|adminroles`

This commit is contained in:
Ross Scroggs
2024-03-01 15:10:42 -08:00
parent 63b1ca7e30
commit 1989d72f4f
12 changed files with 208 additions and 190 deletions

View File

@@ -8365,7 +8365,7 @@ class CSVPrintFile():
else:
def g(obj):
return tuple(obj.get(item, '') for item in items)
return g
return g
def writeCSVData(writer):
try:
@@ -16137,23 +16137,29 @@ def doInfoAdminRole():
except (GAPI.badRequest, GAPI.customerNotFound):
accessErrorExit(cd)
# gam print adminroles|roles [todrive <ToDriveAttribute>*] [privileges]
# gam print adminroles|roles [todrive <ToDriveAttribute>*]
# [privileges] [oneitemperrow]
# gam show adminroles|roles [privileges]
def doPrintShowAdminRoles():
cd = buildGAPIObject(API.DIRECTORY)
fieldsList = PRINT_ADMIN_ROLES_FIELDS[:]
csvPF = CSVPrintFile(fieldsList, PRINT_ADMIN_ROLES_FIELDS) if Act.csvFormat() else None
oneItemPerRow = False
while Cmd.ArgumentsRemaining():
myarg = getArgument()
if csvPF and myarg == 'todrive':
csvPF.GetTodriveParameters()
elif myarg == 'privileges':
if csvPF:
csvPF.AddField(myarg, {myarg: 'rolePrivileges'}, fieldsList)
else:
fieldsList.append('rolePrivileges')
fieldsList.append('rolePrivileges')
elif myarg == 'oneitemperrow':
oneItemPerRow = True
else:
unknownArgumentExit()
if csvPF:
if not oneItemPerRow:
csvPF.AddTitles(['rolePrivileges'])
else:
csvPF.AddTitles(['privilegeName', 'serviceId'])
fields = getItemFieldsFromFieldsList('items', fieldsList)
printGettingAllAccountEntities(Ent.ADMIN_ROLE)
try:
@@ -16177,7 +16183,14 @@ def doPrintShowAdminRoles():
Ind.Decrement()
else:
for role in roles:
csvPF.WriteRowTitles(flattenJSON(role))
if not oneItemPerRow or 'rolePrivileges' not in role:
csvPF.WriteRowTitles(flattenJSON(role))
else:
privileges = role.pop('rolePrivileges')
baserow = flattenJSON(role)
for privilege in privileges:
row = flattenJSON(privilege, flattened=baserow.copy())
csvPF.WriteRowTitles(row)
if csvPF:
csvPF.writeCSVfile('Admin Roles')
@@ -16262,21 +16275,25 @@ PRINT_ADMIN_FIELDS = ['roleAssignmentId', 'roleId', 'assignedTo', 'scopeType', '
PRINT_ADMIN_TITLES = ['roleAssignmentId', 'roleId', 'role', 'assignedTo', 'assignedToUser', 'assignedToGroup', 'scopeType', 'orgUnitId', 'orgUnit']
# gam print admins [todrive <ToDriveAttribute>*]
# [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>] [condition] [privileges]
# [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>] [condition]
# [privileges] [oneitemperrow]
# gam show admins
# [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>] [condition] [privileges]
def doPrintShowAdmins():
def _getPrivileges(admin):
if showPrivileges:
try:
return callGAPI(cd.roles(), 'get',
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND, GAPI.FORBIDDEN]+[GAPI.NOT_FOUND],
customer=GC.Values[GC.CUSTOMER_ID], roleId=admin['roleId'], fields='rolePrivileges')
except (GAPI.notFound, GAPI.forbidden) as e:
entityActionFailedExit([Ent.USER, userKey, Ent.ADMIN_ROLE, admin['roleId']], str(e))
except (GAPI.badRequest, GAPI.customerNotFound):
accessErrorExit(cd)
return None
roleId = admin['roleId']
if roleId not in rolePrivileges:
try:
rolePrivileges[roleId] = callGAPI(cd.roles(), 'get',
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND, GAPI.FORBIDDEN]+[GAPI.NOT_FOUND],
customer=GC.Values[GC.CUSTOMER_ID], roleId=roleId, fields='rolePrivileges')
except (GAPI.notFound, GAPI.forbidden) as e:
entityActionFailedExit([Ent.USER, userKey, Ent.ADMIN_ROLE, admin['roleId']], str(e))
rolePrivileges[roleId] = None
except (GAPI.badRequest, GAPI.customerNotFound):
accessErrorExit(cd)
return rolePrivileges[roleId]
def _setNamesFromIds(admin, privileges):
admin['role'] = role_from_roleid(admin['roleId'])
@@ -16300,7 +16317,7 @@ def doPrintShowAdmins():
if assignedToField:
admin[assignedToField] = assignedToIdEmailMap[assignedTo]['assigneeEmail']
if privileges is not None:
admin['rolePrivileges'] = privileges
admin.update(privileges)
if 'orgUnitId' in admin:
admin['orgUnit'] = convertOrgUnitIDtoPath(cd, f'id:{admin["orgUnitId"]}')
if 'condition' in admin:
@@ -16310,11 +16327,12 @@ def doPrintShowAdmins():
admin['condition'] = 'nonsecuritygroup'
cd = buildGAPIObject(API.DIRECTORY)
csvPF = CSVPrintFile() if Act.csvFormat() else None
csvPF = CSVPrintFile(PRINT_ADMIN_TITLES) if Act.csvFormat() else None
roleId = None
userKey = None
showPrivileges = False
oneItemPerRow = showPrivileges = False
kwargs = {}
rolePrivileges = {}
fieldsList = PRINT_ADMIN_FIELDS
assignedToIdEmailMap = {}
while Cmd.ArgumentsRemaining():
@@ -16327,19 +16345,19 @@ def doPrintShowAdmins():
_, roleId = getRoleId()
elif myarg == 'condition':
fieldsList.append('condition')
PRINT_ADMIN_TITLES.append('condition')
if csvPF:
csvPF.AddTitle('condition')
cd = buildGAPIObject(API.DIRECTORY_BETA)
elif myarg == 'privileges':
showPrivileges = True
PRINT_ADMIN_TITLES.append('rolePrivileges')
elif myarg == 'oneitemperrow':
oneItemPerRow = True
else:
unknownArgumentExit()
if roleId and not kwargs:
kwargs['roleId'] = roleId
roleId = None
fields = getItemFieldsFromFieldsList('items', fieldsList)
if csvPF:
csvPF.SetTitles(PRINT_ADMIN_TITLES)
printGettingAllAccountEntities(Ent.ADMIN_ROLE_ASSIGNMENT)
try:
admins = callGAPIpages(cd.roleAssignments(), 'list', 'items',
@@ -16380,7 +16398,14 @@ def doPrintShowAdmins():
if roleId and roleId != admin['roleId']:
continue
_setNamesFromIds(admin, _getPrivileges(admin))
csvPF.WriteRowTitles(flattenJSON(admin))
if not oneItemPerRow or 'rolePrivileges' not in admin:
csvPF.WriteRowTitles(flattenJSON(admin))
else:
privileges = admin.pop('rolePrivileges')
baserow = flattenJSON(admin)
for privilege in privileges:
row = flattenJSON(privilege, flattened=baserow.copy())
csvPF.WriteRowTitles(row)
if csvPF:
csvPF.writeCSVfile('Admins')
@@ -58345,7 +58370,7 @@ def updateGoogleDocument(users):
i, count, users = getEntityArgument(users)
for user in users:
i += 1
user, drive, jcount = _validateUserGetFileIDs(user, i, count, fileIdEntity, entityType=Ent.DOCUMENT if not FJQC.formatJSON else None)
user, _, jcount = _validateUserGetFileIDs(user, i, count, fileIdEntity, entityType=Ent.DOCUMENT if not FJQC.formatJSON else None)
if jcount == 0:
continue
_, docs = buildGAPIServiceObject(API.DOCS, user, i, count)

View File

@@ -250,7 +250,7 @@ DRIVE3_MODIFY_LABEL_THROW_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, NO
LABEL_MULTIPLE_VALUES_FOR_SINGULAR_FIELD, LABEL_MUTATION_FORBIDDEN,
LABEL_MUTATION_ILLEGAL_SELECTION, LABEL_MUTATION_UNKNOWN_FIELD]
DOCS_ACCESS_THROW_REASONS = DRIVE_USER_THROW_REASONS+[NOT_FOUND, PERMISSION_DENIED, FORBIDDEN, INTERNAL_ERROR, INSUFFICIENT_FILE_PERMISSIONS,
BAD_REQUEST, INVALID, INVALID_ARGUMENT, FAILED_PRECONDITION]
BAD_REQUEST, INVALID, INVALID_ARGUMENT, FAILED_PRECONDITION]
GMAIL_THROW_REASONS = [SERVICE_NOT_AVAILABLE, BAD_REQUEST]
GMAIL_LIST_THROW_REASONS = [FAILED_PRECONDITION, PERMISSION_DENIED, INVALID, INVALID_ARGUMENT]
GMAIL_SMIME_THROW_REASONS = [SERVICE_NOT_AVAILABLE, BAD_REQUEST, INVALID_ARGUMENT, FORBIDDEN, NOT_FOUND, PERMISSION_DENIED]