gam7 7.23.4__py3-none-any.whl → 7.23.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gam7 might be problematic. Click here for more details.
- gam/__init__.py +98 -30
- gam/gamlib/glclargs.py +1 -0
- {gam7-7.23.4.dist-info → gam7-7.23.6.dist-info}/METADATA +1 -1
- {gam7-7.23.4.dist-info → gam7-7.23.6.dist-info}/RECORD +7 -7
- {gam7-7.23.4.dist-info → gam7-7.23.6.dist-info}/WHEEL +0 -0
- {gam7-7.23.4.dist-info → gam7-7.23.6.dist-info}/entry_points.txt +0 -0
- {gam7-7.23.4.dist-info → gam7-7.23.6.dist-info}/licenses/LICENSE +0 -0
gam/__init__.py
CHANGED
|
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
27
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
|
28
|
-
__version__ = '7.23.
|
|
28
|
+
__version__ = '7.23.06'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -16990,21 +16990,38 @@ def doDeleteAdmin():
|
|
|
16990
16990
|
except (GAPI.forbidden, GAPI.permissionDenied) as e:
|
|
16991
16991
|
ClientAPIAccessDeniedExit(str(e))
|
|
16992
16992
|
|
|
16993
|
-
|
|
16993
|
+
ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP = {
|
|
16994
16994
|
'user': 'assignedToUser',
|
|
16995
16995
|
'group': 'assignedToGroup',
|
|
16996
16996
|
'serviceaccount': 'assignedToServiceAccount',
|
|
16997
|
+
'unknown': 'assignedToUnknown',
|
|
16997
16998
|
}
|
|
16998
|
-
|
|
16999
|
+
ALL_ASSIGNEE_TYPES = ['user', 'group', 'serviceaccount']
|
|
17000
|
+
|
|
17001
|
+
PRINT_ADMIN_FIELDS = ['roleAssignmentId', 'roleId', 'assignedTo', 'scopeType', 'orgUnitId', 'assigneeType']
|
|
16999
17002
|
PRINT_ADMIN_TITLES = ['roleAssignmentId', 'roleId', 'role',
|
|
17000
17003
|
'assignedTo', 'assignedToUser', 'assignedToGroup', 'assignedToServiceAccount', 'assignedToUnknown',
|
|
17001
17004
|
'scopeType', 'orgUnitId', 'orgUnit']
|
|
17002
17005
|
|
|
17006
|
+
def getAssigneeTypes(myarg, typesSet):
|
|
17007
|
+
if myarg in {'type', 'types'}:
|
|
17008
|
+
for gtype in getString(Cmd.OB_ADMIN_ASSIGNEE_TYPE_LIST).lower().replace(',', ' ').split():
|
|
17009
|
+
if gtype in ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP:
|
|
17010
|
+
typesSet.add(ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP[gtype])
|
|
17011
|
+
else:
|
|
17012
|
+
invalidChoiceExit(gtype, ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP, True)
|
|
17013
|
+
else:
|
|
17014
|
+
return False
|
|
17015
|
+
return True
|
|
17016
|
+
|
|
17003
17017
|
# gam print admins [todrive <ToDriveAttribute>*]
|
|
17004
|
-
# [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>]
|
|
17005
|
-
# [
|
|
17018
|
+
# [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>]
|
|
17019
|
+
# [types <AdminAssigneeTypeList>]
|
|
17020
|
+
# [recursive] [condition] [privileges] [oneitemperrow]
|
|
17006
17021
|
# gam show admins
|
|
17007
|
-
# [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>]
|
|
17022
|
+
# [user|group <EmailAddress>|<UniqueID>] [role <RoleItem>]
|
|
17023
|
+
# [types <AdminAssigneeTypeList>]
|
|
17024
|
+
# [recursive] [condition] [privileges]
|
|
17008
17025
|
def doPrintShowAdmins():
|
|
17009
17026
|
def _getPrivileges(admin):
|
|
17010
17027
|
if showPrivileges:
|
|
@@ -17031,19 +17048,18 @@ def doPrintShowAdmins():
|
|
|
17031
17048
|
def _setNamesFromIds(admin, privileges):
|
|
17032
17049
|
admin['role'] = role_from_roleid(admin['roleId'])
|
|
17033
17050
|
assignedTo = admin['assignedTo']
|
|
17034
|
-
admin['assignedToUnknown'] = False
|
|
17035
17051
|
if assignedTo not in assignedToIdEmailMap:
|
|
17036
|
-
assigneeType = admin.get('assigneeType')
|
|
17037
|
-
assignedToField = ASSIGNEE_EMAILTYPE_TOFIELD_MAP.get(assigneeType, None)
|
|
17038
17052
|
assigneeEmail, assigneeType = convertUIDtoEmailAddressWithType(f'uid:{assignedTo}', cd, sal,
|
|
17039
|
-
emailTypes=
|
|
17040
|
-
if
|
|
17041
|
-
assignedToField =
|
|
17042
|
-
|
|
17053
|
+
emailTypes=ALL_ASSIGNEE_TYPES if admin.get('assigneeType') != 'group' else ['group'])
|
|
17054
|
+
if assigneeType in ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP:
|
|
17055
|
+
assignedToField = ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP[assigneeType]
|
|
17056
|
+
else:
|
|
17043
17057
|
assignedToField = 'assignedToUnknown'
|
|
17058
|
+
if assignedToField == 'assignedToUnknown':
|
|
17044
17059
|
assigneeEmail = True
|
|
17045
17060
|
assignedToIdEmailMap[assignedTo] = {'assignedToField': assignedToField, 'assigneeEmail': assigneeEmail}
|
|
17046
17061
|
admin[assignedToIdEmailMap[assignedTo]['assignedToField']] = assignedToIdEmailMap[assignedTo]['assigneeEmail']
|
|
17062
|
+
admin['assignedToField'] = assignedToIdEmailMap[assignedTo]['assignedToField']
|
|
17047
17063
|
if privileges is not None:
|
|
17048
17064
|
admin.update(privileges)
|
|
17049
17065
|
if 'orgUnitId' in admin:
|
|
@@ -17059,7 +17075,8 @@ def doPrintShowAdmins():
|
|
|
17059
17075
|
csvPF = CSVPrintFile(PRINT_ADMIN_TITLES) if Act.csvFormat() else None
|
|
17060
17076
|
roleId = None
|
|
17061
17077
|
userKey = None
|
|
17062
|
-
oneItemPerRow = showPrivileges = False
|
|
17078
|
+
oneItemPerRow = recursive = showPrivileges = False
|
|
17079
|
+
typesSet = set()
|
|
17063
17080
|
kwargs = {}
|
|
17064
17081
|
rolePrivileges = {}
|
|
17065
17082
|
fieldsList = PRINT_ADMIN_FIELDS
|
|
@@ -17072,6 +17089,17 @@ def doPrintShowAdmins():
|
|
|
17072
17089
|
userKey = kwargs['userKey'] = getEmailAddress()
|
|
17073
17090
|
elif myarg == 'role':
|
|
17074
17091
|
_, roleId = getRoleId()
|
|
17092
|
+
elif getAssigneeTypes(myarg, typesSet):
|
|
17093
|
+
pass
|
|
17094
|
+
elif myarg == 'recursive':
|
|
17095
|
+
recursive = True
|
|
17096
|
+
allGroupRoles = ','.join(sorted(ALL_GROUP_ROLES))
|
|
17097
|
+
memberOptions = initMemberOptions()
|
|
17098
|
+
memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP] = True
|
|
17099
|
+
memberOptions[MEMBEROPTION_DISPLAYMATCH] = False
|
|
17100
|
+
memberDisplayOptions = initIPSGMGroupMemberDisplayOptions()
|
|
17101
|
+
for role in [Ent.ROLE_MEMBER, Ent.ROLE_MANAGER, Ent.ROLE_OWNER]:
|
|
17102
|
+
memberDisplayOptions[role]['show'] = True
|
|
17075
17103
|
elif myarg == 'condition':
|
|
17076
17104
|
fieldsList.append('condition')
|
|
17077
17105
|
if csvPF:
|
|
@@ -17085,13 +17113,15 @@ def doPrintShowAdmins():
|
|
|
17085
17113
|
if roleId and not kwargs:
|
|
17086
17114
|
kwargs['roleId'] = roleId
|
|
17087
17115
|
roleId = None
|
|
17116
|
+
if not typesSet:
|
|
17117
|
+
typesSet = set(ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP.values())
|
|
17088
17118
|
fields = getItemFieldsFromFieldsList('items', fieldsList)
|
|
17089
17119
|
printGettingAllAccountEntities(Ent.ADMIN_ROLE_ASSIGNMENT)
|
|
17090
17120
|
try:
|
|
17091
17121
|
admins = callGAPIpages(cd.roleAssignments(), 'list', 'items',
|
|
17092
17122
|
pageMessage=getPageMessage(),
|
|
17093
17123
|
throwReasons=[GAPI.INVALID, GAPI.USER_NOT_FOUND,
|
|
17094
|
-
GAPI.FORBIDDEN, GAPI.SERVICE_NOT_AVAILABLE,
|
|
17124
|
+
GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.SERVICE_NOT_AVAILABLE,
|
|
17095
17125
|
GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND,
|
|
17096
17126
|
GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
|
17097
17127
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
@@ -17099,39 +17129,77 @@ def doPrintShowAdmins():
|
|
|
17099
17129
|
except (GAPI.invalid, GAPI.userNotFound):
|
|
17100
17130
|
entityUnknownWarning(Ent.ADMINISTRATOR, userKey)
|
|
17101
17131
|
return
|
|
17102
|
-
except
|
|
17103
|
-
entityActionFailedExit([Ent.
|
|
17132
|
+
except GAPI.notFound as e:
|
|
17133
|
+
entityActionFailedExit([Ent.ADMIN_ROLE, kwargs['roleId']], str(e))
|
|
17134
|
+
except (GAPI.forbidden, GAPI.serviceNotAvailable) as e:
|
|
17135
|
+
entityActionFailedExit([Ent.ADMINISTRATOR, userKey], str(e))
|
|
17104
17136
|
except (GAPI.badRequest, GAPI.customerNotFound):
|
|
17105
17137
|
accessErrorExit(cd)
|
|
17106
17138
|
except (GAPI.forbidden, GAPI.permissionDenied) as e:
|
|
17107
17139
|
ClientAPIAccessDeniedExit(str(e))
|
|
17140
|
+
count = len(admins)
|
|
17141
|
+
groupMembers = {}
|
|
17142
|
+
expandedAdmins = []
|
|
17143
|
+
i = 0
|
|
17144
|
+
for admin in admins:
|
|
17145
|
+
i += 1
|
|
17146
|
+
if roleId and roleId != admin['roleId']:
|
|
17147
|
+
continue
|
|
17148
|
+
assignedTo = admin['assignedTo']
|
|
17149
|
+
if admin['assigneeType'] != 'group' or not recursive:
|
|
17150
|
+
_setNamesFromIds(admin, _getPrivileges(admin))
|
|
17151
|
+
if admin['assignedToField'] in typesSet:
|
|
17152
|
+
expandedAdmins.append(admin)
|
|
17153
|
+
continue
|
|
17154
|
+
if assignedTo not in groupMembers:
|
|
17155
|
+
membersList = []
|
|
17156
|
+
membersSet = set()
|
|
17157
|
+
level = 0
|
|
17158
|
+
getGroupMembers(cd, assignedTo, allGroupRoles, membersList, membersSet, i, count,
|
|
17159
|
+
memberOptions, memberDisplayOptions, level, {Ent.TYPE_USER})
|
|
17160
|
+
groupMembers[assignedTo] = membersList[:]
|
|
17161
|
+
_setNamesFromIds(admin, _getPrivileges(admin))
|
|
17162
|
+
if admin[assignedToIdEmailMap[assignedTo]['assignedToField']] not in typesSet:
|
|
17163
|
+
continue
|
|
17164
|
+
expandedAdmins.append(admin)
|
|
17165
|
+
if not groupMembers[assignedTo]:
|
|
17166
|
+
expandedAdmins.append(admin)
|
|
17167
|
+
continue
|
|
17168
|
+
admin['assigneeType'] = 'user'
|
|
17169
|
+
admin['assignedToGroup'] = assignedToIdEmailMap[assignedTo]['assigneeEmail']
|
|
17170
|
+
for member in groupMembers[assignedTo]:
|
|
17171
|
+
userAdmin = admin.copy()
|
|
17172
|
+
userAdmin['assignedTo'] = member['id']
|
|
17173
|
+
_setNamesFromIds(userAdmin, _getPrivileges(admin))
|
|
17174
|
+
expandedAdmins.append(userAdmin)
|
|
17175
|
+
admins = expandedAdmins
|
|
17176
|
+
count = len(expandedAdmins)
|
|
17108
17177
|
if not csvPF:
|
|
17109
|
-
count = len(admins)
|
|
17110
17178
|
performActionNumItems(count, Ent.ADMIN_ROLE_ASSIGNMENT)
|
|
17111
17179
|
Ind.Increment()
|
|
17112
17180
|
i = 0
|
|
17113
|
-
for admin in
|
|
17181
|
+
for admin in expandedAdmins:
|
|
17114
17182
|
i += 1
|
|
17115
|
-
if roleId and roleId != admin['roleId']:
|
|
17116
|
-
continue
|
|
17117
|
-
_setNamesFromIds(admin, _getPrivileges(admin))
|
|
17118
17183
|
printEntity([Ent.ADMIN_ROLE_ASSIGNMENT, admin['roleAssignmentId']], i, count)
|
|
17119
17184
|
Ind.Increment()
|
|
17120
17185
|
for field in PRINT_ADMIN_TITLES:
|
|
17121
17186
|
if field in admin:
|
|
17122
17187
|
if field == 'roleAssignmentId':
|
|
17123
17188
|
continue
|
|
17124
|
-
|
|
17125
|
-
|
|
17126
|
-
|
|
17127
|
-
|
|
17189
|
+
printKeyValueList([field, admin[field]])
|
|
17190
|
+
if showPrivileges:
|
|
17191
|
+
rolePrivileges = admin.get('rolePrivileges', [])
|
|
17192
|
+
jcount = len(rolePrivileges)
|
|
17193
|
+
if jcount > 0:
|
|
17194
|
+
printKeyValueList(['rolePrivileges', jcount])
|
|
17195
|
+
Ind.Increment()
|
|
17196
|
+
showJSON(None, rolePrivileges)
|
|
17197
|
+
Ind.Decrement()
|
|
17128
17198
|
Ind.Decrement()
|
|
17129
17199
|
Ind.Decrement()
|
|
17130
17200
|
else:
|
|
17131
|
-
for admin in
|
|
17132
|
-
|
|
17133
|
-
continue
|
|
17134
|
-
_setNamesFromIds(admin, _getPrivileges(admin))
|
|
17201
|
+
for admin in expandedAdmins:
|
|
17202
|
+
admin.pop('assignedToField')
|
|
17135
17203
|
if not oneItemPerRow or 'rolePrivileges' not in admin:
|
|
17136
17204
|
csvPF.WriteRowTitles(flattenJSON(admin))
|
|
17137
17205
|
else:
|
gam/gamlib/glclargs.py
CHANGED
|
@@ -1138,6 +1138,7 @@ class GamCLArgs():
|
|
|
1138
1138
|
OB_ARGUMENT = 'argument'
|
|
1139
1139
|
OB_ASP_ID_LIST = 'ASPIDList'
|
|
1140
1140
|
OB_ASSET_ID = 'AssetID'
|
|
1141
|
+
OB_ADMIN_ASSIGNEE_TYPE_LIST = 'AdminAssigneeTypeList'
|
|
1141
1142
|
OB_BROWSER_ENROLLEMNT_TOKEN_ID = 'BrowserEnrollmentTokenID'
|
|
1142
1143
|
OB_BROWSER_ENTITY = 'BrowserEntity'
|
|
1143
1144
|
OB_BUILDING_ID = 'BuildingID'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
gam/__init__.py,sha256=
|
|
1
|
+
gam/__init__.py,sha256=hT_6mB1-IGqw6dWjKeo0W3EQF73Ve2_NjiX_xB7INIc,3623383
|
|
2
2
|
gam/__main__.py,sha256=amz0-959ph6zkZKqjaar4n60yho-T37w6qWI36qx0CA,1049
|
|
3
3
|
gam/cacerts.pem,sha256=DUsVo2XlFYwfkhe3gnxa-Km4Z4noz74hSApXwTT-nQE,44344
|
|
4
4
|
gam/cbcm-v1.1beta1.json,sha256=xO5XloCQQULmPbFBx5bckdqmbLFQ7sJ2TImhE1ysDIY,19439
|
|
@@ -24,7 +24,7 @@ gam/gamlib/__init__.py,sha256=z5mF-y0j8pm-YNFBaiuxB4M_GAUPG-cXWwrhYwrVReM,679
|
|
|
24
24
|
gam/gamlib/glaction.py,sha256=1Il_HrChVnPkzZwiZs5au4mFQVtq4K1Z42uIuR6qdnI,9419
|
|
25
25
|
gam/gamlib/glapi.py,sha256=u97M7Y2BeP3tYEEGYEz-9kY4fdV0fYkeqC3YN-sRwNc,36028
|
|
26
26
|
gam/gamlib/glcfg.py,sha256=jX9IIrqSa8CPZ-UdnMDs2RuGo8vPh3jpgvRhI9VRbII,28325
|
|
27
|
-
gam/gamlib/glclargs.py,sha256=
|
|
27
|
+
gam/gamlib/glclargs.py,sha256=LlTtwJJHqU48l7SQT4bcZCWlw3Y46g42Bn1ACGW8gIk,53307
|
|
28
28
|
gam/gamlib/glentity.py,sha256=KWFomkoNE6lLE83zVqVIlJ2rkzfLkhEasW1M0TWGieA,35373
|
|
29
29
|
gam/gamlib/glgapi.py,sha256=pdBbwNtnCwFWxJGaP-_3hdTjSNoOCJF2yo76WdQOi1k,40426
|
|
30
30
|
gam/gamlib/glgdata.py,sha256=weRppttWm6uRyqtBoGPKoHiNZ2h28nhfUV4J_mbCszY,2707
|
|
@@ -47,8 +47,8 @@ gam/gdata/apps/audit/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrK
|
|
|
47
47
|
gam/gdata/apps/audit/service.py,sha256=Z1eueThcNeVUMWP1DRWc_DGHrJCiJI8W_xj6L-cqu-Q,9658
|
|
48
48
|
gam/gdata/apps/contacts/__init__.py,sha256=Um6zgIkiahZns7yAEuC3pxHSMD8iciZ_EoynSLoYPfU,30463
|
|
49
49
|
gam/gdata/apps/contacts/service.py,sha256=5lNb-Ii1Gyek6ePFji3kyoYtCBc8CuJTwagx2BL2o14,15684
|
|
50
|
-
gam7-7.23.
|
|
51
|
-
gam7-7.23.
|
|
52
|
-
gam7-7.23.
|
|
53
|
-
gam7-7.23.
|
|
54
|
-
gam7-7.23.
|
|
50
|
+
gam7-7.23.6.dist-info/METADATA,sha256=BEAOLvBw21I1PEiIFYzkqJhHRdWQeu1_BzMSM6LDzrU,3092
|
|
51
|
+
gam7-7.23.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
52
|
+
gam7-7.23.6.dist-info/entry_points.txt,sha256=HVUM5J7dA8YwvJfG30jiLefR19ExMs387TWugWd9sf4,42
|
|
53
|
+
gam7-7.23.6.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
54
|
+
gam7-7.23.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|