Improve gam user show vaultholds (#1472)

* Improve gam user show vaultholds

* Handle user in /

* Handle user in / more efficiently

* Display total holds, don't set rc, allow uid
This commit is contained in:
Ross Scroggs
2022-01-15 09:24:08 -08:00
committed by GitHub
parent ef3c282bfa
commit 5411724696
2 changed files with 48 additions and 34 deletions

View File

@@ -9,25 +9,30 @@ from gam.gapi import directory as gapi_directory
from gam.gapi import errors as gapi_errors from gam.gapi import errors as gapi_errors
def _getAllParentOrgUnitIdsForUser(user, cd=None): def _getAllParentOrgUnitsForUser(user, cd=None):
if not cd: if not cd:
cd = gapi_directory.build() cd = gapi_directory.build()
parent_path = gapi.call( parent_path = gapi.call(cd.users(),
cd.users(), 'get',
'get', userKey=user,
userKey=user, fields='orgUnitPath',
fields='orgUnitPath', projection='basic')['orgUnitPath']
projection='basic').get('orgUnitPath') if parent_path == '/':
orgunit_ids = [] orgUnitPath, orgUnitId = getOrgUnitId('/', cd)
all_parent_paths = ['/'] return {orgUnitId: orgUnitPath}
path_split = parent_path.split('/') parent_path = encodeOrgUnitPath(makeOrgUnitPathRelative(parent_path))
for i in range(len(path_split)): orgUnits = {}
a_parent = '/'.join(path_split[:i]) while True:
if a_parent and a_parent not in all_parent_paths: result = gapi.call(cd.orgunits(),
all_parent_paths.append(a_parent) 'get',
if parent_path not in all_parent_paths: customerId=GC_Values[GC_CUSTOMER_ID],
all_parent_paths.append(parent_path) orgUnitPath=parent_path,
return [getOrgUnitId(a_parent, cd)[1] for a_parent in all_parent_paths] fields='orgUnitId,orgUnitPath,parentOrgUnitId')
orgUnits[result['orgUnitId']] = result['orgUnitPath']
if 'parentOrgUnitId' not in result:
break
parent_path = result['parentOrgUnitId']
return orgUnits
def create(): def create():

View File

@@ -12,6 +12,7 @@ from gam import display
from gam import fileutils from gam import fileutils
from gam import gapi from gam import gapi
from gam.gapi import storage as gapi_storage from gam.gapi import storage as gapi_storage
from gam.gapi import directory as gapi_directory
from gam.gapi.directory import orgunits as gapi_directory_orgunits from gam.gapi.directory import orgunits as gapi_directory_orgunits
from gam import utils from gam import utils
@@ -668,26 +669,34 @@ def updateHold():
def showHoldsForUsers(users): def showHoldsForUsers(users):
cd = gapi_directory.build()
v = buildGAPIObject() v = buildGAPIObject()
matterIds = _getAllMatterIds(v)
matterHolds = {}
for matterId in matterIds:
matterHolds[matterId] = gapi.get_all_pages(v.matters().holds(),
'list',
'holds',
fields='holds(holdId,name,accounts(accountId,email),orgUnit),nextPageToken',
matterId=matterId)
totalHolds = 0
for user in users: for user in users:
user = user.lower() user = user.lower()
org_ids = gapi_directory_orgunits._getAllParentOrgUnitIdsForUser(user) orgUnits = gapi_directory_orgunits._getAllParentOrgUnitsForUser(user, cd)
matterIds = _getAllMatterIds(v) for matterId in matterIds:
for matterId in matterIds: for hold in matterHolds[matterId]:
holds = gapi.get_all_pages(v.matters().holds(), if 'orgUnit' in hold:
'list', orgUnitId = hold['orgUnit'].get('orgUnitId')
'holds', if orgUnitId in orgUnits:
fields='holds(holdId,name,accounts,orgUnit),nextPageToken', print(f'FOUND: OrgUnit {orgUnits[orgUnitId]} for user {user} is on hold in matterId {matterId} and holdId {hold["holdId"]} named "{hold["name"]}"')
matterId=matterId) totalHolds += 1
for hold in holds: else:
if 'orgUnit' in hold: for account in hold.get('accounts', []):
if hold['orgUnit'].get('orgUnitId') in org_ids: if (user == account.get('email', '').lower()) or (user == account.get('accountId', '')):
print(f'FOUND: User\'s OrgUnit is on hold in matterId {matterId} and holdId {hold["holdId"]} named "{hold["name"]}"') print(f'FOUND: User account {user} is on hold in matterId {matterId} and holdId {hold["holdId"]} named "{hold["name"]}"')
else: totalHolds += 1
for account in hold.get('accounts', []): break
if user == account.get('email', '').lower(): sys.stdout.write(f'Total Holds: {totalHolds}\n')
print(f'FOUND: User account is on hold in matterId {matterId} and holdId {hold["holdId"]} named "{hold["name"]}"')
break
def updateMatter(action=None): def updateMatter(action=None):