Update policies and user invitations (#1339)

* Update policies and user invitations

Show chrome policy schemas in sorted order

Change create userintervention to send userintervention  to be consistent with API
Add state and orderby option to print userinvitations

* Sort polices in show chromepolicies
This commit is contained in:
Ross Scroggs
2021-03-22 06:06:04 -07:00
committed by GitHub
parent 90160da042
commit b333816dc8
4 changed files with 67 additions and 13 deletions

View File

@ -1337,11 +1337,13 @@ gam print group-members|groups-members [todrive]
[roles <GroupRoleList>] [membernames] [fields <MembersFieldNameList>] [roles <GroupRoleList>] [membernames] [fields <MembersFieldNameList>]
[includederivedmembership] [includederivedmembership]
gam create userinvitation <EmailAddress> gam send userinvitation <EmailAddress>
gam cancel userinvitation <EmailAddress> gam cancel userinvitation <EmailAddress>
gam check userinvitation|isinvitable <EmailAddress> gam check userinvitation|isinvitable <EmailAddress>
gam info userinvitation <EmailAddress> gam info userinvitation <EmailAddress>
gam print userinvitations [todrive] [filter <String>] gam print userinvitations [todrive]
[state notyetsent|invited|accepted|declined]]
[orderby email|updatetime [ascending|descending]]
gam <UserTypeEntity> check isinvitable [todrive] gam <UserTypeEntity> check isinvitable [todrive]
gam print licenses [todrive] [(products|product <ProductIDList>)|(skus|sku <SKUIDList>)|allskus|gsuite] [countsonly] gam print licenses [todrive] [(products|product <ProductIDList>)|(skus|sku <SKUIDList>)|allskus|gsuite] [countsonly]

View File

@ -11186,8 +11186,6 @@ def ProcessGAMCommand(args):
gapi_directory_roles.create() gapi_directory_roles.create()
elif argument in ['browsertoken', 'browsertokens']: elif argument in ['browsertoken', 'browsertokens']:
gapi_cbcm.createtoken() gapi_cbcm.createtoken()
elif argument in ['userinvitation', 'userinvitations']:
gapi_cloudidentity_userinvitations.send()
elif argument in ['printer']: elif argument in ['printer']:
gapi_directory_printers.create() gapi_directory_printers.create()
else: else:
@ -11498,6 +11496,13 @@ def ProcessGAMCommand(args):
else: else:
controlflow.invalid_argument_exit(argument, 'gam print') controlflow.invalid_argument_exit(argument, 'gam print')
sys.exit(0) sys.exit(0)
elif command == 'send':
argument = sys.argv[2].lower()
if argument in ['userinvitation', 'userinvitations']:
gapi_cloudidentity_userinvitations.send()
else:
controlflow.invalid_argument_exit(argument, 'gam send')
sys.exit(0)
elif command == 'show': elif command == 'show':
argument = sys.argv[2].lower() argument = sys.argv[2].lower()
if argument in ['schema', 'schemas']: if argument in ['schema', 'schemas']:
@ -11512,9 +11517,9 @@ def ProcessGAMCommand(args):
doShowServiceAccountKeys() doShowServiceAccountKeys()
elif argument in ['browsertoken', 'browsertokens']: elif argument in ['browsertoken', 'browsertokens']:
gapi_cbcm.printshowtokens(False) gapi_cbcm.printshowtokens(False)
elif argument == 'chromeschema': elif argument in ['chromeschema', 'chromeschemas']:
gapi_chromepolicy.printshow_schemas() gapi_chromepolicy.printshow_schemas()
elif argument == 'chromepolicy': elif argument in ['chromepolicy', 'chromepolicies']:
gapi_chromepolicy.printshow_policies() gapi_chromepolicy.printshow_policies()
else: else:
controlflow.invalid_argument_exit(argument, 'gam show') controlflow.invalid_argument_exit(argument, 'gam show')

View File

@ -86,7 +86,7 @@ def printshow_policies():
body=body) body=body)
except googleapiclient.errors.HttpError: except googleapiclient.errors.HttpError:
policies = [] policies = []
for policy in policies: for policy in sorted(policies, key=lambda k: k.get('value', {}).get('policySchema', '')):
name = policy.get('value', {}).get('policySchema', '') name = policy.get('value', {}).get('policySchema', '')
print(name) print(name)
values = policy.get('value', {}).get('value', {}) values = policy.get('value', {}).get('value', {})
@ -169,7 +169,7 @@ def printshow_schemas():
msg = f'{myarg} is not a valid argument to "gam print chromeschema"' msg = f'{myarg} is not a valid argument to "gam print chromeschema"'
controlflow.system_error_exit(3, msg) controlflow.system_error_exit(3, msg)
schemas = build_schemas(svc, sfilter) schemas = build_schemas(svc, sfilter)
for value in schemas.values(): for _, value in sorted(iter(schemas.items())):
print(f'{value.get("name")}: {value.get("description")}') print(f'{value.get("name")}: {value.get("description")}')
for val in value['settings'].values(): for val in value['settings'].values():
vtype = val.get('type') vtype = val.get('type')

View File

@ -4,7 +4,8 @@ from urllib.parse import quote_plus
import googleapiclient import googleapiclient
from gam.var import GC_CUSTOMER_ID, GC_Values, MY_CUSTOMER import gam
from gam.var import GC_CUSTOMER_ID, GC_Values, MY_CUSTOMER, SORTORDER_CHOICES_MAP
from gam import controlflow from gam import controlflow
from gam import display from gam import display
from gam import gapi from gam import gapi
@ -114,31 +115,77 @@ def send():
_generic_action('send') _generic_action('send')
USERINVITATION_ORDERBY_CHOICES_MAP = {
'email': 'email',
'updatetime': 'update_time',
}
USERINVITATION_STATE_CHOICES_MAP = {
'accepted': 'ACCEPTED',
'declined': 'DECLINED',
'invited': 'INVITED',
'notyetsent': 'NOT_YET_SENT',
}
def print_(): def print_():
'''gam print userinvitations''' '''gam print userinvitations'''
svc = gapi_cloudidentity.build('cloudidentity_beta') svc = gapi_cloudidentity.build('cloudidentity_beta')
customer = _get_customerid() customer = _get_customerid()
todrive = False todrive = False
titles = [] titles = ['name', 'state', 'updateTime']
rows = [] rows = []
filter_ = None filter_ = None
orderByList = []
i = 3 i = 3
while i < len(sys.argv): while i < len(sys.argv):
myarg = sys.argv[i].lower().replace('_', '') myarg = sys.argv[i].lower().replace('_', '')
if myarg == 'filter': if myarg == 'state':
filter_ = sys.argv[i+1] state = sys.argv[i + 1].lower().replace('_', '')
if state in USERINVITATION_STATE_CHOICES_MAP:
filter_ = f"state=='{USERINVITATION_STATE_CHOICES_MAP[state]}'"
else:
controlflow.expected_argument_exit('state',
', '.join(USERINVITATION_STATE_CHOICES_MAP),
state)
i += 2 i += 2
elif myarg == 'orderby':
fieldName = sys.argv[i + 1].lower()
i += 2
if fieldName in USERINVITATION_ORDERBY_CHOICES_MAP:
fieldName = USERINVITATION_ORDERBY_CHOICES_MAP[fieldName]
orderBy = ''
if i < len(sys.argv):
orderBy = sys.argv[i].lower()
if orderBy in SORTORDER_CHOICES_MAP:
orderBy = SORTORDER_CHOICES_MAP[orderBy]
i += 1
if orderBy != 'DESCENDING':
orderByList.append(fieldName)
else:
orderByList.append(f'{fieldName} desc')
else:
controlflow.expected_argument_exit(
'orderby', ', '.join(sorted(USERINVITATION_ORDERBY_CHOICES_MAP)),
fieldName)
elif myarg == 'todrive': elif myarg == 'todrive':
todrive = True todrive = True
i += 1 i += 1
else: else:
controlflow.invalid_argument_exit(sys.argv[i], controlflow.invalid_argument_exit(sys.argv[i],
'gam print userinvitations') 'gam print userinvitations')
if orderByList:
orderBy = ' '.join(orderByList)
else:
orderBy = None
gam.printGettingAllItems('User Invitations', filter_)
page_message = gapi.got_total_items_msg('User Invitations', '...\n')
invitations = gapi.get_all_pages(svc.customers().userinvitations(), invitations = gapi.get_all_pages(svc.customers().userinvitations(),
'list', 'list',
'userInvitations', 'userInvitations',
page_message=page_message,
parent=customer, parent=customer,
filter=filter_) filter=filter_,
orderBy=orderBy)
for invitation in invitations: for invitation in invitations:
invitation['name'] = _reduce_name(invitation['name']) invitation['name'] = _reduce_name(invitation['name'])
row = {} row = {}