mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-28 18:01:36 +00:00
Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04371eee53 | ||
|
|
70cf32f6ed | ||
|
|
d2495f0ed8 | ||
|
|
2d3c1e5aa8 | ||
|
|
7855447014 | ||
|
|
0028955412 | ||
|
|
c3b59a9c10 | ||
|
|
fbe1bb69c3 | ||
|
|
b2573b465b | ||
|
|
6171e3c2ef | ||
|
|
19e13a9052 | ||
|
|
b349d80be5 | ||
|
|
c5c4553ae0 | ||
|
|
ef77e6f7e9 | ||
|
|
66816863e0 | ||
|
|
7d67cd08f6 | ||
|
|
0d1b622831 | ||
|
|
a1000f7778 | ||
|
|
30fea18f93 | ||
|
|
8bbb9b6e85 | ||
|
|
4b5390f6cf | ||
|
|
941abe608a | ||
|
|
0d23175216 | ||
|
|
c9c9fbd604 | ||
|
|
9d0d7c5aa8 | ||
|
|
65b23113a9 | ||
|
|
4d3edf7203 | ||
|
|
3c5d3fc569 | ||
|
|
f0d984c693 | ||
|
|
6efe1a596f | ||
|
|
598e5cf315 | ||
|
|
3fb0b840a1 | ||
|
|
ee3fa9715c | ||
|
|
3369a7a506 | ||
|
|
a6d176c033 | ||
|
|
120d72e67a | ||
|
|
0082a5a0b9 | ||
|
|
9971cdbfb3 | ||
|
|
837bb9f84f | ||
|
|
805b196532 | ||
|
|
a23238f97f | ||
|
|
e88e2f0d7f | ||
|
|
13ed3fe80c | ||
|
|
37bfcc1251 | ||
|
|
cb7e70ce31 | ||
|
|
25006765de | ||
|
|
594164944e | ||
|
|
56ed6e8a81 | ||
|
|
159184be73 | ||
|
|
51f4f3c401 | ||
|
|
320d5425c1 | ||
|
|
6d9839a328 | ||
|
|
1002f71d32 | ||
|
|
101a01cef0 | ||
|
|
45230860f6 | ||
|
|
ef1018f286 | ||
|
|
63c0c58bf6 | ||
|
|
aa443ae6cb | ||
|
|
dbec314359 | ||
|
|
8270f0a82a | ||
|
|
2a4cd66227 |
48
.github/workflows/build.yml
vendored
48
.github/workflows/build.yml
vendored
@@ -107,26 +107,26 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # 5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- id: auth
|
- id: auth
|
||||||
name: Authenticate to Google Cloud
|
name: Authenticate to Google Cloud
|
||||||
uses: google-github-actions/auth@v2
|
uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # 2.1.12
|
||||||
with:
|
with:
|
||||||
workload_identity_provider: projects/297925809119/locations/global/workloadIdentityPools/gha-pool/providers/gha-provider
|
workload_identity_provider: projects/297925809119/locations/global/workloadIdentityPools/gha-pool/providers/gha-provider
|
||||||
service_account: github-actions-testing-for-gam@gam-project-wyo-lub-ivl.iam.gserviceaccount.com
|
service_account: github-actions-testing-for-gam@gam-project-wyo-lub-ivl.iam.gserviceaccount.com
|
||||||
|
|
||||||
- name: Cache multiple paths
|
- name: Cache multiple paths
|
||||||
if: matrix.goal == 'build'
|
if: matrix.goal == 'build'
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # 4.2.4
|
||||||
id: cache-python-ssl
|
id: cache-python-ssl
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
cache.tar.xz
|
cache.tar.xz
|
||||||
key: gam-${{ matrix.jid }}-20250701
|
key: gam-${{ matrix.jid }}-20250814
|
||||||
|
|
||||||
- name: Untar Cache archive
|
- name: Untar Cache archive
|
||||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
|
||||||
@@ -136,7 +136,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Use pre-compiled Python for testing
|
- name: Use pre-compiled Python for testing
|
||||||
if: matrix.python != ''
|
if: matrix.python != ''
|
||||||
uses: actions/setup-python@v5
|
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # 5.6.0
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python }}
|
python-version: ${{ matrix.python }}
|
||||||
allow-prereleases: true
|
allow-prereleases: true
|
||||||
@@ -216,14 +216,13 @@ jobs:
|
|||||||
|
|
||||||
- name: MacOS import developer certificates for signing
|
- name: MacOS import developer certificates for signing
|
||||||
if: runner.os == 'macOS'
|
if: runner.os == 'macOS'
|
||||||
uses: apple-actions/import-codesign-certs@v3
|
uses: apple-actions/import-codesign-certs@95e84a1a18f2bdbc5c6ab9b7f4429372e4b13a8b # 5.0.3
|
||||||
with:
|
with:
|
||||||
keychain: signing_temp
|
|
||||||
p12-file-base64: ${{ secrets.CERTIFICATES_P12 }}
|
p12-file-base64: ${{ secrets.CERTIFICATES_P12 }}
|
||||||
p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }}
|
p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }}
|
||||||
|
|
||||||
- name: Windows Configure VCode
|
- name: Windows Configure VCode
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # 1.13.0
|
||||||
if: runner.os == 'Windows' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
if: runner.os == 'Windows' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||||
with:
|
with:
|
||||||
arch: ${{ runner.arch }}
|
arch: ${{ runner.arch }}
|
||||||
@@ -285,7 +284,7 @@ jobs:
|
|||||||
echo "COMPILED_OPENSSL_VERSION=${COMPILED_OPENSSL_VERSION}" >> $GITHUB_ENV
|
echo "COMPILED_OPENSSL_VERSION=${COMPILED_OPENSSL_VERSION}" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Windows NASM Install
|
- name: Windows NASM Install
|
||||||
uses: ilammy/setup-nasm@v1
|
uses: ilammy/setup-nasm@72793074d3c8cdda771dba85f6deafe00623038b # 1.5.2
|
||||||
if: matrix.goal == 'build' && runner.os == 'Windows' && runner.arch == 'X64' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
if: matrix.goal == 'build' && runner.os == 'Windows' && runner.arch == 'X64' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||||
|
|
||||||
- name: Config OpenSSL
|
- name: Config OpenSSL
|
||||||
@@ -462,13 +461,6 @@ jobs:
|
|||||||
curl -O -L "$latest_crypt_whl"
|
curl -O -L "$latest_crypt_whl"
|
||||||
"$PYTHON" -m pip install cryptography*.whl
|
"$PYTHON" -m pip install cryptography*.whl
|
||||||
|
|
||||||
#- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
||||||
|
|
||||||
# - name: Compile cryptography from source (no legacy)
|
|
||||||
# if: runner.os != 'Windows' || runner.arch != 'ARM64'
|
|
||||||
# run: |
|
|
||||||
# pip install --no-binary ":all:" --force cryptography
|
|
||||||
|
|
||||||
- name: Install pip requirements
|
- name: Install pip requirements
|
||||||
run: |
|
run: |
|
||||||
echo "before anything..."
|
echo "before anything..."
|
||||||
@@ -638,7 +630,7 @@ jobs:
|
|||||||
#"/c/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/signtool.exe" verify /v /pa "$gam"
|
#"/c/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/signtool.exe" verify /v /pa "$gam"
|
||||||
|
|
||||||
- name: Attest gam executable was generated from this Action
|
- name: Attest gam executable was generated from this Action
|
||||||
uses: actions/attest-build-provenance@v1
|
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # 2.4.0
|
||||||
if: matrix.goal == 'build'
|
if: matrix.goal == 'build'
|
||||||
with:
|
with:
|
||||||
subject-path: ${{ env.gam }}
|
subject-path: ${{ env.gam }}
|
||||||
@@ -716,7 +708,7 @@ jobs:
|
|||||||
#"/c/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/signtool.exe" verify /v /pa "$MSI_FILENAME"
|
#"/c/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/signtool.exe" verify /v /pa "$MSI_FILENAME"
|
||||||
|
|
||||||
- name: Attest that gam package files were generated from this Action
|
- name: Attest that gam package files were generated from this Action
|
||||||
uses: actions/attest-build-provenance@v1
|
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # 2.4.0
|
||||||
if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && matrix.goal == 'build'
|
if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && matrix.goal == 'build'
|
||||||
with:
|
with:
|
||||||
subject-path: |
|
subject-path: |
|
||||||
@@ -725,7 +717,7 @@ jobs:
|
|||||||
gam*.msi
|
gam*.msi
|
||||||
|
|
||||||
- name: Archive production artifacts
|
- name: Archive production artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # 4.6.2
|
||||||
if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && matrix.goal != 'test'
|
if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && matrix.goal != 'test'
|
||||||
with:
|
with:
|
||||||
name: gam-binaries-${{ env.GAMOS }}-${{ env.arch }}-${{ matrix.jid }}
|
name: gam-binaries-${{ env.GAMOS }}-${{ env.arch }}-${{ matrix.jid }}
|
||||||
@@ -989,16 +981,16 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # 5.0.0
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Download artifacts
|
- name: Download artifacts
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # 5.0.0
|
||||||
|
|
||||||
- name: VirusTotal Scan
|
- name: VirusTotal Scan
|
||||||
uses: crazy-max/ghaction-virustotal@v4
|
uses: crazy-max/ghaction-virustotal@d34968c958ae283fe976efed637081b9f9dcf74f # 4.2.0
|
||||||
with:
|
with:
|
||||||
vt_api_key: ${{ secrets.VT_API_KEY }}
|
vt_api_key: ${{ secrets.VT_API_KEY }}
|
||||||
files: |
|
files: |
|
||||||
@@ -1011,12 +1003,14 @@ jobs:
|
|||||||
echo "Date version: ${dateversion}"
|
echo "Date version: ${dateversion}"
|
||||||
echo "dateversion=${dateversion}" >> $GITHUB_OUTPUT
|
echo "dateversion=${dateversion}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- uses: "marvinpinto/action-automatic-releases@latest"
|
- name: Publish draft release
|
||||||
name: Publish draft release
|
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # 2.3.2
|
||||||
with:
|
with:
|
||||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
automatic_release_tag: "${{ steps.dateversion.outputs.dateversion }}"
|
|
||||||
prerelease: false
|
|
||||||
draft: true
|
draft: true
|
||||||
|
prerelease: false
|
||||||
|
tag_name: "${{ steps.dateversion.outputs.dateversion }}"
|
||||||
|
fail_on_unmatched_files: true
|
||||||
files: |
|
files: |
|
||||||
gam-binaries/*
|
gam-binaries/*
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/get-cacerts.yml
vendored
2
.github/workflows/get-cacerts.yml
vendored
@@ -16,7 +16,7 @@ defaults:
|
|||||||
working-directory: src
|
working-directory: src
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-apis:
|
check-certs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
|
|||||||
@@ -539,6 +539,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
Must match this Python Regular Expression: [a-zA-Z0-9 '"!-]{4,30}
|
Must match this Python Regular Expression: [a-zA-Z0-9 '"!-]{4,30}
|
||||||
<PropertyKey> ::= <String>
|
<PropertyKey> ::= <String>
|
||||||
<PropertyValue> ::= <String>
|
<PropertyValue> ::= <String>
|
||||||
|
<PubSubTopicName> ::= <String>
|
||||||
<QueryAlert> ::= <String>
|
<QueryAlert> ::= <String>
|
||||||
See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
||||||
<QueryBrowser> ::= <String>
|
<QueryBrowser> ::= <String>
|
||||||
@@ -1511,15 +1512,22 @@ gam show privileges
|
|||||||
<RoleItem> ::= id:<String>|uid:<string>|<String>
|
<RoleItem> ::= id:<String>|uid:<string>|<String>
|
||||||
|
|
||||||
gam create adminrole <String> [description <String>]
|
gam create adminrole <String> [description <String>]
|
||||||
privileges all|all_ou|<PrivilegesList>|(select <FileSelector>|<CSVFileSelector>)
|
privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>)|<JSONData>
|
||||||
|
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
||||||
gam update adminrole <RoleItem> [name <String>] [description <String>]
|
gam update adminrole <RoleItem> [name <String>] [description <String>]
|
||||||
[privileges all|all_ou|<PrivilegesList>|(select <FileSelector>|<CSVFileSelector>)]
|
[privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>)|<JSONData>]
|
||||||
|
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
||||||
gam delete adminrole <RoleItem>
|
gam delete adminrole <RoleItem>
|
||||||
gam info adminrole <RoleItem> [privileges]
|
gam info adminrole <RoleItem> [privileges]
|
||||||
|
[formatjson]
|
||||||
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
||||||
[role <RoleItem>] [privileges] [oneitemperrow]
|
[role <RoleItem>] [privileges] [oneitemperrow]
|
||||||
|
[nosystemroles]
|
||||||
|
[formatjson [quotechar <Character>]]
|
||||||
gam show adminroles|roles
|
gam show adminroles|roles
|
||||||
[role <RoleItem>] [privileges]
|
[role <RoleItem>] [privileges]
|
||||||
|
[nosystemroles]
|
||||||
|
[formatjson]
|
||||||
|
|
||||||
gam create|add admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <OrgUnitItem>)
|
gam create|add admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <OrgUnitItem>)
|
||||||
[condition securitygroup|nonsecuritygroup]
|
[condition securitygroup|nonsecuritygroup]
|
||||||
@@ -1533,6 +1541,10 @@ gam show admins
|
|||||||
|
|
||||||
# Alert Center
|
# Alert Center
|
||||||
|
|
||||||
|
gam show alertsettings
|
||||||
|
gam update alertsettings <PubsubTopicName>
|
||||||
|
gam clear alertsettings
|
||||||
|
|
||||||
gam delete alert <AlertID>
|
gam delete alert <AlertID>
|
||||||
gam undelete alert <AlertID>
|
gam undelete alert <AlertID>
|
||||||
gam info alert <AlertID> [formatjson]
|
gam info alert <AlertID> [formatjson]
|
||||||
@@ -4270,19 +4282,19 @@ gam show policies
|
|||||||
<SSOProfileItem> ::= <SSOProfileDisplayName>|<SSOProfileName>
|
<SSOProfileItem> ::= <SSOProfileDisplayName>|<SSOProfileName>
|
||||||
<SSOProfileItemList> ::= "<SSOProfileItem>(,<SSOProfileItem>)*"
|
<SSOProfileItemList> ::= "<SSOProfileItem>(,<SSOProfileItem>)*"
|
||||||
|
|
||||||
gam create inboundssoprofile [name <SSOProfileDisplayName>]
|
gam create inboundssoprofile [saml|oidc] [name <SSOProfileDisplayName>]
|
||||||
[entityid <String>] [loginurl <URL>] [logouturl <URL>] [changepasswordurl <URL>]
|
[entityid <String>] [loginurl <URL>] [logouturl <URL>] [changepasswordurl <URL>]
|
||||||
[returnnameonly]
|
[returnnameonly]
|
||||||
gam update inboundssoprofile <SSOProfileItem>
|
gam update inboundssoprofile [saml|oidc] <SSOProfileItem>
|
||||||
[entityid <String>] [loginurl <URL>] [logouturl <URL>] [changepasswordurl <URL>]
|
[entityid <String>] [loginurl <URL>] [logouturl <URL>] [changepasswordurl <URL>]
|
||||||
[returnnameonly]
|
[returnnameonly]
|
||||||
gam delete inboundssoprofile <SSOProfileItem>
|
gam delete inboundssoprofile [saml|oidc] <SSOProfileItem>
|
||||||
|
|
||||||
gam info inboundssoprofile <SSOProfileItem>
|
gam info inboundssoprofile [all|saml|oidc] <SSOProfileItem>
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam show inboundssoprofiles
|
gam show inboundssoprofiles [all|saml|oidc]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam print inboundssoprofiles [todrive <ToDriveAttribute>*]
|
gam print inboundssoprofiles [all|saml|oidc] [todrive <ToDriveAttribute>*]
|
||||||
[[formatjson [quotechar <Character>]]
|
[[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
<SSOCredentialsName> ::= [id:]inboundSamlSsoProfiles/<String>/idpCredentials/<String>
|
<SSOCredentialsName> ::= [id:]inboundSamlSsoProfiles/<String>/idpCredentials/<String>
|
||||||
@@ -4306,10 +4318,14 @@ gam print inboundssocredentials [profile|profiles <SSOProfileItemList>]
|
|||||||
orgunits/<String> |
|
orgunits/<String> |
|
||||||
orgunit:<OrgUnitPath>
|
orgunit:<OrgUnitPath>
|
||||||
|
|
||||||
gam create inboundssoassignment (group <GroupItem> rank <Number>)|(ou|org|orgunit <OrgUnitItem>)
|
gam create inboundssoassignment
|
||||||
(mode sso_off)|(mode saml_sso profile <SSOProfileItem>)(mode domain_wide_saml_if_enabled) [neverredirect]
|
(group <GroupItem> rank <Number>)|(ou|org|orgunit <OrgUnitItem>)
|
||||||
gam update inboundssoassignment [(group <GroupItem> rank <Number>)|(ou|org|orgunit <OrgUnitItem>)]
|
(mode sso_off)|(mode saml_sso profile <SSOProfileItem>)|(mode oidc_sso profile <SSOProfileName>}|(mode domain_wide_saml_if_enabled)
|
||||||
[(mode sso_off)|(mode saml_sso profile <SSOProfileItem>)(mode domain_wide_saml_if_enabled)] [neverredirect]
|
[neverredirect]
|
||||||
|
gam update inboundssoassignment <SSOAssignmentName>
|
||||||
|
[(group <GroupItem> rank <Number>)|(ou|org|orgunit <OrgUnitItem>)]
|
||||||
|
(mode sso_off)|(mode saml_sso profile <SSOProfileItem>)|(mode oidc_sso profile <SSOProfileName>}|(mode domain_wide_saml_if_enabled)
|
||||||
|
[neverredirect]
|
||||||
gam delete inboundssoassignment <SSOAssignmentSelector>
|
gam delete inboundssoassignment <SSOAssignmentSelector>
|
||||||
|
|
||||||
gam info inboundssoassignment <SSOAssignmentSelector>
|
gam info inboundssoassignment <SSOAssignmentSelector>
|
||||||
|
|||||||
@@ -1,3 +1,67 @@
|
|||||||
|
7.19.00
|
||||||
|
|
||||||
|
Eliminated `drive_v3_beta` and `meet_v2_beta` from `gam.cfg` as the API betas are no longer used.
|
||||||
|
|
||||||
|
Updated `Meet API` scopes so that GAM can read metadata about additional Meet spaces.
|
||||||
|
```
|
||||||
|
[*] 34) Meet API - Manage/Display Meeting Spaces
|
||||||
|
[*] 35) Meet API - Read Meeting Spaces metadata
|
||||||
|
```
|
||||||
|
|
||||||
|
7.18.07
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> print drivelastmodification` to put `addcsvdata` columns
|
||||||
|
after `User,id,name` rather than after the last column.
|
||||||
|
|
||||||
|
7.18.06
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> delete|modify messages` to improve the handling
|
||||||
|
of the following error.
|
||||||
|
```
|
||||||
|
quotaExceeded - User-rate limit exceeded
|
||||||
|
```
|
||||||
|
|
||||||
|
7.18.05
|
||||||
|
|
||||||
|
Added support for Inbound SSO OIDC profiles.
|
||||||
|
|
||||||
|
Currently, if you enter `gam select <SectionName>` and nothing else on the command line,
|
||||||
|
GAM performs no action. Now, it will be treated as if you entered:
|
||||||
|
`gam select <SectionName> save`
|
||||||
|
|
||||||
|
Updated to Python 3.13.7.
|
||||||
|
|
||||||
|
7.18.04
|
||||||
|
|
||||||
|
Added commands to display/manage Alert Center Pub/Sub notifications.
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Alert-Center#configuring-settings
|
||||||
|
|
||||||
|
7.18.03
|
||||||
|
|
||||||
|
Updated `gam oauth create` to give a warning if the number of selected scopes will
|
||||||
|
probably cause Google to generate a "Something went wrong" error.
|
||||||
|
|
||||||
|
7.18.02
|
||||||
|
|
||||||
|
Upgraded to OpenSSL 3.5.2.
|
||||||
|
|
||||||
|
7.18.01
|
||||||
|
|
||||||
|
Added option `nosystemroles` to `gam print|show adminroles` that causes GAM
|
||||||
|
to only display non-system roles.
|
||||||
|
|
||||||
|
Added option `formatjson` to `gam info|print|show adminroles`; this will be most useful
|
||||||
|
when the `privileges` option is used.
|
||||||
|
|
||||||
|
Updated `gam create|update adminrole` to allow specification of privileges with
|
||||||
|
JSON data: `privileges <JSONData>`. These two updates make it easier to copy admin roles.
|
||||||
|
|
||||||
|
Updated `gam create|update adminrole` to allow output of the created/updated
|
||||||
|
role data in CSV format; by default, GAM displays `<RoleName>(<RoleID>) created|updated`.
|
||||||
|
```
|
||||||
|
csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*
|
||||||
|
```
|
||||||
|
|
||||||
7.18.00
|
7.18.00
|
||||||
|
|
||||||
Added commands to display Business Profile Accounts.
|
Added commands to display Business Profile Accounts.
|
||||||
|
|||||||
100
src/cacerts.pem
100
src/cacerts.pem
@@ -433,106 +433,6 @@ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
|
|||||||
mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: GoDaddy
|
|
||||||
# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
|
|
||||||
# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
|
|
||||||
# Label: "Starfield Class 2 CA"
|
|
||||||
# Serial: 0
|
|
||||||
# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24
|
|
||||||
# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a
|
|
||||||
# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
|
|
||||||
MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
|
|
||||||
U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
|
|
||||||
NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
|
|
||||||
ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
|
|
||||||
ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
|
|
||||||
DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
|
|
||||||
8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
|
|
||||||
+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
|
|
||||||
X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
|
|
||||||
K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
|
|
||||||
1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
|
|
||||||
A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
|
|
||||||
zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
|
|
||||||
YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
|
|
||||||
bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
|
|
||||||
DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
|
|
||||||
L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
|
|
||||||
eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
|
|
||||||
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
|
|
||||||
VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
|
|
||||||
WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: GoDaddy
|
|
||||||
# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
|
|
||||||
# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
|
|
||||||
# Label: "Go Daddy Class 2 CA"
|
|
||||||
# Serial: 0
|
|
||||||
# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67
|
|
||||||
# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4
|
|
||||||
# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
|
|
||||||
MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
|
|
||||||
YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
|
|
||||||
MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
|
|
||||||
ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
|
|
||||||
MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
|
|
||||||
ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
|
|
||||||
PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
|
|
||||||
wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
|
|
||||||
EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
|
|
||||||
avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
|
|
||||||
YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
|
|
||||||
sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
|
|
||||||
/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
|
|
||||||
IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
|
|
||||||
YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
|
|
||||||
ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
|
|
||||||
OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
|
|
||||||
TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
|
||||||
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
|
|
||||||
dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
|
|
||||||
ReYNnyicsbkqWletNw+vHX/bvZ8=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Sectigo
|
|
||||||
# Issuer: CN=AAA Certificate Services O=Comodo CA Limited
|
|
||||||
# Subject: CN=AAA Certificate Services O=Comodo CA Limited
|
|
||||||
# Label: "Comodo AAA Services root"
|
|
||||||
# Serial: 1
|
|
||||||
# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0
|
|
||||||
# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49
|
|
||||||
# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
|
|
||||||
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
|
|
||||||
GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
|
|
||||||
YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
|
|
||||||
MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
|
|
||||||
BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
|
|
||||||
GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
|
||||||
ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
|
|
||||||
BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
|
|
||||||
3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
|
|
||||||
YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
|
|
||||||
rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
|
|
||||||
ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
|
|
||||||
oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
|
|
||||||
MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
|
|
||||||
QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
|
|
||||||
b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
|
|
||||||
AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
|
|
||||||
GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
|
||||||
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
|
|
||||||
G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
|
|
||||||
l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
|
|
||||||
smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Sectigo
|
# Operating CA: Sectigo
|
||||||
# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
|
# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
|
||||||
# Subject: CN=COMODO Certification Authority O=COMODO CA Limited
|
# Subject: CN=COMODO Certification Authority O=COMODO CA Limited
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -433,106 +433,6 @@ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
|
|||||||
mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: GoDaddy
|
|
||||||
# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
|
|
||||||
# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority
|
|
||||||
# Label: "Starfield Class 2 CA"
|
|
||||||
# Serial: 0
|
|
||||||
# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24
|
|
||||||
# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a
|
|
||||||
# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
|
|
||||||
MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
|
|
||||||
U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
|
|
||||||
NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
|
|
||||||
ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
|
|
||||||
ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
|
|
||||||
DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
|
|
||||||
8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
|
|
||||||
+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
|
|
||||||
X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
|
|
||||||
K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
|
|
||||||
1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
|
|
||||||
A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
|
|
||||||
zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
|
|
||||||
YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
|
|
||||||
bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
|
|
||||||
DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
|
|
||||||
L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
|
|
||||||
eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
|
|
||||||
xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
|
|
||||||
VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
|
|
||||||
WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: GoDaddy
|
|
||||||
# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
|
|
||||||
# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority
|
|
||||||
# Label: "Go Daddy Class 2 CA"
|
|
||||||
# Serial: 0
|
|
||||||
# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67
|
|
||||||
# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4
|
|
||||||
# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
|
|
||||||
MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
|
|
||||||
YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
|
|
||||||
MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
|
|
||||||
ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
|
|
||||||
MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
|
|
||||||
ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
|
|
||||||
PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
|
|
||||||
wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
|
|
||||||
EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
|
|
||||||
avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
|
|
||||||
YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
|
|
||||||
sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
|
|
||||||
/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
|
|
||||||
IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
|
|
||||||
YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
|
|
||||||
ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
|
|
||||||
OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
|
|
||||||
TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
|
||||||
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
|
|
||||||
dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
|
|
||||||
ReYNnyicsbkqWletNw+vHX/bvZ8=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Sectigo
|
|
||||||
# Issuer: CN=AAA Certificate Services O=Comodo CA Limited
|
|
||||||
# Subject: CN=AAA Certificate Services O=Comodo CA Limited
|
|
||||||
# Label: "Comodo AAA Services root"
|
|
||||||
# Serial: 1
|
|
||||||
# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0
|
|
||||||
# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49
|
|
||||||
# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
|
|
||||||
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
|
|
||||||
GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
|
|
||||||
YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
|
|
||||||
MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
|
|
||||||
BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
|
|
||||||
GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
|
||||||
ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
|
|
||||||
BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
|
|
||||||
3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
|
|
||||||
YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
|
|
||||||
rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
|
|
||||||
ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
|
|
||||||
oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
|
|
||||||
MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
|
|
||||||
QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
|
|
||||||
b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
|
|
||||||
AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
|
|
||||||
GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
|
||||||
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
|
|
||||||
G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
|
|
||||||
l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
|
|
||||||
smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Sectigo
|
# Operating CA: Sectigo
|
||||||
# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
|
# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited
|
||||||
# Subject: CN=COMODO Certification Authority O=COMODO CA Limited
|
# Subject: CN=COMODO Certification Authority O=COMODO CA Limited
|
||||||
|
|||||||
@@ -75,8 +75,8 @@ IAM_CREDENTIALS = 'iamcredentials'
|
|||||||
KEEP = 'keep'
|
KEEP = 'keep'
|
||||||
LICENSING = 'licensing'
|
LICENSING = 'licensing'
|
||||||
LOOKERSTUDIO = 'datastudio'
|
LOOKERSTUDIO = 'datastudio'
|
||||||
MEET = 'meet'
|
MEET_SPACES = 'meet'
|
||||||
MEET_BETA = 'meetbeta'
|
MEET_READONLY = 'meetreadonly'
|
||||||
OAUTH2 = 'oauth2'
|
OAUTH2 = 'oauth2'
|
||||||
ORGPOLICY = 'orgpolicy'
|
ORGPOLICY = 'orgpolicy'
|
||||||
PEOPLE = 'people'
|
PEOPLE = 'people'
|
||||||
@@ -119,6 +119,7 @@ USERINFO_PROFILE_SCOPE = 'https://www.googleapis.com/auth/userinfo.profile' # pr
|
|||||||
VAULT_SCOPES = ['https://www.googleapis.com/auth/ediscovery', 'https://www.googleapis.com/auth/ediscovery.readonly']
|
VAULT_SCOPES = ['https://www.googleapis.com/auth/ediscovery', 'https://www.googleapis.com/auth/ediscovery.readonly']
|
||||||
REQUIRED_SCOPES = [USERINFO_EMAIL_SCOPE, USERINFO_PROFILE_SCOPE]
|
REQUIRED_SCOPES = [USERINFO_EMAIL_SCOPE, USERINFO_PROFILE_SCOPE]
|
||||||
REQUIRED_SCOPES_SET = set(REQUIRED_SCOPES)
|
REQUIRED_SCOPES_SET = set(REQUIRED_SCOPES)
|
||||||
|
NUM_CLIENT_SCOPES_ERROR_LIMIT = 48
|
||||||
#
|
#
|
||||||
JWT_APIS = {
|
JWT_APIS = {
|
||||||
ACCESSCONTEXTMANAGER: [CLOUD_PLATFORM_SCOPE],
|
ACCESSCONTEXTMANAGER: [CLOUD_PLATFORM_SCOPE],
|
||||||
@@ -266,8 +267,8 @@ _INFO = {
|
|||||||
KEEP: {'name': 'Keep API', 'version': 'v1', 'v2discovery': True},
|
KEEP: {'name': 'Keep API', 'version': 'v1', 'v2discovery': True},
|
||||||
LICENSING: {'name': 'License Manager API', 'version': 'v1', 'v2discovery': True},
|
LICENSING: {'name': 'License Manager API', 'version': 'v1', 'v2discovery': True},
|
||||||
LOOKERSTUDIO: {'name': 'Looker Studio API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
LOOKERSTUDIO: {'name': 'Looker Studio API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||||
MEET: {'name': 'Meet API', 'version': 'v2', 'v2discovery': True},
|
MEET_SPACES: {'name': 'Meet API - Manage/Display Meeting Spaces', 'version': 'v2', 'v2discovery': True},
|
||||||
MEET_BETA: {'name': 'Meet API Beta', 'version': 'v2beta', 'v2discovery': True, 'localjson': True, 'mappedAPI': MEET},
|
MEET_READONLY: {'name': 'Meet API - Read Meeting Spaces metadata', 'version': 'v2', 'v2discovery': True, 'mappedAPI': MEET_SPACES},
|
||||||
OAUTH2: {'name': 'OAuth2 API', 'version': 'v2', 'v2discovery': False},
|
OAUTH2: {'name': 'OAuth2 API', 'version': 'v2', 'v2discovery': False},
|
||||||
ORGPOLICY: {'name': 'Organization Policy API', 'version': 'v2', 'v2discovery': True},
|
ORGPOLICY: {'name': 'Organization Policy API', 'version': 'v2', 'v2discovery': True},
|
||||||
PEOPLE: {'name': 'People API', 'version': 'v1', 'v2discovery': True},
|
PEOPLE: {'name': 'People API', 'version': 'v1', 'v2discovery': True},
|
||||||
@@ -688,11 +689,15 @@ _SVCACCT_SCOPES = [
|
|||||||
'api': LOOKERSTUDIO,
|
'api': LOOKERSTUDIO,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': 'https://www.googleapis.com/auth/datastudio'},
|
'scope': 'https://www.googleapis.com/auth/datastudio'},
|
||||||
{'name': 'Meet API',
|
{'name': 'Meet API - Manage/Display Meeting Spaces',
|
||||||
'api': MEET,
|
'api': MEET_SPACES,
|
||||||
'subscopes': READONLY,
|
'subscopes': [],
|
||||||
'scope': 'https://www.googleapis.com/auth/meetings.space.created',
|
'scope': ['https://www.googleapis.com/auth/meetings.space.created',
|
||||||
'roscope': 'https://www.googleapis.com/auth/meetings.space.readonly'},
|
'https://www.googleapis.com/auth/meetings.space.settings']},
|
||||||
|
{'name': 'Meet API - Read Meeting Spaces metadata',
|
||||||
|
'api': MEET_READONLY,
|
||||||
|
'subscopes': [],
|
||||||
|
'scope': 'https://www.googleapis.com/auth/meetings.space.readonly'},
|
||||||
{'name': 'OAuth2 API',
|
{'name': 'OAuth2 API',
|
||||||
'api': OAUTH2,
|
'api': OAUTH2,
|
||||||
'subscopes': [],
|
'subscopes': [],
|
||||||
@@ -843,4 +848,3 @@ def findAPIforScope(scopesList):
|
|||||||
if not requiredAPIs:
|
if not requiredAPIs:
|
||||||
requiredAPIs = scopesList
|
requiredAPIs = scopesList
|
||||||
return ' or '.join(requiredAPIs)
|
return ' or '.join(requiredAPIs)
|
||||||
|
|
||||||
|
|||||||
@@ -153,8 +153,6 @@ DOMAIN = 'domain'
|
|||||||
DRIVE_DIR = 'drive_dir'
|
DRIVE_DIR = 'drive_dir'
|
||||||
# When retrieving lists of Drive files/folders from API, how many should be retrieved in each chunk
|
# When retrieving lists of Drive files/folders from API, how many should be retrieved in each chunk
|
||||||
DRIVE_MAX_RESULTS = 'drive_max_results'
|
DRIVE_MAX_RESULTS = 'drive_max_results'
|
||||||
# Use Drive V3 beta
|
|
||||||
DRIVE_V3_BETA = 'drive_v3_beta'
|
|
||||||
# When processing email messages in batches, how many should be processed in each batch
|
# When processing email messages in batches, how many should be processed in each batch
|
||||||
EMAIL_BATCH_SIZE = 'email_batch_size'
|
EMAIL_BATCH_SIZE = 'email_batch_size'
|
||||||
# Enable Delegated Admin Service Account
|
# Enable Delegated Admin Service Account
|
||||||
@@ -177,8 +175,6 @@ INTER_BATCH_WAIT = 'inter_batch_wait'
|
|||||||
LICENSE_MAX_RESULTS = 'license_max_results'
|
LICENSE_MAX_RESULTS = 'license_max_results'
|
||||||
# License SKUs to process
|
# License SKUs to process
|
||||||
LICENSE_SKUS = 'license_skus'
|
LICENSE_SKUS = 'license_skus'
|
||||||
# Use Meet V2 beta
|
|
||||||
MEET_V2_BETA = 'meet_v2_beta'
|
|
||||||
# When retrieving lists of Google Group members from API, how many should be retrieved in each chunk
|
# When retrieving lists of Google Group members from API, how many should be retrieved in each chunk
|
||||||
MEMBER_MAX_RESULTS = 'member_max_results'
|
MEMBER_MAX_RESULTS = 'member_max_results'
|
||||||
# CI API Group members max page size when view=BASIC
|
# CI API Group members max page size when view=BASIC
|
||||||
@@ -379,7 +375,6 @@ Defaults = {
|
|||||||
DRIVE_DIR: '',
|
DRIVE_DIR: '',
|
||||||
ENFORCE_EXPANSIVE_ACCESS: TRUE,
|
ENFORCE_EXPANSIVE_ACCESS: TRUE,
|
||||||
DRIVE_MAX_RESULTS: '1000',
|
DRIVE_MAX_RESULTS: '1000',
|
||||||
DRIVE_V3_BETA: FALSE,
|
|
||||||
EMAIL_BATCH_SIZE: '50',
|
EMAIL_BATCH_SIZE: '50',
|
||||||
ENABLE_DASA: FALSE,
|
ENABLE_DASA: FALSE,
|
||||||
ENABLE_GCLOUD_REAUTH: FALSE,
|
ENABLE_GCLOUD_REAUTH: FALSE,
|
||||||
@@ -390,7 +385,6 @@ Defaults = {
|
|||||||
INTER_BATCH_WAIT: '0',
|
INTER_BATCH_WAIT: '0',
|
||||||
LICENSE_MAX_RESULTS: '100',
|
LICENSE_MAX_RESULTS: '100',
|
||||||
LICENSE_SKUS: '',
|
LICENSE_SKUS: '',
|
||||||
MEET_V2_BETA: FALSE,
|
|
||||||
MEMBER_MAX_RESULTS: '200',
|
MEMBER_MAX_RESULTS: '200',
|
||||||
MEMBER_MAX_RESULTS_CI_BASIC: '1000',
|
MEMBER_MAX_RESULTS_CI_BASIC: '1000',
|
||||||
MEMBER_MAX_RESULTS_CI_FULL: '500',
|
MEMBER_MAX_RESULTS_CI_FULL: '500',
|
||||||
@@ -547,7 +541,6 @@ VAR_INFO = {
|
|||||||
DRIVE_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMDRIVEDIR'},
|
DRIVE_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMDRIVEDIR'},
|
||||||
ENFORCE_EXPANSIVE_ACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
ENFORCE_EXPANSIVE_ACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
||||||
DRIVE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
DRIVE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
||||||
DRIVE_V3_BETA: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
EMAIL_BATCH_SIZE: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 100)},
|
EMAIL_BATCH_SIZE: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 100)},
|
||||||
ENABLE_DASA: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'enabledasa.txt', VAR_SFFT: (FALSE, TRUE)},
|
ENABLE_DASA: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'enabledasa.txt', VAR_SFFT: (FALSE, TRUE)},
|
||||||
ENABLE_GCLOUD_REAUTH: {VAR_TYPE: TYPE_BOOLEAN},
|
ENABLE_GCLOUD_REAUTH: {VAR_TYPE: TYPE_BOOLEAN},
|
||||||
@@ -558,7 +551,6 @@ VAR_INFO = {
|
|||||||
INTER_BATCH_WAIT: {VAR_TYPE: TYPE_FLOAT, VAR_LIMITS: (0.0, 60.0)},
|
INTER_BATCH_WAIT: {VAR_TYPE: TYPE_FLOAT, VAR_LIMITS: (0.0, 60.0)},
|
||||||
LICENSE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (10, 1000)},
|
LICENSE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (10, 1000)},
|
||||||
LICENSE_SKUS: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
LICENSE_SKUS: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
||||||
MEET_V2_BETA: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
MEMBER_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
|
MEMBER_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
|
||||||
MEMBER_MAX_RESULTS_CI_BASIC: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
MEMBER_MAX_RESULTS_CI_BASIC: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
||||||
MEMBER_MAX_RESULTS_CI_FULL: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 500)},
|
MEMBER_MAX_RESULTS_CI_FULL: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 500)},
|
||||||
|
|||||||
@@ -411,6 +411,7 @@ class GamCLArgs():
|
|||||||
ARG_ALERTFEEDBACK = 'alertfeedback'
|
ARG_ALERTFEEDBACK = 'alertfeedback'
|
||||||
ARG_ALERTFEEDBACKS = 'alertfeedbacks'
|
ARG_ALERTFEEDBACKS = 'alertfeedbacks'
|
||||||
ARG_ALERTSFEEDBACK = 'alertsfeedback'
|
ARG_ALERTSFEEDBACK = 'alertsfeedback'
|
||||||
|
ARG_ALERTSETTINGS = 'alertsettings'
|
||||||
ARG_ALIAS = 'alias'
|
ARG_ALIAS = 'alias'
|
||||||
ARG_ALIASES = 'aliases'
|
ARG_ALIASES = 'aliases'
|
||||||
ARG_ALIASDOMAIN = 'aliasdomain'
|
ARG_ALIASDOMAIN = 'aliasdomain'
|
||||||
@@ -1013,6 +1014,7 @@ class GamCLArgs():
|
|||||||
OB_PROJECT_ID_ENTITY = 'ProjectIDEntity'
|
OB_PROJECT_ID_ENTITY = 'ProjectIDEntity'
|
||||||
OB_PROPERTY_KEY = 'PropertyKey'
|
OB_PROPERTY_KEY = 'PropertyKey'
|
||||||
OB_PROPERTY_VALUE = 'PropertyValue'
|
OB_PROPERTY_VALUE = 'PropertyValue'
|
||||||
|
OB_PUBSUB_TOPIC_NAME = 'PubSubTopicName'
|
||||||
OB_QUERY = 'Query'
|
OB_QUERY = 'Query'
|
||||||
OB_QUERY_ITEM = 'QueryItem'
|
OB_QUERY_ITEM = 'QueryItem'
|
||||||
OB_QUERY_LIST = 'QueryList'
|
OB_QUERY_LIST = 'QueryList'
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ class GamEntity():
|
|||||||
ALERT_ID = 'alri'
|
ALERT_ID = 'alri'
|
||||||
ALERT_FEEDBACK = 'alfb'
|
ALERT_FEEDBACK = 'alfb'
|
||||||
ALERT_FEEDBACK_ID = 'alfi'
|
ALERT_FEEDBACK_ID = 'alfi'
|
||||||
|
ALERT_SETTINGS = 'alrs'
|
||||||
ALIAS = 'alia'
|
ALIAS = 'alia'
|
||||||
ALIAS_EMAIL = 'alie'
|
ALIAS_EMAIL = 'alie'
|
||||||
ALIAS_TARGET = 'alit'
|
ALIAS_TARGET = 'alit'
|
||||||
@@ -285,10 +286,11 @@ class GamEntity():
|
|||||||
MIMETYPE = 'mime'
|
MIMETYPE = 'mime'
|
||||||
MOBILE_DEVICE = 'mobi'
|
MOBILE_DEVICE = 'mobi'
|
||||||
NAME = 'name'
|
NAME = 'name'
|
||||||
|
NONEDITABLE_ALIAS = 'neal'
|
||||||
NOTE = 'note'
|
NOTE = 'note'
|
||||||
NOTE_ACL = 'nota'
|
NOTE_ACL = 'nota'
|
||||||
NOTES_ACLS = 'naac'
|
NOTES_ACLS = 'naac'
|
||||||
NONEDITABLE_ALIAS = 'neal'
|
NOTIFICATION = 'noti'
|
||||||
OAUTH2_TXT_FILE = 'oaut'
|
OAUTH2_TXT_FILE = 'oaut'
|
||||||
OAUTH2SERVICE_JSON_FILE = 'oau2'
|
OAUTH2SERVICE_JSON_FILE = 'oau2'
|
||||||
ORGANIZATIONAL_UNIT = 'orgu'
|
ORGANIZATIONAL_UNIT = 'orgu'
|
||||||
@@ -414,6 +416,7 @@ class GamEntity():
|
|||||||
ALERT_ID: ['Alert IDs', 'Alert ID'],
|
ALERT_ID: ['Alert IDs', 'Alert ID'],
|
||||||
ALERT_FEEDBACK: ['Alert Feedbacks', 'Alert Feedback'],
|
ALERT_FEEDBACK: ['Alert Feedbacks', 'Alert Feedback'],
|
||||||
ALERT_FEEDBACK_ID: ['Alert Feedback IDs', 'Alert Feedback ID'],
|
ALERT_FEEDBACK_ID: ['Alert Feedback IDs', 'Alert Feedback ID'],
|
||||||
|
ALERT_SETTINGS: ['Alert Settings', 'Alert Settings'],
|
||||||
ALIAS: ['Aliases', 'Alias'],
|
ALIAS: ['Aliases', 'Alias'],
|
||||||
ALIAS_EMAIL: ['Alias Emails', 'Alias Email'],
|
ALIAS_EMAIL: ['Alias Emails', 'Alias Email'],
|
||||||
ALIAS_TARGET: ['Alias Targets', 'Alias Target'],
|
ALIAS_TARGET: ['Alias Targets', 'Alias Target'],
|
||||||
@@ -645,10 +648,11 @@ class GamEntity():
|
|||||||
MIMETYPE: ['MIME Types', 'MIME Type'],
|
MIMETYPE: ['MIME Types', 'MIME Type'],
|
||||||
MOBILE_DEVICE: ['Mobile Devices', 'Mobile Device'],
|
MOBILE_DEVICE: ['Mobile Devices', 'Mobile Device'],
|
||||||
NAME: ['Names', 'Name'],
|
NAME: ['Names', 'Name'],
|
||||||
|
NONEDITABLE_ALIAS: ['Non-Editable Aliases', 'Non-Editable Alias'],
|
||||||
NOTE: ['Notes', 'Note'],
|
NOTE: ['Notes', 'Note'],
|
||||||
NOTE_ACL: ['Note ACLs', 'Note ACL'],
|
NOTE_ACL: ['Note ACLs', 'Note ACL'],
|
||||||
NOTES_ACLS: ["'Note's ACLs", "Note's ACLs"],
|
NOTES_ACLS: ["'Note's ACLs", "Note's ACLs"],
|
||||||
NONEDITABLE_ALIAS: ['Non-Editable Aliases', 'Non-Editable Alias'],
|
NOTIFICATION: ['Notifications', 'Notification'],
|
||||||
OAUTH2_TXT_FILE: ['Client OAuth2 File', 'Client OAuth2 File'],
|
OAUTH2_TXT_FILE: ['Client OAuth2 File', 'Client OAuth2 File'],
|
||||||
OAUTH2SERVICE_JSON_FILE: ['Service Account OAuth2 File', 'Service Account OAuth2 File'],
|
OAUTH2SERVICE_JSON_FILE: ['Service Account OAuth2 File', 'Service Account OAuth2 File'],
|
||||||
ORGANIZATIONAL_UNIT: ['Organizational Units', 'Organizational Unit'],
|
ORGANIZATIONAL_UNIT: ['Organizational Units', 'Organizational Unit'],
|
||||||
|
|||||||
@@ -433,6 +433,7 @@ NO_SVCACCT_ACCESS_ALLOWED = 'No Service Account Access allowed'
|
|||||||
NO_TRANSFER_LACK_OF_DISK_SPACE = 'Transfer not performed due to lack of target drive space.'
|
NO_TRANSFER_LACK_OF_DISK_SPACE = 'Transfer not performed due to lack of target drive space.'
|
||||||
NO_USAGE_PARAMETERS_DATA_AVAILABLE = 'No usage parameters data available.'
|
NO_USAGE_PARAMETERS_DATA_AVAILABLE = 'No usage parameters data available.'
|
||||||
NO_USER_COUNTS_DATA_AVAILABLE = 'No User counts data available.'
|
NO_USER_COUNTS_DATA_AVAILABLE = 'No User counts data available.'
|
||||||
|
NUM_SELECTED_CLIENT_SCOPES = '\n{0} scopes are selected, if more than {1} scopes are selected, Google will probably generate a "Something went wrong" error\n'
|
||||||
OAUTH2_GO_TO_LINK_MESSAGE = """
|
OAUTH2_GO_TO_LINK_MESSAGE = """
|
||||||
Go to the following link in a browser on this computer or on another computer:
|
Go to the following link in a browser on this computer or on another computer:
|
||||||
|
|
||||||
@@ -464,6 +465,7 @@ PROCESSING_ITEM_N = '{0},0,Processing item {1}\n'
|
|||||||
PROCESSING_ITEM_N_OF_M = '{0},0,Processing item {1}/{2}\n'
|
PROCESSING_ITEM_N_OF_M = '{0},0,Processing item {1}/{2}\n'
|
||||||
PROFILE_PHOTO_NOT_FOUND = 'Profile photo not found'
|
PROFILE_PHOTO_NOT_FOUND = 'Profile photo not found'
|
||||||
PROFILE_PHOTO_IS_DEFAULT = 'Profile photo is default'
|
PROFILE_PHOTO_IS_DEFAULT = 'Profile photo is default'
|
||||||
|
QUOTA_EXCEEDED = 'Quota exceeded'
|
||||||
REASON_ONLY_VALID_WITH_CONTENTRESTRICTIONS_READONLY_TRUE = 'reason only valid with contentrestrictions readonly true'
|
REASON_ONLY_VALID_WITH_CONTENTRESTRICTIONS_READONLY_TRUE = 'reason only valid with contentrestrictions readonly true'
|
||||||
REAUTHENTICATION_IS_NEEDED = 'Reauthentication is needed, please run\n\ngam oauth create'
|
REAUTHENTICATION_IS_NEEDED = 'Reauthentication is needed, please run\n\ngam oauth create'
|
||||||
RECOMMEND_RUNNING_GAM_ROTATE_SAKEY = 'Recommend running "gam rotate sakey" to get a new key\n'
|
RECOMMEND_RUNNING_GAM_ROTATE_SAKEY = 'Recommend running "gam rotate sakey" to get a new key\n'
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
- [Display administrators](#display-administrators)
|
- [Display administrators](#display-administrators)
|
||||||
- [Copy privileges from one role to a new role](#copy-privileges-from-one-role-to-a-new-role)
|
- [Copy privileges from one role to a new role](#copy-privileges-from-one-role-to-a-new-role)
|
||||||
- [Copy roles from one administrator to another](#copy-roles-from-one-administrator-to-another)
|
- [Copy roles from one administrator to another](#copy-roles-from-one-administrator-to-another)
|
||||||
|
- [Copy non-system admin roles from a source workspace to a target workspace](#copy-non-system-admin-roles-from-a-source-workspace-to-a-target-workspace)
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [About Administrator roles](https://support.google.com/a/answer/33325?ref_topic=4514341)
|
* [About Administrator roles](https://support.google.com/a/answer/33325?ref_topic=4514341)
|
||||||
@@ -21,13 +22,16 @@
|
|||||||
<DomainName> ::= <String>(.<String>)+
|
<DomainName> ::= <String>(.<String>)+
|
||||||
<EmailAddress> ::= <String>@<DomainName>
|
<EmailAddress> ::= <String>@<DomainName>
|
||||||
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
<GroupItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||||
|
<JSONData> ::= (json [charset <Charset>] <String>) | (json file <FileName> [charset <Charset>]) |
|
||||||
<OrgUnitID> ::= id:<String>
|
<OrgUnitID> ::= id:<String>
|
||||||
<OrgUnitPath> ::= /|(/<String)+
|
<OrgUnitPath> ::= /|(/<String)+
|
||||||
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
|
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
|
||||||
<Privilege> ::= <String>
|
<Privilege> ::= <String>
|
||||||
<PrivilegeList> ::= "<Privilege>(,<Privilege)*"
|
<PrivilegeList> ::= "<Privilege>(,<Privilege)*"
|
||||||
<RoleAssignmentID> ::= <String>
|
<RoleAssignmentID> ::= <String>
|
||||||
<RoleItem> ::= id:<String>|uid:<String>|<String>
|
<RoleID> ::= <String>
|
||||||
|
<RoleName> ::= <String>
|
||||||
|
<RoleItem> ::= id:<RoleID>|<RoleName>
|
||||||
<UniqueID> ::= id:<String>
|
<UniqueID> ::= id:<String>
|
||||||
<UserItem> ::= <EmailAddress>|<UniqueID>|<String>
|
<UserItem> ::= <EmailAddress>|<UniqueID>|<String>
|
||||||
```
|
```
|
||||||
@@ -1383,9 +1387,11 @@ Show 111 Privileges
|
|||||||
## Manage administrative roles
|
## Manage administrative roles
|
||||||
```
|
```
|
||||||
gam create adminrole <String> [description <String>]
|
gam create adminrole <String> [description <String>]
|
||||||
privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)
|
privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)|<JSONData>
|
||||||
|
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
||||||
gam update adminrole <RoleItem> [name <String>] [description <String>]
|
gam update adminrole <RoleItem> [name <String>] [description <String>]
|
||||||
[privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)]
|
[privileges all|all_ou|<PrivilegeList>|(select <FileSelector>|<CSVFileSelector>>)|<JSONData>]
|
||||||
|
[csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*]
|
||||||
gam delete adminrole <RoleItem>
|
gam delete adminrole <RoleItem>
|
||||||
```
|
```
|
||||||
* `privileges all` - All defined privileges
|
* `privileges all` - All defined privileges
|
||||||
@@ -1393,24 +1399,61 @@ gam delete adminrole <RoleItem>
|
|||||||
* `privileges <PrivilegeList>` - A specific list of privileges
|
* `privileges <PrivilegeList>` - A specific list of privileges
|
||||||
* `privileges select <FileSelector>|<CSVFileSelector>>` - A collection of privileges from a flat or CSV file
|
* `privileges select <FileSelector>|<CSVFileSelector>>` - A collection of privileges from a flat or CSV file
|
||||||
|
|
||||||
|
By default, when an admin role is created|update, GAM displays `<RoleName>(<RoleID>) created|updated`.
|
||||||
|
* `csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]]` - Output the admin roledetails in CSV format.
|
||||||
|
|
||||||
|
When `csv` is uused, Add additional columns of data from the command line to the output.
|
||||||
|
* `addcsvdata <FieldName> <String>`
|
||||||
|
|
||||||
## Display administrative roles
|
## Display administrative roles
|
||||||
```
|
```
|
||||||
gam info adminrole <RoleItem> [privileges]
|
gam info adminrole <RoleItem> [privileges]
|
||||||
|
[formatjson]
|
||||||
```
|
```
|
||||||
* `privileges` - Display privileges associated with role
|
* `privileges` - Display privileges associated with role
|
||||||
|
|
||||||
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
|
```
|
||||||
|
gam show adminroles|roles
|
||||||
|
[role <RoleItem>] [privileges]
|
||||||
|
[nosystemroles]
|
||||||
|
[formatjson]
|
||||||
|
```
|
||||||
|
* `privileges` - Display privileges associated with each role
|
||||||
|
|
||||||
|
By default, all roles are displayed:
|
||||||
|
* `role <RoleItem>` - Display a specific role.
|
||||||
|
* `nosystemroles` - Display onnly non-system roles.
|
||||||
|
|
||||||
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
```
|
```
|
||||||
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
||||||
[role <RoleItem>] [privileges] [oneitemperrow]
|
[role <RoleItem>] [privileges] [oneitemperrow]
|
||||||
gam show adminroles|roles
|
[nosystemroles]
|
||||||
[role <RoleItem>] [privileges]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
By default, all roles are displayed, use `role <RoleItem>` to display a specific role.
|
|
||||||
|
|
||||||
* `privileges` - Display privileges associated with each role
|
* `privileges` - Display privileges associated with each role
|
||||||
|
|
||||||
By default, with `print`, all privileges for a role are shown on one row as a repeating item.
|
By default, all privileges for a role are shown on one row as a repeating item.
|
||||||
When `oneitemperrow` is specified, each privilege is output on a separate row/line with the other role fields.
|
When `oneitemperrow` is specified, each privilege is output on a separate row/line with the other role fields.
|
||||||
|
|
||||||
|
By default, all roles are displayed:
|
||||||
|
* `role <RoleItem>` - Display a specific role.
|
||||||
|
* `nosystemroles` - Display onnly non-system roles.
|
||||||
|
|
||||||
|
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format:
|
||||||
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
|
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
||||||
|
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
||||||
|
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||||
|
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||||
|
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||||
|
|
||||||
## Create an administrator
|
## Create an administrator
|
||||||
Add an administrator role to an administrator.
|
Add an administrator role to an administrator.
|
||||||
```
|
```
|
||||||
@@ -1469,3 +1512,15 @@ gam config csv_input_row_filter "scopeType:regex:CUSTOMER" redirect stdout ./Upd
|
|||||||
gam config csv_input_row_filter "scopeType:regex:ORG_UNIT" redirect stdout ./UpdateNewAdminOrgUnitRoles.txt multiprocess redirect stderr stdout csv CurrentAdminRoles.csv gam create admin newadmin@domain.com "id:~~roleId~~" org_unit "id:~~orgUnitId~~"
|
gam config csv_input_row_filter "scopeType:regex:ORG_UNIT" redirect stdout ./UpdateNewAdminOrgUnitRoles.txt multiprocess redirect stderr stdout csv CurrentAdminRoles.csv gam create admin newadmin@domain.com "id:~~roleId~~" org_unit "id:~~orgUnitId~~"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Copy non-system admin roles from a source workspace to a target workspace
|
||||||
|
This requires GAM version 7.18.01 or higher.
|
||||||
|
|
||||||
|
In the source workspace to the following:
|
||||||
|
```
|
||||||
|
gam redirect csv ./SourceNonSystemRoles.csv print adminroles privileges nosystemroles formatjson quotechar "'"
|
||||||
|
```
|
||||||
|
|
||||||
|
In the target workspacce do the following:
|
||||||
|
```
|
||||||
|
gam redirect csv ./TargetNonSystemRoles.csv multiprocess quotechar "'" redirect stderr - multiprocess csv SourceNonSystemRoles.csv quotechar "'" gam create adminrole "~roleName" description "~roleDescription" privileges json "~JSON" csv addcsvdata oldRoleId "~roleId" formatjson
|
||||||
|
```
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
- [Display alerts](#display-alerts)
|
- [Display alerts](#display-alerts)
|
||||||
- [Manage alert feedback](#manage-alert-feedback)
|
- [Manage alert feedback](#manage-alert-feedback)
|
||||||
- [Display alert feedback](#display-alert-feedback)
|
- [Display alert feedback](#display-alert-feedback)
|
||||||
|
- [Configuring settings](#configuring-settings)
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Alert Center API](https://developers.google.com/admin-sdk/alertcenter/reference/rest/)
|
* [Alert Center API](https://developers.google.com/admin-sdk/alertcenter/reference/rest/)
|
||||||
@@ -18,6 +19,7 @@
|
|||||||
## Definitions
|
## Definitions
|
||||||
```
|
```
|
||||||
<AlertID> ::= <String>
|
<AlertID> ::= <String>
|
||||||
|
<PubSubTopicName> ::= <String>
|
||||||
<QueryAlert> ::= <String> See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
<QueryAlert> ::= <String> See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
||||||
```
|
```
|
||||||
## Introduction
|
## Introduction
|
||||||
@@ -95,3 +97,15 @@ the quote character itself, the column delimiter (comma by default) and new-line
|
|||||||
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
||||||
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
||||||
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
||||||
|
|
||||||
|
## Configuring settings
|
||||||
|
|
||||||
|
Alert Center can be configured to send notifications to a Google Cloud Pub/Sub topic, but it first requires configuration.
|
||||||
|
* See https://developers.google.com/workspace/admin/alertcenter/guides/notifications for information.
|
||||||
|
|
||||||
|
Gam can be used to display or modify the settings:
|
||||||
|
```
|
||||||
|
gam show alertsettings
|
||||||
|
gam update alertsettings <PubSubTopicName>
|
||||||
|
gam clear alertsettings
|
||||||
|
```
|
||||||
@@ -436,6 +436,7 @@
|
|||||||
Must match this Python Regular Expression: [a-zA-Z0-9 '"!-]{4,30}
|
Must match this Python Regular Expression: [a-zA-Z0-9 '"!-]{4,30}
|
||||||
<PropertyKey> ::= <String>
|
<PropertyKey> ::= <String>
|
||||||
<PropertyValue> ::= <String>
|
<PropertyValue> ::= <String>
|
||||||
|
<PubSubTopicName> ::= <String>
|
||||||
<QueryAlert> ::= <String>
|
<QueryAlert> ::= <String>
|
||||||
See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
See: https://developers.google.com/admin-sdk/alertcenter/guides/query-filters
|
||||||
<QueryBrowser> ::= <String>
|
<QueryBrowser> ::= <String>
|
||||||
|
|||||||
36
wiki/Business-Account-Management.md
Normal file
36
wiki/Business-Account-Management.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Users - Business Account Management
|
||||||
|
- [API documentation](#api-documentation)
|
||||||
|
- [Introduction](#introduction)
|
||||||
|
- [Definitions](#definitions)
|
||||||
|
- [Display Business Profile Accounts](#display-business-profile-accounts)
|
||||||
|
|
||||||
|
## API documentation
|
||||||
|
* [Business Account Management](https://developers.google.com/my-business/reference/accountmanagement/rest)
|
||||||
|
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
These features were added in version 7.18.00.
|
||||||
|
|
||||||
|
To use these commands you add the 'Business Account Management API' to your project and update client authorization.
|
||||||
|
```
|
||||||
|
gam update project
|
||||||
|
gam oauth create
|
||||||
|
...
|
||||||
|
[*] 0) Business Account Management API
|
||||||
|
|
||||||
|
```
|
||||||
|
## Definitions
|
||||||
|
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||||
|
|
||||||
|
## Display Business Profile Accounts
|
||||||
|
```
|
||||||
|
gam <UserItem> show businessprofileaccounts
|
||||||
|
[type locationgroup|organization|personal|usergroup]
|
||||||
|
```
|
||||||
|
Gam displays the information as an indented list of keys and values.
|
||||||
|
|
||||||
|
```
|
||||||
|
gam <UserItem> print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
||||||
|
[type locationgroup|organization|personal|usergroup]
|
||||||
|
```
|
||||||
|
Gam displays the information as columns of fields.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Chat Bot
|
# Chat Bot Setup and Use
|
||||||
- [Introduction](#introduction)
|
- [Introduction](#introduction)
|
||||||
- [Set up a Chat Bot](#set-up-a-chat-bot)
|
- [Set up a Chat Bot](#set-up-a-chat-bot)
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
@@ -62,15 +62,6 @@ To use the `crostelemetry` commands you must authorize an additional scope:
|
|||||||
gam oauth create
|
gam oauth create
|
||||||
```
|
```
|
||||||
|
|
||||||
Many commands come in two forms:
|
|
||||||
```
|
|
||||||
gam <CrOSTypeEntity> <Command> ...
|
|
||||||
gam <Command> cros <CrOSEntity> ...
|
|
||||||
```
|
|
||||||
The first form allows more powerful selection of devices with `<CrOSTypeEntity>`.
|
|
||||||
|
|
||||||
The second form is backwards compatible with Legacy GAM and selection with `<CrOSEntity>` is limited.
|
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
* [`<CrOSTypeEntity>`](Collections-of-ChromeOS-Devices)
|
* [`<CrOSTypeEntity>`](Collections-of-ChromeOS-Devices)
|
||||||
|
|
||||||
@@ -332,7 +323,6 @@ gam select default config update_cros_ou_with_id true save
|
|||||||
|
|
||||||
```
|
```
|
||||||
gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatchupdate]
|
gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatchupdate]
|
||||||
gam update cros <CrOSEntity> <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatchupdate]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Google has introduced a new, faster method for moving CrOS devices to a new OU. The `quickcrosmove` option controls which method Gam uses.
|
Google has introduced a new, faster method for moving CrOS devices to a new OU. The `quickcrosmove` option controls which method Gam uses.
|
||||||
@@ -419,8 +409,6 @@ gam update ou csvkmd cros.csv keyfield OU datafield deviceId add croscsvdata dev
|
|||||||
|
|
||||||
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
||||||
[actionbatchsize <Integer>]
|
[actionbatchsize <Integer>]
|
||||||
gam update cros <CrOSEntity> action <CrOSAction> [acknowledge_device_touch_requirement]
|
|
||||||
[actionbatchsize <Integer>]
|
|
||||||
```
|
```
|
||||||
As of GAM version `6.67.00`, the new API function `batchChangeStatus` replaces the old API function `action`; ChromeOS devices are now processed in batches.
|
As of GAM version `6.67.00`, the new API function `batchChangeStatus` replaces the old API function `action`; ChromeOS devices are now processed in batches.
|
||||||
The batch size defaults to 10, the `actionbatchsize <Integer>` option can be used to set a batch size between 10 and 250.
|
The batch size defaults to 10, the `actionbatchsize <Integer>` option can be used to set a batch size between 10 and 250.
|
||||||
@@ -457,21 +445,18 @@ is configurable from 0 to some large number. If the status reaches `EXPIRED`, `C
|
|||||||
wipe_users|
|
wipe_users|
|
||||||
take_a_screenshot
|
take_a_screenshot
|
||||||
|
|
||||||
gam cros <CrOSTypeEntity> issuecommand command <CrOSCommand> [times_to_check_status <Integer>] [doit]
|
gam <CrOSTypeEntity> issuecommand command <CrOSCommand> [times_to_check_status <Integer>] [doit]
|
||||||
gam issuecommand cros <CrOSEntity> command <CrOSCommand> [times_to_check_status <Integer>] [doit]
|
|
||||||
```
|
```
|
||||||
If the final status is not reached before GAM exits, you can issue the following commands to continue checking the status.
|
If the final status is not reached before GAM exits, you can issue the following commands to continue checking the status.
|
||||||
```
|
```
|
||||||
gam cros <CrOSTypeEntity> getcommand commandid <CommandID> [times_to_check_status <Integer>]
|
gam <CrOSTypeEntity> getcommand commandid <CommandID> [times_to_check_status <Integer>]
|
||||||
gam getcommand cros <CrOSEntity> commandid <CommandID> [times_to_check_status <Integer>]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Action Examples
|
### Action Examples
|
||||||
Remove user profile data from the device; the device will remain enrolled and connected.
|
Remove user profile data from the device; the device will remain enrolled and connected.
|
||||||
User data not synced to the Cloud including Downloads, Android app data and Crostini Linux VMs will be permanently lost.
|
User data not synced to the Cloud including Downloads, Android app data and Crostini Linux VMs will be permanently lost.
|
||||||
Commands with issuecommand directly after gam will work with Legacy GAM & GAM7, whereas commands where the issuecommand is after the cros <CrOSTypeEntity> will work only with GAM7.
|
|
||||||
```
|
```
|
||||||
gam issuecommand cros dd1d659a-0ea4-4e94-905e-4726c7a5f1e9 command wipe_users doit
|
gam cros dd1d659a-0ea4-4e94-905e-4726c7a5f1e9 issuecommand command wipe_users doit
|
||||||
```
|
```
|
||||||
Remove profiles using the annotatedAssetID, which is a user editable field, in this example the device has an asset ID of CB1234.
|
Remove profiles using the annotatedAssetID, which is a user editable field, in this example the device has an asset ID of CB1234.
|
||||||
```
|
```
|
||||||
@@ -483,14 +468,12 @@ gam cros_queries "asset_id:CB1234,asset_id:CB5678" issuecommand command wipe_use
|
|||||||
```
|
```
|
||||||
Powerwash the device with serial number 143040348.
|
Powerwash the device with serial number 143040348.
|
||||||
```
|
```
|
||||||
gam issuecommand cros query:id:143040348 command remote_powerwash times_to_check_status 10 doit
|
|
||||||
gam cros_sn 143040348 issuecommand command remote_powerwash times_to_check_status 10 doit
|
gam cros_sn 143040348 issuecommand command remote_powerwash times_to_check_status 10 doit
|
||||||
```
|
```
|
||||||
|
|
||||||
Powerwash all devices in the /StudentCarts OrgUnit. Devices will need to be manually reconnected to WiFi which may mean entering a PSK.
|
Powerwash all devices in the /StudentCarts OrgUnit. Devices will need to be manually reconnected to WiFi which may mean entering a PSK.
|
||||||
Use `wipe_users` if that's going to create too much work for you.
|
Use `wipe_users` if that's going to create too much work for you.
|
||||||
```
|
```
|
||||||
gam issuecommand cros "query:orgunitpath:/StudentCarts" command remote_powerwash times_to_check_status 0 doit
|
|
||||||
gam cros_ou /StudentCarts issuecommand command remote_powerwash times_to_check_status 0 doit
|
gam cros_ou /StudentCarts issuecommand command remote_powerwash times_to_check_status 0 doit
|
||||||
```
|
```
|
||||||
## ChromeOS device lists
|
## ChromeOS device lists
|
||||||
@@ -829,7 +812,6 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
|||||||
|
|
||||||
```
|
```
|
||||||
gam <CrOSTypeEntity> info downloadfile latest|<Time> [targetfolder <FilePath>]
|
gam <CrOSTypeEntity> info downloadfile latest|<Time> [targetfolder <FilePath>]
|
||||||
gam info cros <CrOSEntity> downloadfile latest|<Time> [targetfolder <FilePath>]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Select the device file to download by its timestamp.
|
Select the device file to download by its timestamp.
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* [Google Classroom API](https://developers.google.com/classroom/reference/rest)
|
* [Google Classroom API](https://developers.google.com/classroom/reference/rest)
|
||||||
* [Google Classroom API - Courses Students](https://developers.google.com/classroom/reference/rest/v1/courses.students)
|
* [Google Classroom API - Courses Students](https://developers.google.com/classroom/reference/rest/v1/courses.students)
|
||||||
* [Google Classroom API - Courses Teachers](https://developers.google.com/classroom/reference/rest/v1/courses.teachers)
|
* [Google Classroom API - Courses Teachers](https://developers.google.com/classroom/reference/rest/v1/courses.teachers)
|
||||||
|
* [Classroom Membership Limits](https://support.google.com/edu/classroom/answer/7300976)
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -10,6 +10,79 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
|||||||
|
|
||||||
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
||||||
|
|
||||||
|
### 7.19.00
|
||||||
|
|
||||||
|
Eliminated `drive_v3_beta` and `meet_v2_beta` from `gam.cfg` as the API betas are no longer used.
|
||||||
|
|
||||||
|
Updated `Meet API` scopes so that GAM can read metadata about additional Meet spaces.
|
||||||
|
```
|
||||||
|
[*] 34) Meet API - Display Meet Conference Records
|
||||||
|
[*] 35) Meet API - Manage/Display Meet Spaces
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.18.07
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> print drivelastmodification` to put `addcsvdata` columns
|
||||||
|
after `User,id,name` rather than after the last column.
|
||||||
|
|
||||||
|
### 7.18.06
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> delete|modify messages` to improve the handling
|
||||||
|
of the following error.
|
||||||
|
```
|
||||||
|
quotaExceeded - User-rate limit exceeded
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.18.05
|
||||||
|
|
||||||
|
Added support for Inbound SSO OIDC profiles.
|
||||||
|
|
||||||
|
Currently, if you enter `gam select <SectionName>` and nothing else on the command line,
|
||||||
|
GAM performs no action. Now, it will be treated as if you entered:
|
||||||
|
`gam select <SectionName> save`
|
||||||
|
|
||||||
|
Updated to Python 3.13.7.
|
||||||
|
|
||||||
|
### 7.18.04
|
||||||
|
|
||||||
|
Added commands to display/manage Alert Center Pub/Sub notifications.
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Alert-Center#configuring-settings
|
||||||
|
|
||||||
|
### 7.18.03
|
||||||
|
|
||||||
|
Updated `gam oauth create` to give a warning if the number of selected scopes will
|
||||||
|
probably cause Google to generate a "Something went wrong" error.
|
||||||
|
|
||||||
|
### 7.18.02
|
||||||
|
|
||||||
|
Upgraded to OpenSSL 3.5.2.
|
||||||
|
|
||||||
|
### 7.18.01
|
||||||
|
|
||||||
|
Added option `nosystemroles` to `gam print|show adminroles` that causes GAM
|
||||||
|
to only display non-system roles.
|
||||||
|
|
||||||
|
Added option `formatjson` to `gam info|print|show adminroles`; this will be most useful
|
||||||
|
when the `privileges` option is used.
|
||||||
|
|
||||||
|
Updated `gam create|update adminrole` to allow specification of privileges with
|
||||||
|
JSON data: `privileges <JSONData>`. These two updates make it easier to copy admin roles.
|
||||||
|
|
||||||
|
Updated `gam create|update adminrole` to allow output of the created/updated
|
||||||
|
role data in CSV format; by default, GAM displays `<RoleName>(<RoleID>) created|updated`.
|
||||||
|
```
|
||||||
|
csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.18.00
|
||||||
|
|
||||||
|
Added commands to display Business Profile Accounts.
|
||||||
|
These are special purpose commands and will not generally be used.
|
||||||
|
```
|
||||||
|
gam show businessprofileaccounts
|
||||||
|
gam print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
||||||
|
```
|
||||||
|
|
||||||
### 7.17.03
|
### 7.17.03
|
||||||
|
|
||||||
Fixed bug in `gam <UserItem> print|show chatspaces asadmin fields <ChatSpaceFieldNameList>` that caused a trap
|
Fixed bug in `gam <UserItem> print|show chatspaces asadmin fields <ChatSpaceFieldNameList>` that caused a trap
|
||||||
|
|||||||
@@ -252,10 +252,10 @@ writes the credentials into the file oauth2.txt.
|
|||||||
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
||||||
admin@server:/Users/admin$ gam version
|
admin@server:/Users/admin$ gam version
|
||||||
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
||||||
GAM 7.17.03 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.19.00 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.7 64-bit final
|
||||||
MacOS Sequoia 15.5 x86_64
|
MacOS Sequoia 15.6.1 x86_64
|
||||||
Path: /Users/admin/bin/gam7
|
Path: /Users/admin/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
|
|
||||||
@@ -990,9 +990,9 @@ writes the credentials into the file oauth2.txt.
|
|||||||
C:\>del C:\GAMConfig\oauth2.txt
|
C:\>del C:\GAMConfig\oauth2.txt
|
||||||
C:\>gam version
|
C:\>gam version
|
||||||
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
||||||
GAM 7.17.03 - https://github.com/GAM-team/GAM - pythonsource
|
GAM 7.19.00 - https://github.com/GAM-team/GAM - pythonsource
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.7 64-bit final
|
||||||
Windows-10-10.0.17134 AMD64
|
Windows-10-10.0.17134 AMD64
|
||||||
Path: C:\GAM7
|
Path: C:\GAM7
|
||||||
Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
# Inbound SSO
|
# Inbound SSO
|
||||||
- [Admin Console](#admin-console)
|
- [Setup SSO](https://support.google.com/a/answer/12032922)
|
||||||
|
- [Admin Console](https://admin.google.com/ac/security/sso)
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
|
- [Setup SSO](#setupsso)
|
||||||
- [Manage profiles](#manage-profiles)
|
- [Manage profiles](#manage-profiles)
|
||||||
- [Display profiles](#display-profiles)
|
- [Display profiles](#display-profiles)
|
||||||
- [Manage credentials](#manage-credentials)
|
- [Manage credentials](#manage-credentials)
|
||||||
@@ -9,12 +11,10 @@
|
|||||||
- [Manage assignments](#manage-assignments)
|
- [Manage assignments](#manage-assignments)
|
||||||
- [Display assignments](#display-assignments)
|
- [Display assignments](#display-assignments)
|
||||||
|
|
||||||
## Admin Console
|
|
||||||
* https://admin.google.com/ac/security/sso
|
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Cloud Identity API - Inbound SAML SSO Profiles](https://cloud.google.com/identity/docs/reference/rest/v1beta1/inboundSamlSsoProfiles)
|
* [Cloud Identity API - Inbound SAML SSO Profiles](https://cloud.google.com/identity/docs/reference/rest/v1beta1/inboundSamlSsoProfiles)
|
||||||
* [Cloud Identity API - Inbound SAML SSO Profiles idp Credentials](https://cloud.google.com/identity/docs/reference/rest/v1beta1/inboundSamlSsoProfiles.idpCredentials)
|
* [Cloud Identity API - Inbound SAML SSO Profiles idp Credentials](https://cloud.google.com/identity/docs/reference/rest/v1beta1/inboundSamlSsoProfiles.idpCredentials)
|
||||||
|
* [Cloud Identity API - Inbound OIDC SSO Profiles](https://cloud.google.com/identity/docs/reference/rest/v1beta1/inboundOidcSsoProfiles)
|
||||||
* [Cloud Identity API - Inbound SSO Assignments](https://cloud.google.com/identity/docs/reference/rest/v1beta1/inboundSsoAssignments)
|
* [Cloud Identity API - Inbound SSO Assignments](https://cloud.google.com/identity/docs/reference/rest/v1beta1/inboundSsoAssignments)
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
@@ -41,46 +41,68 @@
|
|||||||
```
|
```
|
||||||
## Manage profiles
|
## Manage profiles
|
||||||
```
|
```
|
||||||
gam create inboundssoprofile [name <SSOProfileDisplayName>]
|
gam create inboundssoprofile [saml|oidc] [name <SSOProfileDisplayName>]
|
||||||
[entityid <String>] [loginurl <URL>] [logouturl <URL>] [changepasswordurl <URL>]
|
[entityid <String>] [loginurl <URL>] [logouturl <URL>] [changepasswordurl <URL>]
|
||||||
[returnnameonly]
|
[returnnameonly]
|
||||||
gam update inboundssoprofile <SSOProfileItem>
|
gam update inboundssoprofile [saml|oidc] <SSOProfileItem>
|
||||||
[entityid <String>] [loginurl <URL>] [logouturl <URL>] [changepasswordurl <URL>]
|
[entityid <String>] [loginurl <URL>] [logouturl <URL>] [changepasswordurl <URL>]
|
||||||
[returnnameonly]
|
[returnnameonly]
|
||||||
```
|
```
|
||||||
|
Select type of profile:
|
||||||
|
* `saml` - SAML profile; this is the default
|
||||||
|
* `oidc` - OIDC profile
|
||||||
|
|
||||||
By default, all fields of the created|updated profile are displayed;
|
By default, all fields of the created|updated profile are displayed;
|
||||||
use the `returnnameonly` option to have GAM display just the profile name of the created|updated profile.
|
use the `returnnameonly` option to have GAM display just the profile name of the created|updated profile.
|
||||||
This will be useful in scripts that create|update a profile and then want to perform subsequent GAM commands that
|
This will be useful in scripts that create|update a profile and then want to perform subsequent GAM commands that
|
||||||
reference the profile.
|
reference the profile.
|
||||||
|
|
||||||
If `returnnameonly is specified, `inProgress` is returned if the API does not return a complete result.
|
If `returnnameonly` is specified, `inProgress` is returned if the API does not return a complete result.
|
||||||
|
|
||||||
```
|
```
|
||||||
gam delete inboundssoprofile <SSOProfileItem>
|
gam delete inboundssoprofile [saml|oidc] <SSOProfileItem>
|
||||||
```
|
```
|
||||||
|
Select type of profile:
|
||||||
|
* `saml` - SAML profile; this is the default
|
||||||
|
* `oidc` - OIDC profile
|
||||||
|
|
||||||
## Display profiles
|
## Display profiles
|
||||||
Display a specific profile.
|
Display a specific profile.
|
||||||
```
|
```
|
||||||
gam info inboundssoprofile <SSOProfileItem>
|
gam info inboundssoprofile [all|saml|oidc] <SSOProfileItem>
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
|
Select type of profile:
|
||||||
|
* `all` - All profiles are displayed; this is the default
|
||||||
|
* `saml` - SAML profile
|
||||||
|
* `oidc` - OIDC profile
|
||||||
|
|
||||||
By default, Gam displays the information as an indented list of keys and values.
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
Display all profiles.
|
Display profiles.
|
||||||
```
|
```
|
||||||
gam show inboundssoprofiles
|
gam show inboundssoprofiles [all|saml|oidc]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
|
Select profiles to display:
|
||||||
|
* `all` - All profiles are displayed; this is the default
|
||||||
|
* `saml` - Display SAML profiles
|
||||||
|
* `oidc` - Display OIDC profiles
|
||||||
|
|
||||||
By default, Gam displays the information as an indented list of keys and values.
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
Display all profiles in a CSV file.
|
Display profiles in a CSV file.
|
||||||
```
|
```
|
||||||
gam print inboundssoprofiles [todrive <ToDriveAttribute>*]
|
gam print inboundssoprofiles [all|saml|oidc] [todrive <ToDriveAttribute>*]
|
||||||
[[formatjson [quotechar <Character>]]
|
[[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
|
Select profiles to display:
|
||||||
|
* `all` - All profiles are displayed; this is the default
|
||||||
|
* `saml` - Display SAML profiles
|
||||||
|
* `oidc` - Display OIDC profiles
|
||||||
|
|
||||||
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
@@ -130,10 +152,14 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
|||||||
|
|
||||||
## Manage assignments
|
## Manage assignments
|
||||||
```
|
```
|
||||||
gam create inboundssoassignment (group <GroupItem> rank <Number>)|(ou|org|orgunit <OrgUnitItem>)
|
gam create inboundssoassignment
|
||||||
(mode sso_off)|(mode saml_sso profile <SSOProfileItem>)(mode domain_wide_saml_if_enabled) [neverredirect]
|
(group <GroupItem> rank <Number>)|(ou|org|orgunit <OrgUnitItem>)
|
||||||
gam update inboundssoassignment [(group <GroupItem> rank <Number>)|(ou|org|orgunit <OrgUnitItem>)]
|
(mode sso_off)|(mode saml_sso profile <SSOProfileItem>)(mode domain_wide_saml_if_enabled)
|
||||||
[(mode sso_off)|(mode saml_sso profile <SSOProfileItem>)(mode domain_wide_saml_if_enabled)] [neverredirect]
|
[neverredirect]
|
||||||
|
gam update inboundssoassignment <SSOAssignmentName>
|
||||||
|
[(group <GroupItem> rank <Number>)|(ou|org|orgunit <OrgUnitItem>)]
|
||||||
|
[(mode sso_off)|(mode saml_sso profile <SSOProfileItem>)(mode domain_wide_saml_if_enabled)]
|
||||||
|
[neverredirect]
|
||||||
gam delete inboundssoassignment <SSOAssignmentSelector>
|
gam delete inboundssoassignment <SSOAssignmentSelector>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ Select a section from gam.cfg and process a GAM command using values from that s
|
|||||||
- Print the variable values for the selected section
|
- Print the variable values for the selected section
|
||||||
- Values are determined in this order: Selected section, DEFAULT section, Program default
|
- Values are determined in this order: Selected section, DEFAULT section, Program default
|
||||||
|
|
||||||
|
If you enter `gam select <SectionName>` and nothing else on the command line,
|
||||||
|
it will be treated as if you entered: `gam select <SectionName> save`
|
||||||
|
|
||||||
### Display sections
|
### Display sections
|
||||||
Display all of the sections in gam.cfg and mark the currently selected section with a *.
|
Display all of the sections in gam.cfg and mark the currently selected section with a *.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -392,7 +392,7 @@ Your command line will have: `embedimage file1.jpg image1 embedimage file2.jpg i
|
|||||||
|
|
||||||
## Send an email to users
|
## Send an email to users
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> sendemail [from <EmailAddress>]
|
gam <UserTypeEntity> sendemail from <EmailAddress>
|
||||||
[replyto <EmailAddress>]
|
[replyto <EmailAddress>]
|
||||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||||
[subject <String>]
|
[subject <String>]
|
||||||
@@ -406,8 +406,6 @@ gam <UserTypeEntity> sendemail [from <EmailAddress>]
|
|||||||
```
|
```
|
||||||
Emails will be sent to the users in `<UserTypeEntity>`.
|
Emails will be sent to the users in `<UserTypeEntity>`.
|
||||||
|
|
||||||
By default, emails will be sent from the admin user named in oauth2.txt, override this with the `from <EmailAddress>` option.
|
|
||||||
|
|
||||||
When using the Gmail API/SMTP, GAM gets no/little indication as to the status of the message delivery; the from user will get a non-delivery receipt if the message
|
When using the Gmail API/SMTP, GAM gets no/little indication as to the status of the message delivery; the from user will get a non-delivery receipt if the message
|
||||||
could not be sent to the specified recipients.
|
could not be sent to the specified recipients.
|
||||||
|
|
||||||
|
|||||||
@@ -464,7 +464,7 @@ gam <UserItem> delete chatmember asadmin <ChatSpace>
|
|||||||
|
|
||||||
Delete members from a chat space by specifying chatmember names, asadmin
|
Delete members from a chat space by specifying chatmember names, asadmin
|
||||||
```
|
```
|
||||||
gam <UserItem> remove chatmember members asadmin <ChatMemberList>
|
gam <UserItem> remove chatmember asadmin members <ChatMemberList>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Update a members role in a user's chat space
|
### Update a members role in a user's chat space
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
- [Move with ownership change](#move-with-ownership-change)
|
- [Move with ownership change](#move-with-ownership-change)
|
||||||
- [Complex moves](#complex-moves)
|
- [Complex moves](#complex-moves)
|
||||||
- [Move content of a Shared Drive to another Shared Drive](#move-content-of-a-shared-drive-to-another-shared-drive)
|
- [Move content of a Shared Drive to another Shared Drive](#move-content-of-a-shared-drive-to-another-shared-drive)
|
||||||
|
- [Move content of a Shared Drive to a My Drive](#move-content-of-a-shared-drive-to-a-my-drive)
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Drive API - Files](https://developers.google.com/drive/api/v3/reference/files)
|
* [Drive API - Files](https://developers.google.com/drive/api/v3/reference/files)
|
||||||
@@ -673,8 +674,10 @@ gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0A
|
|||||||
```
|
```
|
||||||
|
|
||||||
If you want the source Shared Drive with ID 0AC_1AB to be contained in a top level folder of the target Shared Drive with ID 0AE_9ZX, omit the `mergewithparent` argument.
|
If you want the source Shared Drive with ID 0AC_1AB to be contained in a top level folder of the target Shared Drive with ID 0AE_9ZX, omit the `mergewithparent` argument.
|
||||||
|
The folder on the target Shared Drive will have the same name as the name of the source Shared Drive; use the `newfilename <DriveFileName>` to use a different name.
|
||||||
```
|
```
|
||||||
gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX
|
||||||
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB teamdriveparentid 0AE_9ZX newfilename "Copy of source Shared Drive"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Inter-workspace moves
|
### Inter-workspace moves
|
||||||
@@ -692,3 +695,21 @@ User: user@domaina.com, Move 1 Drive File/Folder
|
|||||||
User: user@domaina.com, Drive Folder: Shared Drive A(<SharedDriveAID>), Retained
|
User: user@domaina.com, Drive Folder: Shared Drive A(<SharedDriveAID>), Retained
|
||||||
```
|
```
|
||||||
To get this to work, you must check `Allow people outside of Domain A to access files` on Shared Drive A in domaina.com
|
To get this to work, you must check `Allow people outside of Domain A to access files` on Shared Drive A in domaina.com
|
||||||
|
|
||||||
|
## Move content of a Shared Drive to a My Drive
|
||||||
|
Suppose you have a Shared Drive with ID 0AC_1AB with multiple files and folders, and want to move all of its content to the root of a My Drive.
|
||||||
|
|
||||||
|
The following command will change the parents of the top level files and folders from 0AC_1AB to the root of the My Drive; the sub files and folders will move along with their top level folder.
|
||||||
|
|
||||||
|
* No permissions are processed.
|
||||||
|
```
|
||||||
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB parentid root mergewithparent
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want the contents of Shared Drive with ID 0AC_1AB to be contained in a top level folder of the My Drive, omit the `mergewithparent` argument.
|
||||||
|
The folder on the My Drive will have the same name as the name of the Shared Drive; use the `newfilename <DriveFileName>` to use a different name.
|
||||||
|
```
|
||||||
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB parentid root
|
||||||
|
gam user user@domain.com move drivefile teamdriveid 0AC_1AB parentid root newfilename "Copy of Shared Drive"
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
- [Delete all ACLs except owner from a user's My Drive](#delete-all-acls-except-owner-from-a-users-my-drive)
|
- [Delete all ACLs except owner from a user's My Drive](#delete-all-acls-except-owner-from-a-users-my-drive)
|
||||||
- [Change shares to User1 to shares to User2](#change-shares-to-user1-to-shares-to-user2)
|
- [Change shares to User1 to shares to User2](#change-shares-to-user1-to-shares-to-user2)
|
||||||
- [Map All ACLs from an old domain to a new domain](#map-all-acls-from-an-old-domain-to-a-new-domain)
|
- [Map All ACLs from an old domain to a new domain](#map-all-acls-from-an-old-domain-to-a-new-domain)
|
||||||
|
- [Remove all ACLs for a specific user or group email address](#remove-all-ACLs-for-a-specific-user-or-group-email-address)
|
||||||
|
- [Remove anyone-anyoneWithLink ACLs](#remove-anyone-anyonewithlink-acls)
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Drive API - Permissions](https://developers.google.com/drive/api/v3/reference/permissions)
|
* [Drive API - Permissions](https://developers.google.com/drive/api/v3/reference/permissions)
|
||||||
@@ -385,3 +387,83 @@ gam config csv_input_row_filter "permission.type:regex:user|group" redirect stdo
|
|||||||
gam config csv_input_row_filter "permission.type:regex:domain" redirect stdout ./AddNewDomainACLsDomainShares.txt multiprocess redirect stderr stdout csv ./allUsersFiles.csv gam user "~Owner" create drivefileacl "~id" "~permission.type" "~permission.domain" role "~permission.role" allowfilediscovery "~permission.allowFileDiscovery" mappermissionsdomain olddomain.com newdomain.com
|
gam config csv_input_row_filter "permission.type:regex:domain" redirect stdout ./AddNewDomainACLsDomainShares.txt multiprocess redirect stderr stdout csv ./allUsersFiles.csv gam user "~Owner" create drivefileacl "~id" "~permission.type" "~permission.domain" role "~permission.role" allowfilediscovery "~permission.allowFileDiscovery" mappermissionsdomain olddomain.com newdomain.com
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Remove all ACLs for a specific user or group email address
|
||||||
|
|
||||||
|
### My Drives
|
||||||
|
|
||||||
|
Get My Drive ACLs sharing to that email address:
|
||||||
|
* Replace `<Type>` with user or group
|
||||||
|
* Replace `email@domain.com` with actual email address
|
||||||
|
```
|
||||||
|
gam config auto_batch_min 1 num_threads 20 redirect csv ./MyDriveShares.csv multiprocess redirect stderr - multiprocess all users print filelist fields id,name,mimetype,basicpermissions query "'email@domain.com' in readers or 'email@domain.com' in writers" pm notrole owner type <Type> emailaddress email@domain.com em pmfilter oneitemperrow
|
||||||
|
```
|
||||||
|
|
||||||
|
Delete those My Drive ACLs.
|
||||||
|
```
|
||||||
|
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete drivefleacl "~id" "id:~~permission.id~~"
|
||||||
|
```
|
||||||
|
|
||||||
|
Add My Drive ACLs with a different email address and the same role.
|
||||||
|
```
|
||||||
|
gam config num_threads 20 redirect stdout ./AddMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" add drivefleacl "~id" "~permission.type" newemail@domain.rom role "~permission.role"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Shared Drives
|
||||||
|
Get an organizer for each Shared Drive
|
||||||
|
```
|
||||||
|
gam redirect csv ./SharedDriveOrganizers.csv print shareddriveorganizers
|
||||||
|
```
|
||||||
|
|
||||||
|
Get Shared Drive ACLs explicitly sharing to that email address:
|
||||||
|
* Replace `<Type>` with user or group
|
||||||
|
* Replace `email@domain.com` with actual email address
|
||||||
|
```
|
||||||
|
gam config num_threads 20 csv_input_row_filter "organizers:regex:^.+$" redirect csv ./SharedDriveShares.csv multiprocess redirect stderr - multiprocess csv SharedDriveOrganizers.csv gam user "~organizers" print filelist select shareddriveid "~id" fields id,name,mimetype,basicpermissions,driveid showdrivename query "'email@domain.com' in readers or 'email@domain.com' in writers" pm type <Type> emailaddress email@domain.com inherited false em pmfilter oneitemperrow
|
||||||
|
```
|
||||||
|
|
||||||
|
Delete those Shared Drive ACLs.
|
||||||
|
```
|
||||||
|
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete drivefleacl "~id" "id:~~permission.id~~"
|
||||||
|
```
|
||||||
|
|
||||||
|
Add Shared Drive ACLs with a different email address and the same role.
|
||||||
|
```
|
||||||
|
gam config num_threads 20 redirect stdout ./ReplaceSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" add drivefleacl "~id" "~permission.type" newemail@domain.rom role "~permission.role"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Remove anyone-anyoneWithLink ACLs
|
||||||
|
|
||||||
|
Here are the queries that will be used in these commands:
|
||||||
|
* anyone - query "visibility='anyoneCanFind'"
|
||||||
|
* anyoneWithLink - query "visibility='anyoneWithLink'"
|
||||||
|
* both - query "(visibility='anyoneCanFind' or visibility='anyoneWithLink')"
|
||||||
|
|
||||||
|
### My Drives
|
||||||
|
|
||||||
|
Get My Drive anyone/anyoneWithLink ACLs
|
||||||
|
```
|
||||||
|
gam config auto_batch_min 1 num_threads 20 redirect csv ./MyDriveShares.csv multiprocess redirect stderr - multiprocess all users print filelist fields id,name,mimetype,basicpermissions <Query> pm type anyone em pmfilter oneitemperrow
|
||||||
|
```
|
||||||
|
|
||||||
|
Delete those My Drive ACLs.
|
||||||
|
```
|
||||||
|
gam config num_threads 20 redirect stdout ./DeleteMyDriveShares.txt multiprocess redirect stderr stdout csv MyDriveShares.csv gam user "~Owner" delete drivefleacl "~id" "id:~~permission.id~~"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Shared Drives
|
||||||
|
Get an organizer for each Shared Drive
|
||||||
|
```
|
||||||
|
gam redirect csv ./SharedDriveOrganizers.csv print shareddriveorganizers
|
||||||
|
```
|
||||||
|
|
||||||
|
Get Shared Drive anyone/anyoneWithLink ACLs
|
||||||
|
```
|
||||||
|
gam config num_threads 20 csv_input_row_filter "organizers:regex:^.+$" redirect csv ./SharedDriveShares.csv multiprocess redirect stderr - multiprocess csv SharedDriveOrganizers.csv gam user "~organizers" print filelist select shareddriveid "~id" fields id,name,mimetype,basicpermissions,driveid showdrivename <Query> pm type anyone inherited false em pmfilter oneitemperrow
|
||||||
|
```
|
||||||
|
|
||||||
|
Delete those Shared Drive ACLs.
|
||||||
|
```
|
||||||
|
gam config num_threads 20 redirect stdout ./DeleteSharedDriveShares.txt multiprocess redirect stderr stdout csv SharedDriveShares.csv gam user "~Owner" delete drivefleacl "~id" "id:~~permission.id~~"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ To use these commands you must add the 'Meet API' to your project and update you
|
|||||||
gam update project
|
gam update project
|
||||||
gam user user@domain.com update serviceaccount
|
gam user user@domain.com update serviceaccount
|
||||||
...
|
...
|
||||||
[*] 36) Meet API (supports readonly)
|
[*] 34) Meet API - Display Meet Conference Records
|
||||||
|
[*] 35) Meet API - Manage/Display Meet Spaces
|
||||||
|
|
||||||
```
|
```
|
||||||
## Definitions
|
## Definitions
|
||||||
|
|||||||
@@ -16,7 +16,10 @@ Delegated admin service accounts (DASA) are regular [GCP service accounts](https
|
|||||||
|
|
||||||
## Disadvantages
|
## Disadvantages
|
||||||
* DASA accounts can only be delegated admins. [If a task requires super admin rights to perform](https://support.google.com/a/answer/2405986#:~:text=Only%20super%20administrators%20can...), DASA accounts won’t be able to do it.
|
* DASA accounts can only be delegated admins. [If a task requires super admin rights to perform](https://support.google.com/a/answer/2405986#:~:text=Only%20super%20administrators%20can...), DASA accounts won’t be able to do it.
|
||||||
Not all Google Admin APIs work with DASA right now. For example, Google Vault API calls will fail with a DASA account; Classroom API calls do not return data.
|
Not all Google Admin APIs work with DASA right no:
|
||||||
|
* Google Vault API calls will fail with a DASA account
|
||||||
|
* Classroom API calls do not return data
|
||||||
|
* Cloud Identity Policies are not available
|
||||||
* DASA is a delegated admin and can make Workspace / Cloud Identity admin API calls, it does not replace domain-wide delegation (DwD) when using GAM7 commands that interact with Gmail, Drive and Calendar user data.
|
* DASA is a delegated admin and can make Workspace / Cloud Identity admin API calls, it does not replace domain-wide delegation (DwD) when using GAM7 commands that interact with Gmail, Drive and Calendar user data.
|
||||||
* GAM7 support for DASA is still experimental and some things may fail. Please report your findings to the [GAM group](https://groups.google.com/g/google-apps-manager).
|
* GAM7 support for DASA is still experimental and some things may fail. Please report your findings to the [GAM group](https://groups.google.com/g/google-apps-manager).
|
||||||
|
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
Print the current version of Gam with details
|
Print the current version of Gam with details
|
||||||
```
|
```
|
||||||
gam version
|
gam version
|
||||||
GAM 7.17.03 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.19.00 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.7 64-bit final
|
||||||
MacOS Sequoia 15.5 x86_64
|
MacOS Sequoia 15.6.1 x86_64
|
||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2023-06-02T21:10:00-07:00
|
Time: 2023-06-02T21:10:00-07:00
|
||||||
@@ -15,10 +15,10 @@ Time: 2023-06-02T21:10:00-07:00
|
|||||||
Print the current version of Gam with details and time offset information
|
Print the current version of Gam with details and time offset information
|
||||||
```
|
```
|
||||||
gam version timeoffset
|
gam version timeoffset
|
||||||
GAM 7.17.03 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.19.00 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.7 64-bit final
|
||||||
MacOS Sequoia 15.5 x86_64
|
MacOS Sequoia 15.6.1 x86_64
|
||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Your system time differs from www.googleapis.com by less than 1 second
|
Your system time differs from www.googleapis.com by less than 1 second
|
||||||
@@ -27,15 +27,15 @@ Your system time differs from www.googleapis.com by less than 1 second
|
|||||||
Print the current version of Gam with extended details and SSL information
|
Print the current version of Gam with extended details and SSL information
|
||||||
```
|
```
|
||||||
gam version extended
|
gam version extended
|
||||||
GAM 7.17.03 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.19.00 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.7 64-bit final
|
||||||
MacOS Sequoia 15.5 x86_64
|
MacOS Sequoia 15.6.1 x86_64
|
||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2023-06-02T21:10:00-07:00
|
Time: 2023-06-02T21:10:00-07:00
|
||||||
Your system time differs from admin.googleapis.com by less than 1 second
|
Your system time differs from admin.googleapis.com by less than 1 second
|
||||||
OpenSSL 3.4.0 22 Oct Sep 2024
|
OpenSSL 3.5.2 5 ASug 2025
|
||||||
cryptography 43.0.3
|
cryptography 43.0.3
|
||||||
filelock 3.16.1
|
filelock 3.16.1
|
||||||
google-api-python-client 2.149.0
|
google-api-python-client 2.149.0
|
||||||
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Version Check:
|
Version Check:
|
||||||
Current: 5.35.08
|
Current: 5.35.08
|
||||||
Latest: 7.17.03
|
Latest: 7.19.00
|
||||||
echo $?
|
echo $?
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@@ -72,7 +72,7 @@ echo $?
|
|||||||
Print the current version number without details
|
Print the current version number without details
|
||||||
```
|
```
|
||||||
gam version simple
|
gam version simple
|
||||||
7.17.03
|
7.19.00
|
||||||
```
|
```
|
||||||
In Linux/MacOS you can do:
|
In Linux/MacOS you can do:
|
||||||
```
|
```
|
||||||
@@ -82,10 +82,10 @@ echo $VER
|
|||||||
Print the current version of Gam and address of this Wiki
|
Print the current version of Gam and address of this Wiki
|
||||||
```
|
```
|
||||||
gam help
|
gam help
|
||||||
GAM 7.17.03 - https://github.com/GAM-team/GAM
|
GAM 7.19.00 - https://github.com/GAM-team/GAM
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.13.5 64-bit final
|
Python 3.13.7 64-bit final
|
||||||
MacOS Sequoia 15.5 x86_64
|
MacOS Sequoia 15.6.1 x86_64
|
||||||
Path: /Users/Admin/bin/gam7
|
Path: /Users/Admin/bin/gam7
|
||||||
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2023-06-02T21:10:00-07:00
|
Time: 2023-06-02T21:10:00-07:00
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ Client Access
|
|||||||
* [Administrators](Administrators)
|
* [Administrators](Administrators)
|
||||||
* [Alert Center](Alert-Center)
|
* [Alert Center](Alert-Center)
|
||||||
* [Aliases](Aliases)
|
* [Aliases](Aliases)
|
||||||
|
* [Business Account Management](Business-Account-Management)
|
||||||
* [Calendars](Calendars)
|
* [Calendars](Calendars)
|
||||||
* [Calendars - Access](Calendars-Access)
|
* [Calendars - Access](Calendars-Access)
|
||||||
* [Calendars - Events](Calendars-Events)
|
* [Calendars - Events](Calendars-Events)
|
||||||
@@ -128,7 +129,7 @@ Client Access
|
|||||||
* [Version and Help](Version-and-Help)
|
* [Version and Help](Version-and-Help)
|
||||||
|
|
||||||
Special Service Account Access
|
Special Service Account Access
|
||||||
* [Chat Bot](Chat-Bot)
|
* [Chat Bot Setup and Use](Chat-Bot-Setup-Use)
|
||||||
|
|
||||||
Service Account Access
|
Service Account Access
|
||||||
* [Users - Analytics Admin](Users-Analytics-Admin)
|
* [Users - Analytics Admin](Users-Analytics-Admin)
|
||||||
|
|||||||
Reference in New Issue
Block a user