mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-28 18:01:36 +00:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16cef20094 | ||
|
|
e588c8851a | ||
|
|
d14cd1ad56 | ||
|
|
0e82964068 | ||
|
|
6394207c2f | ||
|
|
f12b367019 | ||
|
|
9b130ac8bf | ||
|
|
f35bde4f8b | ||
|
|
9ffabc15ff | ||
|
|
212460b636 | ||
|
|
be0dcbc8d4 | ||
|
|
b9ca2ba9a1 | ||
|
|
c4dea95f08 | ||
|
|
7b59b648c7 | ||
|
|
d791a864fa | ||
|
|
b3867fba5b | ||
|
|
e53f440ed2 | ||
|
|
51793f443d |
@@ -266,6 +266,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
appsheetstandard | appsheetenterprisestandard | 1010380002 | AppSheet Enterprise Standard |
|
appsheetstandard | appsheetenterprisestandard | 1010380002 | AppSheet Enterprise Standard |
|
||||||
appsheetplus | appsheetenterpriseplus | 1010380003 | AppSheet Enterprise Plus |
|
appsheetplus | appsheetenterpriseplus | 1010380003 | AppSheet Enterprise Plus |
|
||||||
assuredcontrols | 1010390001 | Assured Controls |
|
assuredcontrols | 1010390001 | Assured Controls |
|
||||||
|
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
||||||
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
||||||
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
||||||
cloudidentity | identity | 1010010001 | Cloud Identity |
|
cloudidentity | identity | 1010010001 | Cloud Identity |
|
||||||
@@ -281,11 +282,15 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
||||||
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
||||||
gsuitebusinessarchived | gsbau | businessarchived | 1010340002 | Google Workspace Business - Archived User |
|
gsuitebusinessarchived | gsbau | businessarchived | 1010340002 | Google Workspace Business - Archived User |
|
||||||
|
gsuiteedu | gafe | gsuiteeducation | Google-Apps-For-Education |
|
||||||
gsuiteenterprisearchived | gseau | enterprisearchived | 1010340001 | Google Workspace Enterprise Plus - Archived User |
|
gsuiteenterprisearchived | gseau | enterprisearchived | 1010340001 | Google Workspace Enterprise Plus - Archived User |
|
||||||
gsuiteenterpriseeducation | gsefe | e4e | 1010310002 | Google Workspace for Education Plus - Legacy |
|
gsuiteenterpriseeducation | gsefe | e4e | 1010310002 | Google Workspace for Education Plus - Legacy |
|
||||||
gsuiteenterpriseeducationstudent | gsefes | e4es | 1010310003 | Google Workspace for Education Plus - Legacy (Student) |
|
gsuiteenterpriseeducationstudent | gsefes | e4es | 1010310003 | Google Workspace for Education Plus - Legacy (Student) |
|
||||||
gsuitegov | gafg | gsuitegovernment | Google-Apps-For-Government |
|
gsuitegov | gafg | gsuitegovernment | Google-Apps-For-Government |
|
||||||
gsuitelite | gal | gsl | lite | Google-Apps-Lite |
|
gsuitelite | gal | gsl | lite | Google-Apps-Lite |
|
||||||
|
gwef | workspaceeducationfundamentals | 1010070001 | Google Workspace for Education Fundamentals |
|
||||||
|
gwefau | gwefarchived | workspaceeducationfundamentalsarchived | 1010340007 | Google Workspace for Education Fundamentals - Archived User |
|
||||||
|
gwegmo | workspaceeducationgmailonly | 1010070004 | Google Workspace for Education Gmail Only |
|
||||||
gwep | workspaceeducationplus | 1010310008 | Google Workspace for Education Plus |
|
gwep | workspaceeducationplus | 1010310008 | Google Workspace for Education Plus |
|
||||||
gwepstaff | workspaceeducationplusstaff | 1010310009 | Google Workspace for Education Plus (Staff) |
|
gwepstaff | workspaceeducationplusstaff | 1010310009 | Google Workspace for Education Plus (Staff) |
|
||||||
gwepstudent | workspaceeducationplusstudent | 1010310010 | Google Workspace for Education Plus (Extra Student)|
|
gwepstudent | workspaceeducationplusstudent | 1010310010 | Google Workspace for Education Plus (Extra Student)|
|
||||||
|
|||||||
@@ -1,3 +1,75 @@
|
|||||||
|
7.05.15
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> get drivefile` and `gam <UserTypeEntity> create drivefile`
|
||||||
|
to allow downloading and uploading of Google App Scripts.
|
||||||
|
```
|
||||||
|
$ gam user user1@domain.com get drivefile 1ZY-YkS3E0OKipALra_XzfIh9cvxoILSbb8TRdHBFCpyB_mXI_J8FmjHv format json
|
||||||
|
User: user1@domain.com, Download 1 Drive File
|
||||||
|
User: user1@domain.com, Drive File: Test Project, Downloaded to: /Users/gamteam/GamWork/Test Project.json, Type: Google Doc
|
||||||
|
$ gam user user2@domain.com create drivefile localfile "Test Project.json" mimetype application/vnd.google-apps.script+json drivefilename "Test Project"
|
||||||
|
User: user2@domain.com, Drive File: Test Project(1Ok_svw55VTreZ5CzcViJDLfEzVRi-Un8D9eG6I5pIeVyRl2YsmNiy3C_), Created with content from: Test Project.json
|
||||||
|
```
|
||||||
|
|
||||||
|
7.05.14
|
||||||
|
|
||||||
|
Added the following License SKU:
|
||||||
|
```
|
||||||
|
ProductId SKUId Display Name
|
||||||
|
101039 1010390002 Assured Controls Plus
|
||||||
|
```
|
||||||
|
|
||||||
|
7.05.13
|
||||||
|
|
||||||
|
Updated license product names to match Google.
|
||||||
|
|
||||||
|
7.05.12
|
||||||
|
|
||||||
|
Fixed bug in `gam update chromepolicy` where `appid` was misinterpreted for `chrome.devices.kiosk` policies
|
||||||
|
and an error was generated.
|
||||||
|
```
|
||||||
|
ERROR: Chrome Policy Schema: customers/C123abc456/policySchemas/<Field>, Does not exist
|
||||||
|
```
|
||||||
|
|
||||||
|
7.05.11
|
||||||
|
|
||||||
|
Added the following License SKUs:
|
||||||
|
```
|
||||||
|
ProductId SKUId Display Name
|
||||||
|
Google-Apps 1010070001 Google Workspace for Education Fundamentals
|
||||||
|
Google-Apps 1010070004 Google Workspace for Education Gmail Only
|
||||||
|
101034 1010340007 Google Workspace for Education Fundamentals - Archived User
|
||||||
|
```
|
||||||
|
|
||||||
|
7.05.10
|
||||||
|
|
||||||
|
Updated various chat space commands to handle the following error:
|
||||||
|
```
|
||||||
|
ERROR: 503: serviceNotAvailable - The service is currently unavailable
|
||||||
|
```
|
||||||
|
|
||||||
|
7.05.09
|
||||||
|
|
||||||
|
Fixed bug in `gam calendars <CalendarEntity> print events matchfield attendeesstatus required accepted resource_calendar@resource.calendar.google.com`
|
||||||
|
that caused a trap.
|
||||||
|
|
||||||
|
7.05.08
|
||||||
|
|
||||||
|
Added error message to `gam report` commands to indicate forbidden access;
|
||||||
|
previously, no error message was displayed.
|
||||||
|
```
|
||||||
|
ERROR: Customer ID: C012abc34, Caller does not have access to the customers reporting data.
|
||||||
|
```
|
||||||
|
|
||||||
|
7.05.07
|
||||||
|
|
||||||
|
Fixed bug in `gam calendars <CalendarEntity> info events` and `gam <UserTypeEntity> info events`
|
||||||
|
where option `showdayofweek` was not recognized.
|
||||||
|
|
||||||
|
7.05.06
|
||||||
|
|
||||||
|
Improve message displayed when a command is issued that requires Google Chat Bot setup;
|
||||||
|
display a link to the Wiki `Set up a Chat Bot` instructions.
|
||||||
|
|
||||||
7.05.05
|
7.05.05
|
||||||
|
|
||||||
Added options `password prompt` and `password uniqueprompt` to `gam create user <EmailAddress>`
|
Added options `password prompt` and `password uniqueprompt` to `gam create user <EmailAddress>`
|
||||||
|
|||||||
251
src/cacerts.pem
251
src/cacerts.pem
@@ -273,257 +273,6 @@ r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1
|
|||||||
gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+
|
gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
|
|
||||||
# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc.
|
|
||||||
# Label: "Entrust Root Certification Authority"
|
|
||||||
# Serial: 1164660820
|
|
||||||
# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4
|
|
||||||
# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9
|
|
||||||
# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
|
|
||||||
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
|
|
||||||
Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
|
|
||||||
KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
|
|
||||||
cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
|
|
||||||
NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
|
|
||||||
NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
|
|
||||||
ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
|
|
||||||
BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
|
|
||||||
KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
|
|
||||||
Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
|
|
||||||
4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
|
|
||||||
KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
|
|
||||||
rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
|
|
||||||
94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
|
|
||||||
sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
|
|
||||||
gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
|
|
||||||
kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
|
|
||||||
vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
|
||||||
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
|
|
||||||
O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
|
|
||||||
AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
|
|
||||||
9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
|
|
||||||
eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
|
|
||||||
0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only
|
|
||||||
# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only
|
|
||||||
# Label: "Entrust Root Certification Authority - EC1"
|
|
||||||
# Serial: 51543124481930649114116133369
|
|
||||||
# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc
|
|
||||||
# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47
|
|
||||||
# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG
|
|
||||||
A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3
|
|
||||||
d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu
|
|
||||||
dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq
|
|
||||||
RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy
|
|
||||||
MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD
|
|
||||||
VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
|
|
||||||
L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g
|
|
||||||
Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD
|
|
||||||
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi
|
|
||||||
A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt
|
|
||||||
ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH
|
|
||||||
Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
|
|
||||||
BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC
|
|
||||||
R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX
|
|
||||||
hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only
|
|
||||||
# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only
|
|
||||||
# Label: "Entrust Root Certification Authority - G2"
|
|
||||||
# Serial: 1246989352
|
|
||||||
# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2
|
|
||||||
# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4
|
|
||||||
# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC
|
|
||||||
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50
|
|
||||||
cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs
|
|
||||||
IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz
|
|
||||||
dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy
|
|
||||||
NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu
|
|
||||||
dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt
|
|
||||||
dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0
|
|
||||||
aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj
|
|
||||||
YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
|
||||||
AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T
|
|
||||||
RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN
|
|
||||||
cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW
|
|
||||||
wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1
|
|
||||||
U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0
|
|
||||||
jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP
|
|
||||||
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN
|
|
||||||
BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/
|
|
||||||
jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
|
|
||||||
Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v
|
|
||||||
1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R
|
|
||||||
nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH
|
|
||||||
VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
|
|
||||||
# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited
|
|
||||||
# Label: "Entrust.net Premium 2048 Secure Server CA"
|
|
||||||
# Serial: 946069240
|
|
||||||
# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90
|
|
||||||
# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31
|
|
||||||
# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
|
|
||||||
RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
|
|
||||||
bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
|
|
||||||
IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
|
|
||||||
ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
|
|
||||||
MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
|
|
||||||
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
|
|
||||||
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
|
|
||||||
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
|
|
||||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
|
|
||||||
K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
|
|
||||||
sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
|
|
||||||
MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
|
|
||||||
XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
|
|
||||||
HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
|
|
||||||
4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
|
|
||||||
HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
|
|
||||||
j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
|
|
||||||
U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
|
|
||||||
zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
|
|
||||||
u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
|
|
||||||
bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
|
|
||||||
fF6adulZkMV8gzURZVE=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=AffirmTrust Commercial O=AffirmTrust
|
|
||||||
# Subject: CN=AffirmTrust Commercial O=AffirmTrust
|
|
||||||
# Label: "AffirmTrust Commercial"
|
|
||||||
# Serial: 8608355977964138876
|
|
||||||
# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7
|
|
||||||
# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7
|
|
||||||
# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
|
|
||||||
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
|
|
||||||
dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
|
|
||||||
MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
|
|
||||||
cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
|
||||||
AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
|
|
||||||
Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
|
|
||||||
ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
|
|
||||||
MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
|
|
||||||
yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
|
|
||||||
VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
|
|
||||||
nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
|
|
||||||
KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
|
|
||||||
XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
|
|
||||||
vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
|
|
||||||
Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
|
|
||||||
N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
|
|
||||||
nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=AffirmTrust Networking O=AffirmTrust
|
|
||||||
# Subject: CN=AffirmTrust Networking O=AffirmTrust
|
|
||||||
# Label: "AffirmTrust Networking"
|
|
||||||
# Serial: 8957382827206547757
|
|
||||||
# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f
|
|
||||||
# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f
|
|
||||||
# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
|
|
||||||
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
|
|
||||||
dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
|
|
||||||
MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
|
|
||||||
cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
|
||||||
AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
|
|
||||||
YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
|
|
||||||
kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
|
|
||||||
QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
|
|
||||||
6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
|
|
||||||
yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
|
|
||||||
QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
|
|
||||||
KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
|
|
||||||
tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
|
|
||||||
QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
|
|
||||||
Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
|
|
||||||
olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
|
|
||||||
x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=AffirmTrust Premium O=AffirmTrust
|
|
||||||
# Subject: CN=AffirmTrust Premium O=AffirmTrust
|
|
||||||
# Label: "AffirmTrust Premium"
|
|
||||||
# Serial: 7893706540734352110
|
|
||||||
# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57
|
|
||||||
# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27
|
|
||||||
# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
|
|
||||||
BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
|
|
||||||
dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
|
|
||||||
A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
|
|
||||||
cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
|
|
||||||
qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
|
|
||||||
JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
|
|
||||||
+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
|
|
||||||
s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
|
|
||||||
HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
|
|
||||||
70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
|
|
||||||
V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
|
|
||||||
qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
|
|
||||||
5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
|
|
||||||
C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
|
|
||||||
OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
|
|
||||||
FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
|
|
||||||
BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
|
|
||||||
KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
|
|
||||||
Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
|
|
||||||
8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
|
|
||||||
MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
|
|
||||||
0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
|
|
||||||
u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
|
|
||||||
u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
|
|
||||||
YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
|
|
||||||
GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
|
|
||||||
RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
|
|
||||||
KeC2uAloGRwYQw==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Entrust Datacard
|
|
||||||
# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust
|
|
||||||
# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust
|
|
||||||
# Label: "AffirmTrust Premium ECC"
|
|
||||||
# Serial: 8401224907861490260
|
|
||||||
# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d
|
|
||||||
# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb
|
|
||||||
# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
|
|
||||||
VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
|
|
||||||
cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
|
|
||||||
BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
|
|
||||||
VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
|
|
||||||
0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
|
|
||||||
ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
|
|
||||||
A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
|
|
||||||
A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
|
|
||||||
aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
|
|
||||||
flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: GlobalSign
|
# Operating CA: GlobalSign
|
||||||
# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
||||||
# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
target_dir="$HOME/bin"
|
target_dir="$HOME/bin"
|
||||||
target_gam="gam7/gam"
|
target_folder="$target_dir/gam7"
|
||||||
gamarch=$(uname -m)
|
gamarch=$(uname -m)
|
||||||
gamos=$(uname -s)
|
gamos=$(uname -s)
|
||||||
osversion=""
|
osversion=""
|
||||||
@@ -36,7 +36,7 @@ while getopts "hd:a:o:b:lp:u:r:v:s" OPTION
|
|||||||
do
|
do
|
||||||
case $OPTION in
|
case $OPTION in
|
||||||
h) usage; exit;;
|
h) usage; exit;;
|
||||||
d) target_dir="$OPTARG";;
|
d) target_dir="${OPTARG%/}"; target_folder="$target_dir/gam7";;
|
||||||
a) gamarch="$OPTARG";;
|
a) gamarch="$OPTARG";;
|
||||||
o) gamos="$OPTARG";;
|
o) gamos="$OPTARG";;
|
||||||
b) osversion="$OPTARG";;
|
b) osversion="$OPTARG";;
|
||||||
@@ -45,13 +45,11 @@ do
|
|||||||
u) adminuser="$OPTARG";;
|
u) adminuser="$OPTARG";;
|
||||||
r) regularuser="$OPTARG";;
|
r) regularuser="$OPTARG";;
|
||||||
v) gamversion="$OPTARG";;
|
v) gamversion="$OPTARG";;
|
||||||
s) strip_gam="--strip-components 1"; target_gam="gam";;
|
s) strip_gam="--strip-components 1"; target_folder="$target_dir";;
|
||||||
?) usage; exit;;
|
?) usage; exit;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
target_gam="$target_folder/gam"
|
||||||
# remove possible / from end of target_dir
|
|
||||||
target_dir=${target_dir%/}
|
|
||||||
|
|
||||||
update_profile() {
|
update_profile() {
|
||||||
[ "$2" -eq 1 ] || [ -f "$1" ] || return 1
|
[ "$2" -eq 1 ] || [ -f "$1" ] || return 1
|
||||||
@@ -328,9 +326,9 @@ echo_yellow "Downloading ${download_url} to $temp_archive_dir ($check_type)..."
|
|||||||
# Save archive to temp w/o losing our path
|
# Save archive to temp w/o losing our path
|
||||||
(cd "$temp_archive_dir" && curl -O -L -s "${curl_opts[@]}" "$download_url")
|
(cd "$temp_archive_dir" && curl -O -L -s "${curl_opts[@]}" "$download_url")
|
||||||
|
|
||||||
mkdir -p "$target_dir"
|
mkdir -p "$target_folder"
|
||||||
echo_yellow "Deleting contents of $target_dir/gam7/lib"
|
echo_yellow "Deleting contents of $target_folder/lib"
|
||||||
rm -frv "$target_dir/gam7/lib"
|
rm -frv "$target_folder/lib"
|
||||||
|
|
||||||
echo_yellow "Extracting archive to $target_dir"
|
echo_yellow "Extracting archive to $target_dir"
|
||||||
if [[ "$name" =~ tar.xz|tar.gz|tar ]]; then
|
if [[ "$name" =~ tar.xz|tar.gz|tar ]]; then
|
||||||
@@ -351,7 +349,7 @@ fi
|
|||||||
|
|
||||||
# Update profile to add gam command
|
# Update profile to add gam command
|
||||||
if [ "$update_profile" = true ]; then
|
if [ "$update_profile" = true ]; then
|
||||||
alias_line="alias gam=\"${target_dir// /\\ }/$target_gam\""
|
alias_line="alias gam=\"$target_gam\""
|
||||||
if [ "$gamos" == "linux" ]; then
|
if [ "$gamos" == "linux" ]; then
|
||||||
update_profile "$HOME/.bash_aliases" 0 || update_profile "$HOME/.bash_profile" 0 || update_profile "$HOME/.bashrc" 0
|
update_profile "$HOME/.bash_aliases" 0 || update_profile "$HOME/.bash_profile" 0 || update_profile "$HOME/.bashrc" 0
|
||||||
update_profile "$HOME/.zshrc" 0
|
update_profile "$HOME/.zshrc" 0
|
||||||
@@ -365,7 +363,7 @@ fi
|
|||||||
|
|
||||||
if [ "$upgrade_only" = true ]; then
|
if [ "$upgrade_only" = true ]; then
|
||||||
echo_green "Here's information about your GAM upgrade:"
|
echo_green "Here's information about your GAM upgrade:"
|
||||||
"$target_dir/$target_gam" version extended
|
"$target_gam" version extended
|
||||||
rc=$?
|
rc=$?
|
||||||
if (( $rc != 0 )); then
|
if (( $rc != 0 )); then
|
||||||
echo_red "ERROR: Failed running GAM for the first time with return code $rc. Please report this error to GAM mailing list. Exiting."
|
echo_red "ERROR: Failed running GAM for the first time with return code $rc. Please report this error to GAM mailing list. Exiting."
|
||||||
@@ -387,7 +385,7 @@ while true; do
|
|||||||
;;
|
;;
|
||||||
[Nn]*)
|
[Nn]*)
|
||||||
# config_cmd="config no_browser true"
|
# config_cmd="config no_browser true"
|
||||||
touch "$target_dir/gam7/nobrowser.txt" > /dev/null 2>&1
|
touch "$target_folder/nobrowser.txt" > /dev/null 2>&1
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -405,8 +403,8 @@ while true; do
|
|||||||
if [ "$adminuser" == "" ]; then
|
if [ "$adminuser" == "" ]; then
|
||||||
read -p "Please enter your Google Workspace admin email address: " adminuser
|
read -p "Please enter your Google Workspace admin email address: " adminuser
|
||||||
fi
|
fi
|
||||||
# "$target_dir/$target_gam" $config_cmd create project $adminuser
|
# "$target_gam" $config_cmd create project $adminuser
|
||||||
"$target_dir/$target_gam" create project $adminuser
|
"$target_gam" create project $adminuser
|
||||||
rc=$?
|
rc=$?
|
||||||
if (( $rc == 0 )); then
|
if (( $rc == 0 )); then
|
||||||
echo_green "Project creation complete."
|
echo_green "Project creation complete."
|
||||||
@@ -431,8 +429,8 @@ while $project_created; do
|
|||||||
read -p "Are you ready to authorize GAM to perform Google Workspace management operations as your admin account? (yes or no) " yn
|
read -p "Are you ready to authorize GAM to perform Google Workspace management operations as your admin account? (yes or no) " yn
|
||||||
case $yn in
|
case $yn in
|
||||||
[Yy]*)
|
[Yy]*)
|
||||||
# "$target_dir/$target_gam" $config_cmd oauth create $adminuser
|
# "$target_gam" $config_cmd oauth create $adminuser
|
||||||
"$target_dir/$target_gam" oauth create $adminuser
|
"$target_gam" oauth create $adminuser
|
||||||
rc=$?
|
rc=$?
|
||||||
if (( $rc == 0 )); then
|
if (( $rc == 0 )); then
|
||||||
echo_green "Admin authorization complete."
|
echo_green "Admin authorization complete."
|
||||||
@@ -461,8 +459,8 @@ while $admin_authorized; do
|
|||||||
read -p "Please enter the email address of a regular Google Workspace user: " regularuser
|
read -p "Please enter the email address of a regular Google Workspace user: " regularuser
|
||||||
fi
|
fi
|
||||||
echo_yellow "Great! Checking service account scopes.This will fail the first time. Follow the steps to authorize and retry. It can take a few minutes for scopes to PASS after they've been authorized in the admin console."
|
echo_yellow "Great! Checking service account scopes.This will fail the first time. Follow the steps to authorize and retry. It can take a few minutes for scopes to PASS after they've been authorized in the admin console."
|
||||||
# "$target_dir/$target_gam" $config_cmd user $regularuser check serviceaccount
|
# "$target_gam" $config_cmd user $regularuser check serviceaccount
|
||||||
"$target_dir/$target_gam" user $regularuser check serviceaccount
|
"$target_gam" user $regularuser check serviceaccount
|
||||||
rc=$?
|
rc=$?
|
||||||
if (( $rc == 0 )); then
|
if (( $rc == 0 )); then
|
||||||
echo_green "Service account authorization complete."
|
echo_green "Service account authorization complete."
|
||||||
@@ -483,8 +481,8 @@ while $admin_authorized; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
echo_green "Here's information about your new GAM installation:"
|
echo_green "Here's information about your new GAM installation:"
|
||||||
#"$target_dir/$target_gam" $config_cmd save version extended
|
#"$target_gam" $config_cmd save version extended
|
||||||
"$target_dir/$target_gam" version extended
|
"$target_gam" version extended
|
||||||
rc=$?
|
rc=$?
|
||||||
if (( $rc != 0 )); then
|
if (( $rc != 0 )); then
|
||||||
echo_red "ERROR: Failed running GAM for the first time with $rc. Please report this error to GAM mailing list. Exiting."
|
echo_red "ERROR: Failed running GAM for the first time with $rc. Please report this error to GAM mailing list. Exiting."
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
||||||
__version__ = '7.05.05'
|
__version__ = '7.05.15'
|
||||||
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
||||||
|
|
||||||
#pylint: disable=wrong-import-position
|
#pylint: disable=wrong-import-position
|
||||||
@@ -262,6 +262,7 @@ MIMETYPE_GA_JAM = f'{APPLICATION_VND_GOOGLE_APPS}jam'
|
|||||||
MIMETYPE_GA_MAP = f'{APPLICATION_VND_GOOGLE_APPS}map'
|
MIMETYPE_GA_MAP = f'{APPLICATION_VND_GOOGLE_APPS}map'
|
||||||
MIMETYPE_GA_PRESENTATION = f'{APPLICATION_VND_GOOGLE_APPS}presentation'
|
MIMETYPE_GA_PRESENTATION = f'{APPLICATION_VND_GOOGLE_APPS}presentation'
|
||||||
MIMETYPE_GA_SCRIPT = f'{APPLICATION_VND_GOOGLE_APPS}script'
|
MIMETYPE_GA_SCRIPT = f'{APPLICATION_VND_GOOGLE_APPS}script'
|
||||||
|
MIMETYPE_GA_SCRIPT_JSON = f'{APPLICATION_VND_GOOGLE_APPS}script+json'
|
||||||
MIMETYPE_GA_SHORTCUT = f'{APPLICATION_VND_GOOGLE_APPS}shortcut'
|
MIMETYPE_GA_SHORTCUT = f'{APPLICATION_VND_GOOGLE_APPS}shortcut'
|
||||||
MIMETYPE_GA_3P_SHORTCUT = f'{APPLICATION_VND_GOOGLE_APPS}drive-sdk'
|
MIMETYPE_GA_3P_SHORTCUT = f'{APPLICATION_VND_GOOGLE_APPS}drive-sdk'
|
||||||
MIMETYPE_GA_SITE = f'{APPLICATION_VND_GOOGLE_APPS}site'
|
MIMETYPE_GA_SITE = f'{APPLICATION_VND_GOOGLE_APPS}site'
|
||||||
@@ -909,6 +910,8 @@ def getBoolean(defaultValue=True):
|
|||||||
Cmd.Advance()
|
Cmd.Advance()
|
||||||
return False
|
return False
|
||||||
if defaultValue is not None:
|
if defaultValue is not None:
|
||||||
|
if not Cmd.Current().strip(): # If current argument is empty, skip over it
|
||||||
|
Cmd.Advance()
|
||||||
return defaultValue
|
return defaultValue
|
||||||
invalidChoiceExit(boolean, TRUE_FALSE, False)
|
invalidChoiceExit(boolean, TRUE_FALSE, False)
|
||||||
if defaultValue is not None:
|
if defaultValue is not None:
|
||||||
@@ -1482,6 +1485,8 @@ def getInteger(minVal=None, maxVal=None, default=None):
|
|||||||
return number
|
return number
|
||||||
except ValueError:
|
except ValueError:
|
||||||
if default is not None:
|
if default is not None:
|
||||||
|
if not Cmd.Current().strip(): # If current argument is empty, skip over it
|
||||||
|
Cmd.Advance()
|
||||||
return default
|
return default
|
||||||
invalidArgumentExit(integerLimits(minVal, maxVal))
|
invalidArgumentExit(integerLimits(minVal, maxVal))
|
||||||
elif default is not None:
|
elif default is not None:
|
||||||
@@ -4442,7 +4447,7 @@ def handleOAuthTokenError(e, softErrors, displayError=False, i=0, count=0):
|
|||||||
if not GM.Globals[GM.CURRENT_SVCACCT_USER]:
|
if not GM.Globals[GM.CURRENT_SVCACCT_USER]:
|
||||||
ClientAPIAccessDeniedExit()
|
ClientAPIAccessDeniedExit()
|
||||||
if softErrors:
|
if softErrors:
|
||||||
entityDoesNotExistWarning(Ent.USER, GM.Globals[GM.CURRENT_SVCACCT_USER], i, count)
|
entityActionFailedWarning([Ent.USER, GM.Globals[GM.CURRENT_SVCACCT_USER], Ent.USER, None], errMsg, i, count)
|
||||||
return None
|
return None
|
||||||
systemErrorExit(SERVICE_NOT_APPLICABLE_RC, Msg.SERVICE_NOT_APPLICABLE_THIS_ADDRESS.format(GM.Globals[GM.CURRENT_SVCACCT_USER]))
|
systemErrorExit(SERVICE_NOT_APPLICABLE_RC, Msg.SERVICE_NOT_APPLICABLE_THIS_ADDRESS.format(GM.Globals[GM.CURRENT_SVCACCT_USER]))
|
||||||
if errMsg in API.OAUTH2_UNAUTHORIZED_ERRORS:
|
if errMsg in API.OAUTH2_UNAUTHORIZED_ERRORS:
|
||||||
@@ -11842,7 +11847,7 @@ def doCreateProject():
|
|||||||
# Try to set policy on project to allow Service Account Key Upload
|
# Try to set policy on project to allow Service Account Key Upload
|
||||||
# orgp = getAPIService(API.ORGPOLICY, httpObj)
|
# orgp = getAPIService(API.ORGPOLICY, httpObj)
|
||||||
# projectParent = f"projects/{projectInfo['projectId']}"
|
# projectParent = f"projects/{projectInfo['projectId']}"
|
||||||
# policyName = f'{projectParent}/policies/iam.disableServiceAccountKeyUpload'
|
# policyName = f'{projectParent}/policies/iam.managed.disableServiceAccountKeyUpload'
|
||||||
# try:
|
# try:
|
||||||
# result = callGAPI(orgp.projects().policies(), 'get',
|
# result = callGAPI(orgp.projects().policies(), 'get',
|
||||||
# throwReasons=[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.PERMISSION_DENIED],
|
# throwReasons=[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.PERMISSION_DENIED],
|
||||||
@@ -12646,7 +12651,7 @@ def doProcessSvcAcctKeys(mode=None, iam=None, projectId=None, clientEmail=None,
|
|||||||
return False
|
return False
|
||||||
except GAPI.failedPrecondition as e:
|
except GAPI.failedPrecondition as e:
|
||||||
entityActionFailedWarning([Ent.PROJECT, projectId, Ent.SVCACCT, clientEmail], str(e))
|
entityActionFailedWarning([Ent.PROJECT, projectId, Ent.SVCACCT, clientEmail], str(e))
|
||||||
if 'iam.disableServiceAccountKeyUpload' not in str(e):
|
if 'iam.disableServiceAccountKeyUpload' not in str(e) and 'iam.managed.disableServiceAccountKeyUpload' not in str(e):
|
||||||
return False
|
return False
|
||||||
if retry == maxRetries or mode != 'upload':
|
if retry == maxRetries or mode != 'upload':
|
||||||
sys.stdout.write(Msg.ENABLE_SERVICE_ACCOUNT_PRIVATE_KEY_UPLOAD.format(projectId))
|
sys.stdout.write(Msg.ENABLE_SERVICE_ACCOUNT_PRIVATE_KEY_UPLOAD.format(projectId))
|
||||||
@@ -13429,8 +13434,8 @@ def doReportUsage():
|
|||||||
break
|
break
|
||||||
except GAPI.invalidInput as e:
|
except GAPI.invalidInput as e:
|
||||||
systemErrorExit(GOOGLE_API_ERROR_RC, str(e))
|
systemErrorExit(GOOGLE_API_ERROR_RC, str(e))
|
||||||
except GAPI.forbidden:
|
except GAPI.forbidden as e:
|
||||||
accessErrorExit(None)
|
accessErrorExit(None, str(e))
|
||||||
if startUseDate:
|
if startUseDate:
|
||||||
reportName = f'{report.capitalize()} Usage Report - {startUseDate}:{endUseDate}'
|
reportName = f'{report.capitalize()} Usage Report - {startUseDate}:{endUseDate}'
|
||||||
else:
|
else:
|
||||||
@@ -14027,8 +14032,8 @@ def doReport():
|
|||||||
printErrorMessage(BAD_REQUEST_RC, Msg.BAD_REQUEST)
|
printErrorMessage(BAD_REQUEST_RC, Msg.BAD_REQUEST)
|
||||||
exitUserLoop = True
|
exitUserLoop = True
|
||||||
break
|
break
|
||||||
except GAPI.forbidden:
|
except GAPI.forbidden as e:
|
||||||
accessErrorExit(None)
|
accessErrorExit(None, str(e))
|
||||||
startDateTime += oneDay
|
startDateTime += oneDay
|
||||||
if exitUserLoop:
|
if exitUserLoop:
|
||||||
break
|
break
|
||||||
@@ -14108,8 +14113,8 @@ def doReport():
|
|||||||
continue
|
continue
|
||||||
except GAPI.invalidInput as e:
|
except GAPI.invalidInput as e:
|
||||||
systemErrorExit(GOOGLE_API_ERROR_RC, str(e))
|
systemErrorExit(GOOGLE_API_ERROR_RC, str(e))
|
||||||
except GAPI.forbidden:
|
except GAPI.forbidden as e:
|
||||||
accessErrorExit(None)
|
accessErrorExit(None, str(e))
|
||||||
startDateTime += oneDay
|
startDateTime += oneDay
|
||||||
csvPF.writeCSVfile(f'Customer Report - {tryDate}')
|
csvPF.writeCSVfile(f'Customer Report - {tryDate}')
|
||||||
else: # activityReports
|
else: # activityReports
|
||||||
@@ -26380,6 +26385,7 @@ def printShowChatSpaces(users):
|
|||||||
bailOnInternalError=True,
|
bailOnInternalError=True,
|
||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.INTERNAL_ERROR,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.INTERNAL_ERROR,
|
||||||
GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
fields=fields, pageSize=CHAT_PAGE_SIZE, **kwargsCS)
|
fields=fields, pageSize=CHAT_PAGE_SIZE, **kwargsCS)
|
||||||
except (GAPI.notFound, GAPI.invalidArgument, GAPI.internalError, GAPI.permissionDenied) as e:
|
except (GAPI.notFound, GAPI.invalidArgument, GAPI.internalError, GAPI.permissionDenied) as e:
|
||||||
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
||||||
@@ -26798,6 +26804,7 @@ def syncChatMembers(users):
|
|||||||
members = callGAPIpages(chat.spaces().members(), 'list', 'memberships',
|
members = callGAPIpages(chat.spaces().members(), 'list', 'memberships',
|
||||||
pageMessage=_getChatPageMessage(Ent.CHAT_MEMBER, user, i, count, qfilter),
|
pageMessage=_getChatPageMessage(Ent.CHAT_MEMBER, user, i, count, qfilter),
|
||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
parent=parent, showGroups=groupsSpecified, pageSize=CHAT_PAGE_SIZE, **kwargs, **kwargsUAA)
|
parent=parent, showGroups=groupsSpecified, pageSize=CHAT_PAGE_SIZE, **kwargs, **kwargsUAA)
|
||||||
for member in members:
|
for member in members:
|
||||||
if 'member' in member:
|
if 'member' in member:
|
||||||
@@ -26995,6 +27002,7 @@ def printShowChatMembers(users):
|
|||||||
bailOnInternalError=True,
|
bailOnInternalError=True,
|
||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.INTERNAL_ERROR,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.INTERNAL_ERROR,
|
||||||
GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
fields="nextPageToken,spaces(name,displayName,spaceType,membershipCount)", pageSize=CHAT_PAGE_SIZE,
|
fields="nextPageToken,spaces(name,displayName,spaceType,membershipCount)", pageSize=CHAT_PAGE_SIZE,
|
||||||
**kwargsCS)
|
**kwargsCS)
|
||||||
for space in spaces:
|
for space in spaces:
|
||||||
@@ -27011,6 +27019,7 @@ def printShowChatMembers(users):
|
|||||||
bailOnInternalError=True,
|
bailOnInternalError=True,
|
||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.INTERNAL_ERROR,
|
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.INTERNAL_ERROR,
|
||||||
GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
GAPI.PERMISSION_DENIED, GAPI.FAILED_PRECONDITION],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
fields="nextPageToken,spaces(name,displayName,spaceType,membershipCount)", pageSize=CHAT_PAGE_SIZE,
|
fields="nextPageToken,spaces(name,displayName,spaceType,membershipCount)", pageSize=CHAT_PAGE_SIZE,
|
||||||
**kwargsCS)
|
**kwargsCS)
|
||||||
for space in spaces:
|
for space in spaces:
|
||||||
@@ -27355,6 +27364,7 @@ def printShowChatMessages(users):
|
|||||||
messages = callGAPIpages(chat.spaces().messages(), 'list', 'messages',
|
messages = callGAPIpages(chat.spaces().messages(), 'list', 'messages',
|
||||||
pageMessage=_getChatPageMessage(Ent.CHAT_MESSAGE, user, i, count, qfilter),
|
pageMessage=_getChatPageMessage(Ent.CHAT_MESSAGE, user, i, count, qfilter),
|
||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
pageSize=CHAT_PAGE_SIZE, parent=parentName, filter=pfilter, showDeleted=showDeleted,
|
pageSize=CHAT_PAGE_SIZE, parent=parentName, filter=pfilter, showDeleted=showDeleted,
|
||||||
fields=fields)
|
fields=fields)
|
||||||
for message in messages:
|
for message in messages:
|
||||||
@@ -27472,6 +27482,7 @@ def printShowChatEvents(users):
|
|||||||
events = callGAPIpages(chat.spaces().spaceEvents(), 'list', 'spaceEvents',
|
events = callGAPIpages(chat.spaces().spaceEvents(), 'list', 'spaceEvents',
|
||||||
pageMessage=_getChatPageMessage(Ent.CHAT_EVENT, user, i, count, qfilter),
|
pageMessage=_getChatPageMessage(Ent.CHAT_EVENT, user, i, count, qfilter),
|
||||||
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
||||||
|
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
||||||
pageSize=CHAT_PAGE_SIZE, parent=parentName, filter=pfilter)
|
pageSize=CHAT_PAGE_SIZE, parent=parentName, filter=pfilter)
|
||||||
except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
||||||
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
exitIfChatNotConfigured(chat, kvList, str(e), i, count)
|
||||||
@@ -28192,6 +28203,7 @@ def doUpdateChromePolicy():
|
|||||||
schemaName, schema = simplifyChromeSchema(_getChromePolicySchema(cp, Cmd.Previous(), '*'))
|
schemaName, schema = simplifyChromeSchema(_getChromePolicySchema(cp, Cmd.Previous(), '*'))
|
||||||
body['requests'].append({'policyValue': {'policySchema': schemaName, 'value': {}},
|
body['requests'].append({'policyValue': {'policySchema': schemaName, 'value': {}},
|
||||||
'updateMask': ''})
|
'updateMask': ''})
|
||||||
|
schemaNameList.append(schemaName)
|
||||||
while Cmd.ArgumentsRemaining():
|
while Cmd.ArgumentsRemaining():
|
||||||
field = getArgumentEmptyAllowed()
|
field = getArgumentEmptyAllowed()
|
||||||
# Allow an empty field/value pair which makes processing an input CSV file with schemas with different numbers of fields easy
|
# Allow an empty field/value pair which makes processing an input CSV file with schemas with different numbers of fields easy
|
||||||
@@ -28200,8 +28212,9 @@ def doUpdateChromePolicy():
|
|||||||
Cmd.Advance()
|
Cmd.Advance()
|
||||||
continue
|
continue
|
||||||
if field in {'ou', 'org', 'orgunit', 'group', 'printerid', 'appid'} or '.' in field:
|
if field in {'ou', 'org', 'orgunit', 'group', 'printerid', 'appid'} or '.' in field:
|
||||||
Cmd.Backup()
|
if field != 'appid' or not schemaName.startswith('chrome.devices.kiosk'):
|
||||||
break # field is actually a new policy name or orgunit
|
Cmd.Backup()
|
||||||
|
break # field is actually a new policy name or orgunit
|
||||||
# JSON
|
# JSON
|
||||||
if field == 'json':
|
if field == 'json':
|
||||||
jsonData = getJSON(['direct', 'name', 'orgUnitPath', 'parentOrgUnitPath', 'group'])
|
jsonData = getJSON(['direct', 'name', 'orgUnitPath', 'parentOrgUnitPath', 'group'])
|
||||||
@@ -28212,7 +28225,7 @@ def doUpdateChromePolicy():
|
|||||||
body['requests'][-1]['policyTargetKey']['additionalTargetKeys'] = {atk['name']: atk['value']}
|
body['requests'][-1]['policyTargetKey']['additionalTargetKeys'] = {atk['name']: atk['value']}
|
||||||
if atk['name'] == 'app_id':
|
if atk['name'] == 'app_id':
|
||||||
schemaNameAppId += f"({atk['value']})"
|
schemaNameAppId += f"({atk['value']})"
|
||||||
schemaNameList.append(schemaNameAppId)
|
schemaNameList[-1] = schemaNameAppId
|
||||||
for field in jsonData.get('fields', []):
|
for field in jsonData.get('fields', []):
|
||||||
casedField = field['name']
|
casedField = field['name']
|
||||||
lowerField = casedField.lower()
|
lowerField = casedField.lower()
|
||||||
@@ -28253,7 +28266,6 @@ def doUpdateChromePolicy():
|
|||||||
body['requests'][-1]['policyValue']['value'][casedField] = value
|
body['requests'][-1]['policyValue']['value'][casedField] = value
|
||||||
body['requests'][-1]['updateMask'] += f'{casedField},'
|
body['requests'][-1]['updateMask'] += f'{casedField},'
|
||||||
break
|
break
|
||||||
schemaNameList.append(schemaName)
|
|
||||||
# Handle TYPE_MESSAGE fields with durations, values, counts and timeOfDay as special cases
|
# Handle TYPE_MESSAGE fields with durations, values, counts and timeOfDay as special cases
|
||||||
tmschema = CHROME_SCHEMA_TYPE_MESSAGE.get(schemaName, {}).get(field)
|
tmschema = CHROME_SCHEMA_TYPE_MESSAGE.get(schemaName, {}).get(field)
|
||||||
if tmschema:
|
if tmschema:
|
||||||
@@ -38688,7 +38700,7 @@ def _getEventMatchFields(calendarEventEntity, fieldsList):
|
|||||||
else:
|
else:
|
||||||
fieldsList.append('attendees/email')
|
fieldsList.append('attendees/email')
|
||||||
if match[0][1] == 'status':
|
if match[0][1] == 'status':
|
||||||
fieldsList.extend('attendees/optional', 'attendees/responseStatus')
|
fieldsList.extend(['attendees/optional', 'attendees/responseStatus'])
|
||||||
|
|
||||||
def _eventMatches(event, match):
|
def _eventMatches(event, match):
|
||||||
if match[0][0] != 'attendees':
|
if match[0][0] != 'attendees':
|
||||||
@@ -38938,6 +38950,22 @@ def _setEventRecurrenceTimeZone(cal, calId, body, parameters, i, count):
|
|||||||
body['end']['timeZone'] = timeZone
|
body['end']['timeZone'] = timeZone
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def _getEventDaysOfWeek(event):
|
||||||
|
for attr in ['start', 'end']:
|
||||||
|
if attr in event:
|
||||||
|
if 'date' in event[attr]:
|
||||||
|
try:
|
||||||
|
dateTime = datetime.datetime.strptime(event[attr]['date'], YYYYMMDD_FORMAT)
|
||||||
|
event[attr]['dayOfWeek'] = calendarlib.day_abbr[dateTime.weekday()]
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
elif 'dateTime' in event[attr]:
|
||||||
|
try:
|
||||||
|
dateTime, _ = iso8601.parse_date(event[attr]['dateTime'])
|
||||||
|
event[attr]['dayOfWeek'] = calendarlib.day_abbr[dateTime.weekday()]
|
||||||
|
except (iso8601.ParseError, OverflowError):
|
||||||
|
pass
|
||||||
|
|
||||||
def _createCalendarEvents(user, origCal, function, calIds, count, body, parameters):
|
def _createCalendarEvents(user, origCal, function, calIds, count, body, parameters):
|
||||||
if parameters['attendees']:
|
if parameters['attendees']:
|
||||||
body['attendees'] = parameters.pop('attendees')
|
body['attendees'] = parameters.pop('attendees')
|
||||||
@@ -39573,6 +39601,8 @@ def _getCalendarInfoEventOptions(calendarEventEntity):
|
|||||||
myarg = getArgument()
|
myarg = getArgument()
|
||||||
if myarg == 'fields':
|
if myarg == 'fields':
|
||||||
_getEventFields(fieldsList)
|
_getEventFields(fieldsList)
|
||||||
|
elif myarg == 'showdayofweek':
|
||||||
|
calendarEventEntity['showDayOfWeek'] = True
|
||||||
else:
|
else:
|
||||||
FJQC.GetFormatJSON(myarg)
|
FJQC.GetFormatJSON(myarg)
|
||||||
_addEventEntitySelectFields(calendarEventEntity, fieldsList)
|
_addEventEntitySelectFields(calendarEventEntity, fieldsList)
|
||||||
@@ -39596,6 +39626,8 @@ def _infoCalendarEvents(origUser, user, origCal, calIds, count, calendarEventEnt
|
|||||||
throwReasons=GAPI.CALENDAR_THROW_REASONS+[GAPI.NOT_FOUND, GAPI.DELETED, GAPI.FORBIDDEN],
|
throwReasons=GAPI.CALENDAR_THROW_REASONS+[GAPI.NOT_FOUND, GAPI.DELETED, GAPI.FORBIDDEN],
|
||||||
calendarId=calId, eventId=eventId, fields=fields)
|
calendarId=calId, eventId=eventId, fields=fields)
|
||||||
if calendarEventEntity['maxinstances'] == -1 or 'recurrence' not in event:
|
if calendarEventEntity['maxinstances'] == -1 or 'recurrence' not in event:
|
||||||
|
if calendarEventEntity['showDayOfWeek']:
|
||||||
|
_getEventDaysOfWeek(event)
|
||||||
_showCalendarEvent(user, calId, Ent.EVENT, event, j, jcount, FJQC)
|
_showCalendarEvent(user, calId, Ent.EVENT, event, j, jcount, FJQC)
|
||||||
else:
|
else:
|
||||||
instances = callGAPIpages(cal.events(), 'instances', 'items',
|
instances = callGAPIpages(cal.events(), 'instances', 'items',
|
||||||
@@ -39609,6 +39641,8 @@ def _infoCalendarEvents(origUser, user, origCal, calIds, count, calendarEventEnt
|
|||||||
l = 0
|
l = 0
|
||||||
for instance in instances:
|
for instance in instances:
|
||||||
l += 1
|
l += 1
|
||||||
|
if calendarEventEntity['showDayOfWeek']:
|
||||||
|
_getEventDaysOfWeek(instance)
|
||||||
_showCalendarEvent(user, calId, Ent.INSTANCE, instance, l, lcount, FJQC)
|
_showCalendarEvent(user, calId, Ent.INSTANCE, instance, l, lcount, FJQC)
|
||||||
Ind.Decrement()
|
Ind.Decrement()
|
||||||
except (GAPI.notFound, GAPI.deleted) as e:
|
except (GAPI.notFound, GAPI.deleted) as e:
|
||||||
@@ -39662,22 +39696,6 @@ def _getCalendarPrintShowEventOptions(calendarEventEntity, entityType):
|
|||||||
_addEventEntitySelectFields(calendarEventEntity, fieldsList)
|
_addEventEntitySelectFields(calendarEventEntity, fieldsList)
|
||||||
return (csvPF, FJQC, fieldsList)
|
return (csvPF, FJQC, fieldsList)
|
||||||
|
|
||||||
def _getEventDaysOfWeek(event):
|
|
||||||
for attr in ['start', 'end']:
|
|
||||||
if attr in event:
|
|
||||||
if 'date' in event[attr]:
|
|
||||||
try:
|
|
||||||
dateTime = datetime.datetime.strptime(event[attr]['date'], YYYYMMDD_FORMAT)
|
|
||||||
event[attr]['dayOfWeek'] = calendarlib.day_abbr[dateTime.weekday()]
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
elif 'dateTime' in event[attr]:
|
|
||||||
try:
|
|
||||||
dateTime, _ = iso8601.parse_date(event[attr]['dateTime'])
|
|
||||||
event[attr]['dayOfWeek'] = calendarlib.day_abbr[dateTime.weekday()]
|
|
||||||
except (iso8601.ParseError, OverflowError):
|
|
||||||
pass
|
|
||||||
|
|
||||||
# gam calendars <CalendarEntity> print events <EventEntity> <EventDisplayProperties>*
|
# gam calendars <CalendarEntity> print events <EventEntity> <EventDisplayProperties>*
|
||||||
# [fields <EventFieldNameList>] [showdayofweek]
|
# [fields <EventFieldNameList>] [showdayofweek]
|
||||||
# [countsonly] [formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
# [countsonly] [formatjson [quotechar <Character>]] [todrive <ToDriveAttribute>*]
|
||||||
@@ -42460,16 +42478,16 @@ class PasswordOptions():
|
|||||||
up = 'password'
|
up = 'password'
|
||||||
password = self.GetPassword()
|
password = self.GetPassword()
|
||||||
if password:
|
if password:
|
||||||
notFoundBody[up] = password
|
if password.lower() == 'blocklogin':
|
||||||
if notFoundBody[up].lower() in {'blocklogin'}:
|
|
||||||
self.makeCleanPassword = False
|
self.makeCleanPassword = False
|
||||||
notFoundBody[up] = self.CreateRandomPassword()
|
notFoundBody[up] = self.CreateRandomPassword()
|
||||||
self.notFoundPassword = notFoundBody[up]
|
elif password.lower() in {'random', 'uniquerandom'}:
|
||||||
elif notFoundBody[up].lower() in {'random', 'uniquerandom'}:
|
|
||||||
self.SetCleanPasswordLen()
|
self.SetCleanPasswordLen()
|
||||||
self.makeCleanPassword = True
|
self.makeCleanPassword = True
|
||||||
notFoundBody[up] = self.CreateRandomPassword()
|
notFoundBody[up] = self.CreateRandomPassword()
|
||||||
self.notFoundPassword = notFoundBody[up]
|
else:
|
||||||
|
notFoundBody[up] = password
|
||||||
|
self.notFoundPassword = notFoundBody[up]
|
||||||
elif myarg in {'lograndompassword', 'logpassword'}:
|
elif myarg in {'lograndompassword', 'logpassword'}:
|
||||||
self.filename = getString(Cmd.OB_FILE_NAME)
|
self.filename = getString(Cmd.OB_FILE_NAME)
|
||||||
else:
|
else:
|
||||||
@@ -42512,6 +42530,8 @@ class PasswordOptions():
|
|||||||
self.promptForUniquePassword = True
|
self.promptForUniquePassword = True
|
||||||
else:
|
else:
|
||||||
self.promptForPassword = True
|
self.promptForPassword = True
|
||||||
|
else:
|
||||||
|
self.password = password
|
||||||
elif up == 'hashFunction':
|
elif up == 'hashFunction':
|
||||||
body[up] = self.HASH_FUNCTION_MAP[myarg]
|
body[up] = self.HASH_FUNCTION_MAP[myarg]
|
||||||
self.clearPassword = self.hashPassword = False
|
self.clearPassword = self.hashPassword = False
|
||||||
@@ -43021,7 +43041,7 @@ def getUserAttributes(cd, updateCmd, noUid=False):
|
|||||||
if value:
|
if value:
|
||||||
entry[argument] = value
|
entry[argument] = value
|
||||||
else:
|
else:
|
||||||
entry[argument] = getInteger(minVal=0, maxVal=100000)
|
entry[argument] = getInteger(minVal=0, maxVal=100000, default=0)
|
||||||
elif primaryNotPrimary(argument, entry):
|
elif primaryNotPrimary(argument, entry):
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
@@ -43224,9 +43244,7 @@ def doCreateUser():
|
|||||||
cd = buildGAPIObject(API.DIRECTORY)
|
cd = buildGAPIObject(API.DIRECTORY)
|
||||||
body, notify, tagReplacements, addGroups, addAliases, PwdOpts, \
|
body, notify, tagReplacements, addGroups, addAliases, PwdOpts, \
|
||||||
_, _, _, \
|
_, _, _, \
|
||||||
parameters, resolveConflictAccount = getUserAttributes(cd,
|
parameters, resolveConflictAccount = getUserAttributes(cd, False, noUid=True)
|
||||||
False,
|
|
||||||
noUid=True)
|
|
||||||
suffix = 0
|
suffix = 0
|
||||||
originalEmail = body['primaryEmail']
|
originalEmail = body['primaryEmail']
|
||||||
atLoc = originalEmail.find('@')
|
atLoc = originalEmail.find('@')
|
||||||
@@ -43334,8 +43352,7 @@ def updateUsers(entityList):
|
|||||||
updateRetryDelay = 5
|
updateRetryDelay = 5
|
||||||
body, notify, tagReplacements, addGroups, addAliases, PwdOpts, \
|
body, notify, tagReplacements, addGroups, addAliases, PwdOpts, \
|
||||||
updatePrimaryEmail, notFoundBody, groupOrgUnitMap, \
|
updatePrimaryEmail, notFoundBody, groupOrgUnitMap, \
|
||||||
parameters, resolveConflictAccount = getUserAttributes(cd,
|
parameters, resolveConflictAccount = getUserAttributes(cd, True)
|
||||||
True)
|
|
||||||
vfe = 'primaryEmail' in body and body['primaryEmail'][:4].lower() == 'vfe@'
|
vfe = 'primaryEmail' in body and body['primaryEmail'][:4].lower() == 'vfe@'
|
||||||
if body.get('orgUnitPath', '') and parameters['immutableOUs']:
|
if body.get('orgUnitPath', '') and parameters['immutableOUs']:
|
||||||
ubody = body.copy()
|
ubody = body.copy()
|
||||||
@@ -43582,14 +43599,16 @@ def undeleteUsers(entityList):
|
|||||||
callGAPI(cd.users(), 'undelete',
|
callGAPI(cd.users(), 'undelete',
|
||||||
throwReasons=[GAPI.DELETED_USER_NOT_FOUND, GAPI.INVALID_ORGUNIT,
|
throwReasons=[GAPI.DELETED_USER_NOT_FOUND, GAPI.INVALID_ORGUNIT,
|
||||||
GAPI.DOMAIN_NOT_FOUND, GAPI.DOMAIN_CANNOT_USE_APIS,
|
GAPI.DOMAIN_NOT_FOUND, GAPI.DOMAIN_CANNOT_USE_APIS,
|
||||||
GAPI.FORBIDDEN, GAPI.BAD_REQUEST, GAPI.INVALID, GAPI.DUPLICATE],
|
GAPI.FORBIDDEN, GAPI.BAD_REQUEST, GAPI.INVALID, GAPI.DUPLICATE,
|
||||||
|
GAPI.LIMIT_EXCEEDED],
|
||||||
userKey=user_uid, body={'orgUnitPath': makeOrgUnitPathAbsolute(orgUnitPaths[0])})
|
userKey=user_uid, body={'orgUnitPath': makeOrgUnitPathAbsolute(orgUnitPaths[0])})
|
||||||
entityActionPerformed([Ent.DELETED_USER, user], i, count)
|
entityActionPerformed([Ent.DELETED_USER, user], i, count)
|
||||||
except GAPI.deletedUserNotFound:
|
except GAPI.deletedUserNotFound:
|
||||||
entityUnknownWarning(Ent.DELETED_USER, user, i, count)
|
entityUnknownWarning(Ent.DELETED_USER, user, i, count)
|
||||||
except GAPI.invalidOrgunit:
|
except GAPI.invalidOrgunit:
|
||||||
entityActionFailedWarning([Ent.USER, user], Msg.INVALID_ORGUNIT, i, count)
|
entityActionFailedWarning([Ent.USER, user], Msg.INVALID_ORGUNIT, i, count)
|
||||||
except (GAPI.domainNotFound, GAPI.domainCannotUseApis, GAPI.forbidden, GAPI.badRequest, GAPI.invalid, GAPI.duplicate) as e:
|
except (GAPI.domainNotFound, GAPI.domainCannotUseApis, GAPI.forbidden, GAPI.badRequest,
|
||||||
|
GAPI.invalid, GAPI.duplicate, GAPI.limitExceeded) as e:
|
||||||
entityActionFailedWarning([Ent.USER, user], str(e), i, count)
|
entityActionFailedWarning([Ent.USER, user], str(e), i, count)
|
||||||
|
|
||||||
# gam undelete users <UserEntity> [ou|org|orgunit <OrgUnitPath>]
|
# gam undelete users <UserEntity> [ou|org|orgunit <OrgUnitPath>]
|
||||||
@@ -57384,6 +57403,8 @@ def createDriveFile(users):
|
|||||||
if parameters[DFA_LOCALFILEPATH]:
|
if parameters[DFA_LOCALFILEPATH]:
|
||||||
if parameters[DFA_LOCALFILEPATH] != '-' and parameters[DFA_PRESERVE_FILE_TIMES]:
|
if parameters[DFA_LOCALFILEPATH] != '-' and parameters[DFA_PRESERVE_FILE_TIMES]:
|
||||||
setPreservedFileTimes(body, parameters, False)
|
setPreservedFileTimes(body, parameters, False)
|
||||||
|
if body.get('mimeType') == MIMETYPE_GA_SCRIPT_JSON:
|
||||||
|
parameters[DFA_LOCALMIMETYPE] = body['mimeType']
|
||||||
media_body = getMediaBody(parameters)
|
media_body = getMediaBody(parameters)
|
||||||
elif parameters[DFA_URL]:
|
elif parameters[DFA_URL]:
|
||||||
media_body = getMediaBody(parameters)
|
media_body = getMediaBody(parameters)
|
||||||
@@ -60421,6 +60442,7 @@ GOOGLEDOC_VALID_EXTENSIONS_MAP = {
|
|||||||
MIMETYPE_GA_DOCUMENT: ['.docx', '.epub', '.html', '.odt', '.pdf', '.rtf', '.txt', '.zip'],
|
MIMETYPE_GA_DOCUMENT: ['.docx', '.epub', '.html', '.odt', '.pdf', '.rtf', '.txt', '.zip'],
|
||||||
MIMETYPE_GA_JAM: ['.pdf'],
|
MIMETYPE_GA_JAM: ['.pdf'],
|
||||||
MIMETYPE_GA_PRESENTATION: ['.pdf', '.pptx', '.odp', '.txt'],
|
MIMETYPE_GA_PRESENTATION: ['.pdf', '.pptx', '.odp', '.txt'],
|
||||||
|
MIMETYPE_GA_SCRIPT: ['.json'],
|
||||||
MIMETYPE_GA_SPREADSHEET: ['.csv', '.ods', '.pdf', '.tsv', '.xlsx', '.zip'],
|
MIMETYPE_GA_SPREADSHEET: ['.csv', '.ods', '.pdf', '.tsv', '.xlsx', '.zip'],
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60456,6 +60478,7 @@ DOCUMENT_FORMATS_MAP = {
|
|||||||
'html': [{'mime': 'text/html', 'ext': '.html'}],
|
'html': [{'mime': 'text/html', 'ext': '.html'}],
|
||||||
'jpeg': [{'mime': 'image/jpeg', 'ext': '.jpeg'}],
|
'jpeg': [{'mime': 'image/jpeg', 'ext': '.jpeg'}],
|
||||||
'jpg': [{'mime': 'image/jpeg', 'ext': '.jpg'}],
|
'jpg': [{'mime': 'image/jpeg', 'ext': '.jpg'}],
|
||||||
|
'json': [{'mime': MIMETYPE_GA_SCRIPT_JSON, 'ext': '.json'}],
|
||||||
'mht': [{'mime': 'message/rfc822', 'ext': 'mht'}],
|
'mht': [{'mime': 'message/rfc822', 'ext': 'mht'}],
|
||||||
'odp': [{'mime': 'application/vnd.oasis.opendocument.presentation', 'ext': '.odp'}],
|
'odp': [{'mime': 'application/vnd.oasis.opendocument.presentation', 'ext': '.odp'}],
|
||||||
'ods': [{'mime': 'application/x-vnd.oasis.opendocument.spreadsheet', 'ext': '.ods'},
|
'ods': [{'mime': 'application/x-vnd.oasis.opendocument.spreadsheet', 'ext': '.ods'},
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ class MockHttpClient(atom.http_interface.GenericHttpClient):
|
|||||||
for recording in self.recordings:
|
for recording in self.recordings:
|
||||||
if recording[0].operation == operation and recording[0].url == url:
|
if recording[0].operation == operation and recording[0].url == url:
|
||||||
return recording[1]
|
return recording[1]
|
||||||
raise NoRecordingFound('No recodings found for %s %s' % (
|
raise NoRecordingFound('No recordings found for %s %s' % (
|
||||||
operation, url))
|
operation, url))
|
||||||
else:
|
else:
|
||||||
# There is a real HTTP client, so make the request, and record the
|
# There is a real HTTP client, so make the request, and record the
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ Your workspace is configured to disable service account private key uploads.
|
|||||||
|
|
||||||
Please go to:
|
Please go to:
|
||||||
|
|
||||||
https://github.com/taers232c/GAMADV-XTD3/wiki/Authorization#authorize-service-account-key-uploads
|
https://github.com/GAM-team/GAM/wiki/Authorization#authorize-service-account-key-uploads
|
||||||
|
|
||||||
Follow the steps to allow a service account private key upload for the project ({0}) just created.
|
Follow the steps to allow a service account private key upload for the project ({0}) just created.
|
||||||
Once those steps are completed, you can continue with your project authentication.
|
Once those steps are completed, you can continue with your project authentication.
|
||||||
@@ -322,7 +322,7 @@ INVALID_NUMBER_OF_CHAT_SPACE_MEMBERS = '{0} type {1} number of members, {2}, mus
|
|||||||
INVALID_ORGUNIT = 'Invalid Organizational Unit'
|
INVALID_ORGUNIT = 'Invalid Organizational Unit'
|
||||||
INVALID_PATH = 'Invalid Path'
|
INVALID_PATH = 'Invalid Path'
|
||||||
INVALID_PERMISSION_ATTRIBUTE_TYPE = 'permission attribute {0} not allowed with type {1}'
|
INVALID_PERMISSION_ATTRIBUTE_TYPE = 'permission attribute {0} not allowed with type {1}'
|
||||||
INVALID_REGION = 'See: https://github.com/taers232c/GAMADV-XTD3/wiki/Context-Aware-Access-Levels#caa-region-codes'
|
INVALID_REGION = 'See: https://github.com/GAM-team/GAM/wiki/Context-Aware-Access-Levels#caa-region-codes'
|
||||||
INVALID_QUERY = 'Invalid Query'
|
INVALID_QUERY = 'Invalid Query'
|
||||||
INVALID_RE = 'Invalid RE'
|
INVALID_RE = 'Invalid RE'
|
||||||
INVALID_REQUEST = 'Invalid Request'
|
INVALID_REQUEST = 'Invalid Request'
|
||||||
@@ -504,7 +504,9 @@ To set up Google Chat for your API project, please go to:
|
|||||||
|
|
||||||
{0}
|
{0}
|
||||||
|
|
||||||
and complete all fields.
|
and follow the instructions at:
|
||||||
|
|
||||||
|
https://github.com/GAM-team/GAM/wiki/Chat-Bot#set-up-a-chat-bot
|
||||||
"""
|
"""
|
||||||
TOTAL_ITEMS_IN_ENTITY = 'Total {0} in {1}'
|
TOTAL_ITEMS_IN_ENTITY = 'Total {0} in {1}'
|
||||||
TRIMMED_MESSAGE_FROM_LENGTH_TO_MAXIMUM = 'Trimmed message of length {0} to maximum length {1}'
|
TRIMMED_MESSAGE_FROM_LENGTH_TO_MAXIMUM = 'Trimmed message of length {0} to maximum length {1}'
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
# Products/SKUs
|
# Products/SKUs
|
||||||
_PRODUCTS = {
|
_PRODUCTS = {
|
||||||
'101001': 'Cloud Identity Free',
|
'101001': 'Cloud Identity',
|
||||||
'101005': 'Cloud Identity Premium',
|
'101005': 'Cloud Identity Premium',
|
||||||
'101031': 'Google Workspace for Education',
|
'101031': 'Google Workspace for Education',
|
||||||
'101033': 'Google Voice',
|
'101033': 'Google Voice',
|
||||||
@@ -47,6 +47,10 @@ _SKUS = {
|
|||||||
'product': '101001', 'aliases': ['identity', 'cloudidentity'], 'displayName': 'Cloud Identity'},
|
'product': '101001', 'aliases': ['identity', 'cloudidentity'], 'displayName': 'Cloud Identity'},
|
||||||
'1010050001': {
|
'1010050001': {
|
||||||
'product': '101005', 'aliases': ['identitypremium', 'cloudidentitypremium'], 'displayName': 'Cloud Identity Premium'},
|
'product': '101005', 'aliases': ['identitypremium', 'cloudidentitypremium'], 'displayName': 'Cloud Identity Premium'},
|
||||||
|
'1010070001': {
|
||||||
|
'product': 'Google-Apps', 'aliases': ['gwef', 'workspaceeducationfundamentals'], 'displayName': 'Google Workspace for Education Fundamentals'},
|
||||||
|
'1010070004': {
|
||||||
|
'product': 'Google-Apps', 'aliases': ['gwegmo', 'workspaceeducationgmailonly'], 'displayName': 'Google Workspace for Education Gmail Only'},
|
||||||
'1010310002': {
|
'1010310002': {
|
||||||
'product': '101031', 'aliases': ['gsefe', 'e4e', 'gsuiteenterpriseeducation'], 'displayName': 'Google Workspace for Education Plus - Legacy'},
|
'product': '101031', 'aliases': ['gsefe', 'e4e', 'gsuiteenterpriseeducation'], 'displayName': 'Google Workspace for Education Plus - Legacy'},
|
||||||
'1010310003': {
|
'1010310003': {
|
||||||
@@ -83,6 +87,8 @@ _SKUS = {
|
|||||||
'product': '101038', 'aliases': ['appsheetplus', 'appsheetenterpriseplus'], 'displayName': 'AppSheet Enterprise Plus'},
|
'product': '101038', 'aliases': ['appsheetplus', 'appsheetenterpriseplus'], 'displayName': 'AppSheet Enterprise Plus'},
|
||||||
'1010390001': {
|
'1010390001': {
|
||||||
'product': '101039', 'aliases': ['assuredcontrols'], 'displayName': 'Assured Controls'},
|
'product': '101039', 'aliases': ['assuredcontrols'], 'displayName': 'Assured Controls'},
|
||||||
|
'1010390002': {
|
||||||
|
'product': '101039', 'aliases': ['assuredcontrolsplus'], 'displayName': 'Assured Controls Plus'},
|
||||||
'1010400001': {
|
'1010400001': {
|
||||||
'product': '101040', 'aliases': ['beyondcorp', 'beyondcorpenterprise', 'bce', 'cep', 'chromeenterprisepremium'], 'displayName': 'Chrome Enterprise Premium'},
|
'product': '101040', 'aliases': ['beyondcorp', 'beyondcorpenterprise', 'bce', 'cep', 'chromeenterprisepremium'], 'displayName': 'Chrome Enterprise Premium'},
|
||||||
'1010430001': {
|
'1010430001': {
|
||||||
@@ -111,6 +117,8 @@ _SKUS = {
|
|||||||
'product': 'Google-Apps', 'aliases': ['standard', 'free'], 'displayName': 'G Suite Legacy'},
|
'product': 'Google-Apps', 'aliases': ['standard', 'free'], 'displayName': 'G Suite Legacy'},
|
||||||
'Google-Apps-For-Business': {
|
'Google-Apps-For-Business': {
|
||||||
'product': 'Google-Apps', 'aliases': ['gafb', 'gafw', 'basic', 'gsuitebasic'], 'displayName': 'G Suite Basic'},
|
'product': 'Google-Apps', 'aliases': ['gafb', 'gafw', 'basic', 'gsuitebasic'], 'displayName': 'G Suite Basic'},
|
||||||
|
'Google-Apps-For-Education': {
|
||||||
|
'product': 'Google-Apps', 'aliases': ['gafe', 'gsuiteeducation', 'gsuiteedu'], 'displayName': 'Google Workspace for Education - Fundamentals'},
|
||||||
'Google-Apps-For-Government': {
|
'Google-Apps-For-Government': {
|
||||||
'product': 'Google-Apps', 'aliases': ['gafg', 'gsuitegovernment', 'gsuitegov'], 'displayName': 'Google Workspace Government'},
|
'product': 'Google-Apps', 'aliases': ['gafg', 'gsuitegovernment', 'gsuitegov'], 'displayName': 'Google Workspace Government'},
|
||||||
'Google-Apps-For-Postini': {
|
'Google-Apps-For-Postini': {
|
||||||
@@ -121,7 +129,7 @@ _SKUS = {
|
|||||||
'product': 'Google-Apps', 'aliases': ['gau', 'gsb', 'unlimited', 'gsuitebusiness'], 'displayName': 'G Suite Business'},
|
'product': 'Google-Apps', 'aliases': ['gau', 'gsb', 'unlimited', 'gsuitebusiness'], 'displayName': 'G Suite Business'},
|
||||||
'1010020020': {
|
'1010020020': {
|
||||||
'product': 'Google-Apps', 'aliases': ['gae', 'gse', 'enterprise', 'gsuiteenterprise',
|
'product': 'Google-Apps', 'aliases': ['gae', 'gse', 'enterprise', 'gsuiteenterprise',
|
||||||
'wsentplus', 'workspaceenterpriseplus'], 'displayName': 'Google Workspace Enterprise Plus'},
|
'wsentplus', 'workspaceenterpriseplus'], 'displayName': 'Google Workspace Enterprise Plus (formerly G Suite Enterprise)'},
|
||||||
'1010020025': {
|
'1010020025': {
|
||||||
'product': 'Google-Apps', 'aliases': ['wsbizplus', 'workspacebusinessplus'], 'displayName': 'Google Workspace Business Plus'},
|
'product': 'Google-Apps', 'aliases': ['wsbizplus', 'workspacebusinessplus'], 'displayName': 'Google Workspace Business Plus'},
|
||||||
'1010020026': {
|
'1010020026': {
|
||||||
@@ -148,14 +156,16 @@ _SKUS = {
|
|||||||
'product': '101034', 'aliases': ['wsbizstarterarchived', 'workspacebusinessstarterarchived'], 'displayName': 'Google Workspace Business Starter - Archived User'},
|
'product': '101034', 'aliases': ['wsbizstarterarchived', 'workspacebusinessstarterarchived'], 'displayName': 'Google Workspace Business Starter - Archived User'},
|
||||||
'1010340006': {
|
'1010340006': {
|
||||||
'product': '101034', 'aliases': ['wsbizstanarchived', 'workspacebusinessstanarchived'], 'displayName': 'Google Workspace Business Standard - Archived User'},
|
'product': '101034', 'aliases': ['wsbizstanarchived', 'workspacebusinessstanarchived'], 'displayName': 'Google Workspace Business Standard - Archived User'},
|
||||||
|
'1010340007': {
|
||||||
|
'product': '101034', 'aliases': ['gwefau', 'gwefarchived', 'workspaceeducationfundamentalsarchived'], 'displayName': 'Google Workspace for Education Fundamentals - Archived User'},
|
||||||
'1010060001': {
|
'1010060001': {
|
||||||
'product': '101006', 'aliases': ['gsuiteessentials', 'essentials',
|
'product': '101006', 'aliases': ['gsuiteessentials', 'essentials',
|
||||||
'd4e', 'driveenterprise', 'drive4enterprise',
|
'd4e', 'driveenterprise', 'drive4enterprise',
|
||||||
'wsess', 'workspaceesentials'], 'displayName': 'Google Workspace Essentials'},
|
'wsess', 'workspaceesentials'], 'displayName': 'Google Workspace Essentials (formerly G Suite Essentials)'},
|
||||||
'1010060003': {
|
'1010060003': {
|
||||||
'product': 'Google-Apps', 'aliases': ['wsentess', 'workspaceenterpriseessentials'], 'displayName': 'Google Workspace Enterprise Essentials'},
|
'product': 'Google-Apps', 'aliases': ['wsentess', 'workspaceenterpriseessentials'], 'displayName': 'Google Workspace Enterprise Essentials'},
|
||||||
'1010060005': {
|
'1010060005': {
|
||||||
'product': 'Google-Apps', 'aliases': ['wsessplus', 'workspaceessentialsplus'], 'displayName': 'Google Workspace Essentials Plus'},
|
'product': 'Google-Apps', 'aliases': ['wsessplus', 'workspaceessentialsplus'], 'displayName': 'Google Workspace Enterprise Essentials Plus'},
|
||||||
'Google-Drive-storage-20GB': {
|
'Google-Drive-storage-20GB': {
|
||||||
'product': 'Google-Drive-storage', 'aliases': ['drive20gb', '20gb', 'googledrivestorage20gb'], 'displayName': 'Google Drive Storage 20GB'},
|
'product': 'Google-Drive-storage', 'aliases': ['drive20gb', '20gb', 'googledrivestorage20gb'], 'displayName': 'Google Drive Storage 20GB'},
|
||||||
'Google-Drive-storage-50GB': {
|
'Google-Drive-storage-50GB': {
|
||||||
|
|||||||
@@ -12,4 +12,4 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
__version__ = "2.156.0"
|
__version__ = "2.164.0"
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
accesscontextmanager.googleapis.com
|
|
||||||
admin.googleapis.com
|
|
||||||
alertcenter.googleapis.com
|
|
||||||
calendar-json.googleapis.com
|
|
||||||
chat.googleapis.com
|
|
||||||
chromemanagement.googleapis.com
|
|
||||||
chromepolicy.googleapis.com
|
|
||||||
classroom.googleapis.com
|
|
||||||
cloudidentity.googleapis.com
|
|
||||||
cloudresourcemanager.googleapis.com
|
|
||||||
contacts.googleapis.com
|
|
||||||
drive.googleapis.com
|
|
||||||
driveactivity.googleapis.com
|
|
||||||
iap.googleapis.com
|
|
||||||
gmail.googleapis.com
|
|
||||||
groupssettings.googleapis.com
|
|
||||||
iam.googleapis.com
|
|
||||||
licensing.googleapis.com
|
|
||||||
reseller.googleapis.com
|
|
||||||
sheets.googleapis.com
|
|
||||||
siteverification.googleapis.com
|
|
||||||
storage-api.googleapis.com
|
|
||||||
vault.googleapis.com
|
|
||||||
Reference in New Issue
Block a user