mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-23 07:31:36 +00:00
304 lines
11 KiB
Python
304 lines
11 KiB
Python
"""Chrome Browser Cloud Management API calls"""
|
|
|
|
import csv
|
|
import os.path
|
|
import sys
|
|
|
|
import gam
|
|
from gam.var import *
|
|
from gam import controlflow
|
|
from gam import display
|
|
from gam import fileutils
|
|
from gam import gapi
|
|
from gam.gapi.directory import orgunits as gapi_directory_orgunits
|
|
from gam import utils
|
|
|
|
|
|
def _get_customerid():
|
|
''' returns customer id without C prefix'''
|
|
customer_id = GC_Values[GC_CUSTOMER_ID]
|
|
if customer_id[0] == 'C':
|
|
customer_id = customer_id[1:]
|
|
return customer_id
|
|
|
|
|
|
def build():
|
|
return gam.buildGAPIObject('cbcm')
|
|
|
|
|
|
def delete():
|
|
cbcm = build()
|
|
device_id = sys.argv[3]
|
|
customer_id = _get_customerid()
|
|
gapi.call(cbcm.chromebrowsers(), 'delete', deviceId=device_id,
|
|
customer=customer_id)
|
|
print(f'Deleted browser {device_id}')
|
|
|
|
|
|
def info():
|
|
cbcm = build()
|
|
device_id = sys.argv[3]
|
|
projection = 'BASIC'
|
|
fields = None
|
|
customer_id = _get_customerid()
|
|
i = 4
|
|
while i < len(sys.argv):
|
|
myarg = sys.argv[i].lower().replace('_', '')
|
|
if myarg in ['basic', 'full']:
|
|
projection = myarg.upper()
|
|
i += 1
|
|
elif myarg == 'fields':
|
|
fields = sys.argv[i+1]
|
|
i += 2
|
|
else:
|
|
controlflow.invalid_argument_exit(sys.argv[i], 'gam info browser')
|
|
browser = gapi.call(cbcm.chromebrowsers(), 'get',
|
|
customer=customer_id,
|
|
fields=fields, deviceId=device_id,
|
|
projection=projection)
|
|
display.print_json(browser)
|
|
|
|
|
|
def move():
|
|
cbcm = build()
|
|
body = {'resource_ids': []}
|
|
customer_id = _get_customerid()
|
|
i = 3
|
|
resource_ids = []
|
|
batch_size = 600
|
|
while i < len(sys.argv):
|
|
myarg = sys.argv[i].lower().replace('_', '')
|
|
if myarg == 'ids':
|
|
resource_ids.extend(sys.argv[i + 1].split(','))
|
|
i += 2
|
|
elif myarg == 'query':
|
|
query = sys.argv[i + 1]
|
|
page_message = gapi.got_total_items_msg('Browsers', '...\n')
|
|
browsers = gapi.get_all_pages(cbcm.chromebrowsers(), 'list',
|
|
'browsers', page_message=page_message,
|
|
customer=customer_id,
|
|
query=query, projection='BASIC',
|
|
fields='browsers(deviceId),nextPageToken')
|
|
ids = [browser['deviceId'] for browser in browsers]
|
|
resource_ids.extend(ids)
|
|
i += 2
|
|
elif myarg == 'file':
|
|
with fileutils.open_file(sys.argv[i+1], strip_utf_bom=True) as filed:
|
|
for row in filed:
|
|
rid = row.strip()
|
|
if rid:
|
|
resource_ids.append(rid)
|
|
i += 2
|
|
elif myarg == 'csvfile':
|
|
drive, fname_column = os.path.splitdrive(sys.argv[i+1])
|
|
if fname_column.find(':') == -1:
|
|
controlflow.system_error_exit(
|
|
2, 'Expected csvfile FileName:FieldName')
|
|
(filename, column) = fname_column.split(':')
|
|
with fileutils.open_file(drive + filename) as filed:
|
|
input_file = csv.DictReader(filed, restval='')
|
|
if column not in input_file.fieldnames:
|
|
controlflow.csv_field_error_exit(column,
|
|
input_file.fieldnames)
|
|
for row in input_file:
|
|
rid = row[column].strip()
|
|
if rid:
|
|
resource_ids.append(rid)
|
|
i += 2
|
|
elif myarg in ['ou', 'orgunit', 'org']:
|
|
org_unit = gapi_directory_orgunits.getOrgUnitItem(sys.argv[i + 1])
|
|
body['org_unit_path'] = org_unit
|
|
i += 2
|
|
elif myarg == 'batchsize':
|
|
batch_size = int(sys.argv[i+1])
|
|
i += 2
|
|
else:
|
|
controlflow.invalid_argument_exit(sys.argv[i],
|
|
'gam move browsers')
|
|
if 'org_unit_path' not in body:
|
|
controlflow.missing_argument_exit('ou', 'gam move browsers')
|
|
elif not resource_ids:
|
|
controlflow.missing_argument_exit('query or ids',
|
|
'gam move browsers')
|
|
# split moves into max 600 devices per batch
|
|
for chunk in range(0, len(resource_ids), batch_size):
|
|
body['resource_ids'] = resource_ids[chunk:chunk + batch_size]
|
|
print(f' moving {len(body["resource_ids"])} browsers to ' \
|
|
f'{body["org_unit_path"]}')
|
|
gapi.call(cbcm.chromebrowsers(), 'moveChromeBrowsersToOu',
|
|
customer=customer_id, body=body)
|
|
|
|
|
|
def print_():
|
|
cbcm = build()
|
|
customer_id = _get_customerid()
|
|
projection = 'BASIC'
|
|
orgUnitPath = query = None
|
|
fields = None
|
|
titles = []
|
|
csv_rows = []
|
|
todrive = False
|
|
sort_headers = False
|
|
i = 3
|
|
while i < len(sys.argv):
|
|
myarg = sys.argv[i].lower().replace('_', '')
|
|
if myarg == 'query':
|
|
query = sys.argv[i+1]
|
|
i += 2
|
|
elif myarg in ['ou', 'org', 'orgunit']:
|
|
orgUnitPath = gapi_directory_orgunits.getOrgUnitItem(sys.argv[i + 1], pathOnly=True, absolutePath=True)
|
|
i += 2
|
|
elif myarg == 'projection':
|
|
projection = sys.argv[i + 1].upper()
|
|
i += 2
|
|
elif myarg == 'todrive':
|
|
todrive = True
|
|
i += 1
|
|
elif myarg == 'sortheaders':
|
|
sort_headers = True
|
|
i += 1
|
|
elif myarg == 'fields':
|
|
fields = sys.argv[i + 1].replace(',', ' ').split()
|
|
i += 2
|
|
else:
|
|
controlflow.invalid_argument_exit(sys.argv[i],
|
|
'gam print browsers')
|
|
if fields:
|
|
fields.append('deviceId')
|
|
fields = f'browsers({",".join(set(fields))}),nextPageToken'
|
|
page_message = gapi.got_total_items_msg('Browsers', '...\n')
|
|
browsers = gapi.get_all_pages(cbcm.chromebrowsers(), 'list',
|
|
'browsers', page_message=page_message,
|
|
customer=customer_id,
|
|
orgUnitPath=orgUnitPath, query=query, projection=projection,
|
|
fields=fields)
|
|
for browser in browsers:
|
|
browser = utils.flatten_json(browser)
|
|
for a_key in browser:
|
|
if a_key not in titles:
|
|
titles.append(a_key)
|
|
csv_rows.append(browser)
|
|
if sort_headers:
|
|
display.sort_csv_titles(['deviceId',], titles)
|
|
display.write_csv_file(csv_rows, titles, 'Browsers', todrive)
|
|
|
|
|
|
attributes = {
|
|
'assetid': 'annotatedAssetId',
|
|
'location': 'annotatedLocation',
|
|
'notes': 'annotatedNotes',
|
|
'user': 'annotatedUser'
|
|
}
|
|
attribute_fields = ','.join(list(attributes.values()))
|
|
|
|
def update():
|
|
cbcm = build()
|
|
customer_id = _get_customerid()
|
|
device_id = sys.argv[3]
|
|
body = {'deviceId': device_id}
|
|
i = 4
|
|
while i < len(sys.argv):
|
|
myarg = sys.argv[i].lower().replace('_', '')
|
|
if myarg in attributes:
|
|
body[attributes[myarg]] = sys.argv[i+1]
|
|
i += 2
|
|
else:
|
|
controlflow.invalid_argument_exit(sys.argv[i],
|
|
'gam update browser')
|
|
browser = gapi.call(cbcm.chromebrowsers(), 'get', deviceId=device_id,
|
|
customer=customer_id,
|
|
projection='BASIC', fields=attribute_fields)
|
|
browser.update(body)
|
|
result = gapi.call(cbcm.chromebrowsers(), 'update', deviceId=device_id,
|
|
customer=customer_id, body=browser,
|
|
projection='BASIC', fields="deviceId")
|
|
print(f'Updated browser {result["deviceId"]}')
|
|
|
|
|
|
def createtoken():
|
|
cbcm = build()
|
|
customer_id = _get_customerid()
|
|
body = {'token_type': 'CHROME_BROWSER'}
|
|
i = 3
|
|
while i < len(sys.argv):
|
|
myarg = sys.argv[i].lower().replace('_', '')
|
|
if myarg in ['ou', 'orgunit', 'org']:
|
|
body['org_unit_path'] = gapi_directory_orgunits.getOrgUnitItem(sys.argv[i + 1])
|
|
i += 2
|
|
elif myarg in ['expire', 'expires']:
|
|
body['expire_time'] = utils.get_time_or_delta_from_now(sys.argv[i + 1])
|
|
i += 2
|
|
else:
|
|
controlflow.invalid_argument_exit(sys.argv[i],
|
|
'gam create browsertoken')
|
|
browser = gapi.call(cbcm.enrollmentTokens(), 'create',
|
|
customer=customer_id, body=body)
|
|
print(f'Created browser enrollment token {browser["token"]}')
|
|
|
|
|
|
def revoketoken():
|
|
cbcm = build()
|
|
customer_id = _get_customerid()
|
|
token_permanent_id = sys.argv[3]
|
|
gapi.call(cbcm.enrollmentTokens(), 'revoke', tokenPermanentId=token_permanent_id,
|
|
customer=customer_id)
|
|
print(f'Deleted browser enrollment token {token_permanent_id}')
|
|
|
|
|
|
def printshowtokens(csvFormat):
|
|
cbcm = build()
|
|
customer_id = _get_customerid()
|
|
query = None
|
|
fields = None
|
|
if csvFormat:
|
|
titles = ['token']
|
|
csv_rows = []
|
|
todrive = False
|
|
sort_headers = False
|
|
i = 3
|
|
while i < len(sys.argv):
|
|
myarg = sys.argv[i].lower().replace('_', '')
|
|
if myarg == 'query':
|
|
query = sys.argv[i+1]
|
|
i += 2
|
|
elif csvFormat and myarg == 'todrive':
|
|
todrive = True
|
|
i += 1
|
|
elif csvFormat and myarg == 'sortheaders':
|
|
sort_headers = True
|
|
i += 1
|
|
elif myarg == 'fields':
|
|
fields = sys.argv[i + 1].replace(',', ' ').split()
|
|
i += 2
|
|
else:
|
|
controlflow.invalid_argument_exit(sys.argv[i],
|
|
f"gam {['show', 'print'][csvFormat]} browsertokens")
|
|
if fields:
|
|
fields.append('token')
|
|
fields = f'chromeEnrollmentTokens({",".join(set(fields))}),nextPageToken'
|
|
page_message = gapi.got_total_items_msg('Chrome Browser Enrollment Tokens', '...\n')
|
|
browsers = gapi.get_all_pages(cbcm.enrollmentTokens(), 'list',
|
|
'chromeEnrollmentTokens', page_message=page_message,
|
|
customer=customer_id,
|
|
query=query, fields=fields)
|
|
if not csvFormat:
|
|
count = len(browsers)
|
|
print(f'Show {count} Chrome Browser Enrollment Tokens')
|
|
i = 0
|
|
for browser in browsers:
|
|
i += 1
|
|
print(f' Chrome Browser Enrollment Token: {browser["token"]}{gam.currentCount(i, count)}')
|
|
browser.pop('kind', None)
|
|
for field in browser:
|
|
print(f' {field}: {browser[field]}')
|
|
else:
|
|
for browser in browsers:
|
|
browser = utils.flatten_json(browser)
|
|
for a_key in browser:
|
|
if a_key not in titles:
|
|
titles.append(a_key)
|
|
csv_rows.append(browser)
|
|
if sort_headers:
|
|
display.sort_csv_titles(['token',], titles)
|
|
display.write_csv_file(csv_rows, titles, 'Chrome Browser Enrollment Tokens', todrive)
|