move CrOS AUE dates to dynamic file

This commit is contained in:
Jay Lee
2019-06-18 11:20:24 -04:00
parent ea630480b2
commit df4de5ce4b
3 changed files with 18 additions and 276 deletions

View File

@@ -7556,10 +7556,11 @@ def getCRMService(login_hint):
discoveryServiceUrl=googleapiclient.discovery.V2_DISCOVERY_URI), discoveryServiceUrl=googleapiclient.discovery.V2_DISCOVERY_URI),
http) http)
def getGAMProjectAPIs(): def getGAMProjectFile(filepath):
file_url = GAM_PROJECT_FILEPATH+filepath
httpObj = _createHttpObj() httpObj = _createHttpObj()
_, c = httpObj.request(GAM_PROJECT_APIS, 'GET') _, c = httpObj.request(file_url, 'GET')
return httpObj, c.decode(UTF8).splitlines() return c.decode(UTF8)
def enableGAMProjectAPIs(GAMProjectAPIs, httpObj, projectId, checkEnabled, i=0, count=0): def enableGAMProjectAPIs(GAMProjectAPIs, httpObj, projectId, checkEnabled, i=0, count=0):
apis = GAMProjectAPIs[:] apis = GAMProjectAPIs[:]
@@ -7639,7 +7640,7 @@ def _createClientSecretsOauth2service(httpObj, projectId):
print('Unknown error: %s' % content) print('Unknown error: %s' % content)
return False return False
simplehttp, GAMProjectAPIs = getGAMProjectAPIs() GAMProjectAPIs = getGAMProjectFile('src/project-apis.txt').splitlines()
enableGAMProjectAPIs(GAMProjectAPIs, httpObj, projectId, False) enableGAMProjectAPIs(GAMProjectAPIs, httpObj, projectId, False)
iam = googleapiclient.discovery.build('iam', 'v1', iam = googleapiclient.discovery.build('iam', 'v1',
http=httpObj, cache_discovery=False, http=httpObj, cache_discovery=False,
@@ -7684,6 +7685,7 @@ def _createClientSecretsOauth2service(httpObj, projectId):
client_secret = input('Enter your Client Secret: ').strip() client_secret = input('Enter your Client Secret: ').strip()
if not client_secret: if not client_secret:
client_secret = input().strip() client_secret = input().strip()
simplehttp = _createHttpObj()
client_valid = _checkClientAndSecret(simplehttp, client_id, client_secret) client_valid = _checkClientAndSecret(simplehttp, client_id, client_secret)
if client_valid: if client_valid:
break break
@@ -7890,7 +7892,7 @@ def doUseProject():
def doUpdateProjects(): def doUpdateProjects():
_, httpObj, login_hint, projects, _ = _getLoginHintProjects(False) _, httpObj, login_hint, projects, _ = _getLoginHintProjects(False)
_, GAMProjectAPIs = getGAMProjectAPIs() GAMProjectAPIs = getGAMProjectFile('src/project-apis.txt').splitlines()
count = len(projects) count = len(projects)
print('User: {0}, Update {1} Projects'.format(login_hint, count)) print('User: {0}, Update {1} Projects'.format(login_hint, count))
i = 0 i = 0
@@ -12140,12 +12142,14 @@ def _checkTPMVulnerability(cros):
cros['tpmVersionInfo']['tpmVulnerability'] = 'NOT IMPACTED' cros['tpmVersionInfo']['tpmVulnerability'] = 'NOT IMPACTED'
def _guessAUE(cros, guessedAUEs): def _guessAUE(cros, guessedAUEs):
if not GC_Values.get('CROS_AUE_DATES', None):
GC_Values['CROS_AUE_DATES'] = json.loads(getGAMProjectFile('src/cros-aue-dates.json'))
crosModel = cros.get('model') crosModel = cros.get('model')
if crosModel: if crosModel:
if crosModel not in guessedAUEs: if crosModel not in guessedAUEs:
closest_match = difflib.get_close_matches(crosModel.lower(), CROS_AUE_DATES, n=1) closest_match = difflib.get_close_matches(crosModel.lower(), GC_Values['CROS_AUE_DATES'], n=1)
if closest_match: if closest_match:
guessedAUEs[crosModel] = {'guessedAUEDate': CROS_AUE_DATES[closest_match[0]], guessedAUEs[crosModel] = {'guessedAUEDate': GC_Values['CROS_AUE_DATES'][closest_match[0]],
'guessedAUEModel': closest_match[0]} 'guessedAUEModel': closest_match[0]}
else: else:
guessedAUEs[crosModel] = {'guessedAUEDate': u'', guessedAUEs[crosModel] = {'guessedAUEDate': u'',

View File

@@ -4,6 +4,8 @@ from xml.etree import ElementTree as ET
import requests import requests
from html.parser import HTMLParser from html.parser import HTMLParser
import string import string
import sys
import json
import dateutil.parser import dateutil.parser
class MyHTMLParser(HTMLParser): class MyHTMLParser(HTMLParser):
@@ -27,10 +29,10 @@ class MyHTMLParser(HTMLParser):
fullname = '%s %s' % (oem, model) fullname = '%s %s' % (oem, model)
fullname = fullname.lower() fullname = fullname.lower()
date = dateutil.parser.parse(data).replace(day=1).strftime('%Y-%m-%dT00:00:00.000Z') date = dateutil.parser.parse(data).replace(day=1).strftime('%Y-%m-%dT00:00:00.000Z')
output_rows.append(" '%s': '%s'," % (fullname, date)) output_rows[fullname] = date
if fullname in exceptions: if fullname in exceptions:
for value in exceptions[fullname]: for value in exceptions[fullname]:
output_rows.append(" '%s': '%s'," % (value, date)) output_rows[value] = date
data_is_date = False data_is_date = False
else: else:
model = ''.join(filter(lambda x: x in printable, data)).replace('"', '\\"') model = ''.join(filter(lambda x: x in printable, data)).replace('"', '\\"')
@@ -38,7 +40,7 @@ class MyHTMLParser(HTMLParser):
next_data_is_td = False next_data_is_td = False
global oem, next_data_is_oem, next_data_is_td, data_is_date, model, printable, exceptions, output_rows global oem, next_data_is_oem, next_data_is_td, data_is_date, model, printable, exceptions, output_rows
output_rows = [] output_rows = {}
printable = set(string.printable) printable = set(string.printable)
exceptions = { exceptions = {
# 'AUE OEM MODEL': ['API MODEL 1', ...] # 'AUE OEM MODEL': ['API MODEL 1', ...]
@@ -95,10 +97,6 @@ next_data_is_oem = False
next_data_is_td = False next_data_is_td = False
data_is_date = False data_is_date = False
auepage = requests.get('https://support.google.com/chrome/a/answer/6220366?hl=en') auepage = requests.get('https://support.google.com/chrome/a/answer/6220366?hl=en')
print('CROS_AUE_DATES = {')
parser = MyHTMLParser() parser = MyHTMLParser()
parser.feed(auepage.content.decode('utf-8')) parser.feed(auepage.content.decode('utf-8'))
output_rows.sort(key=str.lower) print(json.dumps(output_rows, indent=2, sort_keys=True))
for row in output_rows:
print(row)
print('}')

View File

@@ -20,7 +20,7 @@ GAM_RELEASES = 'https://github.com/jay0lee/GAM/releases'
GAM_WIKI = 'https://github.com/jay0lee/GAM/wiki' GAM_WIKI = 'https://github.com/jay0lee/GAM/wiki'
GAM_ALL_RELEASES = 'https://api.github.com/repos/jay0lee/GAM/releases' GAM_ALL_RELEASES = 'https://api.github.com/repos/jay0lee/GAM/releases'
GAM_LATEST_RELEASE = GAM_ALL_RELEASES+'/latest' GAM_LATEST_RELEASE = GAM_ALL_RELEASES+'/latest'
GAM_PROJECT_APIS = 'https://raw.githubusercontent.com/jay0lee/GAM/master/src/project-apis.txt' GAM_PROJECT_FILEPATH = 'https://raw.githubusercontent.com/jay0lee/GAM/master/'
true_values = ['on', 'yes', 'enabled', 'true', '1'] true_values = ['on', 'yes', 'enabled', 'true', '1']
false_values = ['off', 'no', 'disabled', 'false', '0'] false_values = ['off', 'no', 'disabled', 'false', '0']
@@ -600,266 +600,6 @@ CROS_END_ARGUMENTS = ['end', 'enddate']
CROS_TPM_VULN_VERSIONS = ['41f', '420', '628', '8520',] CROS_TPM_VULN_VERSIONS = ['41f', '420', '628', '8520',]
CROS_TPM_FIXED_VERSIONS = ['422', '62b', '8521',] CROS_TPM_FIXED_VERSIONS = ['422', '62b', '8521',]
# parsed from https://support.google.com/chrome/a/answer/6220366?hl=en
# using src/tools/parse-aue.py
CROS_AUE_DATES = {
'acer ac700': '2016-08-01T00:00:00.000Z',
'acer c7 chromebook (c710)': '2017-10-01T00:00:00.000Z',
'acer c7 chromebook': '2017-10-01T00:00:00.000Z',
'acer c720 chromebook': '2019-06-01T00:00:00.000Z',
'acer c740 chromebook': '2019-06-01T00:00:00.000Z',
'acer chromebase 24': '2021-06-01T00:00:00.000Z',
'acer chromebase': '2020-08-01T00:00:00.000Z',
'acer chromebook 11 (c720, c720p)': '2019-06-01T00:00:00.000Z',
'acer chromebook 11 (c732, c732t, c732l, c732lt)': '2023-11-01T00:00:00.000Z',
'acer chromebook 11 (c740)': '2020-06-01T00:00:00.000Z',
'acer chromebook 11 (c771, c771t)': '2022-11-01T00:00:00.000Z',
'acer chromebook 11 (cb3-111, c730, c730e)': '2019-08-01T00:00:00.000Z',
'acer chromebook 11 (cb3-131, c735)': '2021-01-01T00:00:00.000Z',
'acer chromebook 11 (cb311-8h, cb311-8ht)': '2023-11-01T00:00:00.000Z',
'acer chromebook 11 n7 (c731, c731t)': '2022-01-01T00:00:00.000Z',
'acer chromebook 13 (cb5-311)': '2019-09-01T00:00:00.000Z',
'acer chromebook 13 (cb713-1w)': '2024-06-01T00:00:00.000Z',
'acer chromebook 13(cb5-311, c810)': '2019-09-01T00:00:00.000Z',
'acer chromebook 14 (cb3-431)': '2021-06-01T00:00:00.000Z',
'acer chromebook 14 for work (cp5-471)': '2022-11-01T00:00:00.000Z',
'acer chromebook 15 (c910 / cb5-571)': '2020-06-01T00:00:00.000Z',
'acer chromebook 15 (cb3-531)': '2020-06-01T00:00:00.000Z',
'acer chromebook 15 (cb3-532)': '2021-08-01T00:00:00.000Z',
'acer chromebook 15 (cb315-1h,cb315-1ht)': '2023-11-01T00:00:00.000Z',
'acer chromebook 15 (cb5-571, c910)': '2020-06-01T00:00:00.000Z',
'acer chromebook 15 (cb515-1h,cb515-1ht)': '2023-11-01T00:00:00.000Z',
'acer chromebook 311 (c721, c733, c733u, c733t)': '2025-06-01T00:00:00.000Z',
'acer chromebook 311': '2025-06-01T00:00:00.000Z',
'acer chromebook 311': '2025-06-01T00:00:00.000Z',
'acer chromebook 315 (cb315-2h)': '2025-06-01T00:00:00.000Z',
'acer chromebook 315': '2025-06-01T00:00:00.000Z',
'acer chromebook 512 (c851, c851t)': '2025-06-01T00:00:00.000Z',
'acer chromebook 514': '2023-11-01T00:00:00.000Z',
'acer chromebook 714 (cb714-1w / cb714-1wt)': '2024-06-01T00:00:00.000Z',
'acer chromebook 715 (cb715-1w / cb715-1wt)': '2024-06-01T00:00:00.000Z',
'acer chromebook r11 (cb5-132t, c738t)': '2021-06-01T00:00:00.000Z',
'acer chromebook r13 (cb5-312t)': '2021-09-01T00:00:00.000Z',
'acer chromebook spin 11 (cp311-h1, cp311-1hn)': '2023-11-01T00:00:00.000Z',
'acer chromebook spin 11 (r751t)': '2023-11-01T00:00:00.000Z',
'acer chromebook spin 13 (cp713-1wn)': '2024-06-01T00:00:00.000Z',
'acer chromebook spin 15 (cp315)': '2023-11-01T00:00:00.000Z',
'acer chromebook spin 311 (r721t)': '2025-06-01T00:00:00.000Z',
'acer chromebook spin 511 (r752t, r752tn)': '2025-06-01T00:00:00.000Z',
'acer chromebook spin 511': '2025-06-01T00:00:00.000Z',
'acer chromebook spin 512 (r851tn)': '2025-06-01T00:00:00.000Z',
'acer chromebook tab 10': '2023-08-01T00:00:00.000Z',
'acer chromebox cxi2 / cxv2': '2020-06-01T00:00:00.000Z',
'acer chromebox cxi2': '2020-06-01T00:00:00.000Z',
'acer chromebox cxi3': '2024-06-01T00:00:00.000Z',
'acer chromebox': '2019-09-01T00:00:00.000Z',
'aopen chromebase commercial': '2020-09-01T00:00:00.000Z',
'aopen chromebase mini': '2022-02-01T00:00:00.000Z',
'aopen chromebox commercial 2': '2024-06-01T00:00:00.000Z',
'aopen chromebox commercial': '2020-09-01T00:00:00.000Z',
'aopen chromebox mini': '2022-02-01T00:00:00.000Z',
'asi chromebook': '2020-06-01T00:00:00.000Z',
'asus chromebit cs10': '2020-11-01T00:00:00.000Z',
'asus chromebook c200': '2019-06-01T00:00:00.000Z',
'asus chromebook c200ma': '2019-06-01T00:00:00.000Z',
'asus chromebook c201pa': '2020-06-01T00:00:00.000Z',
'asus chromebook c201pa': '2020-06-01T00:00:00.000Z',
'asus chromebook c202sa': '2021-06-01T00:00:00.000Z',
'asus chromebook c204': '2025-06-01T00:00:00.000Z',
'asus chromebook c204': '2025-06-01T00:00:00.000Z',
'asus chromebook c213na': '2023-11-01T00:00:00.000Z',
'asus chromebook c223': '2023-11-01T00:00:00.000Z',
'asus chromebook c300': '2019-08-01T00:00:00.000Z',
'asus chromebook c300ma': '2019-08-01T00:00:00.000Z',
'asus chromebook c300sa / c301sa': '2021-06-01T00:00:00.000Z',
'asus chromebook c403': '2023-11-01T00:00:00.000Z',
'asus chromebook c423': '2023-11-01T00:00:00.000Z',
'asus chromebook c523': '2023-11-01T00:00:00.000Z',
'asus chromebook flip c100pa': '2020-07-01T00:00:00.000Z',
'asus chromebook flip c101pa': '2023-08-01T00:00:00.000Z',
'asus chromebook flip c213': '2023-11-01T00:00:00.000Z',
'asus chromebook flip c214': '2025-06-01T00:00:00.000Z',
'asus chromebook flip c302': '2022-11-01T00:00:00.000Z',
'asus chromebook flip c434': '2024-06-01T00:00:00.000Z',
'asus chromebook tablet ct100': '2023-08-01T00:00:00.000Z',
'asus chromebox (cn60)': '2019-09-01T00:00:00.000Z',
'asus chromebox 2 (cn62)': '2021-06-01T00:00:00.000Z',
'asus chromebox 3 (cn65)': '2024-06-01T00:00:00.000Z',
'asus chromebox 3': '2024-06-01T00:00:00.000Z',
'asus chromebox cn60': '2019-09-01T00:00:00.000Z',
'asus chromebox cn62': '2021-06-01T00:00:00.000Z',
'bobicus chromebook 11': '2020-06-01T00:00:00.000Z',
'chromebook 11 (c730 / cb3-111)': '2019-08-01T00:00:00.000Z',
'chromebook 11 (c735)': '2021-01-01T00:00:00.000Z',
'chromebook 15 (cb515 - 1ht / 1h)': '2023-11-01T00:00:00.000Z',
'chromebook 311 (c721)': '2025-06-01T00:00:00.000Z',
'chromebook pcm-116e': '2020-06-01T00:00:00.000Z',
'consumer chromebook': '2020-06-01T00:00:00.000Z',
'cr-48': '2015-12-01T00:00:00.000Z',
'crambo chromebook': '2020-06-01T00:00:00.000Z',
'ctl chromebook j41 / j41t': '2023-11-01T00:00:00.000Z',
'ctl chromebook nl7 / nl7t-360 / nl7tw-360': '2023-11-01T00:00:00.000Z',
'ctl chromebook nl7': '2023-11-01T00:00:00.000Z',
'ctl chromebook tab tx1': '2023-08-01T00:00:00.000Z',
'ctl chromebook tablet tx1 for education': '2023-08-01T00:00:00.000Z',
'ctl chromebox cbx1': '2024-06-01T00:00:00.000Z',
'ctl j2 / j4 chromebook': '2020-06-01T00:00:00.000Z',
'ctl j5 chromebook': '2021-08-01T00:00:00.000Z',
'ctl n6 education chromebook': '2020-06-01T00:00:00.000Z',
'ctl nl61 chromebook': '2021-08-01T00:00:00.000Z',
'dell chromebook 11 (3120)': '2020-06-01T00:00:00.000Z',
'dell chromebook 11 (3180)': '2022-05-01T00:00:00.000Z',
'dell chromebook 11 (5190)': '2023-11-01T00:00:00.000Z',
'dell chromebook 11 2-in-1 (3189)': '2022-05-01T00:00:00.000Z',
'dell chromebook 11 2-in-1 (5190)': '2023-11-01T00:00:00.000Z',
'dell chromebook 11': '2019-06-01T00:00:00.000Z',
'dell chromebook 13 (3380)': '2022-11-01T00:00:00.000Z',
'dell chromebook 13 (7310)': '2020-09-01T00:00:00.000Z',
'dell chromebook 3100 2-in-1': '2025-06-01T00:00:00.000Z',
'dell chromebook 3100': '2025-06-01T00:00:00.000Z',
'dell chromebook 3400': '2025-06-01T00:00:00.000Z',
'dell chromebox': '2019-09-01T00:00:00.000Z',
'dell inspiron chromebook 14 2-in-1 (7486)': '2024-06-01T00:00:00.000Z',
'edugear chromebook k': '2020-06-01T00:00:00.000Z',
'edugear chromebook m': '2020-06-01T00:00:00.000Z',
'edugear chromebook r': '2020-06-01T00:00:00.000Z',
'edugear cmt chromebook': '2021-08-01T00:00:00.000Z',
'edxis chromebook': '2020-06-01T00:00:00.000Z',
'edxis education chromebook': '2020-06-01T00:00:00.000Z',
'epik 11.6" chromebook elb1101': '2020-06-01T00:00:00.000Z',
'google chromebook pixel (2015)': '2020-06-01T00:00:00.000Z',
'google chromebook pixel': '2018-06-01T00:00:00.000Z',
'google cr-48': '2015-12-01T00:00:00.000Z',
'google pixel slate': '2024-06-01T00:00:00.000Z',
'google pixelbook': '2024-06-01T00:00:00.000Z',
'haier chromebook 11 c': '2021-08-01T00:00:00.000Z',
'haier chromebook 11 g2': '2020-09-01T00:00:00.000Z',
'haier chromebook 11': '2020-06-01T00:00:00.000Z',
'haier chromebook 11e': '2020-06-01T00:00:00.000Z',
'hexa chromebook pi': '2020-06-01T00:00:00.000Z',
'hisense chromebook 11': '2020-06-01T00:00:00.000Z',
'hp chromebook 11 1100-1199 / hp chromebook 11 g1': '2018-10-01T00:00:00.000Z',
'hp chromebook 11 2000-2099 / hp chromebook 11 g2': '2019-06-01T00:00:00.000Z',
'hp chromebook 11 2100-2199 / hp chromebook 11 g3': '2020-06-01T00:00:00.000Z',
'hp chromebook 11 2200-2299 / hp chromebook 11 g4/g4 ee': '2020-06-01T00:00:00.000Z',
'hp chromebook 11 g1': '2018-10-01T00:00:00.000Z',
'hp chromebook 11 g2': '2019-06-01T00:00:00.000Z',
'hp chromebook 11 g3': '2020-06-01T00:00:00.000Z',
'hp chromebook 11 g4/g4 ee': '2020-06-01T00:00:00.000Z',
'hp chromebook 11 g5 / hp chromebook 11-vxxx': '2021-07-01T00:00:00.000Z',
'hp chromebook 11 g5 ee': '2022-01-01T00:00:00.000Z',
'hp chromebook 11 g5': '2021-07-01T00:00:00.000Z',
'hp chromebook 11 g6 ee': '2023-11-01T00:00:00.000Z',
'hp chromebook 11 g7 ee': '2025-06-01T00:00:00.000Z',
'hp chromebook 11a g6 ee': '2025-06-01T00:00:00.000Z',
'hp chromebook 13 g1': '2022-11-01T00:00:00.000Z',
'hp chromebook 14 / hp chromebook 14 g5': '2023-11-01T00:00:00.000Z',
'hp chromebook 14 ak000-099 / hp chromebook 14 g4': '2021-09-01T00:00:00.000Z',
'hp chromebook 14 db0000-db0999': '2025-06-01T00:00:00.000Z',
'hp chromebook 14 g3': '2019-10-01T00:00:00.000Z',
'hp chromebook 14 g4': '2021-09-01T00:00:00.000Z',
'hp chromebook 14 g5': '2023-11-01T00:00:00.000Z',
'hp chromebook 14 x000-x999 / hp chromebook 14 g3': '2019-10-01T00:00:00.000Z',
'hp chromebook 14': '2019-06-01T00:00:00.000Z',
'hp chromebook 14a g5': '2025-06-01T00:00:00.000Z',
'hp chromebook 15 g1': '2024-06-01T00:00:00.000Z',
'hp chromebook x2 ': '2024-06-01T00:00:00.000Z',
'hp chromebook x360 11 g1 ee': '2023-11-01T00:00:00.000Z',
'hp chromebook x360 11 g2 ee': '2025-06-01T00:00:00.000Z',
'hp chromebook x360 14 g1': '2024-06-01T00:00:00.000Z',
'hp chromebook x360 14': '2024-06-01T00:00:00.000Z',
'hp chromebox cb1-(000-099) / hp chromebox g1/ hp chromebox for meetings': '2019-09-01T00:00:00.000Z',
'hp chromebox g1': '2019-09-01T00:00:00.000Z',
'hp chromebox g2': '2024-06-01T00:00:00.000Z',
'hp pavilion chromebook 14': '2018-02-01T00:00:00.000Z',
'jp sa couto chromebook': '2020-06-01T00:00:00.000Z',
'lava xolo chromebook': '2020-06-01T00:00:00.000Z',
'lenovo 100e chromebook 2nd gen mtk': '2025-06-01T00:00:00.000Z',
'lenovo 100e chromebook 2nd gen': '2025-06-01T00:00:00.000Z',
'lenovo 100e chromebook': '2023-11-01T00:00:00.000Z',
'lenovo 100s chromebook': '2020-09-01T00:00:00.000Z',
'lenovo 14e chromebook': '2025-06-01T00:00:00.000Z',
'lenovo 300e chromebook 2nd gen mtk': '2025-06-01T00:00:00.000Z',
'lenovo 300e chromebook 2nd gen': '2025-06-01T00:00:00.000Z',
'lenovo 300e chromebook': '2025-06-01T00:00:00.000Z',
'lenovo 500e chromebook 2nd gen': '2025-06-01T00:00:00.000Z',
'lenovo 500e chromebook': '2023-11-01T00:00:00.000Z',
'lenovo chromebook c330': '2022-06-01T00:00:00.000Z',
'lenovo chromebook s330': '2022-06-01T00:00:00.000Z',
'lenovo flex 11 chromebook': '2022-06-01T00:00:00.000Z',
'lenovo ideapad c330 chromebook': '2022-06-01T00:00:00.000Z',
'lenovo ideapad s330 chromebook': '2022-06-01T00:00:00.000Z',
'lenovo n20 chromebook': '2019-06-01T00:00:00.000Z',
'lenovo n21 chromebook': '2020-06-01T00:00:00.000Z',
'lenovo n22 chromebook': '2021-06-01T00:00:00.000Z',
'lenovo n23 chromebook': '2021-06-01T00:00:00.000Z',
'lenovo n23 yoga chromebook': '2022-06-01T00:00:00.000Z',
'lenovo n42 chromebook': '2021-06-01T00:00:00.000Z',
'lenovo thinkcentre chromebox': '2020-06-01T00:00:00.000Z',
'lenovo thinkpad 11e 3rd gen chromebook': '2021-06-01T00:00:00.000Z',
'lenovo thinkpad 11e 4th gen chromebook': '2023-11-01T00:00:00.000Z',
'lenovo thinkpad 11e chromebook (4th gen)/lenovo thinkpad yoga 11e chromebook (4th gen)': '2023-11-01T00:00:00.000Z',
'lenovo thinkpad 11e chromebook': '2019-06-01T00:00:00.000Z',
'lenovo thinkpad 13': '2022-11-01T00:00:00.000Z',
'lenovo thinkpad x131e chromebook': '2018-06-01T00:00:00.000Z',
'lenovo yoga c630 chromebook': '2024-06-01T00:00:00.000Z',
'lg chromebase (22cb25s)': '2020-06-01T00:00:00.000Z',
'lg chromebase (22cv241)': '2019-06-01T00:00:00.000Z',
'lumos education chromebook': '2020-06-01T00:00:00.000Z',
'm&a chromebook': '2020-06-01T00:00:00.000Z',
'mecer chromebook': '2020-06-01T00:00:00.000Z',
'mecer v2 chromebook': '2021-08-01T00:00:00.000Z',
'medion chromebook akoya s2013 ': '2020-06-01T00:00:00.000Z',
'medion chromebook s2015': '2020-06-01T00:00:00.000Z',
'multilaser chromebook m11c': '2021-08-01T00:00:00.000Z',
'ncomputing chromebook cx100': '2020-06-01T00:00:00.000Z',
'ncomputing chromebook cx110': '2020-06-01T00:00:00.000Z',
'nexian chromebook 11.6\"': '2020-06-01T00:00:00.000Z',
'pcmerge chromebook al116': '2023-11-01T00:00:00.000Z',
'pcmerge chromebookpcm-116e/pcm-116eb': '2020-06-01T00:00:00.000Z',
'pcmerge chromebookpcm-116t-432b': '2021-08-01T00:00:00.000Z',
'poin2 chromebook 11': '2020-06-01T00:00:00.000Z',
'poin2 chromebook 11c': '2022-03-01T00:00:00.000Z',
'poin2 chromebook 14': '2022-03-01T00:00:00.000Z',
'positivo chromebook c216b': '2021-08-01T00:00:00.000Z',
'positivo chromebook ch1190': '2020-06-01T00:00:00.000Z',
'prowise 11.6" entry line chromebook': '2020-06-01T00:00:00.000Z',
'prowise chromebook eduline': '2023-11-01T00:00:00.000Z',
'prowise chromebook entryline': '2020-06-01T00:00:00.000Z',
'prowise chromebook proline': '2021-08-01T00:00:00.000Z',
'prowise proline chromebook': '2021-08-01T00:00:00.000Z',
'rgs education chromebook': '2020-06-01T00:00:00.000Z',
'samsung chromebook - xe303': '2018-07-01T00:00:00.000Z',
'samsung chromebook 2 11\" - xe500c12': '2020-06-01T00:00:00.000Z',
'samsung chromebook 2 11\"': '2019-06-01T00:00:00.000Z',
'samsung chromebook 2 13\"': '2019-06-01T00:00:00.000Z',
'samsung chromebook 3': '2021-06-01T00:00:00.000Z',
'samsung chromebook plus (v2)': '2024-06-01T00:00:00.000Z',
'samsung chromebook plus': '2023-08-01T00:00:00.000Z',
'samsung chromebook pro': '2022-11-01T00:00:00.000Z',
'samsung chromebook series 5 550': '2017-05-01T00:00:00.000Z',
'samsung chromebook series 5': '2016-06-01T00:00:00.000Z',
'samsung chromebook': '2018-07-01T00:00:00.000Z',
'samsung chromebox series 3': '2018-03-01T00:00:00.000Z',
'sector 5 e1 rugged chromebook': '2020-06-01T00:00:00.000Z',
'sector 5 e3 chromebook': '2023-11-01T00:00:00.000Z',
'senkatel c1101 chromebook': '2020-06-01T00:00:00.000Z',
'thinkpad 11e chromebook 3rd gen (yoga/clamshell)': '2021-06-01T00:00:00.000Z',
'thinkpad 13 chromebook': '2022-11-01T00:00:00.000Z',
'toshiba chromebook 2 (2015 edition)': '2020-09-01T00:00:00.000Z',
'toshiba chromebook 2': '2020-06-01T00:00:00.000Z',
'toshiba chromebook': '2019-06-01T00:00:00.000Z',
'true idc chromebook 11': '2020-06-01T00:00:00.000Z',
'true idc chromebook': '2020-06-01T00:00:00.000Z',
'videonet chromebook bl10': '2020-06-01T00:00:00.000Z',
'videonet chromebook': '2020-06-01T00:00:00.000Z',
'viewsonic nmp660 chromebox': '2024-06-01T00:00:00.000Z',
'viglen chromebook 11': '2020-06-01T00:00:00.000Z',
'viglen chromebook 11c': '2023-11-01T00:00:00.000Z',
'viglen chromebook 360': '2021-08-01T00:00:00.000Z',
'xolo chromebook': '2020-06-01T00:00:00.000Z',
}
COLLABORATIVE_ACL_CHOICES = { COLLABORATIVE_ACL_CHOICES = {
'members': 'ALL_MEMBERS', 'members': 'ALL_MEMBERS',
'managersonly': 'MANAGERS_ONLY', 'managersonly': 'MANAGERS_ONLY',