mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-16 20:21:37 +00:00
Compare commits
166 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ff59855a2c | ||
|
|
37d00ff0d8 | ||
|
|
669dffcd39 | ||
|
|
e3ad108c91 | ||
|
|
d7d98d41cd | ||
|
|
213b0f2ba2 | ||
|
|
d745aa65f5 | ||
|
|
c122a55ad7 | ||
|
|
c6b23d4ce6 | ||
|
|
9590916750 | ||
|
|
331c199637 | ||
|
|
ce131bab03 | ||
|
|
fbadb72d34 | ||
|
|
9c3f9ab657 | ||
|
|
a61bbdb858 | ||
|
|
afa825c020 | ||
|
|
85cfd13e77 | ||
|
|
27d67e72d1 | ||
|
|
d7c429f00f | ||
|
|
9c00cfa3ea | ||
|
|
426781eda3 | ||
|
|
42ee41d218 | ||
|
|
d8f0666e70 | ||
|
|
3d15d2a820 | ||
|
|
0c593b5809 | ||
|
|
d76ef999c5 | ||
|
|
ddaad4d655 | ||
|
|
36a1bdc56b | ||
|
|
089a5994aa | ||
|
|
3e9b46b650 | ||
|
|
7ca3b4d7da | ||
|
|
22d70ca2c3 | ||
|
|
b3acdf5955 | ||
|
|
c13a5215fe | ||
|
|
45750b591a | ||
|
|
c76f1b2128 | ||
|
|
e85e7f6868 | ||
|
|
055c74ed2e | ||
|
|
4ba9385c23 | ||
|
|
9d8442c7ad | ||
|
|
cc19878ba4 | ||
|
|
23ed20a298 | ||
|
|
5b32bc31c7 | ||
|
|
e1260dbd95 | ||
|
|
ea41edbfcb | ||
|
|
869eb3a0c2 | ||
|
|
61735701b3 | ||
|
|
c60ef582be | ||
|
|
cd8c43a0cc | ||
|
|
7582c42eff | ||
|
|
d9a75af87c | ||
|
|
6c443fa0c6 | ||
|
|
b6a9229a67 | ||
|
|
84175ba80d | ||
|
|
56c2b77f25 | ||
|
|
dfe01e5272 | ||
|
|
e25c302616 | ||
|
|
1ca5b1a610 | ||
|
|
b9c81e2e24 | ||
|
|
9766fa42e7 | ||
|
|
7bd150e5bf | ||
|
|
063e0876b9 | ||
|
|
4743d12ea8 | ||
|
|
ad548cbe33 | ||
|
|
bb9d5b3cdc | ||
|
|
ee3bb42d19 | ||
|
|
7e8042a2f8 | ||
|
|
5ed0b9ffd2 | ||
|
|
db2a37f358 | ||
|
|
77ebeddaac | ||
|
|
f00e7ecdbb | ||
|
|
f75d7d78f6 | ||
|
|
75929117aa | ||
|
|
a06348c1c5 | ||
|
|
425286482f | ||
|
|
a162cf870b | ||
|
|
28a1048f57 | ||
|
|
def54f1513 | ||
|
|
4d86d44ec1 | ||
|
|
2c0136834b | ||
|
|
9cca97b12e | ||
|
|
f69d0b1427 | ||
|
|
abd39176d8 | ||
|
|
782eee45cc | ||
|
|
6450fb0c3d | ||
|
|
523bd45fa0 | ||
|
|
9e6122769a | ||
|
|
9dc427c47b | ||
|
|
023c81de93 | ||
|
|
a570e1f300 | ||
|
|
86881b58f4 | ||
|
|
1b8793df9b | ||
|
|
dfdc03ba28 | ||
|
|
0cafde359e | ||
|
|
9b2ca0dedd | ||
|
|
741a2e3b79 | ||
|
|
760963889d | ||
|
|
b0b572a5b2 | ||
|
|
ae9e329169 | ||
|
|
d997900955 | ||
|
|
699d95d7d7 | ||
|
|
0274c27dd6 | ||
|
|
cb41cd4abf | ||
|
|
a971ea37ae | ||
|
|
c2192674ff | ||
|
|
1b7e736caf | ||
|
|
2a49e1ebe2 | ||
|
|
4075bef468 | ||
|
|
00cccbe920 | ||
|
|
0f50ce18b3 | ||
|
|
1475e7a1d2 | ||
|
|
573a0dc6f1 | ||
|
|
e56b56612f | ||
|
|
550dd6b947 | ||
|
|
38f63188e3 | ||
|
|
8d0865f692 | ||
|
|
2ba6ad10c2 | ||
|
|
9e44511872 | ||
|
|
1ee31b15b2 | ||
|
|
dfb1dd860f | ||
|
|
7aaf8cdaa6 | ||
|
|
66a65a380e | ||
|
|
471bd4f924 | ||
|
|
5525c79f5b | ||
|
|
03d79ec62e | ||
|
|
6f72c9844b | ||
|
|
5b1d876101 | ||
|
|
1cb3223637 | ||
|
|
0330e315d2 | ||
|
|
b8f894fddb | ||
|
|
0b1fee6bc5 | ||
|
|
cc61691f28 | ||
|
|
0ece44575d | ||
|
|
e476ad93ba | ||
|
|
21ba5e3ac0 | ||
|
|
453f3faf62 | ||
|
|
296e629b69 | ||
|
|
a319eb665d | ||
|
|
c3bf865497 | ||
|
|
c8914ddb03 | ||
|
|
e24e127055 | ||
|
|
ed2801d612 | ||
|
|
245c9ca9d7 | ||
|
|
e4352129db | ||
|
|
726f061b16 | ||
|
|
75598e5eb8 | ||
|
|
6e57ae33e8 | ||
|
|
22bc5457a7 | ||
|
|
1ba183e8a5 | ||
|
|
26f121b120 | ||
|
|
c3dc91d61d | ||
|
|
5a43aac095 | ||
|
|
0e335322dd | ||
|
|
c5215392d6 | ||
|
|
93534b8626 | ||
|
|
8ffa4e3822 | ||
|
|
97db67790d | ||
|
|
d5e6ab46d3 | ||
|
|
a11e07ffa4 | ||
|
|
9bd564bbca | ||
|
|
6f35df439c | ||
|
|
baacc4c77b | ||
|
|
10ef587ce1 | ||
|
|
251ba6a8b3 | ||
|
|
4c97aa8ccf | ||
|
|
d7f5a59115 |
125
.github/workflows/build.yml
vendored
125
.github/workflows/build.yml
vendored
@@ -23,7 +23,7 @@ defaults:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
SCRATCH_COUNTER: 14
|
SCRATCH_COUNTER: 14
|
||||||
OPENSSL_CONFIG_OPTS: no-fips --api=3.0.0 no-docs no-ssl3 no-tls1 no-tls1_1 no-dtls no-comp no-srp no-psk no-engine no-dynamic-engine no-nextprotoneg no-weak-ssl-ciphers no-idea no-seed no-camellia no-sm2 no-sm3 no-sm4 no-rc2 no-rc4 no-rc5 no-md2 no-md4 no-cast no-des no-shared no-tests -O3
|
OPENSSL_CONFIG_OPTS: no-fips --api=3.0.0 no-docs no-tls1 no-tls1_1 no-dtls no-comp no-srp no-psk no-nextprotoneg no-weak-ssl-ciphers no-idea no-seed no-camellia no-sm2 no-sm3 no-sm4 no-rc2 no-rc4 no-rc5 no-md2 no-md4 no-cast no-des no-shared -fPIC no-tests -O3
|
||||||
OPENSSL_INSTALL_PATH: ${{ github.workspace }}/bin/ssl
|
OPENSSL_INSTALL_PATH: ${{ github.workspace }}/bin/ssl
|
||||||
OPENSSL_SOURCE_PATH: ${{ github.workspace }}/src/openssl
|
OPENSSL_SOURCE_PATH: ${{ github.workspace }}/src/openssl
|
||||||
PYTHON_INSTALL_PATH: ${{ github.workspace }}/bin/python
|
PYTHON_INSTALL_PATH: ${{ github.workspace }}/bin/python
|
||||||
@@ -165,7 +165,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
cache.tar.xz
|
cache.tar.xz
|
||||||
key: gam-${{ matrix.jid }}-20260408-01
|
key: gam-${{ matrix.jid }}-20260611
|
||||||
|
|
||||||
- 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'
|
||||||
@@ -199,7 +199,10 @@ jobs:
|
|||||||
*)
|
*)
|
||||||
echo "arch=${RUNNER_ARCH}" >> $GITHUB_ENV
|
echo "arch=${RUNNER_ARCH}" >> $GITHUB_ENV
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
# calculate with python because date on MacOS is just stupid
|
||||||
|
DEPS_CUTOFF=$(python3 -c "from datetime import datetime, timedelta, timezone; print((datetime.now(timezone.utc) - timedelta(days=14)).strftime('%Y-%m-%dT00:00:00Z'))")
|
||||||
|
echo "DEPS_CUTOFF=${DEPS_CUTOFF}" >> $GITHUB_ENV
|
||||||
echo "JID=${JID}" >> $GITHUB_ENV
|
echo "JID=${JID}" >> $GITHUB_ENV
|
||||||
echo "freethreaded=${freethreaded}" >> $GITHUB_ENV
|
echo "freethreaded=${freethreaded}" >> $GITHUB_ENV
|
||||||
if "$freethreaded"; then
|
if "$freethreaded"; then
|
||||||
@@ -343,7 +346,14 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd "${OPENSSL_SOURCE_PATH}"
|
cd "${OPENSSL_SOURCE_PATH}"
|
||||||
# --libdir=lib is needed so Python can find OpenSSL libraries
|
# --libdir=lib is needed so Python can find OpenSSL libraries
|
||||||
"${PERL}" ./Configure --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" $OPENSSL_CONFIG_OPTS
|
# Python doesn't like OpenSSL 4.0 with ASM on Linux arm64
|
||||||
|
# disable for now
|
||||||
|
if ([ "$RUNNER_OS" == "Linux" ] && [ "$RUNNER_ARCH" == "ARM64" ]); then
|
||||||
|
"${PERL}" ./Configure --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" no-asm $OPENSSL_CONFIG_OPTS
|
||||||
|
else
|
||||||
|
"${PERL}" ./Configure --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" $OPENSSL_CONFIG_OPTS
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
- name: Rename GNU link on Windows
|
- name: Rename GNU link on Windows
|
||||||
if: matrix.goal == 'build' && runner.os == 'Windows' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
if: matrix.goal == 'build' && runner.os == 'Windows' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||||
@@ -393,13 +403,11 @@ jobs:
|
|||||||
cd "${GITHUB_WORKSPACE}/src"
|
cd "${GITHUB_WORKSPACE}/src"
|
||||||
git clone https://github.com/python/cpython.git
|
git clone https://github.com/python/cpython.git
|
||||||
cd "${PYTHON_SOURCE_PATH}"
|
cd "${PYTHON_SOURCE_PATH}"
|
||||||
if [[ "${RUNNER_OS}" == "Linux" ]]; then
|
export LATEST_STABLE_TAG=$(git tag --list | grep -v a | grep -v rc | grep -v b | sort -Vr | head -n1)
|
||||||
# TEMP lock Linux to 3.14.3 until the PyInstaller multiprocess issues are resolved.
|
|
||||||
export LATEST_STABLE_TAG="v3.14.3"
|
|
||||||
else
|
|
||||||
export LATEST_STABLE_TAG=$(git tag --list | grep -v a | grep -v rc | grep -v b | sort -Vr | head -n1)
|
|
||||||
fi
|
|
||||||
git checkout "${LATEST_STABLE_TAG}"
|
git checkout "${LATEST_STABLE_TAG}"
|
||||||
|
# Temp Python 3.14 patch to work with OpenSSL 4
|
||||||
|
# Python 3.15 in Oct 2026 should support 4 OOB
|
||||||
|
patch -p1 < "${GITHUB_WORKSPACE}/src/tools/py314-ossl4.diff"
|
||||||
export COMPILED_PYTHON_VERSION=${LATEST_STABLE_TAG:1} # Trim the "v" prefix
|
export COMPILED_PYTHON_VERSION=${LATEST_STABLE_TAG:1} # Trim the "v" prefix
|
||||||
echo "COMPILED_PYTHON_VERSION=${COMPILED_PYTHON_VERSION}" >> $GITHUB_ENV
|
echo "COMPILED_PYTHON_VERSION=${COMPILED_PYTHON_VERSION}" >> $GITHUB_ENV
|
||||||
|
|
||||||
@@ -501,19 +509,19 @@ jobs:
|
|||||||
"${PYTHON}" -VV
|
"${PYTHON}" -VV
|
||||||
"${PYTHON}" -c "import ssl; print(f'Using {ssl.OPENSSL_VERSION}')"
|
"${PYTHON}" -c "import ssl; print(f'Using {ssl.OPENSSL_VERSION}')"
|
||||||
|
|
||||||
- name: Create and use Python venv
|
- name: Create and use Python .venv
|
||||||
run: |
|
run: |
|
||||||
cd "$GITHUB_WORKSPACE"
|
cd "$GITHUB_WORKSPACE"
|
||||||
curl -o get-pip.py https://bootstrap.pypa.io/get-pip.py
|
curl -o get-pip.py https://bootstrap.pypa.io/get-pip.py
|
||||||
"$PYTHON" get-pip.py
|
"$PYTHON" get-pip.py
|
||||||
"$PYTHON" -m venv venv
|
"$PYTHON" -m venv .venv
|
||||||
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
||||||
# pyscard seems to build outside venv but not in it.
|
# pyscard seems to build outside venv but not in it.
|
||||||
# build it so it's cached.
|
# build it so it's cached.
|
||||||
"$PYTHON" -m pip install --upgrade --force-reinstall pyscard
|
"$PYTHON" -m pip install --upgrade pyscard
|
||||||
export PYTHON="${GITHUB_WORKSPACE}/venv/scripts/python.exe"
|
export PYTHON="${GITHUB_WORKSPACE}/.venv/scripts/python.exe"
|
||||||
else
|
else
|
||||||
export PYTHON="${GITHUB_WORKSPACE}/venv/bin/python3"
|
export PYTHON="${GITHUB_WORKSPACE}/.venv/bin/python3"
|
||||||
fi
|
fi
|
||||||
echo "PYTHON=${PYTHON}" >> $GITHUB_ENV
|
echo "PYTHON=${PYTHON}" >> $GITHUB_ENV
|
||||||
if [[ "$ACTIONS_GOAL" == "test" ]]; then
|
if [[ "$ACTIONS_GOAL" == "test" ]]; then
|
||||||
@@ -521,31 +529,22 @@ jobs:
|
|||||||
echo "gam=${gam}" >> $GITHUB_ENV
|
echo "gam=${gam}" >> $GITHUB_ENV
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Upgrade pip, wheel, etc
|
#- name: Upgrade pip, wheel, etc
|
||||||
run: |
|
# run: |
|
||||||
curl $curl_retry -O https://bootstrap.pypa.io/get-pip.py
|
# curl $curl_retry -O https://bootstrap.pypa.io/get-pip.py
|
||||||
"$PYTHON" get-pip.py
|
# "$PYTHON" get-pip.py
|
||||||
"$PYTHON" -m pip install --upgrade pip
|
# "$PYTHON" -m pip install --upgrade pip
|
||||||
"$PYTHON" -m pip install --upgrade wheel
|
# "$PYTHON" -m pip install --upgrade wheel
|
||||||
"$PYTHON" -m pip install --upgrade setuptools
|
# "$PYTHON" -m pip install --upgrade setuptools
|
||||||
"$PYTHON" -m pip install --upgrade importlib-metadata
|
# "$PYTHON" -m pip install --upgrade importlib-metadata
|
||||||
"$PYTHON" -m pip install --upgrade setuptools-scm
|
# "$PYTHON" -m pip install --upgrade setuptools-scm
|
||||||
"$PYTHON" -m pip install --upgrade packaging
|
# "$PYTHON" -m pip install --upgrade packaging
|
||||||
"$PYTHON" -m pip list
|
# "$PYTHON" -m pip list
|
||||||
|
|
||||||
- name: Install pip requirements
|
- name: Install pip requirements
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
run: |
|
run: |
|
||||||
echo "before anything..."
|
|
||||||
"$PYTHON" -m pip list
|
|
||||||
echo "--info--"
|
|
||||||
"$PYTHON" -m pip cache info
|
|
||||||
echo "--list--"
|
|
||||||
"$PYTHON" -m pip cache list
|
|
||||||
echo "--pip debug verbose--"
|
|
||||||
"$PYTHON" -m pip debug --verbose
|
|
||||||
echo "--------"
|
|
||||||
if ([ "$RUNNER_OS" == "Windows" ] && [ "$RUNNER_ARCH" == "ARM64" ]); then
|
if ([ "$RUNNER_OS" == "Windows" ] && [ "$RUNNER_ARCH" == "ARM64" ]); then
|
||||||
# custom cryptography wheel for win arm64 since the project doesn't provide one:
|
# custom cryptography wheel for win arm64 since the project doesn't provide one:
|
||||||
# https://github.com/pyca/cryptography/issues/14293
|
# https://github.com/pyca/cryptography/issues/14293
|
||||||
@@ -553,24 +552,12 @@ jobs:
|
|||||||
"$PYTHON" -m pip install cryptography-*.whl
|
"$PYTHON" -m pip install cryptography-*.whl
|
||||||
fi
|
fi
|
||||||
"$PYTHON" -m pip install -vvv --upgrade ..[yubikey]
|
"$PYTHON" -m pip install -vvv --upgrade ..[yubikey]
|
||||||
echo "after everything..."
|
|
||||||
"$PYTHON" -m pip list
|
|
||||||
|
|
||||||
- name: Install PyInstaller
|
- name: Install PyInstaller
|
||||||
if: matrix.goal == 'build'
|
if: matrix.goal == 'build'
|
||||||
run: |
|
run: |
|
||||||
#git clone https://github.com/pyinstaller/pyinstaller.git
|
# Install latest version of PyInstaller *that's 2 weeks old*
|
||||||
#cd pyinstaller
|
# Calculate the exact timestamp for 14 days ago
|
||||||
#export latest_release=$(git tag --list | grep -v dev | grep -v rc | sort -Vr | head -n1)
|
|
||||||
#git checkout "${latest_release}"
|
|
||||||
# git checkout "v6.9.0"
|
|
||||||
# remove pre-compiled bootloaders so we fail if bootloader compile fails
|
|
||||||
#rm -rvf PyInstaller/bootloader/*-*/*
|
|
||||||
#cd bootloader
|
|
||||||
#"${PYTHON}" ./waf all
|
|
||||||
#cd ..
|
|
||||||
#echo "---- Installing PyInstaller ----"
|
|
||||||
#"${PYTHON}" -m pip install .
|
|
||||||
"$PYTHON" -m pip install --upgrade pyinstaller
|
"$PYTHON" -m pip install --upgrade pyinstaller
|
||||||
|
|
||||||
- name: Build GAM with PyInstaller
|
- name: Build GAM with PyInstaller
|
||||||
@@ -637,10 +624,9 @@ jobs:
|
|||||||
sudo apt-get -qq --yes update
|
sudo apt-get -qq --yes update
|
||||||
# arm64 needs to build a wheel and needs scons to build
|
# arm64 needs to build a wheel and needs scons to build
|
||||||
sudo apt-get -qq --yes install scons
|
sudo apt-get -qq --yes install scons
|
||||||
"${PYTHON}" -m pip install --upgrade patchelf-wrapper
|
"$PYTHON" -m pip install --upgrade patchelf-wrapper
|
||||||
# "${PYTHON}" -m pip install --upgrade staticx
|
"$PYTHON" -m pip install --upgrade typing_extensions
|
||||||
# install latest github src for staticx
|
"$PYTHON" -m pip install --upgrade staticx
|
||||||
"${PYTHON}" -m pip install --upgrade "git+https://github.com/JonathonReinhart/staticx"
|
|
||||||
|
|
||||||
- name: Make StaticX GAM build
|
- name: Make StaticX GAM build
|
||||||
if: matrix.staticx == 'yes'
|
if: matrix.staticx == 'yes'
|
||||||
@@ -684,20 +670,6 @@ jobs:
|
|||||||
echo "GAM Version ${GAMVERSION}"
|
echo "GAM Version ${GAMVERSION}"
|
||||||
echo "GAMVERSION=${GAMVERSION}" >> $GITHUB_ENV
|
echo "GAMVERSION=${GAMVERSION}" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Initialize Windows Desktop Shell
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: pwsh
|
|
||||||
run: |
|
|
||||||
Write-Host "Checking for Windows Explorer shell..."
|
|
||||||
if (-not (Get-Process -Name explorer -ErrorAction SilentlyContinue)) {
|
|
||||||
Write-Host "Explorer not found. Booting the desktop shell..."
|
|
||||||
Start-Process explorer.exe
|
|
||||||
# Give the desktop a few seconds to fully render the taskbar
|
|
||||||
Start-Sleep -Seconds 10
|
|
||||||
} else {
|
|
||||||
Write-Host "Explorer is already running."
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Install NPM deps
|
- name: Install NPM deps
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
run: |
|
run: |
|
||||||
@@ -710,8 +682,8 @@ jobs:
|
|||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
#$url = "https://files.certum.eu/software/SimplySignDesktop/Windows/9.3.4.72/SimplySignDesktop-9.3.4.72-64-bit-en.msi"
|
#$url = "https://files.certum.eu/software/SimplySignDesktop/Windows/9.4.2.86/SimplySignDesktop-9.4.2.86-64-bit-en.msi"
|
||||||
$url = "https://www.files.certum.eu/software/SimplySignDesktop/Windows/9.4.0.84/SimplySignDesktop-9.4.0.84-64-bit-en.msi"
|
$url = "https://files.certum.eu/software/SimplySignDesktop/Windows/9.4.3.90/SimplySignDesktop-9.4.3.90-64-bit-en.msi"
|
||||||
$file = "SimplySignDesktop.msi"
|
$file = "SimplySignDesktop.msi"
|
||||||
Invoke-WebRequest $url -OutFile $file
|
Invoke-WebRequest $url -OutFile $file
|
||||||
$log = "install.log"
|
$log = "install.log"
|
||||||
@@ -720,6 +692,15 @@ jobs:
|
|||||||
$procMain.WaitForExit()
|
$procMain.WaitForExit()
|
||||||
$procLog.Kill()
|
$procLog.Kill()
|
||||||
|
|
||||||
|
- name: Run SSD directly
|
||||||
|
if: runner.os == 'Windows'
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
Write-Host "Running SSD..."
|
||||||
|
& "C:\\Program Files\\Certum\\SimplySign Desktop\\SimplySignDesktop.exe"
|
||||||
|
Start-Sleep -Seconds 10
|
||||||
|
& "C:\\Program Files\\Certum\\SimplySign Desktop\\SimplySignDesktop.exe"
|
||||||
|
|
||||||
- name: Login to Certum
|
- name: Login to Certum
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
@@ -728,10 +709,11 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
write-host "running SimplySignDesktop login..."
|
write-host "running SimplySignDesktop login..."
|
||||||
node tools/ssd.mjs --log-level warn
|
node tools/ssd.mjs --log-level warn
|
||||||
|
Get-ChildItem -Path $env:GITHUB_WORKSPACE
|
||||||
write-host "sleeping during login..."
|
write-host "sleeping during login..."
|
||||||
Start-Sleep 10
|
Start-Sleep 10
|
||||||
|
|
||||||
- name: Archive png artifacts
|
- name: Archive artifacts
|
||||||
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # 7.0.0
|
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # 7.0.0
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
with:
|
with:
|
||||||
@@ -739,7 +721,8 @@ jobs:
|
|||||||
name: images-${{ matrix.os }}
|
name: images-${{ matrix.os }}
|
||||||
if-no-files-found: ignore
|
if-no-files-found: ignore
|
||||||
path: |
|
path: |
|
||||||
*.png
|
${{ github.workspace }}/*.png
|
||||||
|
${{ github.workspace }}/*.log
|
||||||
|
|
||||||
- name: Sign gam.exe
|
- name: Sign gam.exe
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
|
|||||||
144
.github/workflows/upgrade_deps.yml
vendored
Normal file
144
.github/workflows/upgrade_deps.yml
vendored
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
name: Daily Dependency Pinning (2-Week Buffer)
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
# Runs every day at midnight UTC
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
workflow_dispatch: # Allows you to trigger it manually from the UI
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
pin-deps:
|
||||||
|
runs-on: ubuntu-slim
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
|
||||||
|
with:
|
||||||
|
python-version: '3.14'
|
||||||
|
|
||||||
|
- name: Calculate and pin two-week old stable versions
|
||||||
|
shell: python
|
||||||
|
run: |
|
||||||
|
import json
|
||||||
|
import urllib.request
|
||||||
|
import re
|
||||||
|
import tomllib
|
||||||
|
from datetime import datetime, timedelta, timezone
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
toml_path = Path("pyproject.toml")
|
||||||
|
if not toml_path.exists():
|
||||||
|
print("pyproject.toml not found!")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
content = toml_path.read_text(encoding="utf-8")
|
||||||
|
parsed_toml = tomllib.loads(content)
|
||||||
|
|
||||||
|
target_deps = set()
|
||||||
|
|
||||||
|
# Standard [project.dependencies]
|
||||||
|
target_deps.update(parsed_toml.get("project", {}).get("dependencies", []))
|
||||||
|
|
||||||
|
# Optional [project.optional-dependencies]
|
||||||
|
for deps in parsed_toml.get("project", {}).get("optional-dependencies", {}).values():
|
||||||
|
target_deps.update(deps)
|
||||||
|
|
||||||
|
# Dev [dependency-groups] (uv / PEP 735 standard)
|
||||||
|
for deps in parsed_toml.get("dependency-groups", {}).values():
|
||||||
|
if isinstance(deps, list):
|
||||||
|
for d in deps:
|
||||||
|
if isinstance(d, str):
|
||||||
|
target_deps.add(d)
|
||||||
|
|
||||||
|
if not target_deps:
|
||||||
|
print("No dependencies found to process.")
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
updates = {}
|
||||||
|
two_weeks_ago = datetime.now(timezone.utc) - timedelta(days=14)
|
||||||
|
print(f"Evaluating dependencies against cutoff date: {two_weeks_ago.isoformat()}")
|
||||||
|
|
||||||
|
for dep in target_deps:
|
||||||
|
# Isolate base package name (e.g., "yubikey-manager>=5.6.1" -> "yubikey-manager")
|
||||||
|
pkg_name = re.split(r'[<>=!~;\s]', dep)[0].strip()
|
||||||
|
|
||||||
|
# Preserve environment markers if they exist
|
||||||
|
marker = ""
|
||||||
|
if ";" in dep:
|
||||||
|
marker = " ; " + dep.split(";", 1)[1].strip()
|
||||||
|
|
||||||
|
print(f"Fetching PyPI data for: {pkg_name}")
|
||||||
|
try:
|
||||||
|
url = f"https://pypi.org/pypi/{pkg_name}/json"
|
||||||
|
req = urllib.request.Request(url, headers={'User-Agent': 'GAM-CI-Script'})
|
||||||
|
with urllib.request.urlopen(req) as response:
|
||||||
|
data = json.loads(response.read().decode())
|
||||||
|
|
||||||
|
valid_versions = []
|
||||||
|
for ver, files in data.get("releases", {}).items():
|
||||||
|
if not files:
|
||||||
|
continue
|
||||||
|
|
||||||
|
upload_time_str = files[0].get("upload_time_iso_8601")
|
||||||
|
if not upload_time_str:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if upload_time_str.endswith('Z'):
|
||||||
|
upload_time_str = upload_time_str[:-1] + '+00:00'
|
||||||
|
|
||||||
|
upload_time = datetime.fromisoformat(upload_time_str)
|
||||||
|
|
||||||
|
# Filter: Must be older than 2 weeks and not a pre-release
|
||||||
|
if upload_time <= two_weeks_ago and not any(x in ver.lower() for x in ['a', 'b', 'rc', 'dev']):
|
||||||
|
valid_versions.append((upload_time, ver))
|
||||||
|
|
||||||
|
if valid_versions:
|
||||||
|
# Sort by upload time descending to get the newest valid option
|
||||||
|
valid_versions.sort(key=lambda x: x[0], reverse=True)
|
||||||
|
target_version = valid_versions[0][1]
|
||||||
|
|
||||||
|
pinned_dep = f"{pkg_name}=={target_version}{marker}"
|
||||||
|
if pinned_dep != dep:
|
||||||
|
updates[dep] = pinned_dep
|
||||||
|
print(f" -> Pinning: '{dep}' => '{pinned_dep}'")
|
||||||
|
else:
|
||||||
|
print(f" -> Already pinned correctly to {target_version}")
|
||||||
|
else:
|
||||||
|
print(f" -> No valid historical versions found.")
|
||||||
|
|
||||||
|
except urllib.error.HTTPError as e:
|
||||||
|
print(f" -> Package not found on PyPI or HTTP error: {e}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f" -> Error processing {pkg_name}: {e}")
|
||||||
|
|
||||||
|
# 3. Replace the strings safely in the original file content
|
||||||
|
new_content = content
|
||||||
|
for old_dep, new_dep in updates.items():
|
||||||
|
# Regex targets the exact string inside either single or double quotes
|
||||||
|
# Using a lambda replacement ensures we don't trip over escape sequences in the new string
|
||||||
|
escaped_old = re.escape(old_dep)
|
||||||
|
pattern = r'([\'"])' + escaped_old + r'\1'
|
||||||
|
new_content = re.sub(pattern, lambda m: m.group(1) + new_dep + m.group(1), new_content)
|
||||||
|
|
||||||
|
# Write changes back to pyproject.toml
|
||||||
|
if content != new_content:
|
||||||
|
toml_path.write_text(new_content, encoding="utf-8")
|
||||||
|
print("\npyproject.toml updated successfully.")
|
||||||
|
else:
|
||||||
|
print("\nNo updates required.")
|
||||||
|
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
commit-message: "chore: upgrade PyPi deps"
|
||||||
|
title: "Upgrade PyPi deps"
|
||||||
|
body: "Automated scan checking PyPI for package versions at least 2 weeks old."
|
||||||
|
branch: sys-deps-upgrade
|
||||||
|
force: false # Standard push, plays nice with rulesets
|
||||||
@@ -16,7 +16,7 @@ this will download GAM, install it and start setup.
|
|||||||
|
|
||||||
## Windows
|
## Windows
|
||||||
|
|
||||||
Download the MSI Installer from the [GitHub Releases] page. Install the MSI and you'll be prompted to setup GAM.
|
Download the EXE Installer from the [GitHub Releases] page. Run it and you'll be prompted to setup GAM.
|
||||||
|
|
||||||
## Use your own Python
|
## Use your own Python
|
||||||
If you'd prefer to install GAM as a Python package you can install with pip:
|
If you'd prefer to install GAM as a Python package you can install with pip:
|
||||||
|
|||||||
6
dep-overrides.txt
Normal file
6
dep-overrides.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# overrides uv.lock to force newer dependencies
|
||||||
|
# when old deps are vulnerable. These should be set
|
||||||
|
# to expire after 2 weeks when the fixed version will
|
||||||
|
# be automatically picked up anyway.
|
||||||
|
# Format: package_requirement | MM/DD/YYYY
|
||||||
|
urllib3>=2.7.0 | 05/22/2026
|
||||||
@@ -4,26 +4,24 @@ dynamic = [
|
|||||||
"version",
|
"version",
|
||||||
]
|
]
|
||||||
authors = [
|
authors = [
|
||||||
{ name="Jay Lee", email="jay0lee@gmail.com" },
|
{ name = "Jay Lee", email = "jay0lee@gmail.com" },
|
||||||
{ name="Ross Scroggs", email="Ross.Scroggs@gmail.com" },
|
{ name = "Ross Scroggs", email = "Ross.Scroggs@gmail.com" },
|
||||||
]
|
]
|
||||||
# notice that yubikey-manager remains optional further down since it is less command and adds
|
|
||||||
#significant compile dependencies.
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arrow>=1.3.0",
|
"arrow==1.4.0",
|
||||||
"chardet==5.2.0",
|
"chardet==7.4.3",
|
||||||
"cryptography>=46.0.5",
|
"cryptography==48.0.0",
|
||||||
"distro; sys_platform=='linux'",
|
"distro==1.9.0 ; sys_platform=='linux'",
|
||||||
"filelock>=3.18.0",
|
"filelock==3.29.0",
|
||||||
"google-api-python-client>=2.167.0",
|
"google-api-python-client==2.197.0",
|
||||||
"google-auth-httplib2>=0.2.0",
|
"google-auth-httplib2==0.4.0",
|
||||||
"google-auth-oauthlib>=1.2.2",
|
"google-auth-oauthlib==1.4.0",
|
||||||
"google-auth>=2.39.0",
|
"google-auth==2.53.0",
|
||||||
"httplib2>=0.31.0",
|
"httplib2==0.31.2",
|
||||||
"lxml>=5.4.0",
|
"lxml==6.1.1",
|
||||||
"passlib>=1.7.4",
|
"passlib==1.7.4",
|
||||||
"pathvalidate>=3.2.3",
|
"pathvalidate==3.3.1",
|
||||||
"pysocks>=1.7.1",
|
"pysocks==1.7.1",
|
||||||
]
|
]
|
||||||
description = "CLI tool to manage Google Workspace"
|
description = "CLI tool to manage Google Workspace"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
@@ -38,11 +36,17 @@ classifiers = [
|
|||||||
"Programming Language :: Python :: 3.14",
|
"Programming Language :: Python :: 3.14",
|
||||||
"Operating System :: OS Independent",
|
"Operating System :: OS Independent",
|
||||||
]
|
]
|
||||||
license = {text = "Apache License (2.0)"}
|
license-files = [
|
||||||
license-files = ["LICEN[CS]E*"]
|
"LICEN[CS]E*",
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.license]
|
||||||
|
text = "Apache License (2.0)"
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
yubikey = ["yubikey-manager>=5.6.1"]
|
yubikey = [
|
||||||
|
"yubikey-manager==5.9.1",
|
||||||
|
]
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
gam = "gam.__main__:main"
|
gam = "gam.__main__:main"
|
||||||
@@ -57,7 +61,9 @@ Chat = "https://git.io/gam-chat"
|
|||||||
path = "src/gam/__init__.py"
|
path = "src/gam/__init__.py"
|
||||||
|
|
||||||
[tool.hatch.build.targets.wheel]
|
[tool.hatch.build.targets.wheel]
|
||||||
packages = ["src/gam"]
|
packages = [
|
||||||
|
"src/gam",
|
||||||
|
]
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = [
|
requires = [
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
||||||
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
||||||
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
||||||
cloudidentity | identity | 1010010001 | Cloud Identity |
|
cloudidentityfree | cloudidentity | identity | 1010010001 | Cloud Identity Free |
|
||||||
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
||||||
cloudsearch | 1010350001 | Cloud Search |
|
cloudsearch | 1010350001 | Cloud Search |
|
||||||
colabpro | 1010500001 | Colab Pro |
|
colabpro | 1010500001 | Colab Pro |
|
||||||
@@ -560,9 +560,9 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
See: https://cloud.google.com/access-context-manager/docs/custom-access-level-spec
|
See: https://cloud.google.com/access-context-manager/docs/custom-access-level-spec
|
||||||
<QueryContact> ::= <String>
|
<QueryContact> ::= <String>
|
||||||
See: https://developers.google.com/google-apps/contacts/v3/reference#contacts-query-parameters-reference
|
See: https://developers.google.com/google-apps/contacts/v3/reference#contacts-query-parameters-reference
|
||||||
<QueryCrOS> ::= <String>
|
<QueryCrOS> ::= <String>:<String>
|
||||||
See: https://support.google.com/chrome/a/answer/1698333
|
See: https://support.google.com/chrome/a/answer/1698333
|
||||||
<QueryDevice> ::= <String>
|
<QueryDevice> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryDriveFile> ::= <String>
|
<QueryDriveFile> ::= <String>
|
||||||
See: https://developers.google.com/drive/api/v3/search-files
|
See: https://developers.google.com/drive/api/v3/search-files
|
||||||
@@ -575,7 +575,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
<QueryItem> ::= <UniqueID>|<String>
|
<QueryItem> ::= <UniqueID>|<String>
|
||||||
<QueryMemberRestrictions> ::= <String>
|
<QueryMemberRestrictions> ::= <String>
|
||||||
See: https://cloud.google.com/identity/docs/reference/rest/v1beta1/SecuritySettings#MemberRestriction
|
See: https://cloud.google.com/identity/docs/reference/rest/v1beta1/SecuritySettings#MemberRestriction
|
||||||
<QueryMobile> ::= <String>
|
<QueryMobile> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryTeamDrive> ::= <String>
|
<QueryTeamDrive> ::= <String>
|
||||||
See: https://developers.google.com/drive/api/v3/search-parameters
|
See: https://developers.google.com/drive/api/v3/search-parameters
|
||||||
@@ -916,6 +916,8 @@ Specify a collection of Users by directly specifying them or by specifying items
|
|||||||
|
|
||||||
<UserTypeEntity> ::=
|
<UserTypeEntity> ::=
|
||||||
(all users|users_na|users_arch|users_ns|users_susp|users_arch_or_susp|users_na_ns|users_ns_susp)|
|
(all users|users_na|users_arch|users_ns|users_susp|users_arch_or_susp|users_na_ns|users_ns_susp)|
|
||||||
|
(all guests|guests_ns|guests_susp|guests_ns_susp)|
|
||||||
|
(all users_and_guests|users_and_guests_ns|users_and_guests_susp|users_and_guests_ns_susp)|
|
||||||
(user <UserItem>)|
|
(user <UserItem>)|
|
||||||
(users <UserList>)|
|
(users <UserList>)|
|
||||||
(oauthuser)
|
(oauthuser)
|
||||||
@@ -1351,9 +1353,12 @@ verify
|
|||||||
## File Redirection
|
## File Redirection
|
||||||
|
|
||||||
If the pattern {{Section}} appears in <FileName>, it will be replaced with the name of the current section.
|
If the pattern {{Section}} appears in <FileName>, it will be replaced with the name of the current section.
|
||||||
For redirect csv, the optional arguments must appear in the order shown.
|
|
||||||
|
For redirect csv, the optional arguments can be specfified in any order but `todrive <ToDriveAttribute>*`
|
||||||
|
must be last.
|
||||||
|
|
||||||
<Redirect> ::=
|
<Redirect> ::=
|
||||||
redirect csv <FileName> [multiprocess] [append] [noheader] [charset <Charset>]
|
redirect csv <FileName> [delayopen] multiprocess] [append] [noheader] [charset <Charset>]
|
||||||
[columndelimiter <Character>] [quotechar <Character>] [noescapechar [<Boolean>]]
|
[columndelimiter <Character>] [quotechar <Character>] [noescapechar [<Boolean>]]
|
||||||
[sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Bopolean>]]
|
[sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Bopolean>]]
|
||||||
[todrive <ToDriveAttribute>*] |
|
[todrive <ToDriveAttribute>*] |
|
||||||
@@ -1613,7 +1618,8 @@ gam print alias|aliases [todrive <ToDriveAttribute>*]
|
|||||||
[limittoou <OrgUnitItem>])
|
[limittoou <OrgUnitItem>])
|
||||||
[user|users <EmailAddressList>] [group|groups <EmailAddressList>]
|
[user|users <EmailAddressList>] [group|groups <EmailAddressList>]
|
||||||
[select <UserTypeEntity>]
|
[select <UserTypeEntity>]
|
||||||
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
[issuspended [<Boolean>]] [isarchived [<Boolean>]]
|
||||||
|
[aliasmatchpattern <REMatchPattern>]
|
||||||
[shownoneditable] [nogroups] [nousers]
|
[shownoneditable] [nogroups] [nousers]
|
||||||
[onerowpertarget] [delimiter <Character>]
|
[onerowpertarget] [delimiter <Character>]
|
||||||
[suppressnoaliasrows]
|
[suppressnoaliasrows]
|
||||||
@@ -1660,11 +1666,15 @@ gam <UserTypeEntity> show analyticdatastreams
|
|||||||
<CalendarEntity> ::=
|
<CalendarEntity> ::=
|
||||||
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<CalendarList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
|
|
||||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer|none
|
<CalendarACLRole> ::=
|
||||||
<CalendarACLScope> ::= <EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|domain:<DomainName>|domain|default
|
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
<CalendarACLScope> ::=
|
||||||
<CalendarACLScopeEntity> ::=
|
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||||
<CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
domain:<DomainName>|domain|default
|
||||||
|
<CalendarACLScopeList> ::=
|
||||||
|
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||||
|
<CalendarACLScopeEntity>::=
|
||||||
|
<CalendarACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
|
|
||||||
gam calendars <CalendarEntity> create|add acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
gam calendars <CalendarEntity> create|add acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||||
gam calendars <CalendarEntity> update acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
gam calendars <CalendarEntity> update acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||||
@@ -1715,6 +1725,7 @@ gam calendar <CalendarEntity> printacl [todrive <ToDriveAttribute>*]
|
|||||||
|
|
||||||
<EventMatchProperty> ::=
|
<EventMatchProperty> ::=
|
||||||
(matchfield attendees <EmailAddressEntity>)|
|
(matchfield attendees <EmailAddressEntity>)|
|
||||||
|
(matchfield attendeesorganizer <Boolean> <EmailAddressEntity>)|
|
||||||
(matchfield attendeesonlydomainlist <DomainNameList>)|
|
(matchfield attendeesonlydomainlist <DomainNameList>)|
|
||||||
(matchfield attendeesdomainlist <DomainNameList>)|
|
(matchfield attendeesdomainlist <DomainNameList>)|
|
||||||
(matchfield attendeesnotdomainlist <DomainNameList>)|
|
(matchfield attendeesnotdomainlist <DomainNameList>)|
|
||||||
@@ -2463,9 +2474,9 @@ gam print chromehistory releases [todrive <ToDriveAttribute>*]
|
|||||||
pre_provisioned_reenable
|
pre_provisioned_reenable
|
||||||
|
|
||||||
gam update cros <CrOSEntity> action <CrOSAction> [acknowledge_device_touch_requirement]
|
gam update cros <CrOSEntity> action <CrOSAction> [acknowledge_device_touch_requirement]
|
||||||
[actionbatchsize <Integer>]
|
[actionbatchsize <Integer>] [maxtodeprov <Integer>]
|
||||||
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
||||||
[actionbatchsize <Integer>]
|
[actionbatchsize <Integer>] [maxtodeprov <Integer>]
|
||||||
|
|
||||||
<CrOSCommand>
|
<CrOSCommand>
|
||||||
reboot|
|
reboot|
|
||||||
@@ -2505,6 +2516,7 @@ gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatc
|
|||||||
autoupdateexpiration|
|
autoupdateexpiration|
|
||||||
autoupdatethrough|
|
autoupdatethrough|
|
||||||
backlightinfo|
|
backlightinfo|
|
||||||
|
bluetoothadapterinfo|
|
||||||
bootmode|
|
bootmode|
|
||||||
chromeostype|
|
chromeostype|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
@@ -2538,6 +2550,7 @@ gam <CrOSTypeEntity> update <CrOSAttribute>+ [quickcrosmove [<Boolean>]] [nobatc
|
|||||||
orgunitpath|org|ou|
|
orgunitpath|org|ou|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
osversion|
|
osversion|
|
||||||
|
osversioncompliance|
|
||||||
platformversion|
|
platformversion|
|
||||||
recentusers|
|
recentusers|
|
||||||
screenshotfiles|
|
screenshotfiles|
|
||||||
@@ -2719,25 +2732,30 @@ gam <CrOSTypeEntity> get devicefile [select <DeviceFileEntity>] [targetfolder <F
|
|||||||
Print telemetry data for specified CrOS devices.
|
Print telemetry data for specified CrOS devices.
|
||||||
|
|
||||||
<CrOSTelemetryFieldName> ::=
|
<CrOSTelemetryFieldName> ::=
|
||||||
|
appreport|
|
||||||
audiostatusreport|
|
audiostatusreport|
|
||||||
batteryinfo|
|
batteryinfo|
|
||||||
batterystatusreport|
|
batterystatusreport|
|
||||||
bootPerformancereport|
|
bootperformancereport|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
cpustatusreport|
|
cpustatusreport|
|
||||||
customer|
|
customer|
|
||||||
deviceid|
|
deviceid|
|
||||||
graphicsinfo|
|
graphicsinfo|
|
||||||
graphicsstatusreport|
|
graphicsstatusreport|
|
||||||
|
heartbeatstatusreport|
|
||||||
|
kioskappstatusreport|
|
||||||
memoryinfo|
|
memoryinfo|
|
||||||
memorystatusreport|
|
memorystatusreport|
|
||||||
name|
|
name|
|
||||||
|
networkbandwidthreport|
|
||||||
networkdiagnosticsreport|
|
networkdiagnosticsreport|
|
||||||
networkinfo|
|
networkinfo|
|
||||||
networkstatusreport|
|
networkstatusreport|
|
||||||
orgunitid|
|
orgunitid|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
peripheralsreport|
|
peripheralsreport|
|
||||||
|
runtimecountersreport|
|
||||||
serialnumber|
|
serialnumber|
|
||||||
storageinfo|
|
storageinfo|
|
||||||
storagestatusreport|
|
storagestatusreport|
|
||||||
@@ -2745,20 +2763,22 @@ Print telemetry data for specified CrOS devices.
|
|||||||
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
||||||
|
|
||||||
<CrOSTelemetryListFieldName> ::=
|
<CrOSTelemetryListFieldName> ::=
|
||||||
|
appreport|
|
||||||
audiostatusreport|
|
audiostatusreport|
|
||||||
batteryinfo|
|
|
||||||
batterystatusreport|
|
batterystatusreport|
|
||||||
bootperformancereport|
|
bootperformancereport|
|
||||||
cpuinfo|
|
|
||||||
cpustatusreport|
|
cpustatusreport|
|
||||||
graphicsstatusreport|
|
graphicsstatusreport|
|
||||||
|
heartbeatstatusreport|
|
||||||
|
kioskappstatusreport|
|
||||||
memorystatusreport|
|
memorystatusreport|
|
||||||
|
networkbandwidthreport|
|
||||||
networkdiagnosticsreport|
|
networkdiagnosticsreport|
|
||||||
networkstatusreport|
|
networkstatusreport|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
peripheralsreport|
|
peripheralsreport|
|
||||||
storagestatusreport|
|
runtimecountersreport|
|
||||||
thunderboltinfo
|
storagestatusreport
|
||||||
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
||||||
|
|
||||||
gam info crostelemetry <SerialNumber>
|
gam info crostelemetry <SerialNumber>
|
||||||
@@ -2775,7 +2795,7 @@ gam show crostelemetry
|
|||||||
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
||||||
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||||
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||||
[reverselists <CrOSTelemetryListFieldNameList>]
|
[reverselists <CrOSTelemetryListFieldNameList>] [oneitemperrow]
|
||||||
[start <Date>] [end <Date>] [listlimit <Number>]
|
[start <Date>] [end <Date>] [listlimit <Number>]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
@@ -3162,6 +3182,7 @@ gam <UserTypeEntity> show contactdelegates [shownames] [csv]
|
|||||||
name|
|
name|
|
||||||
owneremail|
|
owneremail|
|
||||||
ownerid|
|
ownerid|
|
||||||
|
ownername|
|
||||||
room|
|
room|
|
||||||
section|
|
section|
|
||||||
students|
|
students|
|
||||||
@@ -3275,16 +3296,16 @@ gam courses <CourseEntity> sync teachers [addonly|removeonly] [makefirstteachero
|
|||||||
gam courses <CourseEntity> sync students [addonly|removeonly] <UserTypeEntity>
|
gam courses <CourseEntity> sync students [addonly|removeonly] <UserTypeEntity>
|
||||||
|
|
||||||
gam info course <CourseID> [owneraccess]
|
gam info course <CourseID> [owneraccess]
|
||||||
[owneremail] [alias|aliases] [show all|students|teachers] [countsonly]
|
[owneremail] [ownername] [alias|aliases] [show all|students|teachers] [countsonly]
|
||||||
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>]
|
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam info courses <CourseEntity> [owneraccess]
|
gam info courses <CourseEntity> [owneraccess]
|
||||||
[owneremail] [alias|aliases] [show all|students|teachers] [countsonly]
|
[owneremail] [ownername] [alias|aliases] [show all|students|teachers] [countsonly]
|
||||||
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>]
|
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam print courses [todrive <ToDriveAttribute>*]
|
gam print courses [todrive <ToDriveAttribute>*]
|
||||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
|
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
|
||||||
[owneremail] [owneremailmatchpattern <REMatchPattern>]
|
[owneremail] [owneremailmatchpattern <REMatchPattern>] [ownername]
|
||||||
[alias|aliases|aliasesincolumns [delimiter <Character>]]
|
[alias|aliases|aliasesincolumns [delimiter <Character>]]
|
||||||
[show all|students|teachers] [countsonly]
|
[show all|students|teachers] [countsonly]
|
||||||
[timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
@@ -3398,14 +3419,16 @@ gam print course-announcements [todrive <ToDriveAttribute>*]
|
|||||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||||
(announcementids <CourseAnnouncementIDEntity>)|((announcementstates <CourseAnnouncementStateList>)*
|
(announcementids <CourseAnnouncementIDEntity>)|((announcementstates <CourseAnnouncementStateList>)*
|
||||||
(orderby <CourseAnnouncementOrderByFieldName> [ascending|descending])*)
|
(orderby <CourseAnnouncementOrderByFieldName> [ascending|descending])*)
|
||||||
[showcreatoremails|creatoremail] [fields <CourseAnnouncementFieldNameList>]
|
[showcreatoremails|creatoremail] [showcreatornames|creatorname]
|
||||||
|
[fields <CourseAnnouncementFieldNameList>]
|
||||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
[countsonly] [formatjson [quotechar <Character>]]
|
[countsonly] [formatjson [quotechar <Character>]]
|
||||||
gam print course-materials [todrive <ToDriveAttribute>*]
|
gam print course-materials [todrive <ToDriveAttribute>*]
|
||||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||||
(materialids <CourseMaterialIDEntity>)|((materialstates <CourseMaterialStateList>)*
|
(materialids <CourseMaterialIDEntity>)|((materialstates <CourseMaterialStateList>)*
|
||||||
(orderby <CourseMaterialOrderByFieldName> [ascending|descending])*)
|
(orderby <CourseMaterialOrderByFieldName> [ascending|descending])*)
|
||||||
[showcreatoremails|creatoremail] [showtopicnames] [fields <CourseMaterialFieldNameList>]
|
[showcreatoremails|creatoremail] [showcreatornames|creatorname] [showtopicnames]
|
||||||
|
[fields <CourseMaterialFieldNameList>]
|
||||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
[oneitemperrow]
|
[oneitemperrow]
|
||||||
[countsonly] [formatjson [quotechar <Character>]]
|
[countsonly] [formatjson [quotechar <Character>]]
|
||||||
@@ -3426,7 +3449,8 @@ gam print course-works [todrive <ToDriveAttribute>*]
|
|||||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||||
(workids <CourseWorkIDEntity>)|((workstates <CourseWorkStateList>)*
|
(workids <CourseWorkIDEntity>)|((workstates <CourseWorkStateList>)*
|
||||||
(orderby <CourseWorkOrderByFieldName> [ascending|descending])*)
|
(orderby <CourseWorkOrderByFieldName> [ascending|descending])*)
|
||||||
[showcreatoremails|creatoremail] [showtopicnames] [fields <CourseWorkFieldNameList>]
|
[showcreatoremails|creatoremail] [showcreatornames|creatorname] [showtopicnames]
|
||||||
|
[fields <CourseWorkFieldNameList>]
|
||||||
[showstudentsaslist [<Boolean>]] [delimiter <Character>]
|
[showstudentsaslist [<Boolean>]] [delimiter <Character>]
|
||||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
[oneitemperrow]
|
[oneitemperrow]
|
||||||
@@ -3884,6 +3908,8 @@ gam audit monitor list <EmailAddress>
|
|||||||
gam create|add group <EmailAddress>
|
gam create|add group <EmailAddress>
|
||||||
[copyfrom <GroupItem>] <GroupAttribute>*
|
[copyfrom <GroupItem>] <GroupAttribute>*
|
||||||
[verifynotinvitable]
|
[verifynotinvitable]
|
||||||
|
[recentdeleteretries <Integer>] [recentdeleteretrydelay <Integer>]
|
||||||
|
[verifycreationretries <Integer>] [verifycreationinitialdelay <Integer>] [verifycreationretrydelay <Integer>]
|
||||||
gam update group|groups <GroupEntity> [email <EmailAddress>]
|
gam update group|groups <GroupEntity> [email <EmailAddress>]
|
||||||
[updateprimaryemail <RESearchPattern> <RESubstitution>]
|
[updateprimaryemail <RESearchPattern> <RESubstitution>]
|
||||||
[copyfrom <GroupItem>] <GroupAttribute>*
|
[copyfrom <GroupItem>] <GroupAttribute>*
|
||||||
@@ -4352,6 +4378,14 @@ gam show policies
|
|||||||
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
|
|
||||||
|
gam create policy
|
||||||
|
json <JSONData>
|
||||||
|
[(ou|orgunit <OrgUnitItem>)|(group <GroupItem>)|(query <String>)]
|
||||||
|
gam update policy
|
||||||
|
json <JSONData>
|
||||||
|
[(ou|orgunit <OrgUnitItem>)|(group <GroupItem>)|(query <String>)]
|
||||||
|
gam delete policies <CIPolicyNameEntity>
|
||||||
|
|
||||||
# Inbound SSO
|
# Inbound SSO
|
||||||
|
|
||||||
<SSOProfileDisplayName> ::= <String>
|
<SSOProfileDisplayName> ::= <String>
|
||||||
@@ -4873,10 +4907,15 @@ gam print resources [todrive <ToDriveAttribute>*] [allfields|<ResourceFieldName>
|
|||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
[showitemcountonly]
|
[showitemcountonly]
|
||||||
|
|
||||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer|none
|
<CalendarACLRole> ::=
|
||||||
<CalendarACLScope> ::= <EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|domain:<DomainName>|domain|default
|
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
<CalendarACLScope> ::=
|
||||||
<CalendarACLScopeEntity> ::= <CalendarACLScopeList> | <FileSelector> | <CSVFileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||||
|
domain:<DomainName>|domain|default
|
||||||
|
<CalendarACLScopeList> ::=
|
||||||
|
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||||
|
<CalendarACLScopeEntity>::=
|
||||||
|
<CalendarACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
|
|
||||||
gam resource <ResourceID> create|add acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
gam resource <ResourceID> create|add acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||||
gam resource <ResourceID> update acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
gam resource <ResourceID> update acls|calendaracls <CalendarACLRole> <CalendarACLScopeEntity> [sendnotifications <Boolean>]
|
||||||
@@ -5488,6 +5527,7 @@ gam print vaultcounts [todrive <ToDriveAttributes>*]
|
|||||||
[excludedrafts <Boolean>]
|
[excludedrafts <Boolean>]
|
||||||
[<JSONData>]
|
[<JSONData>]
|
||||||
[wait <Integer>]
|
[wait <Integer>]
|
||||||
|
[include_suspended_zeros [<Boolean>]]
|
||||||
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
gam print vaultcounts [todrive <ToDriveAttributes>*]
|
||||||
matter <MatterItem> operation <String> [wait <Integer>]
|
matter <MatterItem> operation <String> [wait <Integer>]
|
||||||
|
|
||||||
@@ -5999,7 +6039,9 @@ gam print users [todrive <ToDriveAttribute>*]
|
|||||||
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
([issuspended [<Boolean>]] [isarchived [<Boolean>]])|(isdisabled [<Boolean>])]
|
||||||
|
[disabledafter <DateTime>] [disabledbefore <DateTime>]
|
||||||
|
[aliasmatchpattern <REMatchPattern>]
|
||||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
||||||
[showitemcountonly]
|
[showitemcountonly]
|
||||||
|
|
||||||
@@ -6018,7 +6060,9 @@ gam print users [todrive <ToDriveAttribute>*] select <UserTypeEntity>
|
|||||||
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
([issuspended [<Boolean>]] [isarchived [<Boolean>]])|(isdisabled [<Boolean>])]
|
||||||
|
[disabledafter <DateTime>] [disabledbefore <DateTime>]
|
||||||
|
[aliasmatchpattern <REMatchPattern>]
|
||||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
||||||
[showitemcountonly]
|
[showitemcountonly]
|
||||||
|
|
||||||
@@ -6035,7 +6079,9 @@ gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
|||||||
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
([issuspended [<Boolean>]] [isarchived [<Boolean>]])|(isdisabled [<Boolean>])]
|
||||||
|
[disabledafter <DateTime>] [disabledbefore <DateTime>]
|
||||||
|
[aliasmatchpattern <REMatchPattern>]
|
||||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
||||||
[showitemcountonly]
|
[showitemcountonly]
|
||||||
|
|
||||||
@@ -6104,7 +6150,8 @@ gam <UserTypeEntity> print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
|||||||
|
|
||||||
# Users - Calendars
|
# Users - Calendars
|
||||||
|
|
||||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer
|
<CalendarACLRole> ::=
|
||||||
|
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||||
|
|
||||||
<CalendarSelectProperty> ::=
|
<CalendarSelectProperty> ::=
|
||||||
(minaccessrole <CalendarACLRole>)|
|
(minaccessrole <CalendarACLRole>)|
|
||||||
@@ -6755,13 +6802,41 @@ gam <UserTypeEntity> info chatmessage name <ChatMessage>
|
|||||||
[formatjson]
|
[formatjson]
|
||||||
gam <UserTypeEntity> show chatmessages
|
gam <UserTypeEntity> show chatmessages
|
||||||
<ChatSpace>+
|
<ChatSpace>+
|
||||||
[showdeleted [<Boolean>]] [filter <String>]
|
[showdeleted [<Boolean>]
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
[fields <ChatMessageFieldNameList>]
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime [ascending|descending]]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
||||||
<ChatSpace>+
|
<ChatSpace>+
|
||||||
[showdeleted [<Boolean>]] [filter <String>]
|
[showdeleted [<Boolean>]
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[thread <ChatThread>])
|
||||||
[fields <ChatMessageFieldNameList>]
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime [ascending|descending]]
|
||||||
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
|
gam <UserTypeEntity> show chatsearchmessages
|
||||||
|
keywords <StringList>
|
||||||
|
<ChatSpace>*
|
||||||
|
[displaynames [all|any] <StringList>]
|
||||||
|
[senders <EmailAddressEntity>]*
|
||||||
|
[usermentions [all|any] <EmailAddressEntity>]*
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[hasattachment]
|
||||||
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime|relevance]
|
||||||
|
[formatjson]
|
||||||
|
gam <UserTypeEntity> print chatsearchmessages [todrive <ToDriveAttribute>*]
|
||||||
|
keywords <StringList>
|
||||||
|
<ChatSpace>*
|
||||||
|
[displaynames [all|any] <StringList>]
|
||||||
|
[senders <EmailAddressEntity>]*
|
||||||
|
[usermentions [all|any] <EmailAddressEntity>]*
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[hasattachment]
|
||||||
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime|relevance]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
gam <UserTypeEntity> info chatevent name <ChatEvent>
|
gam <UserTypeEntity> info chatevent name <ChatEvent>
|
||||||
@@ -6991,6 +7066,7 @@ gam <UserTypeEntity> move drivefile <DriveFileEntity> [newfilename <DriveFileNam
|
|||||||
[copysubfolderpermissions [<Boolean>]]
|
[copysubfolderpermissions [<Boolean>]]
|
||||||
[copysubfolderinheritedpermissions [<Boolean>]]
|
[copysubfolderinheritedpermissions [<Boolean>]]
|
||||||
[copysubfoldernoniheritedpermissions never|always|syncallfolders|syncupdatedfolders]
|
[copysubfoldernoniheritedpermissions never|always|syncallfolders|syncupdatedfolders]
|
||||||
|
[movefilepermissions [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
(mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
(mappermissionsemail <EmailAddress> <EmailAddress>)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
@@ -7021,7 +7097,7 @@ gam <UserTypeEntity> untrash drivefile <DriveFileEntity> [shortcutandtarget [<Bo
|
|||||||
|
|
||||||
gam <UserTypeEntity> info drivefile <DriveFileEntity>
|
gam <UserTypeEntity> info drivefile <DriveFileEntity>
|
||||||
[returnidonly]
|
[returnidonly]
|
||||||
[filepath|fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[filepath|fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
[includepermissionsforview published]
|
[includepermissionsforview published]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
@@ -7502,7 +7578,7 @@ gam <UserTypeEntity> collect orphans
|
|||||||
|
|
||||||
gam <UserTypeEntity> show fileinfo <DriveFileEntity>
|
gam <UserTypeEntity> show fileinfo <DriveFileEntity>
|
||||||
[returnidonly]
|
[returnidonly]
|
||||||
[filepath|fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[filepath|fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
[includepermissionsforview published]
|
[includepermissionsforview published]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
@@ -7516,12 +7592,12 @@ gam <UserTypeEntity> show filepath <DriveFileEntity>
|
|||||||
[returnpathonly]
|
[returnpathonly]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[stripcrsfromname]
|
[stripcrsfromname]
|
||||||
[fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[followshortcuts [<Boolean>]]
|
[followshortcuts [<Boolean>]]
|
||||||
gam <UserTypeEntity> print filepath <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print filepath <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[stripcrsfromname] [oneitemperrow]
|
[stripcrsfromname] [oneitemperrow]
|
||||||
[fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[followshortcuts [<Boolean>]]
|
[followshortcuts [<Boolean>]]
|
||||||
|
|
||||||
gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
||||||
@@ -7624,7 +7700,7 @@ gam <UserTypeEntity> print filelist [todrive <ToDriveAttribute>*]
|
|||||||
[countsonly [summary none|only|plus] [summaryuser <String>]
|
[countsonly [summary none|only|plus] [summaryuser <String>]
|
||||||
[showsource] [showsize] [showsizeunits] [showmimetypesize]]
|
[showsource] [showsize] [showsizeunits] [showmimetypesize]]
|
||||||
[countsrowfilter]
|
[countsrowfilter]
|
||||||
[filepath|fullpath [folderpathonly [<Boolean>]] [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
|
[filepath|fullpath [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
[showdrivename] [showshareddrivepermissions]
|
[showdrivename] [showshareddrivepermissions]
|
||||||
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
|
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
|
||||||
@@ -7662,7 +7738,7 @@ gam <UserTypeEntity> print driveactivity [todrive <ToDriveAttribute>*]
|
|||||||
(drivefilename <DriveFileName>) | (drivefoldername <DriveFolderName>) | (query <QueryDriveFile>)]
|
(drivefilename <DriveFileName>) | (drivefoldername <DriveFolderName>) | (query <QueryDriveFile>)]
|
||||||
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>)|<Time>|
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>)|<Time>|
|
||||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||||
[action|actions [not] <DriveActivityActionList>]
|
[action|actions [not] <DriveActivityActionList>] [maxactivities <Number>]
|
||||||
[consolidationstrategy legacy|none]
|
[consolidationstrategy legacy|none]
|
||||||
[idmapfile <CSVFileInput> endcsv]
|
[idmapfile <CSVFileInput> endcsv]
|
||||||
[stripcrsfromname] [formatjson [quotechar <Character>]]
|
[stripcrsfromname] [formatjson [quotechar <Character>]]
|
||||||
@@ -8018,12 +8094,12 @@ gam <UserTypeEntity> export thread|threads
|
|||||||
[quick|notquick] [doit] [max_to_export <Number>])|(ids <ThreadIDEntity>)
|
[quick|notquick] [doit] [max_to_export <Number>])|(ids <ThreadIDEntity>)
|
||||||
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
[targetfolder <FilePath>] [targetname <FileName>] [overwrite [<Boolean>]]
|
||||||
|
|
||||||
gam <UserTypeEntity> forward message|messages recipient|to <RecipientEntity>
|
gam <UserTypeEntity> forward message|messages [recipient|to] <RecipientEntity>
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
[labelids <LabelIDList>]
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
||||||
[subject <String>] [addorigfieldstosubject [<Boolean>]] [altcharset <String>]
|
[subject <String>] [addorigfieldstosubject [<Boolean>]] [altcharset <String>]
|
||||||
gam <UserTypeEntity> forward thread|thtreads recipient|to <RecipientEntity>
|
gam <UserTypeEntity> forward thread|thtreads [recipient|to] <RecipientEntity>
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
[labelids <LabelIDList>]
|
[labelids <LabelIDList>]
|
||||||
quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
||||||
|
|||||||
@@ -1,3 +1,216 @@
|
|||||||
|
7.46.01
|
||||||
|
|
||||||
|
Fixed bug in `gam <CrOSTypeEntity> issuecommand command <CrOSCommand> ... csv` where
|
||||||
|
command execution status lines were improperly indented.
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.6.
|
||||||
|
|
||||||
|
7.46.00
|
||||||
|
|
||||||
|
Added commands to create, update and delete Cloud Identity policies for data loss prevention (DLP) rules and detectors.
|
||||||
|
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Cloud-Identity-Policies
|
||||||
|
* See: https://workspaceupdates.googleblog.com/2026/06/introducing-workspace-policy-api-mutate-endpoints-for-DLP.html
|
||||||
|
|
||||||
|
7.45.00
|
||||||
|
|
||||||
|
Added options `isdisabled [<Boolean>]`, `disabledafter <DateTime>` and `disabledbefore <DateTime>`
|
||||||
|
to `gam print users`. These options along with `issuspended [<Boolean>]` and `isarchived [<Boolean>]`
|
||||||
|
are useful when identifying users to deprovision.
|
||||||
|
|
||||||
|
Added option `movefilepermissions [<Boolean>]]` to `gam <UserTypeEntity> move drivefile` that, when False,
|
||||||
|
causes GAM to remove ACLs from a file before moving it; this will be most useful when moving files to
|
||||||
|
Shared Drives so that only the Shared Drive ACls apply. When not specified or set True, file permissions
|
||||||
|
are not removed; this is the current GAM behavior.
|
||||||
|
|
||||||
|
Upgraded to OpenSSL 4.0.1.
|
||||||
|
|
||||||
|
7.44.03
|
||||||
|
|
||||||
|
Added `writerwithoutprivateaccess` to `<CalendarACLRole>`; this will become effective 2026-06-29.
|
||||||
|
* See: https://developers.google.com/workspace/calendar/release-notes#June_01_2026
|
||||||
|
|
||||||
|
7.44.02
|
||||||
|
|
||||||
|
Added fields `bluetoothadapterinfo` and `osversioncompliance` to `<CrOSFieldName>` for use
|
||||||
|
in `gam info|print cros`.
|
||||||
|
|
||||||
|
7.44.01
|
||||||
|
|
||||||
|
Added option `oneitemperrow` to `gam print crostelemetry` to have each of a device's
|
||||||
|
report field entries displayed on a separate row with all of the other device fields.
|
||||||
|
|
||||||
|
Added additional fields to `<CrOSTelemetryFieldName>`and `<CrOSTelemetryListFieldName>`:
|
||||||
|
```
|
||||||
|
appreport
|
||||||
|
heartbeatstatusreport
|
||||||
|
kioskappstatusreport
|
||||||
|
networkbandwidthreport
|
||||||
|
runtimecountersreport
|
||||||
|
```
|
||||||
|
|
||||||
|
7.44.00
|
||||||
|
|
||||||
|
Added support for User data `archivalTime` and `suspensionTime` that is available
|
||||||
|
when fields `archived` and `suspended` are requested in `gam info user` and `gam print users`.
|
||||||
|
|
||||||
|
Added the following options to `gam <UserTypeEntity> show chatmessages` to simplify specifying a filter.
|
||||||
|
```
|
||||||
|
start|starttime <Date>|<Time>
|
||||||
|
end|endtime <Date>|<Time>
|
||||||
|
range <Date>|<Time> <Date>|<Time>
|
||||||
|
thread <ChatThread>
|
||||||
|
```
|
||||||
|
|
||||||
|
Added commands to search for and display chat messages.
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#display-chat-messages-by-searching
|
||||||
|
|
||||||
|
These commands are in Developer Preview; to use them you must have these values set in `gam.cfg`.
|
||||||
|
```
|
||||||
|
developer_preview_apis = chat
|
||||||
|
developer_preview_api_key = <DeveloperPreviewKey>
|
||||||
|
```
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.5.
|
||||||
|
|
||||||
|
7.43.10
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> forward message|thread [recipient|to] <RecipientEntity>` to not forward messages
|
||||||
|
to the `Bcc` recipients of the original message.
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> forward message|thread [recipient|to] <RecipientEntity> addorigfieldstosubject`
|
||||||
|
where the recipient of the forwarded message was added to the subject line instead of the recipient of the original message.
|
||||||
|
|
||||||
|
7.43.09
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> print filelist` that caused a trap.
|
||||||
|
|
||||||
|
7.43.08
|
||||||
|
|
||||||
|
Fixed bug and formatting issues in `gam info device <DeviceEntity>`.
|
||||||
|
|
||||||
|
7.43.07
|
||||||
|
|
||||||
|
Improved validation of `<QueryCrOS>`, `<QueryDevice>` and `<QueryMobile>`.
|
||||||
|
|
||||||
|
7.43.06
|
||||||
|
|
||||||
|
Updated commands that use `<QueryCrOS>`, `<QueryDevice>` or `<QueryMobile>` to validate
|
||||||
|
that it is of the form `field:value` and that `value` does not contain a '?'.
|
||||||
|
Without validation, Google can return many more devices than are expected.
|
||||||
|
|
||||||
|
7.43.05
|
||||||
|
|
||||||
|
Added option `matchfield attendeesorganizer <Boolean> <EmailAddressEntity>` to `<EventMatchProperty>`
|
||||||
|
that is used in commands that process events. The match is true if all of the addresses in `<EmailAddressEntity>`
|
||||||
|
are present as attendees in the event and are an organizer or not based on `<Boolean>`.
|
||||||
|
|
||||||
|
Added option `max_to_deprov <Integer>` to `gam update cros <CrOSEntity> action <CrOSAction>`
|
||||||
|
that is used when `<CrOSAction>` is any of the following:
|
||||||
|
```
|
||||||
|
deprovision_different_model_replace|
|
||||||
|
deprovision_different_model_replacement|
|
||||||
|
deprovision_retiring_device|
|
||||||
|
deprovision_same_model_replace|
|
||||||
|
deprovision_same_model_replacement|
|
||||||
|
deprovision_upgrade_transfer
|
||||||
|
```
|
||||||
|
`max_to_deprov <Integer>` - No deprovisions are processed if the number of devices in `<CrOSEntity>` exceeds `<Integer>`;
|
||||||
|
the default value is one; set `<Integer>` to 0 for no limit.
|
||||||
|
|
||||||
|
7.43.04
|
||||||
|
|
||||||
|
Added option `include_suspended_zeros [<Boolean>]` to `gam print vaultcounts` that causes
|
||||||
|
GAM to generate zero count lines for suspended users with zero items as well as non-suspended users.
|
||||||
|
|
||||||
|
7.43.03
|
||||||
|
|
||||||
|
Added option `parentpathonly [<Boolean>]` to the following commands that causes GAM
|
||||||
|
to display only the parent folder names when displaying the path to a file.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> info drivefile ... filepath|fullpath
|
||||||
|
gam <UserTypeEntity> show fileinfo ... filepath|fullpath
|
||||||
|
gam <UserTypeEntity> print|show filepath
|
||||||
|
gam <UserTypeEntity> print filelist ... filepath|fullpath
|
||||||
|
```
|
||||||
|
|
||||||
|
7.43.02
|
||||||
|
|
||||||
|
Added option `maxactivities <Integer>` to `gam <UserTypeEntity> print driveactivity` to limit
|
||||||
|
the number of activities displayed; the default is 0, no limit.
|
||||||
|
|
||||||
|
7.43.01
|
||||||
|
|
||||||
|
Updated `gam info user` and `gam print users` to display guest user attributes: `isGuestUser, guestAccountInfo`
|
||||||
|
|
||||||
|
Expanded `<UserTypeEntity>` to allow specification of guest users.
|
||||||
|
* See [Collections of Users](Collections-of-Users)
|
||||||
|
|
||||||
|
7.42.00
|
||||||
|
|
||||||
|
In versions prior to 7.42.00, when `redirect csv <FileName>` was used, GAM did not open and write `<FileName>`
|
||||||
|
until all processing was complete; if `<FileName>` was not accessible, an error was generated
|
||||||
|
and no results were saved. Now, `<FileName>` is opened initially to verify accessiblity
|
||||||
|
and then written when processing is complete.
|
||||||
|
|
||||||
|
In the unlikely event that this causes issues, you can do `redirect csv <FileName> delayopen`
|
||||||
|
to get the previous behavior.
|
||||||
|
|
||||||
|
7.41.03
|
||||||
|
|
||||||
|
Fixed bug in the following:
|
||||||
|
Added the following to `<RowValueFilter>` used in CSV input/output row filtering; these are
|
||||||
|
synonyms for `count` and `countrange`.
|
||||||
|
```
|
||||||
|
[(any|all):]number<Operator><Number>|
|
||||||
|
[(any|all):]numberrange!=<Number>/<Number>|
|
||||||
|
[(any|all):]numberrange=<Number>/<Number>|
|
||||||
|
```
|
||||||
|
|
||||||
|
7.41.02
|
||||||
|
|
||||||
|
Added option `ownername` to `gam info|print courses` to have GAM display the course owners full name;
|
||||||
|
there is an extra API call per course to get the name.
|
||||||
|
|
||||||
|
Added option `creatorname` to `gam print course-announcements|course-materials|course-works` to have
|
||||||
|
GAM display the item creators full name; there is an extra API call per course to get the name.
|
||||||
|
|
||||||
|
After creating a group, it may be sometime, e.g. 30-45 seconds, before members can
|
||||||
|
successfully be added to the group even though the API reported that the group was created.
|
||||||
|
The following options can be used with `gam create group` to verify that the group is actually ready to be updated.
|
||||||
|
This will be most useful in scripts that are used to create and then populate groups.
|
||||||
|
```
|
||||||
|
verifycreationretries <Integer> - Verify group creation, defaults to 0, no verification performed, range 0-20
|
||||||
|
verifycreationinitialdelay <Integer> - Number of seconds to delay before first verification performed, defaults to 5, range 0-60
|
||||||
|
verifycreationretrydelay <Integer> - Number of seconds to delay between verificaton retries, defaults to 5, range 1-60
|
||||||
|
```
|
||||||
|
|
||||||
|
If you have a script that deletes a group and then immediately tries to create a new group with the same email address,
|
||||||
|
you may run into issues. There seems to be a 30-45 second window after the deletion in which a couple
|
||||||
|
of strange errors can occur on the creation: `Resource not found` and `Duplicate`.
|
||||||
|
The following options can be used with `gam create group` to handle these errors. This will be most useful
|
||||||
|
in scripts that are used to delete and then immediately recreate groups.
|
||||||
|
```
|
||||||
|
recentdeleteretries <Integer> - Handle group delete/create errors, defaults to 0, no errors handled, range 0-20
|
||||||
|
recentdeleteretrydelay <Integer> - Number of seconds to delay between retries, defaults to 5, range 1-60
|
||||||
|
```
|
||||||
|
|
||||||
|
Added the following to `<RowValueFilter>` used in CSV input/output row filtering; these are
|
||||||
|
synonyms for `count` and `countrange`.
|
||||||
|
```
|
||||||
|
[(any|all):]number<Operator><Number>|
|
||||||
|
[(any|all):]numberrange!=<Number>/<Number>|
|
||||||
|
[(any|all):]numberrange=<Number>/<Number>|
|
||||||
|
```
|
||||||
|
|
||||||
|
7.41.01
|
||||||
|
|
||||||
|
Fixed bug in `gam print cigroups members managers owners countsonly totalcount internal external` that caused a trap.
|
||||||
|
|
||||||
|
7.41.00
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.4 and OpenSSL 4.0.0.
|
||||||
|
|
||||||
7.40.03
|
7.40.03
|
||||||
|
|
||||||
Added option `whocanaddexternalmembers only_owners_can_add_external_members|end_users_can_add_external_members` to `<GroupSettingsAttribute>`.
|
Added option `whocanaddexternalmembers only_owners_can_add_external_members|end_users_can_add_external_members` to `<GroupSettingsAttribute>`.
|
||||||
|
|||||||
@@ -11,5 +11,7 @@ from gam.__main__ import main
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
if platform.system() != 'Linux':
|
if platform.system() != 'Linux':
|
||||||
multiprocessing.freeze_support()
|
multiprocessing.freeze_support()
|
||||||
multiprocessing.set_start_method('spawn', force=True)
|
# Python 3.14.4 and PyInstaller 6.19.0 don't play nice with Linux forkserver
|
||||||
|
# use spawn everywhere for now.
|
||||||
|
multiprocessing.set_start_method('spawn', force=True)
|
||||||
main()
|
main()
|
||||||
|
|||||||
1269
src/gam/__init__.py
1269
src/gam/__init__.py
File diff suppressed because it is too large
Load Diff
@@ -36,10 +36,13 @@ def main():
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
if getattr(sys, 'frozen', False): # we're frozen:
|
if getattr(sys, 'frozen', False): # we're frozen:
|
||||||
multiprocessing.freeze_support()
|
multiprocessing.freeze_support()
|
||||||
if platform.system() == 'Linux':
|
#if platform.system() == 'Linux':
|
||||||
# set explictly since it's not default in Python < 3.14, forkserver should
|
# set explictly since it's not default in Python < 3.14, forkserver should
|
||||||
# be safer than fork and less likely to see bulk command hangs.
|
# be safer than fork and less likely to see bulk command hangs.
|
||||||
multiprocessing.set_start_method('forkserver')
|
#multiprocessing.set_start_method('forkserver')
|
||||||
else:
|
#else:
|
||||||
multiprocessing.set_start_method('spawn')
|
|
||||||
|
# Python 3.14.4 and PyInstaller 6.19.0 don't play nice with forkserver
|
||||||
|
# on Linux. For the time being use spawn everywhere.
|
||||||
|
multiprocessing.set_start_method('spawn')
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -67,35 +67,149 @@ tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1
|
|||||||
/q4AaOeMSQ+2b1tbFfLn
|
/q4AaOeMSQ+2b1tbFfLn
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: DigiCert
|
# Operating CA: Google Trust Services LLC
|
||||||
# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
# Subject: C = US, O = Google Trust Services LLC, CN = GTS Root R1
|
||||||
# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com
|
# Issuer: C = US, O = Google Trust Services LLC, CN = GTS Root R1
|
||||||
# Label: "DigiCert Assured ID Root CA"
|
# Label: "GTS Root R1"
|
||||||
# Serial: 17154717934120587862167794914071425081
|
# Serial: 0203E5936F31B01349886BA217
|
||||||
# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72
|
# MD5 Fingerprint: 05:FE:D0:BF:71:A8:A3:76:63:DA:01:E0:D8:52:DC:40
|
||||||
# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43
|
# SHA1 Fingerprint: E5:8C:1C:C4:91:3B:38:63:4B:E9:10:6E:E3:AD:8E:6B:9D:D9:81:4A
|
||||||
# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c
|
# SHA256 Fingerprint: D9:47:43:2A:BD:E7:B7:FA:90:FC:2E:6B:59:10:1B:12:80:E0:E1:C7:E4:E4:0F:A3:C6:88:7F:FF:57:A7:F4:CF
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
|
MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw
|
||||||
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU
|
||||||
d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
|
MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw
|
||||||
b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
|
MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp
|
||||||
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
|
Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA
|
||||||
cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
|
A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo
|
||||||
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
|
27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w
|
||||||
JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
|
Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw
|
||||||
mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
|
TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl
|
||||||
wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
|
qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH
|
||||||
VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
|
szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8
|
||||||
AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
|
Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk
|
||||||
AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
|
MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92
|
||||||
BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
|
wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p
|
||||||
pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
|
aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN
|
||||||
dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
|
VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID
|
||||||
fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
|
AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
||||||
NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
|
FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb
|
||||||
H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe
|
||||||
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy
|
||||||
|
h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4
|
||||||
|
7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J
|
||||||
|
ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef
|
||||||
|
MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/
|
||||||
|
Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT
|
||||||
|
6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ
|
||||||
|
0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm
|
||||||
|
2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb
|
||||||
|
bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
# Operating CA: Google Trust Services LLC
|
||||||
|
# Subject: C = US, O = Google Trust Services LLC, CN = GTS Root R2
|
||||||
|
# Issuer: C = US, O = Google Trust Services LLC, CN = GTS Root R2
|
||||||
|
# Label: "GTS Root R2"
|
||||||
|
# Serial: 0203E5AEC58D04251AAB1125AA
|
||||||
|
# MD5 Fingerprint=1E:39:C0:53:E6:1E:29:82:0B:CA:52:55:36:5D:57:DC
|
||||||
|
# SHA1 Fingerprint=9A:44:49:76:32:DB:DE:FA:D0:BC:FB:5A:7B:17:BD:9E:56:09:24:94
|
||||||
|
# SHA256 Fingerprint=8D:25:CD:97:22:9D:BF:70:35:6B:DA:4E:B3:CC:73:40:31:E2:4C:F0:0F:AF:CF:D3:2D:C7:6E:B5:84:1C:7E:A8
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw
|
||||||
|
CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU
|
||||||
|
MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw
|
||||||
|
MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp
|
||||||
|
Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA
|
||||||
|
A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt
|
||||||
|
nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY
|
||||||
|
6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu
|
||||||
|
MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k
|
||||||
|
RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg
|
||||||
|
f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV
|
||||||
|
+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo
|
||||||
|
dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW
|
||||||
|
Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa
|
||||||
|
G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq
|
||||||
|
gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID
|
||||||
|
AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
||||||
|
FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H
|
||||||
|
vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8
|
||||||
|
0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC
|
||||||
|
B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u
|
||||||
|
NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg
|
||||||
|
yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev
|
||||||
|
HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6
|
||||||
|
xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR
|
||||||
|
TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg
|
||||||
|
JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV
|
||||||
|
7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl
|
||||||
|
6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
# Operating CA: Google Trust Services LLC
|
||||||
|
# Subject: C = US, O = Google Trust Services LLC, CN = GTS Root R3
|
||||||
|
# Issuer: C = US, O = Google Trust Services LLC, CN = GTS Root R3
|
||||||
|
# Label: "GTS Root R3"
|
||||||
|
# Serial: 0203E5B882EB20F825276D3D66
|
||||||
|
# MD5 Fingerprint: 3E:E7:9D:58:02:94:46:51:94:E5:E0:22:4A:8B:E7:73
|
||||||
|
# SHA1 Fingerprint: ED:E5:71:80:2B:C8:92:B9:5B:83:3C:D2:32:68:3F:09:CD:A0:1E:46
|
||||||
|
# SHA256 Fingerprint: 34:D8:A7:3E:E2:08:D9:BC:DB:0D:95:65:20:93:4B:4E:40:E6:94:82:59:6E:8B:6F:73:C8:42:6B:01:0A:6F:48
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD
|
||||||
|
VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG
|
||||||
|
A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw
|
||||||
|
WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz
|
||||||
|
IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi
|
||||||
|
AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G
|
||||||
|
jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2
|
||||||
|
4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
|
||||||
|
BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7
|
||||||
|
VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm
|
||||||
|
ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
# Operating CA: Google Trust Services LLC
|
||||||
|
# Subject: C = US, O = Google Trust Services LLC, CN = GTS Root R4
|
||||||
|
# Issuer: C = US, O = Google Trust Services LLC, CN = GTS Root R4
|
||||||
|
# Label: "GTS Root R4"
|
||||||
|
# Serial: 0203E5C068EF631A9C72905052
|
||||||
|
# MD5 Fingerprint=43:96:83:77:19:4D:76:B3:9D:65:52:E4:1D:22:A5:E8
|
||||||
|
# SHA1 Fingerprint=77:D3:03:67:B5:E0:0C:15:F6:0C:38:61:DF:7C:E1:3B:92:46:4D:47
|
||||||
|
# SHA256 Fingerprint=34:9D:FA:40:58:C5:E2:63:12:3B:39:8A:E7:95:57:3C:4E:13:13:C8:3F:E6:8F:93:55:6C:D5:E8:03:1B:3C:7D
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD
|
||||||
|
VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG
|
||||||
|
A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw
|
||||||
|
WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz
|
||||||
|
IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi
|
||||||
|
AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi
|
||||||
|
QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR
|
||||||
|
HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
|
||||||
|
BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D
|
||||||
|
9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8
|
||||||
|
p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
# Operating CA: Google Trust Services LLC
|
||||||
|
# Subject: OU = GlobalSign ECC Root CA - R4, O = GlobalSign, CN = GlobalSign
|
||||||
|
# Issuer: OU = GlobalSign ECC Root CA - R4, O = GlobalSign, CN = GlobalSign
|
||||||
|
# Label: "GlobalSign R4"
|
||||||
|
# Serial: 0203E57EF53F93FDA50921B2A6
|
||||||
|
# MD5 Fingerprint: 26:29:F8:6D:E1:88:BF:A2:65:7F:AA:C4:CD:0F:7F:FC
|
||||||
|
# SHA1 Fingerprint: 6B:A0:B0:98:E1:71:EF:5A:AD:FE:48:15:80:77:10:F4:BD:6F:0B:28
|
||||||
|
# SHA256 Fingerprint: B0:85:D7:0B:96:4F:19:1A:73:E4:AF:0D:54:AE:7A:0E:07:AA:FD:AF:9B:71:DD:08:62:13:8A:B7:32:5A:24:A2
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD
|
||||||
|
VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh
|
||||||
|
bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw
|
||||||
|
MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g
|
||||||
|
UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT
|
||||||
|
BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx
|
||||||
|
uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV
|
||||||
|
HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/
|
||||||
|
+wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147
|
||||||
|
bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: DigiCert
|
# Operating CA: DigiCert
|
||||||
@@ -153,36 +267,6 @@ JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv
|
|||||||
6pZjamVFkpUBtA==
|
6pZjamVFkpUBtA==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: DigiCert
|
|
||||||
# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
|
|
||||||
# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
|
|
||||||
# Label: "DigiCert Global Root CA"
|
|
||||||
# Serial: 10944719598952040374951832963794454346
|
|
||||||
# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e
|
|
||||||
# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36
|
|
||||||
# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
|
|
||||||
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
|
||||||
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
|
|
||||||
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
|
|
||||||
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
|
||||||
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
|
|
||||||
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
|
|
||||||
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
|
|
||||||
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
|
|
||||||
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
|
|
||||||
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
|
|
||||||
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
|
|
||||||
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
|
|
||||||
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
|
|
||||||
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
|
|
||||||
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
|
|
||||||
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
|
|
||||||
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
|
|
||||||
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
|
||||||
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: DigiCert
|
# Operating CA: DigiCert
|
||||||
# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com
|
# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com
|
||||||
@@ -239,37 +323,6 @@ oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8
|
|||||||
sycX
|
sycX
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: DigiCert
|
|
||||||
# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com
|
|
||||||
# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com
|
|
||||||
# Label: "DigiCert High Assurance EV Root CA"
|
|
||||||
# Serial: 3553400076410547919724730734378100087
|
|
||||||
# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a
|
|
||||||
# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25
|
|
||||||
# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
|
|
||||||
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
|
||||||
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
|
|
||||||
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
|
|
||||||
MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
|
|
||||||
LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
|
|
||||||
RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
|
|
||||||
+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
|
|
||||||
PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
|
|
||||||
xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
|
|
||||||
Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
|
|
||||||
hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
|
|
||||||
EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
|
|
||||||
MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
|
|
||||||
FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
|
|
||||||
nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
|
|
||||||
eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
|
|
||||||
hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
|
|
||||||
Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
|
||||||
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
|
|
||||||
+OkuE6N36B9K
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: DigiCert
|
# Operating CA: DigiCert
|
||||||
# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com
|
# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com
|
||||||
@@ -312,36 +365,6 @@ r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1
|
|||||||
gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+
|
gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: GlobalSign
|
|
||||||
# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
|
||||||
# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA
|
|
||||||
# Label: "GlobalSign Root CA"
|
|
||||||
# Serial: 4835703278459707669005204
|
|
||||||
# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a
|
|
||||||
# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c
|
|
||||||
# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
|
|
||||||
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
|
|
||||||
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
|
|
||||||
MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
|
|
||||||
YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
|
|
||||||
aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
|
|
||||||
jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
|
|
||||||
xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
|
|
||||||
1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
|
|
||||||
snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
|
|
||||||
U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
|
|
||||||
9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
|
|
||||||
BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
|
|
||||||
AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
|
|
||||||
yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
|
|
||||||
38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
|
|
||||||
AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
|
|
||||||
DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
|
|
||||||
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: GlobalSign
|
# Operating CA: GlobalSign
|
||||||
# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
|
# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
|
||||||
# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
|
# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3
|
||||||
@@ -669,148 +692,3 @@ VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB
|
|||||||
L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG
|
L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG
|
||||||
jjxDah2nGN59PRbxYvnKkKj9
|
jjxDah2nGN59PRbxYvnKkKj9
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
# Operating CA: Google Trust Services LLC
|
|
||||||
# Subject: C = US, O = Google Trust Services LLC, CN = GTS Root R1
|
|
||||||
# Issuer: C = US, O = Google Trust Services LLC, CN = GTS Root R1
|
|
||||||
# Label: "GTS Root R1"
|
|
||||||
# Serial: 0203E5936F31B01349886BA217
|
|
||||||
# MD5 Fingerprint: 05:FE:D0:BF:71:A8:A3:76:63:DA:01:E0:D8:52:DC:40
|
|
||||||
# SHA1 Fingerprint: E5:8C:1C:C4:91:3B:38:63:4B:E9:10:6E:E3:AD:8E:6B:9D:D9:81:4A
|
|
||||||
# SHA256 Fingerprint: D9:47:43:2A:BD:E7:B7:FA:90:FC:2E:6B:59:10:1B:12:80:E0:E1:C7:E4:E4:0F:A3:C6:88:7F:FF:57:A7:F4:CF
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw
|
|
||||||
CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU
|
|
||||||
MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw
|
|
||||||
MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp
|
|
||||||
Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA
|
|
||||||
A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo
|
|
||||||
27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w
|
|
||||||
Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw
|
|
||||||
TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl
|
|
||||||
qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH
|
|
||||||
szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8
|
|
||||||
Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk
|
|
||||||
MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92
|
|
||||||
wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p
|
|
||||||
aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN
|
|
||||||
VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID
|
|
||||||
AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
|
||||||
FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb
|
|
||||||
C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe
|
|
||||||
QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy
|
|
||||||
h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4
|
|
||||||
7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J
|
|
||||||
ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef
|
|
||||||
MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/
|
|
||||||
Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT
|
|
||||||
6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ
|
|
||||||
0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm
|
|
||||||
2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb
|
|
||||||
bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Google Trust Services LLC
|
|
||||||
# Subject: C = US, O = Google Trust Services LLC, CN = GTS Root R2
|
|
||||||
# Issuer: C = US, O = Google Trust Services LLC, CN = GTS Root R2
|
|
||||||
# Label: "GTS Root R2"
|
|
||||||
# Serial: 0203E5AEC58D04251AAB1125AA
|
|
||||||
# MD5 Fingerprint=1E:39:C0:53:E6:1E:29:82:0B:CA:52:55:36:5D:57:DC
|
|
||||||
# SHA1 Fingerprint=9A:44:49:76:32:DB:DE:FA:D0:BC:FB:5A:7B:17:BD:9E:56:09:24:94
|
|
||||||
# SHA256 Fingerprint=8D:25:CD:97:22:9D:BF:70:35:6B:DA:4E:B3:CC:73:40:31:E2:4C:F0:0F:AF:CF:D3:2D:C7:6E:B5:84:1C:7E:A8
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw
|
|
||||||
CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU
|
|
||||||
MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw
|
|
||||||
MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp
|
|
||||||
Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA
|
|
||||||
A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt
|
|
||||||
nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY
|
|
||||||
6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu
|
|
||||||
MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k
|
|
||||||
RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg
|
|
||||||
f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV
|
|
||||||
+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo
|
|
||||||
dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW
|
|
||||||
Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa
|
|
||||||
G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq
|
|
||||||
gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID
|
|
||||||
AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
|
||||||
FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H
|
|
||||||
vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8
|
|
||||||
0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC
|
|
||||||
B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u
|
|
||||||
NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg
|
|
||||||
yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev
|
|
||||||
HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6
|
|
||||||
xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR
|
|
||||||
TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg
|
|
||||||
JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV
|
|
||||||
7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl
|
|
||||||
6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Google Trust Services LLC
|
|
||||||
# Subject: C = US, O = Google Trust Services LLC, CN = GTS Root R3
|
|
||||||
# Issuer: C = US, O = Google Trust Services LLC, CN = GTS Root R3
|
|
||||||
# Label: "GTS Root R3"
|
|
||||||
# Serial: 0203E5B882EB20F825276D3D66
|
|
||||||
# MD5 Fingerprint: 3E:E7:9D:58:02:94:46:51:94:E5:E0:22:4A:8B:E7:73
|
|
||||||
# SHA1 Fingerprint: ED:E5:71:80:2B:C8:92:B9:5B:83:3C:D2:32:68:3F:09:CD:A0:1E:46
|
|
||||||
# SHA256 Fingerprint: 34:D8:A7:3E:E2:08:D9:BC:DB:0D:95:65:20:93:4B:4E:40:E6:94:82:59:6E:8B:6F:73:C8:42:6B:01:0A:6F:48
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD
|
|
||||||
VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG
|
|
||||||
A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw
|
|
||||||
WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz
|
|
||||||
IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi
|
|
||||||
AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G
|
|
||||||
jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2
|
|
||||||
4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
|
|
||||||
BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7
|
|
||||||
VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm
|
|
||||||
ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Google Trust Services LLC
|
|
||||||
# Subject: C = US, O = Google Trust Services LLC, CN = GTS Root R4
|
|
||||||
# Issuer: C = US, O = Google Trust Services LLC, CN = GTS Root R4
|
|
||||||
# Label: "GTS Root R4"
|
|
||||||
# Serial: 0203E5C068EF631A9C72905052
|
|
||||||
# MD5 Fingerprint=43:96:83:77:19:4D:76:B3:9D:65:52:E4:1D:22:A5:E8
|
|
||||||
# SHA1 Fingerprint=77:D3:03:67:B5:E0:0C:15:F6:0C:38:61:DF:7C:E1:3B:92:46:4D:47
|
|
||||||
# SHA256 Fingerprint=34:9D:FA:40:58:C5:E2:63:12:3B:39:8A:E7:95:57:3C:4E:13:13:C8:3F:E6:8F:93:55:6C:D5:E8:03:1B:3C:7D
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD
|
|
||||||
VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG
|
|
||||||
A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw
|
|
||||||
WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz
|
|
||||||
IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi
|
|
||||||
AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi
|
|
||||||
QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR
|
|
||||||
HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
|
|
||||||
BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D
|
|
||||||
9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8
|
|
||||||
p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
# Operating CA: Google Trust Services LLC
|
|
||||||
# Subject: OU = GlobalSign ECC Root CA - R4, O = GlobalSign, CN = GlobalSign
|
|
||||||
# Issuer: OU = GlobalSign ECC Root CA - R4, O = GlobalSign, CN = GlobalSign
|
|
||||||
# Label: "GlobalSign R4"
|
|
||||||
# Serial: 0203E57EF53F93FDA50921B2A6
|
|
||||||
# MD5 Fingerprint: 26:29:F8:6D:E1:88:BF:A2:65:7F:AA:C4:CD:0F:7F:FC
|
|
||||||
# SHA1 Fingerprint: 6B:A0:B0:98:E1:71:EF:5A:AD:FE:48:15:80:77:10:F4:BD:6F:0B:28
|
|
||||||
# SHA256 Fingerprint: B0:85:D7:0B:96:4F:19:1A:73:E4:AF:0D:54:AE:7A:0E:07:AA:FD:AF:9B:71:DD:08:62:13:8A:B7:32:5A:24:A2
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD
|
|
||||||
VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh
|
|
||||||
bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw
|
|
||||||
MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g
|
|
||||||
UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT
|
|
||||||
BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx
|
|
||||||
uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV
|
|
||||||
HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/
|
|
||||||
+wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147
|
|
||||||
bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ class GamAction():
|
|||||||
UNZIP = 'unzi'
|
UNZIP = 'unzi'
|
||||||
USE = 'use '
|
USE = 'use '
|
||||||
VERIFY = 'vrfy'
|
VERIFY = 'vrfy'
|
||||||
|
VERIFYITEMEXISTS = 'vexi'
|
||||||
WAITFORMAILBOX = 'wamb'
|
WAITFORMAILBOX = 'wamb'
|
||||||
WATCH = 'watc'
|
WATCH = 'watc'
|
||||||
WIPE = 'wipe'
|
WIPE = 'wipe'
|
||||||
@@ -253,6 +254,7 @@ class GamAction():
|
|||||||
UPLOAD: ['Uploaded', 'Upload'],
|
UPLOAD: ['Uploaded', 'Upload'],
|
||||||
USE: ['Used', 'Use'],
|
USE: ['Used', 'Use'],
|
||||||
VERIFY: ['Verified', 'Verify'],
|
VERIFY: ['Verified', 'Verify'],
|
||||||
|
VERIFYITEMEXISTS: ['Verified Item Exists', 'Verify Item Exists'],
|
||||||
WAITFORMAILBOX: ['Mailbox is Setup', 'Check Mailbox is Setup'],
|
WAITFORMAILBOX: ['Mailbox is Setup', 'Check Mailbox is Setup'],
|
||||||
WATCH: ['Watched', 'Watch'],
|
WATCH: ['Watched', 'Watch'],
|
||||||
WIPE: ['Wiped', 'Wipe'],
|
WIPE: ['Wiped', 'Wipe'],
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ CLOUDIDENTITY_INBOUND_SSO = 'cloudidentityinboundsso'
|
|||||||
CLOUDIDENTITY_ORGUNITS = 'cloudidentityorgunits'
|
CLOUDIDENTITY_ORGUNITS = 'cloudidentityorgunits'
|
||||||
CLOUDIDENTITY_ORGUNITS_BETA = 'cloudidentityorgunitsbeta'
|
CLOUDIDENTITY_ORGUNITS_BETA = 'cloudidentityorgunitsbeta'
|
||||||
CLOUDIDENTITY_POLICY = 'cloudidentitypolicy'
|
CLOUDIDENTITY_POLICY = 'cloudidentitypolicy'
|
||||||
CLOUDIDENTITY_POLICY_BETA = 'cloudidentitypolicybeta'
|
|
||||||
CLOUDIDENTITY_USERINVITATIONS = 'cloudidentityuserinvitations'
|
CLOUDIDENTITY_USERINVITATIONS = 'cloudidentityuserinvitations'
|
||||||
CLOUDRESOURCEMANAGER = 'cloudresourcemanager'
|
CLOUDRESOURCEMANAGER = 'cloudresourcemanager'
|
||||||
CLOUDRESOURCEMANAGERV1 = 'cloudresourcemanagerv1'
|
CLOUDRESOURCEMANAGERV1 = 'cloudresourcemanagerv1'
|
||||||
@@ -261,7 +260,6 @@ _INFO = {
|
|||||||
CLOUDIDENTITY_ORGUNITS: {'name': 'Cloud Identity API - OrgUnits', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
CLOUDIDENTITY_ORGUNITS: {'name': 'Cloud Identity API - OrgUnits', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||||
CLOUDIDENTITY_ORGUNITS_BETA: {'name': 'Cloud Identity API - OrgUnits Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
CLOUDIDENTITY_ORGUNITS_BETA: {'name': 'Cloud Identity API - OrgUnits Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||||
CLOUDIDENTITY_POLICY: {'name': 'Cloud Identity API - Policy', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
CLOUDIDENTITY_POLICY: {'name': 'Cloud Identity API - Policy', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||||
CLOUDIDENTITY_POLICY_BETA: {'name': 'Cloud Identity API - Policy Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
||||||
CLOUDIDENTITY_USERINVITATIONS: {'name': 'Cloud Identity API - User Invitations', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
CLOUDIDENTITY_USERINVITATIONS: {'name': 'Cloud Identity API - User Invitations', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
||||||
CLOUDRESOURCEMANAGER: {'name': 'Resource Manager API v3', 'version': 'v3', 'v2discovery': True},
|
CLOUDRESOURCEMANAGER: {'name': 'Resource Manager API v3', 'version': 'v3', 'v2discovery': True},
|
||||||
CLOUDRESOURCEMANAGERV1: {'name': 'Resource Manager API v1', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudresourcemanager'},
|
CLOUDRESOURCEMANAGERV1: {'name': 'Resource Manager API v1', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudresourcemanager'},
|
||||||
@@ -405,10 +403,6 @@ _CLIENT_SCOPES = [
|
|||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'roByDefault': True,
|
'roByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
||||||
{'name': 'Cloud Identity API - Policy Beta',
|
|
||||||
'api': CLOUDIDENTITY_POLICY_BETA,
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
|
||||||
{'name': 'Cloud Identity API - User Invitations',
|
{'name': 'Cloud Identity API - User Invitations',
|
||||||
'api': CLOUDIDENTITY_USERINVITATIONS,
|
'api': CLOUDIDENTITY_USERINVITATIONS,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
@@ -641,10 +635,6 @@ _SVCACCT_SCOPES = [
|
|||||||
# 'subscopes': READONLY,
|
# 'subscopes': READONLY,
|
||||||
# 'roByDefault': True,
|
# 'roByDefault': True,
|
||||||
# 'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
# 'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
||||||
# {'name': 'Cloud Identity API - Policy Beta',
|
|
||||||
# 'api': CLOUDIDENTITY_POLICY_BETA,
|
|
||||||
# 'offByDefault': True,
|
|
||||||
# 'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
|
||||||
# {'name': 'Cloud Identity User Invitations API',
|
# {'name': 'Cloud Identity User Invitations API',
|
||||||
# 'api': CLOUDIDENTITY_USERINVITATIONS,
|
# 'api': CLOUDIDENTITY_USERINVITATIONS,
|
||||||
# 'subscopes': READONLY,
|
# 'subscopes': READONLY,
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ class GamCLArgs():
|
|||||||
ENTITY_DOMAINS_ARCH = 'domains_arch'
|
ENTITY_DOMAINS_ARCH = 'domains_arch'
|
||||||
ENTITY_DOMAINS_NS = 'domains_ns'
|
ENTITY_DOMAINS_NS = 'domains_ns'
|
||||||
ENTITY_DOMAINS_SUSP = 'domains_susp'
|
ENTITY_DOMAINS_SUSP = 'domains_susp'
|
||||||
|
ENTITY_DOMAINS_NS_SUSP = 'domains_ns_susp'
|
||||||
ENTITY_DOMAINS_NA_NS = 'domains_na_ns'
|
ENTITY_DOMAINS_NA_NS = 'domains_na_ns'
|
||||||
ENTITY_GROUP = 'group'
|
ENTITY_GROUP = 'group'
|
||||||
ENTITY_GROUP_INDE = 'group_inde'
|
ENTITY_GROUP_INDE = 'group_inde'
|
||||||
@@ -60,6 +61,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUP_ARCH = 'group_arch'
|
ENTITY_GROUP_ARCH = 'group_arch'
|
||||||
ENTITY_GROUP_NS = 'group_ns'
|
ENTITY_GROUP_NS = 'group_ns'
|
||||||
ENTITY_GROUP_SUSP = 'group_susp'
|
ENTITY_GROUP_SUSP = 'group_susp'
|
||||||
|
ENTITY_GROUP_NS_SUSP = 'group_ns_susp'
|
||||||
ENTITY_GROUP_NA_NS = 'group_na_ns'
|
ENTITY_GROUP_NA_NS = 'group_na_ns'
|
||||||
ENTITY_GROUPS = 'groups'
|
ENTITY_GROUPS = 'groups'
|
||||||
ENTITY_GROUPS_INDE = 'groups_inde'
|
ENTITY_GROUPS_INDE = 'groups_inde'
|
||||||
@@ -67,12 +69,14 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUPS_ARCH = 'groups_arch'
|
ENTITY_GROUPS_ARCH = 'groups_arch'
|
||||||
ENTITY_GROUPS_NS = 'groups_ns'
|
ENTITY_GROUPS_NS = 'groups_ns'
|
||||||
ENTITY_GROUPS_SUSP = 'groups_susp'
|
ENTITY_GROUPS_SUSP = 'groups_susp'
|
||||||
|
ENTITY_GROUPS_NS_SUSP = 'groups_ns_susp'
|
||||||
ENTITY_GROUPS_NA_NS = 'groups_na_ns'
|
ENTITY_GROUPS_NA_NS = 'groups_na_ns'
|
||||||
ENTITY_GROUP_USERS = 'group_users'
|
ENTITY_GROUP_USERS = 'group_users'
|
||||||
ENTITY_GROUP_USERS_NA = 'group_users_na'
|
ENTITY_GROUP_USERS_NA = 'group_users_na'
|
||||||
ENTITY_GROUP_USERS_ARCH = 'group_users_arch'
|
ENTITY_GROUP_USERS_ARCH = 'group_users_arch'
|
||||||
ENTITY_GROUP_USERS_NS = 'group_users_ns'
|
ENTITY_GROUP_USERS_NS = 'group_users_ns'
|
||||||
ENTITY_GROUP_USERS_SUSP = 'group_users_susp'
|
ENTITY_GROUP_USERS_SUSP = 'group_users_susp'
|
||||||
|
ENTITY_GROUP_USERS_NS_SUSP = 'group_users_ns_susp'
|
||||||
ENTITY_GROUP_USERS_NA_NS = 'group_users_na_ns'
|
ENTITY_GROUP_USERS_NA_NS = 'group_users_na_ns'
|
||||||
ENTITY_GROUP_USERS_SELECT = 'group_users_select'
|
ENTITY_GROUP_USERS_SELECT = 'group_users_select'
|
||||||
ENTITY_LICENSES = 'licenses'
|
ENTITY_LICENSES = 'licenses'
|
||||||
@@ -82,24 +86,28 @@ class GamCLArgs():
|
|||||||
ENTITY_OU_ARCH = 'ou_arch'
|
ENTITY_OU_ARCH = 'ou_arch'
|
||||||
ENTITY_OU_NS = 'ou_ns'
|
ENTITY_OU_NS = 'ou_ns'
|
||||||
ENTITY_OU_SUSP = 'ou_susp'
|
ENTITY_OU_SUSP = 'ou_susp'
|
||||||
|
ENTITY_OU_NS_SUSP = 'ou_ns_susp'
|
||||||
ENTITY_OU_NA_NS = 'ou_na_ns'
|
ENTITY_OU_NA_NS = 'ou_na_ns'
|
||||||
ENTITY_OU_AND_CHILDREN = 'ou_and_children'
|
ENTITY_OU_AND_CHILDREN = 'ou_and_children'
|
||||||
ENTITY_OU_AND_CHILDREN_NA = 'ou_and_children_na'
|
ENTITY_OU_AND_CHILDREN_NA = 'ou_and_children_na'
|
||||||
ENTITY_OU_AND_CHILDREN_ARCH = 'ou_and_children_arch'
|
ENTITY_OU_AND_CHILDREN_ARCH = 'ou_and_children_arch'
|
||||||
ENTITY_OU_AND_CHILDREN_NS = 'ou_and_children_ns'
|
ENTITY_OU_AND_CHILDREN_NS = 'ou_and_children_ns'
|
||||||
ENTITY_OU_AND_CHILDREN_SUSP = 'ou_and_children_susp'
|
ENTITY_OU_AND_CHILDREN_SUSP = 'ou_and_children_susp'
|
||||||
|
ENTITY_OU_AND_CHILDREN_NS_SUSP = 'ou_and_children_ns_susp'
|
||||||
ENTITY_OU_AND_CHILDREN_NA_NS = 'ou_and_children_na_ns'
|
ENTITY_OU_AND_CHILDREN_NA_NS = 'ou_and_children_na_ns'
|
||||||
ENTITY_OUS = 'ous'
|
ENTITY_OUS = 'ous'
|
||||||
ENTITY_OUS_NA = 'ous_na'
|
ENTITY_OUS_NA = 'ous_na'
|
||||||
ENTITY_OUS_ARCH = 'ous_arch'
|
ENTITY_OUS_ARCH = 'ous_arch'
|
||||||
ENTITY_OUS_NS = 'ous_ns'
|
ENTITY_OUS_NS = 'ous_ns'
|
||||||
ENTITY_OUS_SUSP = 'ous_susp'
|
ENTITY_OUS_SUSP = 'ous_susp'
|
||||||
|
ENTITY_OUS_NS_SUSP = 'ous_ns_susp'
|
||||||
ENTITY_OUS_NA_NS = 'ous_na_ns'
|
ENTITY_OUS_NA_NS = 'ous_na_ns'
|
||||||
ENTITY_OUS_AND_CHILDREN = 'ous_and_children'
|
ENTITY_OUS_AND_CHILDREN = 'ous_and_children'
|
||||||
ENTITY_OUS_AND_CHILDREN_NA = 'ous_and_children_na'
|
ENTITY_OUS_AND_CHILDREN_NA = 'ous_and_children_na'
|
||||||
ENTITY_OUS_AND_CHILDREN_ARCH = 'ous_and_children_arch'
|
ENTITY_OUS_AND_CHILDREN_ARCH = 'ous_and_children_arch'
|
||||||
ENTITY_OUS_AND_CHILDREN_NS = 'ous_and_children_ns'
|
ENTITY_OUS_AND_CHILDREN_NS = 'ous_and_children_ns'
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP = 'ous_and_children_susp'
|
ENTITY_OUS_AND_CHILDREN_SUSP = 'ous_and_children_susp'
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS_SUSP = 'ous_and_children_ns_susp'
|
||||||
ENTITY_OUS_AND_CHILDREN_NA_NS = 'ous_and_children_na_ns'
|
ENTITY_OUS_AND_CHILDREN_NA_NS = 'ous_and_children_na_ns'
|
||||||
ENTITY_QUERIES = 'queries'
|
ENTITY_QUERIES = 'queries'
|
||||||
ENTITY_QUERY = 'query'
|
ENTITY_QUERY = 'query'
|
||||||
@@ -111,9 +119,17 @@ class GamCLArgs():
|
|||||||
ENTITY_USERS_ARCH = 'users_arch'
|
ENTITY_USERS_ARCH = 'users_arch'
|
||||||
ENTITY_USERS_NS = 'users_ns'
|
ENTITY_USERS_NS = 'users_ns'
|
||||||
ENTITY_USERS_SUSP = 'users_susp'
|
ENTITY_USERS_SUSP = 'users_susp'
|
||||||
|
ENTITY_USERS_NS_SUSP = 'users_ns_susp'
|
||||||
ENTITY_USERS_NA_NS = 'users_na_ns'
|
ENTITY_USERS_NA_NS = 'users_na_ns'
|
||||||
ENTITY_USERS_ARCH_OR_SUSP = 'users_arch_or_susp'
|
ENTITY_USERS_ARCH_OR_SUSP = 'users_arch_or_susp'
|
||||||
ENTITY_USERS_NS_SUSP = 'users_ns_susp'
|
ENTITY_USERS_AND_GUESTS = 'users_and_guests'
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS = 'users_and_guests_ns'
|
||||||
|
ENTITY_USERS_AND_GUESTS_SUSP = 'users_and_guests_susp'
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS_SUSP = 'users_and_guests_ns_susp'
|
||||||
|
ENTITY_GUESTS = 'guests'
|
||||||
|
ENTITY_GUESTS_NS = 'guests_ns'
|
||||||
|
ENTITY_GUESTS_SUSP = 'guests_susp'
|
||||||
|
ENTITY_GUESTS_NS_SUSP = 'guests_ns_susp'
|
||||||
#
|
#
|
||||||
BROWSER_ENTITIES = [
|
BROWSER_ENTITIES = [
|
||||||
ENTITY_BROWSER,
|
ENTITY_BROWSER,
|
||||||
@@ -150,6 +166,7 @@ class GamCLArgs():
|
|||||||
ENTITY_DOMAINS_ARCH,
|
ENTITY_DOMAINS_ARCH,
|
||||||
ENTITY_DOMAINS_NS,
|
ENTITY_DOMAINS_NS,
|
||||||
ENTITY_DOMAINS_SUSP,
|
ENTITY_DOMAINS_SUSP,
|
||||||
|
ENTITY_DOMAINS_NS_SUSP,
|
||||||
ENTITY_DOMAINS_NA_NS,
|
ENTITY_DOMAINS_NA_NS,
|
||||||
ENTITY_GROUP,
|
ENTITY_GROUP,
|
||||||
ENTITY_GROUP_INDE,
|
ENTITY_GROUP_INDE,
|
||||||
@@ -157,6 +174,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUP_ARCH,
|
ENTITY_GROUP_ARCH,
|
||||||
ENTITY_GROUP_NS,
|
ENTITY_GROUP_NS,
|
||||||
ENTITY_GROUP_SUSP,
|
ENTITY_GROUP_SUSP,
|
||||||
|
ENTITY_GROUP_NS_SUSP,
|
||||||
ENTITY_GROUP_NA_NS,
|
ENTITY_GROUP_NA_NS,
|
||||||
ENTITY_GROUPS,
|
ENTITY_GROUPS,
|
||||||
ENTITY_GROUPS_INDE,
|
ENTITY_GROUPS_INDE,
|
||||||
@@ -164,12 +182,14 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUPS_ARCH,
|
ENTITY_GROUPS_ARCH,
|
||||||
ENTITY_GROUPS_NS,
|
ENTITY_GROUPS_NS,
|
||||||
ENTITY_GROUPS_SUSP,
|
ENTITY_GROUPS_SUSP,
|
||||||
|
ENTITY_GROUPS_NS_SUSP,
|
||||||
ENTITY_GROUPS_NA_NS,
|
ENTITY_GROUPS_NA_NS,
|
||||||
ENTITY_GROUP_USERS,
|
ENTITY_GROUP_USERS,
|
||||||
ENTITY_GROUP_USERS_NA,
|
ENTITY_GROUP_USERS_NA,
|
||||||
ENTITY_GROUP_USERS_ARCH,
|
ENTITY_GROUP_USERS_ARCH,
|
||||||
ENTITY_GROUP_USERS_NS,
|
ENTITY_GROUP_USERS_NS,
|
||||||
ENTITY_GROUP_USERS_SUSP,
|
ENTITY_GROUP_USERS_SUSP,
|
||||||
|
ENTITY_GROUP_USERS_NS_SUSP,
|
||||||
ENTITY_GROUP_USERS_NA_NS,
|
ENTITY_GROUP_USERS_NA_NS,
|
||||||
ENTITY_GROUP_USERS_SELECT,
|
ENTITY_GROUP_USERS_SELECT,
|
||||||
ENTITY_LICENSES,
|
ENTITY_LICENSES,
|
||||||
@@ -179,24 +199,28 @@ class GamCLArgs():
|
|||||||
ENTITY_OU_ARCH,
|
ENTITY_OU_ARCH,
|
||||||
ENTITY_OU_NS,
|
ENTITY_OU_NS,
|
||||||
ENTITY_OU_SUSP,
|
ENTITY_OU_SUSP,
|
||||||
|
ENTITY_OU_NS_SUSP,
|
||||||
ENTITY_OU_NA_NS,
|
ENTITY_OU_NA_NS,
|
||||||
ENTITY_OU_AND_CHILDREN,
|
ENTITY_OU_AND_CHILDREN,
|
||||||
ENTITY_OU_AND_CHILDREN_NA,
|
ENTITY_OU_AND_CHILDREN_NA,
|
||||||
ENTITY_OU_AND_CHILDREN_ARCH,
|
ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
ENTITY_OU_AND_CHILDREN_NS,
|
ENTITY_OU_AND_CHILDREN_NS,
|
||||||
ENTITY_OU_AND_CHILDREN_SUSP,
|
ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OU_AND_CHILDREN_NS_SUSP,
|
||||||
ENTITY_OU_AND_CHILDREN_NA_NS,
|
ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
ENTITY_OUS,
|
ENTITY_OUS,
|
||||||
ENTITY_OUS_NA,
|
ENTITY_OUS_NA,
|
||||||
ENTITY_OUS_ARCH,
|
ENTITY_OUS_ARCH,
|
||||||
ENTITY_OUS_NS,
|
ENTITY_OUS_NS,
|
||||||
ENTITY_OUS_SUSP,
|
ENTITY_OUS_SUSP,
|
||||||
|
ENTITY_OUS_NS_SUSP,
|
||||||
ENTITY_OUS_NA_NS,
|
ENTITY_OUS_NA_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN,
|
ENTITY_OUS_AND_CHILDREN,
|
||||||
ENTITY_OUS_AND_CHILDREN_NA,
|
ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
ENTITY_OUS_AND_CHILDREN_ARCH,
|
ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
ENTITY_OUS_AND_CHILDREN_NS,
|
ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP,
|
ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
ENTITY_QUERIES,
|
ENTITY_QUERIES,
|
||||||
ENTITY_QUERY,
|
ENTITY_QUERY,
|
||||||
@@ -278,48 +302,56 @@ class GamCLArgs():
|
|||||||
'org_arch': ENTITY_OU_ARCH,
|
'org_arch': ENTITY_OU_ARCH,
|
||||||
'org_ns': ENTITY_OU_NS,
|
'org_ns': ENTITY_OU_NS,
|
||||||
'org_susp': ENTITY_OU_SUSP,
|
'org_susp': ENTITY_OU_SUSP,
|
||||||
|
'org_ns_susp': ENTITY_OU_NS_SUSP,
|
||||||
'org_na_ns': ENTITY_OU_NA_NS,
|
'org_na_ns': ENTITY_OU_NA_NS,
|
||||||
'org_and_child': ENTITY_OU_AND_CHILDREN,
|
'org_and_child': ENTITY_OU_AND_CHILDREN,
|
||||||
'org_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
|
'org_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
|
||||||
'org_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
'org_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
'org_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
'org_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
||||||
'org_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
'org_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
'org_and_child_ns_susp': ENTITY_OU_AND_CHILDREN_NS_SUSP,
|
||||||
'org_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
'org_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
'org_and_children': ENTITY_OU_AND_CHILDREN,
|
'org_and_children': ENTITY_OU_AND_CHILDREN,
|
||||||
'org_and_children_na': ENTITY_OU_AND_CHILDREN_NA,
|
'org_and_children_na': ENTITY_OU_AND_CHILDREN_NA,
|
||||||
'org_and_children_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
'org_and_children_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
'org_and_children_ns': ENTITY_OU_AND_CHILDREN_NS,
|
'org_and_children_ns': ENTITY_OU_AND_CHILDREN_NS,
|
||||||
'org_and_children_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
'org_and_children_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
'org_and_children_ns_susp': ENTITY_OU_AND_CHILDREN_NS_SUSP,
|
||||||
'org_and_children_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
'org_and_children_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
'orgs': ENTITY_OUS,
|
'orgs': ENTITY_OUS,
|
||||||
'orgs_na': ENTITY_OUS_NA,
|
'orgs_na': ENTITY_OUS_NA,
|
||||||
'orgs_arch': ENTITY_OUS_ARCH,
|
'orgs_arch': ENTITY_OUS_ARCH,
|
||||||
'orgs_ns': ENTITY_OUS_NS,
|
'orgs_ns': ENTITY_OUS_NS,
|
||||||
'orgs_susp': ENTITY_OUS_SUSP,
|
'orgs_susp': ENTITY_OUS_SUSP,
|
||||||
|
'orgs_ns_susp': ENTITY_OUS_NS_SUSP,
|
||||||
'orgs_na_ns': ENTITY_OUS_NA_NS,
|
'orgs_na_ns': ENTITY_OUS_NA_NS,
|
||||||
'orgs_and_child': ENTITY_OUS_AND_CHILDREN,
|
'orgs_and_child': ENTITY_OUS_AND_CHILDREN,
|
||||||
'orgs_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
|
'orgs_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
'orgs_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
'orgs_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
'orgs_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
'orgs_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
'orgs_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
'orgs_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
'orgs_and_child_ns_susp': ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
'orgs_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
'orgs_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
'orgs_and_children': ENTITY_OUS_AND_CHILDREN,
|
'orgs_and_children': ENTITY_OUS_AND_CHILDREN,
|
||||||
'orgs_and_children_na': ENTITY_OUS_AND_CHILDREN_NA,
|
'orgs_and_children_na': ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
'orgs_and_children_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
'orgs_and_children_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
'orgs_and_children_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
'orgs_and_children_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
'orgs_and_children_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
'orgs_and_children_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
'orgs_and_children_ns_susp': ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
'orgs_and_children_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
'orgs_and_children_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
'ou_and_child': ENTITY_OU_AND_CHILDREN,
|
'ou_and_child': ENTITY_OU_AND_CHILDREN,
|
||||||
'ou_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
|
'ou_and_child_na': ENTITY_OU_AND_CHILDREN_NA,
|
||||||
'ou_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
'ou_and_child_arch': ENTITY_OU_AND_CHILDREN_ARCH,
|
||||||
'ou_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
'ou_and_child_ns': ENTITY_OU_AND_CHILDREN_NS,
|
||||||
'ou_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
'ou_and_child_susp': ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
'ou_and_child_ns_susp': ENTITY_OU_AND_CHILDREN_NS_SUSP,
|
||||||
'ou_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
'ou_and_child_na_ns': ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
'ous_and_child': ENTITY_OUS_AND_CHILDREN,
|
'ous_and_child': ENTITY_OUS_AND_CHILDREN,
|
||||||
'ous_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
|
'ous_and_child_na': ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
'ous_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
'ous_and_child_arch': ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
'ous_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
'ous_and_child_ns': ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
'ous_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
'ous_and_child_susp': ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
'ous_and_child_ns_susp': ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
'ous_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
'ous_and_child_na_ns': ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
}
|
}
|
||||||
# CL entity source selectors
|
# CL entity source selectors
|
||||||
@@ -395,9 +427,17 @@ class GamCLArgs():
|
|||||||
ENTITY_USERS_ARCH,
|
ENTITY_USERS_ARCH,
|
||||||
ENTITY_USERS_NS,
|
ENTITY_USERS_NS,
|
||||||
ENTITY_USERS_SUSP,
|
ENTITY_USERS_SUSP,
|
||||||
|
ENTITY_USERS_NS_SUSP,
|
||||||
ENTITY_USERS_ARCH_OR_SUSP,
|
ENTITY_USERS_ARCH_OR_SUSP,
|
||||||
ENTITY_USERS_NA_NS,
|
ENTITY_USERS_NA_NS,
|
||||||
ENTITY_USERS_NS_SUSP,
|
ENTITY_USERS_AND_GUESTS,
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS,
|
||||||
|
ENTITY_USERS_AND_GUESTS_SUSP,
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS_SUSP,
|
||||||
|
ENTITY_GUESTS,
|
||||||
|
ENTITY_GUESTS_NS,
|
||||||
|
ENTITY_GUESTS_SUSP,
|
||||||
|
ENTITY_GUESTS_NS_SUSP,
|
||||||
]
|
]
|
||||||
#
|
#
|
||||||
ENTITY_ALL_CROS = ENTITY_SELECTOR_ALL+' '+ENTITY_CROS
|
ENTITY_ALL_CROS = ENTITY_SELECTOR_ALL+' '+ENTITY_CROS
|
||||||
@@ -406,9 +446,17 @@ class GamCLArgs():
|
|||||||
ENTITY_ALL_USERS_ARCH = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH
|
ENTITY_ALL_USERS_ARCH = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH
|
||||||
ENTITY_ALL_USERS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS
|
ENTITY_ALL_USERS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS
|
||||||
ENTITY_ALL_USERS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_SUSP
|
ENTITY_ALL_USERS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_SUSP
|
||||||
|
ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP
|
||||||
ENTITY_ALL_USERS_NA_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NA_NS
|
ENTITY_ALL_USERS_NA_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NA_NS
|
||||||
ENTITY_ALL_USERS_ARCH_OR_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH_OR_SUSP
|
ENTITY_ALL_USERS_ARCH_OR_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_ARCH_OR_SUSP
|
||||||
ENTITY_ALL_USERS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_NS_SUSP
|
ENTITY_ALL_USERS_AND_GUESTS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_NS
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_SUSP
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_USERS_AND_GUESTS_NS_SUSP
|
||||||
|
ENTITY_ALL_GUESTS = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS
|
||||||
|
ENTITY_ALL_GUESTS_NS = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS_NS
|
||||||
|
ENTITY_ALL_GUESTS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS_SUSP
|
||||||
|
ENTITY_ALL_GUESTS_NS_SUSP = ENTITY_SELECTOR_ALL+' '+ENTITY_GUESTS_NS_SUSP
|
||||||
#
|
#
|
||||||
ALL_USER_ENTITY_TYPES = {
|
ALL_USER_ENTITY_TYPES = {
|
||||||
ENTITY_ALL_USERS,
|
ENTITY_ALL_USERS,
|
||||||
@@ -416,8 +464,16 @@ class GamCLArgs():
|
|||||||
ENTITY_ALL_USERS_ARCH,
|
ENTITY_ALL_USERS_ARCH,
|
||||||
ENTITY_ALL_USERS_NS,
|
ENTITY_ALL_USERS_NS,
|
||||||
ENTITY_ALL_USERS_SUSP,
|
ENTITY_ALL_USERS_SUSP,
|
||||||
ENTITY_ALL_USERS_NA_NS,
|
|
||||||
ENTITY_ALL_USERS_NS_SUSP,
|
ENTITY_ALL_USERS_NS_SUSP,
|
||||||
|
ENTITY_ALL_USERS_NA_NS,
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS,
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS,
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_SUSP,
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP,
|
||||||
|
ENTITY_ALL_GUESTS,
|
||||||
|
ENTITY_ALL_GUESTS_NS,
|
||||||
|
ENTITY_ALL_GUESTS_SUSP,
|
||||||
|
ENTITY_ALL_GUESTS_NS_SUSP,
|
||||||
}
|
}
|
||||||
DOMAIN_ENTITY_TYPES = {
|
DOMAIN_ENTITY_TYPES = {
|
||||||
ENTITY_DOMAINS,
|
ENTITY_DOMAINS,
|
||||||
@@ -425,6 +481,7 @@ class GamCLArgs():
|
|||||||
ENTITY_DOMAINS_ARCH,
|
ENTITY_DOMAINS_ARCH,
|
||||||
ENTITY_DOMAINS_NS,
|
ENTITY_DOMAINS_NS,
|
||||||
ENTITY_DOMAINS_SUSP,
|
ENTITY_DOMAINS_SUSP,
|
||||||
|
ENTITY_DOMAINS_NS_SUSP,
|
||||||
ENTITY_DOMAINS_NA_NS,
|
ENTITY_DOMAINS_NA_NS,
|
||||||
}
|
}
|
||||||
GROUP_ENTITY_TYPES = {
|
GROUP_ENTITY_TYPES = {
|
||||||
@@ -433,6 +490,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUP_ARCH,
|
ENTITY_GROUP_ARCH,
|
||||||
ENTITY_GROUP_NS,
|
ENTITY_GROUP_NS,
|
||||||
ENTITY_GROUP_SUSP,
|
ENTITY_GROUP_SUSP,
|
||||||
|
ENTITY_GROUP_NS_SUSP,
|
||||||
ENTITY_GROUP_NA_NS,
|
ENTITY_GROUP_NA_NS,
|
||||||
ENTITY_GROUP_INDE,
|
ENTITY_GROUP_INDE,
|
||||||
}
|
}
|
||||||
@@ -442,6 +500,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUPS_ARCH,
|
ENTITY_GROUPS_ARCH,
|
||||||
ENTITY_GROUPS_NS,
|
ENTITY_GROUPS_NS,
|
||||||
ENTITY_GROUPS_SUSP,
|
ENTITY_GROUPS_SUSP,
|
||||||
|
ENTITY_GROUPS_NS_SUSP,
|
||||||
ENTITY_GROUPS_NA_NS,
|
ENTITY_GROUPS_NA_NS,
|
||||||
ENTITY_GROUPS_INDE,
|
ENTITY_GROUPS_INDE,
|
||||||
}
|
}
|
||||||
@@ -451,6 +510,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUP_USERS_ARCH,
|
ENTITY_GROUP_USERS_ARCH,
|
||||||
ENTITY_GROUP_USERS_NS,
|
ENTITY_GROUP_USERS_NS,
|
||||||
ENTITY_GROUP_USERS_SUSP,
|
ENTITY_GROUP_USERS_SUSP,
|
||||||
|
ENTITY_GROUP_USERS_NS_SUSP,
|
||||||
ENTITY_GROUP_USERS_NA_NS,
|
ENTITY_GROUP_USERS_NA_NS,
|
||||||
ENTITY_GROUP_USERS_SELECT,
|
ENTITY_GROUP_USERS_SELECT,
|
||||||
}
|
}
|
||||||
@@ -465,6 +525,8 @@ class GamCLArgs():
|
|||||||
ENTITY_OU_AND_CHILDREN_NS,
|
ENTITY_OU_AND_CHILDREN_NS,
|
||||||
ENTITY_OU_SUSP,
|
ENTITY_OU_SUSP,
|
||||||
ENTITY_OU_AND_CHILDREN_SUSP,
|
ENTITY_OU_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OU_NS_SUSP,
|
||||||
|
ENTITY_OU_AND_CHILDREN_NS_SUSP,
|
||||||
ENTITY_OU_NA_NS,
|
ENTITY_OU_NA_NS,
|
||||||
ENTITY_OU_AND_CHILDREN_NA_NS,
|
ENTITY_OU_AND_CHILDREN_NA_NS,
|
||||||
}
|
}
|
||||||
@@ -479,6 +541,8 @@ class GamCLArgs():
|
|||||||
ENTITY_OUS_AND_CHILDREN_NS,
|
ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
ENTITY_OUS_SUSP,
|
ENTITY_OUS_SUSP,
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP,
|
ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OUS_NS_SUSP,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
ENTITY_OUS_NA_NS,
|
ENTITY_OUS_NA_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
}
|
}
|
||||||
@@ -493,6 +557,8 @@ class GamCLArgs():
|
|||||||
ENTITY_OUS_NS,
|
ENTITY_OUS_NS,
|
||||||
ENTITY_OU_SUSP,
|
ENTITY_OU_SUSP,
|
||||||
ENTITY_OUS_SUSP,
|
ENTITY_OUS_SUSP,
|
||||||
|
ENTITY_OU_NS_SUSP,
|
||||||
|
ENTITY_OUS_NS_SUSP,
|
||||||
ENTITY_OU_NA_NS,
|
ENTITY_OU_NA_NS,
|
||||||
ENTITY_OUS_NA_NS,
|
ENTITY_OUS_NA_NS,
|
||||||
}
|
}
|
||||||
@@ -534,13 +600,21 @@ class GamCLArgs():
|
|||||||
}
|
}
|
||||||
#
|
#
|
||||||
ALL_USERS_QUERY_MAP = {
|
ALL_USERS_QUERY_MAP = {
|
||||||
ENTITY_ALL_USERS: 'isSuspended=False',
|
ENTITY_ALL_USERS: 'isSuspended=False isGuest=False',
|
||||||
ENTITY_ALL_USERS_NA: 'isArchived=False',
|
ENTITY_ALL_USERS_NA: 'isArchived=False isGuest=False',
|
||||||
ENTITY_ALL_USERS_ARCH: 'isArchived=True',
|
ENTITY_ALL_USERS_ARCH: 'isArchived=True isGuest=False',
|
||||||
ENTITY_ALL_USERS_NS: 'isSuspended=False',
|
ENTITY_ALL_USERS_NS: 'isSuspended=False isGuest=False',
|
||||||
ENTITY_ALL_USERS_SUSP: 'isSuspended=True',
|
ENTITY_ALL_USERS_SUSP: 'isSuspended=True isGuest=False',
|
||||||
ENTITY_ALL_USERS_NA_NS: 'isArchived=False isSuspended=False',
|
ENTITY_ALL_USERS_NA_NS: 'isArchived=False isSuspended=False isGuest=False',
|
||||||
ENTITY_ALL_USERS_NS_SUSP: None,
|
ENTITY_ALL_USERS_NS_SUSP: 'isGuest=False',
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS: 'isSuspended=False',
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS: 'isSuspended=False',
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_SUSP: 'isSuspended=True',
|
||||||
|
ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP: None,
|
||||||
|
ENTITY_ALL_GUESTS: 'isSuspended=False isGuest=True',
|
||||||
|
ENTITY_ALL_GUESTS_NS: 'isSuspended=False isGuest=True',
|
||||||
|
ENTITY_ALL_GUESTS_SUSP: 'isSuspended=True isGuest=True',
|
||||||
|
ENTITY_ALL_GUESTS_NS_SUSP: 'isGuest=True',
|
||||||
}
|
}
|
||||||
DOMAINS_QUERY_MAP = {
|
DOMAINS_QUERY_MAP = {
|
||||||
ENTITY_DOMAINS: None,
|
ENTITY_DOMAINS: None,
|
||||||
@@ -548,6 +622,7 @@ class GamCLArgs():
|
|||||||
ENTITY_DOMAINS_ARCH: 'isArchived=True',
|
ENTITY_DOMAINS_ARCH: 'isArchived=True',
|
||||||
ENTITY_DOMAINS_NS: 'isSuspended=False',
|
ENTITY_DOMAINS_NS: 'isSuspended=False',
|
||||||
ENTITY_DOMAINS_SUSP: 'isSuspended=True',
|
ENTITY_DOMAINS_SUSP: 'isSuspended=True',
|
||||||
|
ENTITY_DOMAINS_NS_SUSP: None,
|
||||||
ENTITY_DOMAINS_NA_NS: 'isArchived=False isSuspended=False',
|
ENTITY_DOMAINS_NA_NS: 'isArchived=False isSuspended=False',
|
||||||
}
|
}
|
||||||
GROUPS_QUERY_MAP = { #(isArchived, isSuspended)
|
GROUPS_QUERY_MAP = { #(isArchived, isSuspended)
|
||||||
@@ -559,6 +634,8 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUPS_NS: (None, False),
|
ENTITY_GROUPS_NS: (None, False),
|
||||||
ENTITY_GROUP_SUSP: (None, True),
|
ENTITY_GROUP_SUSP: (None, True),
|
||||||
ENTITY_GROUPS_SUSP: (None, True),
|
ENTITY_GROUPS_SUSP: (None, True),
|
||||||
|
ENTITY_GROUP_NS_SUSP: (None, None),
|
||||||
|
ENTITY_GROUPS_NS_SUSP: (None, None),
|
||||||
ENTITY_GROUP_NA_NS: (False, False),
|
ENTITY_GROUP_NA_NS: (False, False),
|
||||||
ENTITY_GROUPS_NA_NS: (False, False),
|
ENTITY_GROUPS_NA_NS: (False, False),
|
||||||
}
|
}
|
||||||
@@ -567,6 +644,7 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUP_USERS_ARCH: (True, None),
|
ENTITY_GROUP_USERS_ARCH: (True, None),
|
||||||
ENTITY_GROUP_USERS_NS: (None, False),
|
ENTITY_GROUP_USERS_NS: (None, False),
|
||||||
ENTITY_GROUP_USERS_SUSP: (None, True),
|
ENTITY_GROUP_USERS_SUSP: (None, True),
|
||||||
|
ENTITY_GROUP_USERS_NS_SUSP: (None, None),
|
||||||
ENTITY_GROUP_USERS_NA_NS: (False, False),
|
ENTITY_GROUP_USERS_NA_NS: (False, False),
|
||||||
}
|
}
|
||||||
OU_QUERY_MAP = { #(isArchived, isSuspended)
|
OU_QUERY_MAP = { #(isArchived, isSuspended)
|
||||||
@@ -586,6 +664,10 @@ class GamCLArgs():
|
|||||||
ENTITY_OUS_SUSP: (None, True),
|
ENTITY_OUS_SUSP: (None, True),
|
||||||
ENTITY_OU_AND_CHILDREN_SUSP: (None, True),
|
ENTITY_OU_AND_CHILDREN_SUSP: (None, True),
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP: (None, True),
|
ENTITY_OUS_AND_CHILDREN_SUSP: (None, True),
|
||||||
|
ENTITY_OU_NS_SUSP: (None, None),
|
||||||
|
ENTITY_OUS_NS_SUSP: (None, None),
|
||||||
|
ENTITY_OU_AND_CHILDREN_NS_SUSP: (None, None),
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS_SUSP: (None, None),
|
||||||
ENTITY_OU_NA_NS: (False, False),
|
ENTITY_OU_NA_NS: (False, False),
|
||||||
ENTITY_OUS_NA_NS: (False, False),
|
ENTITY_OUS_NA_NS: (False, False),
|
||||||
ENTITY_OU_AND_CHILDREN_NA_NS: (False, False),
|
ENTITY_OU_AND_CHILDREN_NA_NS: (False, False),
|
||||||
@@ -602,6 +684,14 @@ class GamCLArgs():
|
|||||||
ENTITY_USERS_NA_NS: ENTITY_ALL_USERS_NA_NS,
|
ENTITY_USERS_NA_NS: ENTITY_ALL_USERS_NA_NS,
|
||||||
ENTITY_USERS_ARCH_OR_SUSP: ENTITY_ALL_USERS_ARCH_OR_SUSP,
|
ENTITY_USERS_ARCH_OR_SUSP: ENTITY_ALL_USERS_ARCH_OR_SUSP,
|
||||||
ENTITY_USERS_NS_SUSP: ENTITY_ALL_USERS_NS_SUSP,
|
ENTITY_USERS_NS_SUSP: ENTITY_ALL_USERS_NS_SUSP,
|
||||||
|
ENTITY_USERS_AND_GUESTS: ENTITY_ALL_USERS_AND_GUESTS,
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS: ENTITY_ALL_USERS_AND_GUESTS_NS,
|
||||||
|
ENTITY_USERS_AND_GUESTS_SUSP: ENTITY_ALL_USERS_AND_GUESTS_SUSP,
|
||||||
|
ENTITY_USERS_AND_GUESTS_NS_SUSP: ENTITY_ALL_USERS_AND_GUESTS_NS_SUSP,
|
||||||
|
ENTITY_GUESTS: ENTITY_ALL_GUESTS,
|
||||||
|
ENTITY_GUESTS_NS: ENTITY_ALL_GUESTS_NS,
|
||||||
|
ENTITY_GUESTS_SUSP: ENTITY_ALL_GUESTS_SUSP,
|
||||||
|
ENTITY_GUESTS_NS_SUSP: ENTITY_ALL_GUESTS_NS_SUSP,
|
||||||
}
|
}
|
||||||
# Allowed values for CL source selector datafile, csvkmd
|
# Allowed values for CL source selector datafile, csvkmd
|
||||||
CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES = [
|
CROS_ENTITY_SELECTOR_DATAFILE_CSVKMD_SUBTYPES = [
|
||||||
@@ -619,6 +709,7 @@ class GamCLArgs():
|
|||||||
ENTITY_DOMAINS_ARCH,
|
ENTITY_DOMAINS_ARCH,
|
||||||
ENTITY_DOMAINS_NS,
|
ENTITY_DOMAINS_NS,
|
||||||
ENTITY_DOMAINS_SUSP,
|
ENTITY_DOMAINS_SUSP,
|
||||||
|
ENTITY_DOMAINS_NS_SUSP,
|
||||||
ENTITY_DOMAINS_NA_NS,
|
ENTITY_DOMAINS_NA_NS,
|
||||||
ENTITY_GROUPS,
|
ENTITY_GROUPS,
|
||||||
ENTITY_GROUPS_INDE,
|
ENTITY_GROUPS_INDE,
|
||||||
@@ -626,12 +717,14 @@ class GamCLArgs():
|
|||||||
ENTITY_GROUPS_ARCH,
|
ENTITY_GROUPS_ARCH,
|
||||||
ENTITY_GROUPS_NS,
|
ENTITY_GROUPS_NS,
|
||||||
ENTITY_GROUPS_SUSP,
|
ENTITY_GROUPS_SUSP,
|
||||||
|
ENTITY_GROUPS_NS_SUSP,
|
||||||
ENTITY_GROUPS_NA_NS,
|
ENTITY_GROUPS_NA_NS,
|
||||||
ENTITY_GROUP_USERS,
|
ENTITY_GROUP_USERS,
|
||||||
ENTITY_GROUP_USERS_NA,
|
ENTITY_GROUP_USERS_NA,
|
||||||
ENTITY_GROUP_USERS_ARCH,
|
ENTITY_GROUP_USERS_ARCH,
|
||||||
ENTITY_GROUP_USERS_NS,
|
ENTITY_GROUP_USERS_NS,
|
||||||
ENTITY_GROUP_USERS_SUSP,
|
ENTITY_GROUP_USERS_SUSP,
|
||||||
|
ENTITY_GROUP_USERS_NS_SUSP,
|
||||||
ENTITY_GROUP_USERS_NA_NS,
|
ENTITY_GROUP_USERS_NA_NS,
|
||||||
ENTITY_GROUP_USERS_SELECT,
|
ENTITY_GROUP_USERS_SELECT,
|
||||||
ENTITY_OUS,
|
ENTITY_OUS,
|
||||||
@@ -639,12 +732,14 @@ class GamCLArgs():
|
|||||||
ENTITY_OUS_ARCH,
|
ENTITY_OUS_ARCH,
|
||||||
ENTITY_OUS_NS,
|
ENTITY_OUS_NS,
|
||||||
ENTITY_OUS_SUSP,
|
ENTITY_OUS_SUSP,
|
||||||
|
ENTITY_OUS_NS_SUSP,
|
||||||
ENTITY_OUS_NA_NS,
|
ENTITY_OUS_NA_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN,
|
ENTITY_OUS_AND_CHILDREN,
|
||||||
ENTITY_OUS_AND_CHILDREN_NA,
|
ENTITY_OUS_AND_CHILDREN_NA,
|
||||||
ENTITY_OUS_AND_CHILDREN_ARCH,
|
ENTITY_OUS_AND_CHILDREN_ARCH,
|
||||||
ENTITY_OUS_AND_CHILDREN_NS,
|
ENTITY_OUS_AND_CHILDREN_NS,
|
||||||
ENTITY_OUS_AND_CHILDREN_SUSP,
|
ENTITY_OUS_AND_CHILDREN_SUSP,
|
||||||
|
ENTITY_OUS_AND_CHILDREN_NS_SUSP,
|
||||||
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
ENTITY_OUS_AND_CHILDREN_NA_NS,
|
||||||
ENTITY_COURSEPARTICIPANTS,
|
ENTITY_COURSEPARTICIPANTS,
|
||||||
ENTITY_STUDENTS,
|
ENTITY_STUDENTS,
|
||||||
@@ -751,6 +846,8 @@ class GamCLArgs():
|
|||||||
ARG_CHATMEMBERS = 'chatmembers'
|
ARG_CHATMEMBERS = 'chatmembers'
|
||||||
ARG_CHATMESSAGE = 'chatmessage'
|
ARG_CHATMESSAGE = 'chatmessage'
|
||||||
ARG_CHATMESSAGES = 'chatmessages'
|
ARG_CHATMESSAGES = 'chatmessages'
|
||||||
|
ARG_CHATSEARCHMESSAGE = 'chatsearchmessage'
|
||||||
|
ARG_CHATSEARCHMESSAGES = 'chatsearchmessages'
|
||||||
ARG_CHATSECTION = 'chatsection'
|
ARG_CHATSECTION = 'chatsection'
|
||||||
ARG_CHATSECTIONS = 'chatsections'
|
ARG_CHATSECTIONS = 'chatsections'
|
||||||
ARG_CHATSECTIONITEM = 'chatsectionitem'
|
ARG_CHATSECTIONITEM = 'chatsectionitem'
|
||||||
|
|||||||
@@ -274,7 +274,7 @@ GMAIL_LIST_THROW_REASONS = [FAILED_PRECONDITION, PERMISSION_DENIED, INVALID, INV
|
|||||||
GMAIL_SMIME_THROW_REASONS = [SERVICE_NOT_AVAILABLE, BAD_REQUEST, INVALID_ARGUMENT, FORBIDDEN, NOT_FOUND, PERMISSION_DENIED]
|
GMAIL_SMIME_THROW_REASONS = [SERVICE_NOT_AVAILABLE, BAD_REQUEST, INVALID_ARGUMENT, FORBIDDEN, NOT_FOUND, PERMISSION_DENIED]
|
||||||
GROUP_GET_THROW_REASONS = [GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, BAD_REQUEST, INVALID, SYSTEM_ERROR]
|
GROUP_GET_THROW_REASONS = [GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, BAD_REQUEST, INVALID, SYSTEM_ERROR]
|
||||||
GROUP_GET_RETRY_REASONS = [INVALID, SYSTEM_ERROR, SERVICE_NOT_AVAILABLE]
|
GROUP_GET_RETRY_REASONS = [INVALID, SYSTEM_ERROR, SERVICE_NOT_AVAILABLE]
|
||||||
GROUP_CREATE_THROW_REASONS = [DUPLICATE, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, INVALID, INVALID_INPUT]
|
GROUP_CREATE_THROW_REASONS = [DUPLICATE, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, INVALID, INVALID_INPUT, RESOURCE_NOT_FOUND]
|
||||||
GROUP_UPDATE_THROW_REASONS = [GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, INVALID, INVALID_INPUT]
|
GROUP_UPDATE_THROW_REASONS = [GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, INVALID, INVALID_INPUT]
|
||||||
GROUP_SETTINGS_THROW_REASONS = [NOT_FOUND, GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, SYSTEM_ERROR, PERMISSION_DENIED,
|
GROUP_SETTINGS_THROW_REASONS = [NOT_FOUND, GROUP_NOT_FOUND, DOMAIN_NOT_FOUND, DOMAIN_CANNOT_USE_APIS, FORBIDDEN, SYSTEM_ERROR, PERMISSION_DENIED,
|
||||||
INVALID, INVALID_ARGUMENT, INVALID_PARAMETER, INVALID_ATTRIBUTE_VALUE, INVALID_INPUT,
|
INVALID, INVALID_ARGUMENT, INVALID_PARAMETER, INVALID_ATTRIBUTE_VALUE, INVALID_INPUT,
|
||||||
|
|||||||
@@ -131,6 +131,8 @@ GAM_PATH = 'gpth'
|
|||||||
GAM_TYPE = 'gtyp'
|
GAM_TYPE = 'gtyp'
|
||||||
# Shared Service Account HTTP Object
|
# Shared Service Account HTTP Object
|
||||||
HTTP_OBJECT = 'http'
|
HTTP_OBJECT = 'http'
|
||||||
|
# Are we on Global Compute Engine
|
||||||
|
IS_ON_GCE = 'ogce'
|
||||||
# Length of last Got message
|
# Length of last Got message
|
||||||
LAST_GOT_MSG_LEN = 'lgml'
|
LAST_GOT_MSG_LEN = 'lgml'
|
||||||
# License SKUs
|
# License SKUs
|
||||||
@@ -285,6 +287,7 @@ Globals = {
|
|||||||
GAM_PATH: '.',
|
GAM_PATH: '.',
|
||||||
GAM_TYPE: '',
|
GAM_TYPE: '',
|
||||||
HTTP_OBJECT: None,
|
HTTP_OBJECT: None,
|
||||||
|
IS_ON_GCE: False,
|
||||||
LAST_GOT_MSG_LEN: 0,
|
LAST_GOT_MSG_LEN: 0,
|
||||||
LICENSE_SKUS: [],
|
LICENSE_SKUS: [],
|
||||||
MAKE_BUILDING_ID_NAME_MAP: True,
|
MAKE_BUILDING_ID_NAME_MAP: True,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -312,6 +312,7 @@ INVALID_ALIAS = 'Invalid Alias'
|
|||||||
INVALID_ATTENDEE_CHANGE = 'Invalid attendee change "{0}"'
|
INVALID_ATTENDEE_CHANGE = 'Invalid attendee change "{0}"'
|
||||||
INVALID_CHARSET = 'Invalid charset "{0}"'
|
INVALID_CHARSET = 'Invalid charset "{0}"'
|
||||||
INVALID_DATE_TIME_RANGE = '{0} {1} must be greater than/equal to {2} {3}'
|
INVALID_DATE_TIME_RANGE = '{0} {1} must be greater than/equal to {2} {3}'
|
||||||
|
INVALID_DEVICE_QUERY = 'Invalid {0} query "{1}"; it must be if the form "field:value" and must not contain a "?"'
|
||||||
INVALID_EMOJI_NAME = '{0} does not match pattern :[0-9a-z_-]:'
|
INVALID_EMOJI_NAME = '{0} does not match pattern :[0-9a-z_-]:'
|
||||||
INVALID_ENTITY = 'Invalid {0}, {1}'
|
INVALID_ENTITY = 'Invalid {0}, {1}'
|
||||||
INVALID_EVENT_TIMERANGE = '{0} {1} must be less than {2}'
|
INVALID_EVENT_TIMERANGE = '{0} {1} must be less than {2}'
|
||||||
@@ -461,6 +462,7 @@ PLEASE_CORRECT_YOUR_SYSTEM_TIME = 'Please correct your system time.'
|
|||||||
PLEASE_ENTER_A_OR_M = 'Please enter a or m ...\n'
|
PLEASE_ENTER_A_OR_M = 'Please enter a or m ...\n'
|
||||||
PLEASE_SELECT_ENTITY_TO_PROCESS = '{0} {1} found, please select the correct one to {2} and specify with {3}'
|
PLEASE_SELECT_ENTITY_TO_PROCESS = '{0} {1} found, please select the correct one to {2} and specify with {3}'
|
||||||
PLEASE_SPECIFY_BUILDING_EXACT_CASE_NAME_OR_ID = 'Please specify building by exact case name or ID.'
|
PLEASE_SPECIFY_BUILDING_EXACT_CASE_NAME_OR_ID = 'Please specify building by exact case name or ID.'
|
||||||
|
POLICY_NAME_NOT_FOUND = 'JSON key "name" not found in JSON data'
|
||||||
PREVIEW_ONLY = 'Preview Only'
|
PREVIEW_ONLY = 'Preview Only'
|
||||||
PRIMARY_EMAIL_DID_NOT_MATCH_PATTERN = 'primaryEmail address did not match pattern: {0}'
|
PRIMARY_EMAIL_DID_NOT_MATCH_PATTERN = 'primaryEmail address did not match pattern: {0}'
|
||||||
PROCESS = 'process'
|
PROCESS = 'process'
|
||||||
@@ -474,6 +476,7 @@ REASON_ONLY_VALID_WITH_CONTENTRESTRICTIONS_READONLY_TRUE = 'reason only valid wi
|
|||||||
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'
|
||||||
REFUSING_TO_DEPROVISION_DEVICES = 'Refusing to deprovision {0} devices because acknowledge_device_touch_requirement not specified.\nDeprovisioning a device means the device will have to be physically wiped and re-enrolled to be managed by your domain again.\nThis requires physical access to the device and is very time consuming to perform for each device.\nPlease add "acknowledge_device_touch_requirement" to the GAM command if you understand this and wish to proceed with the deprovision.\nPlease also be aware that deprovisioning can have an effect on your device license count.\nSee https://support.google.com/chrome/a/answer/3523633 for full details.'
|
REFUSING_TO_DEPROVISION_DEVICES = 'Refusing to deprovision {0} devices because acknowledge_device_touch_requirement not specified.\nDeprovisioning a device means the device will have to be physically wiped and re-enrolled to be managed by your domain again.\nThis requires physical access to the device and is very time consuming to perform for each device.\nPlease add "acknowledge_device_touch_requirement" to the GAM command if you understand this and wish to proceed with the deprovision.\nPlease also be aware that deprovisioning can have an effect on your device license count.\nSee https://support.google.com/chrome/a/answer/3523633 for full details.'
|
||||||
|
REFUSING_TO_DEPROVISION_N_DEVICES = 'Refusing to deprovision {0} devices due to maxtodepov {1}.\nSpecify "maxtodeprov 0" to deprovision all {0} devices'
|
||||||
REPLY_TO_CUSTOM_REQUIRES_EMAIL_ADDRESS = 'replyto REPLY_TO_CUSTOM requires customReplyTo <EmailAddress>'
|
REPLY_TO_CUSTOM_REQUIRES_EMAIL_ADDRESS = 'replyto REPLY_TO_CUSTOM requires customReplyTo <EmailAddress>'
|
||||||
REQUEST_COMPLETED_NO_FILES = 'Request completed but no results/files were returned, try requesting again'
|
REQUEST_COMPLETED_NO_FILES = 'Request completed but no results/files were returned, try requesting again'
|
||||||
REQUEST_NOT_COMPLETE = 'Request needs to be completed before downloading, current status is: {0}'
|
REQUEST_NOT_COMPLETE = 'Request needs to be completed before downloading, current status is: {0}'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2025 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
# Products/SKUs
|
# Products/SKUs
|
||||||
_PRODUCTS = {
|
_PRODUCTS = {
|
||||||
'101001': 'Cloud Identity',
|
'101001': 'Cloud Identity Free',
|
||||||
'101005': 'Cloud Identity Premium',
|
'101005': 'Cloud Identity Premium',
|
||||||
'101031': 'Google Workspace for Education',
|
'101031': 'Google Workspace for Education',
|
||||||
'101033': 'Google Voice',
|
'101033': 'Google Voice',
|
||||||
@@ -44,7 +44,7 @@ _PRODUCTS = {
|
|||||||
}
|
}
|
||||||
_SKUS = {
|
_SKUS = {
|
||||||
'1010010001': {
|
'1010010001': {
|
||||||
'product': '101001', 'aliases': ['identity', 'cloudidentity'], 'displayName': 'Cloud Identity'},
|
'product': '101001', 'aliases': ['identity', 'cloudidentity', 'cloudidentityfree'], 'displayName': 'Cloud Identity Free'},
|
||||||
'1010050001': {
|
'1010050001': {
|
||||||
'product': '101005', 'aliases': ['identitypremium', 'cloudidentitypremium'], 'displayName': 'Cloud Identity Premium'},
|
'product': '101005', 'aliases': ['identitypremium', 'cloudidentitypremium'], 'displayName': 'Cloud Identity Premium'},
|
||||||
'1010070001': {
|
'1010070001': {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2023 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -117,6 +117,8 @@ PROPERTIES = {
|
|||||||
{CLASS: PC_STRING, TITLE: 'Full Name',},
|
{CLASS: PC_STRING, TITLE: 'Full Name',},
|
||||||
'displayName':
|
'displayName':
|
||||||
{CLASS: PC_STRING, TITLE: 'Display Name',},
|
{CLASS: PC_STRING, TITLE: 'Display Name',},
|
||||||
|
'primaryGuestEmail':
|
||||||
|
{CLASS: PC_STRING, TITLE: 'Primary Guest Email',},
|
||||||
'languages':
|
'languages':
|
||||||
{CLASS: PC_LANGUAGES, TITLE: 'Languages',},
|
{CLASS: PC_LANGUAGES, TITLE: 'Languages',},
|
||||||
'languageCode':
|
'languageCode':
|
||||||
@@ -131,6 +133,8 @@ PROPERTIES = {
|
|||||||
{CLASS: PC_BOOLEAN, TITLE: 'Is a Super Admin',},
|
{CLASS: PC_BOOLEAN, TITLE: 'Is a Super Admin',},
|
||||||
'isDelegatedAdmin':
|
'isDelegatedAdmin':
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Is Delegated Admin',},
|
{CLASS: PC_BOOLEAN, TITLE: 'Is Delegated Admin',},
|
||||||
|
'isGuestUser':
|
||||||
|
{CLASS: PC_BOOLEAN, TITLE: 'Is a Guest User',},
|
||||||
'isEnrolledIn2Sv':
|
'isEnrolledIn2Sv':
|
||||||
{CLASS: PC_BOOLEAN, TITLE: '2-step enrolled',},
|
{CLASS: PC_BOOLEAN, TITLE: '2-step enrolled',},
|
||||||
'isEnforcedIn2Sv':
|
'isEnforcedIn2Sv':
|
||||||
@@ -141,10 +145,14 @@ PROPERTIES = {
|
|||||||
{CLASS: PC_BOOLEAN, TITLE: 'IP Whitelisted',},
|
{CLASS: PC_BOOLEAN, TITLE: 'IP Whitelisted',},
|
||||||
'archived':
|
'archived':
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Is Archived',},
|
{CLASS: PC_BOOLEAN, TITLE: 'Is Archived',},
|
||||||
|
'archivalTime':
|
||||||
|
{CLASS: PC_TIME, TITLE: 'Archival Time',},
|
||||||
'suspended':
|
'suspended':
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Account Suspended',},
|
{CLASS: PC_BOOLEAN, TITLE: 'Account Suspended',},
|
||||||
'suspensionReason':
|
'suspensionReason':
|
||||||
{CLASS: PC_STRING, TITLE: 'Suspension Reason',},
|
{CLASS: PC_STRING, TITLE: 'Suspension Reason',},
|
||||||
|
'suspensionTime':
|
||||||
|
{CLASS: PC_TIME, TITLE: 'Suspension Time',},
|
||||||
'changePasswordAtNextLogin':
|
'changePasswordAtNextLogin':
|
||||||
{CLASS: PC_BOOLEAN, TITLE: 'Must Change Password',},
|
{CLASS: PC_BOOLEAN, TITLE: 'Must Change Password',},
|
||||||
'recoveryEmail':
|
'recoveryEmail':
|
||||||
|
|||||||
67
src/tools/py314-ossl4.diff
Normal file
67
src/tools/py314-ossl4.diff
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
|
||||||
|
index 1235eff72f7..f68e34b7560 100644
|
||||||
|
--- a/Modules/_ssl.c
|
||||||
|
+++ b/Modules/_ssl.c
|
||||||
|
@@ -134,6 +134,17 @@ static void _PySSLFixErrno(void) {
|
||||||
|
#error Unsupported OpenSSL version
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#if (OPENSSL_VERSION_NUMBER >= 0x40000000L)
|
||||||
|
+# define OPENSSL_NO_SSL3
|
||||||
|
+# define OPENSSL_NO_TLS1
|
||||||
|
+# define OPENSSL_NO_TLS1_1
|
||||||
|
+# define OPENSSL_NO_TLS1_2
|
||||||
|
+# define OPENSSL_NO_SSL3_METHOD
|
||||||
|
+# define OPENSSL_NO_TLS1_METHOD
|
||||||
|
+# define OPENSSL_NO_TLS1_1_METHOD
|
||||||
|
+# define OPENSSL_NO_TLS1_2_METHOD
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* OpenSSL API 1.1.0+ does not include version methods */
|
||||||
|
#ifndef OPENSSL_NO_SSL3_METHOD
|
||||||
|
extern const SSL_METHOD *SSLv3_method(void);
|
||||||
|
@@ -1133,7 +1144,7 @@ _asn1obj2py(_sslmodulestate *state, const ASN1_OBJECT *name, int no_name)
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_create_tuple_for_attribute(_sslmodulestate *state,
|
||||||
|
- ASN1_OBJECT *name, ASN1_STRING *value)
|
||||||
|
+ const ASN1_OBJECT *name, const ASN1_STRING *value)
|
||||||
|
{
|
||||||
|
Py_ssize_t buflen;
|
||||||
|
PyObject *pyattr;
|
||||||
|
@@ -1162,16 +1173,16 @@ _create_tuple_for_attribute(_sslmodulestate *state,
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
-_create_tuple_for_X509_NAME (_sslmodulestate *state, X509_NAME *xname)
|
||||||
|
+_create_tuple_for_X509_NAME (_sslmodulestate *state, const X509_NAME *xname)
|
||||||
|
{
|
||||||
|
PyObject *dn = NULL; /* tuple which represents the "distinguished name" */
|
||||||
|
PyObject *rdn = NULL; /* tuple to hold a "relative distinguished name" */
|
||||||
|
PyObject *rdnt;
|
||||||
|
PyObject *attr = NULL; /* tuple to hold an attribute */
|
||||||
|
int entry_count = X509_NAME_entry_count(xname);
|
||||||
|
- X509_NAME_ENTRY *entry;
|
||||||
|
- ASN1_OBJECT *name;
|
||||||
|
- ASN1_STRING *value;
|
||||||
|
+ const X509_NAME_ENTRY *entry;
|
||||||
|
+ const ASN1_OBJECT *name;
|
||||||
|
+ const ASN1_STRING *value;
|
||||||
|
int index_counter;
|
||||||
|
int rdn_level = -1;
|
||||||
|
int retcode;
|
||||||
|
@@ -6506,9 +6517,15 @@ sslmodule_init_constants(PyObject *m)
|
||||||
|
ADD_INT_CONST("PROTOCOL_TLS", PY_SSL_VERSION_TLS);
|
||||||
|
ADD_INT_CONST("PROTOCOL_TLS_CLIENT", PY_SSL_VERSION_TLS_CLIENT);
|
||||||
|
ADD_INT_CONST("PROTOCOL_TLS_SERVER", PY_SSL_VERSION_TLS_SERVER);
|
||||||
|
+#ifndef OPENSSL_NO_TLS1
|
||||||
|
ADD_INT_CONST("PROTOCOL_TLSv1", PY_SSL_VERSION_TLS1);
|
||||||
|
+#endif
|
||||||
|
+#ifndef OPENSSL_NO_TLS1_1
|
||||||
|
ADD_INT_CONST("PROTOCOL_TLSv1_1", PY_SSL_VERSION_TLS1_1);
|
||||||
|
+#endif
|
||||||
|
+#ifndef OPENSSL_NO_TLS1_2
|
||||||
|
ADD_INT_CONST("PROTOCOL_TLSv1_2", PY_SSL_VERSION_TLS1_2);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#define ADD_OPTION(NAME, VALUE) if (sslmodule_add_option(m, NAME, (VALUE)) < 0) return -1
|
||||||
@@ -30,6 +30,9 @@ function minimizeAllWindows() {
|
|||||||
async function takeScreenshot(filename) {
|
async function takeScreenshot(filename) {
|
||||||
const workspace = process.env.GITHUB_WORKSPACE || process.cwd();
|
const workspace = process.env.GITHUB_WORKSPACE || process.cwd();
|
||||||
const fullPath = path.join(workspace, filename);
|
const fullPath = path.join(workspace, filename);
|
||||||
|
|
||||||
|
// Create a temporary script file path
|
||||||
|
const scriptPath = path.join(workspace, `screenshot_${Date.now()}.ps1`);
|
||||||
|
|
||||||
const psScript = `
|
const psScript = `
|
||||||
Add-Type -AssemblyName System.Windows.Forms;
|
Add-Type -AssemblyName System.Windows.Forms;
|
||||||
@@ -44,47 +47,101 @@ async function takeScreenshot(filename) {
|
|||||||
$bitmap = New-Object System.Drawing.Bitmap $Screen.Width, $Screen.Height;
|
$bitmap = New-Object System.Drawing.Bitmap $Screen.Width, $Screen.Height;
|
||||||
$graphic = [System.Drawing.Graphics]::FromImage($bitmap);
|
$graphic = [System.Drawing.Graphics]::FromImage($bitmap);
|
||||||
$graphic.CopyFromScreen($Screen.Left, $Screen.Top, 0, 0, $bitmap.Size);
|
$graphic.CopyFromScreen($Screen.Left, $Screen.Top, 0, 0, $bitmap.Size);
|
||||||
|
|
||||||
|
# Save the file (using single quotes safely now)
|
||||||
$bitmap.Save('${fullPath}');
|
$bitmap.Save('${fullPath}');
|
||||||
|
Write-Output "Wrote ${fullPath}";
|
||||||
|
|
||||||
|
# Specify ItemType to prevent older PS versions from prompting interactively
|
||||||
|
New-Item -Path "${fullPath}.written" -ItemType File | Out-Null;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
execSync(`powershell -Command "${psScript}"`);
|
// 1. Write the script to disk
|
||||||
|
fs.writeFileSync(scriptPath, psScript);
|
||||||
|
|
||||||
|
// 2. Execute the file directly, piping stdout/stderr to the Node console
|
||||||
|
execSync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${scriptPath}"`, {
|
||||||
|
stdio: 'inherit'
|
||||||
|
});
|
||||||
|
|
||||||
console.log(`Saved screenshot: ${fullPath}`);
|
console.log(`Saved screenshot: ${fullPath}`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`Failed to save screenshot ${fullPath}:`, err.message);
|
console.error(`Failed to save screenshot ${fullPath}:`, err.message);
|
||||||
|
} finally {
|
||||||
|
// 3. Clean up the temp file so it doesn't clutter your CI artifacts
|
||||||
|
if (fs.existsSync(scriptPath)) {
|
||||||
|
fs.unlinkSync(scriptPath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fire and forget application launcher
|
// Fire and forget application launcher with logging
|
||||||
function launchSSD() {
|
function launchSSD() {
|
||||||
|
const workspace = process.env.GITHUB_WORKSPACE || process.cwd();
|
||||||
|
const outLogPath = path.join(workspace, 'ssd_out.log');
|
||||||
|
const errLogPath = path.join(workspace, 'ssd_err.log');
|
||||||
|
|
||||||
|
// Open file descriptors for logging
|
||||||
|
const out = fs.openSync(outLogPath, 'a');
|
||||||
|
const err = fs.openSync(errLogPath, 'a');
|
||||||
|
|
||||||
|
console.log(`Launching SSD... Logging stdout to ${outLogPath} and stderr to ${errLogPath}`);
|
||||||
|
|
||||||
const child = spawn('C:\\Program Files\\Certum\\SimplySign Desktop\\SimplySignDesktop.exe', [], {
|
const child = spawn('C:\\Program Files\\Certum\\SimplySign Desktop\\SimplySignDesktop.exe', [], {
|
||||||
detached: true,
|
detached: true,
|
||||||
stdio: 'ignore'
|
// stdio array: [stdin, stdout, stderr]
|
||||||
|
// We ignore stdin, and pipe stdout/stderr to our files
|
||||||
|
stdio: ['ignore', out, err]
|
||||||
});
|
});
|
||||||
child.unref();
|
|
||||||
|
// Catch immediate errors (e.g., file not found, permission denied)
|
||||||
|
child.on('error', (error) => {
|
||||||
|
console.error('Failed to spawn SimplySign Desktop:', error.message);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Unreference the child so the parent script can exit
|
||||||
|
child.unref();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function runSSD() {
|
async function runSSD() {
|
||||||
await takeScreenshot('001.png');
|
const runner_arch = process.env.RUNNER_ARCH;
|
||||||
minimizeAllWindows();
|
if ( runner_arch === "ARM64" ) {
|
||||||
await sleep(2000);
|
console.log('Running on ARM64. Tabbing through OOBE...');
|
||||||
await takeScreenshot('002.png');
|
await sleep(3000);
|
||||||
sendKeys('{ESC}');
|
await takeScreenshot('oob1.png');
|
||||||
await sleep(2000);
|
|
||||||
await takeScreenshot('003.png');
|
// Page 1: Tab through the toggles to reach the "Next" button
|
||||||
//sendKeys('{ESC}');
|
for (let i = 0; i < 7; i++) {
|
||||||
//await sleep(2000);
|
sendKeys('{TAB}');
|
||||||
//await takeScreenshot('004.png');
|
await sleep(200);
|
||||||
//sendKeys('{ESC}');
|
}
|
||||||
//await sleep(2000);
|
sendKeys('{ENTER}');
|
||||||
//await takeScreenshot('005.png');
|
console.log('Clicked Next');
|
||||||
//sendKeys('%{F4}');
|
|
||||||
//await sleep(2000);
|
await sleep(3000);
|
||||||
//await takeScreenshot('006.png');
|
await takeScreenshot('ooob2.png');
|
||||||
//sendKeys('%{F4}');
|
|
||||||
//await sleep(2000);
|
|
||||||
//await takeScreenshot('007.png');
|
|
||||||
|
|
||||||
|
// Page 2: Tab through the remaining toggles to reach the "Accept" button
|
||||||
|
for (let i = 0; i < 7; i++) {
|
||||||
|
sendKeys('{TAB}');
|
||||||
|
await sleep(200);
|
||||||
|
}
|
||||||
|
sendKeys('{ENTER}');
|
||||||
|
console.log('Clicked Accept');
|
||||||
|
|
||||||
|
await sleep(3000);
|
||||||
|
await takeScreenshot('oob3.png');
|
||||||
|
|
||||||
|
sendKeys('{ESC}');
|
||||||
|
console.log('Escaped start menu');
|
||||||
|
|
||||||
|
await sleep(3000);
|
||||||
|
await takeScreenshot('oob4.png');
|
||||||
|
|
||||||
|
} else {
|
||||||
|
console.log('NOT running on ARM64');
|
||||||
|
}
|
||||||
// Re-execute SSD to open login dialog
|
// Re-execute SSD to open login dialog
|
||||||
launchSSD();
|
launchSSD();
|
||||||
await sleep(3000);
|
await sleep(3000);
|
||||||
|
|||||||
@@ -315,6 +315,9 @@ You can optionally specify the type of service account key with `algorithm|local
|
|||||||
Use `nokey` if you do not want a service account key created for the project.
|
Use `nokey` if you do not want a service account key created for the project.
|
||||||
|
|
||||||
## Use an existing project for GAM authorization
|
## Use an existing project for GAM authorization
|
||||||
|
|
||||||
|
To use the same GAM project on multiple computers, see: [GAM Configuration](Multiple-Computers)
|
||||||
|
|
||||||
Use an existing project to create and download two files: `client_secrets.json` for the Client and `oauth2service.json` for the Service Account.
|
Use an existing project to create and download two files: `client_secrets.json` for the Client and `oauth2service.json` for the Service Account.
|
||||||
|
|
||||||
### Default values
|
### Default values
|
||||||
|
|||||||
@@ -456,9 +456,9 @@
|
|||||||
See: https://cloud.google.com/access-context-manager/docs/custom-access-level-spec
|
See: https://cloud.google.com/access-context-manager/docs/custom-access-level-spec
|
||||||
<QueryContact> ::= <String>
|
<QueryContact> ::= <String>
|
||||||
See: https://developers.google.com/google-apps/contacts/v3/reference#contacts-query-parameters-reference
|
See: https://developers.google.com/google-apps/contacts/v3/reference#contacts-query-parameters-reference
|
||||||
<QueryCrOS> ::= <String>
|
<QueryCrOS> ::= <String>:<String>
|
||||||
See: https://support.google.com/chrome/a/answer/1698333
|
See: https://support.google.com/chrome/a/answer/1698333
|
||||||
<QueryDevice> ::= <String>
|
<QueryDevice> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryDriveFile> ::= <String>
|
<QueryDriveFile> ::= <String>
|
||||||
See: https://developers.google.com/drive/api/v3/search-files
|
See: https://developers.google.com/drive/api/v3/search-files
|
||||||
@@ -471,7 +471,7 @@
|
|||||||
<QueryItem> ::= <UniqueID>|<String>
|
<QueryItem> ::= <UniqueID>|<String>
|
||||||
<QueryMemberRestrictions> ::= <String>
|
<QueryMemberRestrictions> ::= <String>
|
||||||
See: https://cloud.google.com/identity/docs/reference/rest/v1beta1/SecuritySettings#MemberRestriction
|
See: https://cloud.google.com/identity/docs/reference/rest/v1beta1/SecuritySettings#MemberRestriction
|
||||||
<QueryMobile> ::= <String>
|
<QueryMobile> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryTeamDrive> ::= <String>
|
<QueryTeamDrive> ::= <String>
|
||||||
See: https://developers.google.com/drive/api/v3/search-parameters
|
See: https://developers.google.com/drive/api/v3/search-parameters
|
||||||
|
|||||||
@@ -60,6 +60,9 @@ These filters can be used alone or in conjunction with the `matchfield|skipfield
|
|||||||
[(any|all):]notdata:<DataSelector>|
|
[(any|all):]notdata:<DataSelector>|
|
||||||
[(any|all):]notregex:<RESearchPattern>|
|
[(any|all):]notregex:<RESearchPattern>|
|
||||||
[(any|all):]notregexcs:<RESearchPattern>|
|
[(any|all):]notregexcs:<RESearchPattern>|
|
||||||
|
[(any|all):]number<Operator><Number>|
|
||||||
|
[(any|all):]numberrange!=<Number>/<Number>|
|
||||||
|
[(any|all):]numberrange=<Number>/<Number>|
|
||||||
[(any|all):]regex:<RESearchPattern>|
|
[(any|all):]regex:<RESearchPattern>|
|
||||||
[(any|all):]regexcs:<RESearchPattern>|
|
[(any|all):]regexcs:<RESearchPattern>|
|
||||||
[(any|all):]text<Operator><String>|
|
[(any|all):]text<Operator><String>|
|
||||||
|
|||||||
@@ -68,6 +68,9 @@ on all platforms.
|
|||||||
[(any|all):]notdata:<DataSelector>
|
[(any|all):]notdata:<DataSelector>
|
||||||
[(any|all):]notregex:<RESearchPattern>|
|
[(any|all):]notregex:<RESearchPattern>|
|
||||||
[(any|all):]notregexcs:<RESearchPattern>|
|
[(any|all):]notregexcs:<RESearchPattern>|
|
||||||
|
[(any|all):]number<Operator><Number>|
|
||||||
|
[(any|all):]numberrange!=<Number>/<Number>|
|
||||||
|
[(any|all):]numberrange=<Number>/<Number>|
|
||||||
[(any|all):]regex:<RESearchPattern>|
|
[(any|all):]regex:<RESearchPattern>|
|
||||||
[(any|all):]regexcs:<RESearchPattern>|
|
[(any|all):]regexcs:<RESearchPattern>|
|
||||||
[(any|all):]text<Operator><String>|
|
[(any|all):]text<Operator><String>|
|
||||||
|
|||||||
@@ -20,6 +20,9 @@ Calendar ACL roles (as seen in Calendar GUI):
|
|||||||
* `owner` - Make changes to events and manage sharing
|
* `owner` - Make changes to events and manage sharing
|
||||||
* `freebusy` & `freebusyreader` - See only free/busy (hide details)
|
* `freebusy` & `freebusyreader` - See only free/busy (hide details)
|
||||||
|
|
||||||
|
Added `writerwithoutprivateaccess` to `<CalendarACLRole>` in 7.44.03; this will become effective 2026-06-29.
|
||||||
|
* See: https://developers.google.com/workspace/calendar/release-notes#June_01_2026
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Calendar API - ACLs](https://developers.google.com/google-apps/calendar/v3/reference/acl)
|
* [Calendar API - ACLs](https://developers.google.com/google-apps/calendar/v3/reference/acl)
|
||||||
|
|
||||||
@@ -30,10 +33,15 @@ Calendar ACL roles (as seen in Calendar GUI):
|
|||||||
<CalendarEntity> ::= <CalendarList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<CalendarEntity> ::= <CalendarList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
See: https://github.com/GAM-team/GAM/wiki/Collections-of-Items
|
See: https://github.com/GAM-team/GAM/wiki/Collections-of-Items
|
||||||
|
|
||||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer
|
<CalendarACLRole> ::=
|
||||||
<CalendarACLScope> ::= <EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|domain:<DomainName>|domain|default
|
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||||
<CalendarACLScopeList> ::= "<CalendarACLScope>(,<CalendarACLScope>)*"
|
<CalendarACLScope> ::=
|
||||||
<CalendarACLScopeEntity>::= <CalendarACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||||
|
domain:<DomainName>|domain|default
|
||||||
|
<CalendarACLScopeList> ::=
|
||||||
|
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||||
|
<CalendarACLScopeEntity>::=
|
||||||
|
<CalendarACLScopeList> | <FileSelector> | <CSVkmdSelector> | <CSVDataSelector>
|
||||||
```
|
```
|
||||||
## Manage calendar access
|
## Manage calendar access
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -68,7 +68,8 @@ gam oauth create
|
|||||||
|
|
||||||
```
|
```
|
||||||
<OrgUnitPath> ::= /|(/<String)+
|
<OrgUnitPath> ::= /|(/<String)+
|
||||||
<QueryCrOS> ::= <String> See: https://support.google.com/chrome/a/answer/1698333
|
<QueryCrOS> ::= <String>:<String>
|
||||||
|
See: https://support.google.com/chrome/a/answer/1698333
|
||||||
<CommandID> ::= <String>
|
<CommandID> ::= <String>
|
||||||
<CrOSID> ::= <String>
|
<CrOSID> ::= <String>
|
||||||
<CrOSIDList> ::= "<CrOSID>(,<CrOSID>)*"
|
<CrOSIDList> ::= "<CrOSID>(,<CrOSID>)*"
|
||||||
@@ -97,6 +98,7 @@ gam oauth create
|
|||||||
autoupdateexpiration|
|
autoupdateexpiration|
|
||||||
autoupdatethrough|
|
autoupdatethrough|
|
||||||
backlightinfo|
|
backlightinfo|
|
||||||
|
bluetoothadapterinfo|
|
||||||
bootmode|
|
bootmode|
|
||||||
chromeostype|
|
chromeostype|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
@@ -130,6 +132,7 @@ gam oauth create
|
|||||||
orgunitpath|org|ou|
|
orgunitpath|org|ou|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
osversion|
|
osversion|
|
||||||
|
osversioncompliance|
|
||||||
platformversion|
|
platformversion|
|
||||||
recentusers|
|
recentusers|
|
||||||
screenshotfiles|
|
screenshotfiles|
|
||||||
@@ -184,25 +187,30 @@ gam oauth create
|
|||||||
<CrOSActivityListFieldNameList> ::= "<CrOSActivityListFieldName>(,<CrOSActivityListFieldName>)*"
|
<CrOSActivityListFieldNameList> ::= "<CrOSActivityListFieldName>(,<CrOSActivityListFieldName>)*"
|
||||||
|
|
||||||
<CrOSTelemetryFieldName> ::=
|
<CrOSTelemetryFieldName> ::=
|
||||||
|
appreport|
|
||||||
audiostatusreport|
|
audiostatusreport|
|
||||||
batteryinfo|
|
batteryinfo|
|
||||||
batterystatusreport|
|
batterystatusreport|
|
||||||
bootPerformancereport|
|
bootperformancereport|
|
||||||
cpuinfo|
|
cpuinfo|
|
||||||
cpustatusreport|
|
cpustatusreport|
|
||||||
customer|
|
customer|
|
||||||
deviceid|
|
deviceid|
|
||||||
graphicsinfo|
|
graphicsinfo|
|
||||||
graphicsstatusreport|
|
graphicsstatusreport|
|
||||||
|
heartbeatstatusreport|
|
||||||
|
kioskappstatusreport|
|
||||||
memoryinfo|
|
memoryinfo|
|
||||||
memorystatusreport|
|
memorystatusreport|
|
||||||
name|
|
name|
|
||||||
|
networkbandwidthreport|
|
||||||
networkdiagnosticsreport|
|
networkdiagnosticsreport|
|
||||||
networkinfo|
|
networkinfo|
|
||||||
networkstatusreport|
|
networkstatusreport|
|
||||||
orgunitid|
|
orgunitid|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
peripheralsreport|
|
peripheralsreport|
|
||||||
|
runtimecountersreport|
|
||||||
serialnumber|
|
serialnumber|
|
||||||
storageinfo|
|
storageinfo|
|
||||||
storagestatusreport|
|
storagestatusreport|
|
||||||
@@ -210,20 +218,22 @@ gam oauth create
|
|||||||
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
<CrOSTelemetryFieldNameList> ::= "<CrOSTelemetryFieldName>(,<CrOSTelemetryFieldName>)*"
|
||||||
|
|
||||||
<CrOSTelemetryListFieldName> ::=
|
<CrOSTelemetryListFieldName> ::=
|
||||||
|
appreport|
|
||||||
audiostatusreport|
|
audiostatusreport|
|
||||||
batteryinfo|
|
|
||||||
batterystatusreport|
|
batterystatusreport|
|
||||||
bootperformancereport|
|
bootperformancereport|
|
||||||
cpuinfo|
|
|
||||||
cpustatusreport|
|
cpustatusreport|
|
||||||
graphicsstatusreport|
|
graphicsstatusreport|
|
||||||
|
heartbeatstatusreport|
|
||||||
|
kioskappstatusreport|
|
||||||
memorystatusreport|
|
memorystatusreport|
|
||||||
|
networkbandwidthreport|
|
||||||
networkdiagnosticsreport|
|
networkdiagnosticsreport|
|
||||||
networkstatusreport|
|
networkstatusreport|
|
||||||
osupdatestatus|
|
osupdatestatus|
|
||||||
peripheralsreport|
|
peripheralsreport|
|
||||||
storagestatusreport|
|
runtimecountersreport|
|
||||||
thunderboltinfo
|
storagestatusreport
|
||||||
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
<CrOSTelemetryListFieldNameList> ::= "<CrOSTelemetryListFieldName>(,<CrOSTelemetryLIstFieldName>)*"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -409,11 +419,13 @@ gam update ou csvkmd cros.csv keyfield OU datafield deviceId add croscsvdata dev
|
|||||||
reenable
|
reenable
|
||||||
|
|
||||||
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
gam <CrOSTypeEntity> update action <CrOSAction> [acknowledge_device_touch_requirement]
|
||||||
[actionbatchsize <Integer>]
|
[actionbatchsize <Integer>] [maxtodeprov <Integer>]
|
||||||
```
|
```
|
||||||
ChromeOS devices are now processed in batches.
|
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.
|
||||||
|
|
||||||
|
### Deprovisioning
|
||||||
|
|
||||||
As deprovisioning ChromeOS devices is not reversible, you must enter `acknowledge_device_touch_requirement`
|
As deprovisioning ChromeOS devices is not reversible, you must enter `acknowledge_device_touch_requirement`
|
||||||
when `<CrOSAction>` is `deprovision_same_model_replace`, `deprovision_different_model_replace`,
|
when `<CrOSAction>` is `deprovision_same_model_replace`, `deprovision_different_model_replace`,
|
||||||
`deprovision_retiring_device` or `deprovision_upgrade_transfer`.
|
`deprovision_retiring_device` or `deprovision_upgrade_transfer`.
|
||||||
@@ -424,6 +436,20 @@ each device. Please also be aware that deprovisioning can have an effect on your
|
|||||||
|
|
||||||
See https://support.google.com/chrome/a/answer/3523633 for full details.
|
See https://support.google.com/chrome/a/answer/3523633 for full details.
|
||||||
|
|
||||||
|
Prior to version 7.43.05, all devices in `<CrOSEntity>` would be deprovisioned. When `<CrOSEntity>`
|
||||||
|
was derived from an OU, this was desirable. However, if `<CrOSEntity>` was derived from a query,
|
||||||
|
more devices than desired may have been deprovisioned. In version 7.43.05 and higher,
|
||||||
|
GAM defaults to not deprovisioning devices if the number of devices exceeds one.
|
||||||
|
|
||||||
|
The option `max_to_deprov <Integer>` can be used to verify the number of devices to be deprovisioned;
|
||||||
|
no deprovisions are processed if the number of devices in `<CrOSEntity>` exceeds `<Integer>`;
|
||||||
|
the default value is one; set `<Number>` to 0 for no limit.
|
||||||
|
|
||||||
|
When `<CrOSEntity>` is derived from an OU, set `max_to_deprov 0` and all devices will be deprovisioned.
|
||||||
|
|
||||||
|
When `<CrOSEntity>` is derived from a query, e.g., `cros_sn <SerialNumber>`, the default `max_to_deprov 1`
|
||||||
|
protects you from accidentally deprovisioning more devices than desired.
|
||||||
|
|
||||||
## Send remote commands to ChromeOS devices
|
## Send remote commands to ChromeOS devices
|
||||||
Thanks to Jay for most of the following.
|
Thanks to Jay for most of the following.
|
||||||
|
|
||||||
@@ -947,19 +973,21 @@ By default, Gam displays the information as an indented list of keys and values:
|
|||||||
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
gam print crostelemetry [todrive <ToDriveAttribute>*]
|
||||||
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
[(ou|org|orgunit|ou_and_children <OrgUnitItem>)|(cros_sn <SerialNumber>)|(filter <String>)]
|
||||||
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
<CrOSTelemetryFieldName>* [fields <CrOSTelemetryFieldNameList>]
|
||||||
[reverselists <CrOSTelemetryListFieldNameList>]
|
[reverselists <CrOSTelemetryListFieldNameList>] [oneitemperrow]
|
||||||
[start <Date>] [end <Date>] [listlimit <Number>]
|
[start <Date>] [end <Date>] [listlimit <Number>]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
Use these options to select CrOS devices; if none are chosen, all CrOS devices in the account are selected.
|
Use these options to select CrOS devices; if none are chosen, all CrOS devices in the account are selected.
|
||||||
|
|
||||||
- `ou|org|orgunit <OrgUnitItem>` - Select CrOS devices directly in the OU `<OrgUnitItem>`
|
- `ou|org|orgunit <OrgUnitItem>` - Select CrOS devices directly in the OU `<OrgUnitItem>`
|
||||||
- `ou_and_children <OrgUnitItem>` - Select CrOS devices in the OU `<OrgUnitItem>` and its sub OUs
|
- `ou_and_children <OrgUnitItem>` - Select CrOS devices in the OU `<OrgUnitItem>` and its sub OUs
|
||||||
- `cros_sn <SerialNumber>` - Select the CrOS device with serial number `<SerialNumber>`.
|
- `cros_sn <SerialNumber>` - Select the CrOS device with serial number `<SerialNumber>`.
|
||||||
- `filter <String>` - Select the CrOS device with a filter.
|
- `filter <String>` - Select the CrOS device with a filter.
|
||||||
|
|
||||||
|
Use these options to limit/modify the displayed lists.
|
||||||
- `listlimit <Number>` - Limits the number of repetitions to `<Number>`; if not specified or `<Number>` equals zero, there is no limit.
|
- `listlimit <Number>` - Limits the number of repetitions to `<Number>`; if not specified or `<Number>` equals zero, there is no limit.
|
||||||
- `start <Date>` and `end <Date>` - Constrain list `reportTime` to fall within the specified `<Dates>`. If a `<Date>` isn't specified, there is no filtering in that range.
|
- `start <Date>` and `end <Date>` - Constrain list `reportTime` to fall within the specified `<Dates>`. If a `<Date>` isn't specified, there is no filtering in that range.
|
||||||
- `reverselists <CrOSTelemetryListFieldNameList>` - For each list, change order from ascending (oldest to newest) to descending (newest to oldest); this makes it easy to get the `N` most recent values with `listlimit N reverselists cpustatusreport,memorystatusreport`
|
- `reverselists <CrOSTelemetryListFieldNameList>` - For each list, change order from descending (newest to oldest) to ascending (oldest to newest)
|
||||||
|
- `oneitemrerrow` - Display each instance of a list item on a separate row; by default, all list items are displayed on a single row
|
||||||
|
|
||||||
By default, all telemetry data is displayed, use the following to select specific fields:
|
By default, all telemetry data is displayed, use the following to select specific fields:
|
||||||
- `<CrOSTelemetryFieldName>*` - Specify fields individually
|
- `<CrOSTelemetryFieldName>*` - Specify fields individually
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ gam user user@domain.com check|update serviceaccount
|
|||||||
name|
|
name|
|
||||||
owneremail|
|
owneremail|
|
||||||
ownerid|
|
ownerid|
|
||||||
|
ownername|
|
||||||
room|
|
room|
|
||||||
section|
|
section|
|
||||||
teacherfolder|
|
teacherfolder|
|
||||||
@@ -431,14 +432,16 @@ gam courses <CourseEntity> update topic <CourseTopicIDEntity> <CourseTopic>
|
|||||||
|
|
||||||
## Display courses
|
## Display courses
|
||||||
```
|
```
|
||||||
gam info course <CourseID> [owneremail] [alias|aliases] [show all|students|teachers] [countsonly]
|
gam info course <CourseID>
|
||||||
|
[owneremail] [ownername] [alias|aliases] [show all|students|teachers] [countsonly]
|
||||||
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>] [formatjson]
|
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>] [formatjson]
|
||||||
gam info courses <CourseEntity> [owneremail] [alias|aliases] [show all|students|teachers] [countsonly]
|
gam info courses <CourseEntity>
|
||||||
|
[owneremail] [ownername] [alias|aliases] [show all|students|teachers] [countsonly]
|
||||||
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>] [formatjson]
|
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>] [formatjson]
|
||||||
|
|
||||||
gam print courses [todrive <ToDriveAttribute>*]
|
gam print courses [todrive <ToDriveAttribute>*]
|
||||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
|
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] [states <CourseStateList>])
|
||||||
[owneremail] [owneremailmatchpattern <REMatchPattern>]
|
[owneremail] [owneremailmatchpattern <REMatchPattern>] [ownername]
|
||||||
[alias|aliases|aliasesincolumns [delimiter <Character>]]
|
[alias|aliases|aliasesincolumns [delimiter <Character>]]
|
||||||
[show all|students|teachers] [countsonly]
|
[show all|students|teachers] [countsonly]
|
||||||
[timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
@@ -471,7 +474,9 @@ To get information about courses created/updated within a particular time frame,
|
|||||||
For the filter to apply, `timefilter` and at least one of `start|starttime` and `end|endtime` must be specified.
|
For the filter to apply, `timefilter` and at least one of `start|starttime` and `end|endtime` must be specified.
|
||||||
|
|
||||||
By default, all basic course fields are displayed; use the following options to modify the output.
|
By default, all basic course fields are displayed; use the following options to modify the output.
|
||||||
* `owneremail` - Display course owner email; requires an additional API call per course.
|
* `owneremail` - Display course owner email.
|
||||||
|
* `ownername` - Display course owner name.
|
||||||
|
* These options require an additional API call per course.
|
||||||
* `alias|aliases` - Display course aliases; all aliases are in the single column `Aliases` separated by a delimiter; requires an additional API call per course.
|
* `alias|aliases` - Display course aliases; all aliases are in the single column `Aliases` separated by a delimiter; requires an additional API call per course.
|
||||||
* `delimiter <Character>` - Delimiter between aliases with `print` command.
|
* `delimiter <Character>` - Delimiter between aliases with `print` command.
|
||||||
* `aliasesincolumn` - Display course aliases; the `Aliases` column contains the number of aliases and `Aliases.0`, `Aliases.1`, ... contain the individual aliases; requires an additional API call per course.
|
* `aliasesincolumn` - Display course aliases; the `Aliases` column contains the number of aliases and `Aliases.0`, `Aliases.1`, ... contain the individual aliases; requires an additional API call per course.
|
||||||
@@ -525,7 +530,8 @@ gam print course-announcements [todrive <ToDriveAttribute>*]
|
|||||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||||
(courseannouncementids <CourseAnnouncementIDEntity>)|(announcementstates <CourseAnnouncementStateList>)*
|
(courseannouncementids <CourseAnnouncementIDEntity>)|(announcementstates <CourseAnnouncementStateList>)*
|
||||||
(orderby <CourseAnnouncementOrderByFieldName> [ascending|descending])*)
|
(orderby <CourseAnnouncementOrderByFieldName> [ascending|descending])*)
|
||||||
[creatoremail] [fields <CourseAnnouncementFieldNameList>]
|
[showcreatoremails|creatoremail] [showcreatornames|creatorname]
|
||||||
|
[fields <CourseAnnouncementFieldNameList>]
|
||||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
[countsonly] [formatjson [quotechar <Character>]]
|
[countsonly] [formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
@@ -553,7 +559,10 @@ To get information about course announcements created/updated/scheduled within a
|
|||||||
For the filter to apply, `timefilter` and at least one of `start|starttime` and `end|endtime` must be specified.
|
For the filter to apply, `timefilter` and at least one of `start|starttime` and `end|endtime` must be specified.
|
||||||
|
|
||||||
By default, all course announcement fields are displayed; use the following options to modify the output.
|
By default, all course announcement fields are displayed; use the following options to modify the output.
|
||||||
* `creatoremail` - Display course announcement creator email; requires an additional API call per course announcement.
|
* `creatoremail` - Display course announcement creator email.
|
||||||
|
* `creatorname` - Display course announcement creator name.
|
||||||
|
* These options require an additional API call per course.
|
||||||
|
* `alias|aliases` - Display course aliases; all aliases are in the single column `Aliases` separated by a delimiter; requires an additional API call per course.
|
||||||
* `fields <CourseAnnouncementFieldNameList>` - Select specific fields to display.
|
* `fields <CourseAnnouncementFieldNameList>` - Select specific fields to display.
|
||||||
|
|
||||||
Use the `countsonly` option to display the number of announcements in a course but not their details.
|
Use the `countsonly` option to display the number of announcements in a course but not their details.
|
||||||
@@ -573,7 +582,8 @@ gam print course-materials [todrive <ToDriveAttribute>*]
|
|||||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||||
(materialids <CourseMaterialIDEntity>)|(materialstates <CourseMaterialStateList>)*
|
(materialids <CourseMaterialIDEntity>)|(materialstates <CourseMaterialStateList>)*
|
||||||
(orderby <CourseMaterialOrderByFieldName> [ascending|descending])*)
|
(orderby <CourseMaterialOrderByFieldName> [ascending|descending])*)
|
||||||
[showcreatoremails|creatoremail] [showtopicnames] [fields <CourseMaterialFieldNameList>]
|
[showcreatoremails|creatoremail] [showcreatornames|creatorname] [showtopicnames]
|
||||||
|
[fields <CourseMaterialFieldNameList>]
|
||||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
[oneitemperrow]
|
[oneitemperrow]
|
||||||
[countsonly] [formatjson [quotechar <Character>]]
|
[countsonly] [formatjson [quotechar <Character>]]
|
||||||
@@ -602,8 +612,10 @@ By default, all published course materials for a course are displayed; use the f
|
|||||||
* `materialsstates <CourseMaterialsStateList>` - Display course materials with any of the specified states.
|
* `materialsstates <CourseMaterialsStateList>` - Display course materials with any of the specified states.
|
||||||
|
|
||||||
By default, all course materials fields are displayed; use the following options to modify the output.
|
By default, all course materials fields are displayed; use the following options to modify the output.
|
||||||
* `showcreatoremails` - Display course materials creator email; requires an additional API call per course materials.
|
* `showcreatoremails|creatoremail` - Display course materials creator email.
|
||||||
* `showtopicnames` - Display topic names; requires and additional API call per course.
|
* `showcreatornames|creatorname` - Display course materials creator name.
|
||||||
|
* These options require an additional API call per course.
|
||||||
|
* `showtopicnames` - Display topic names; requires an additional API call per course.
|
||||||
* `fields <CourseMaterialsFieldNameList>` - Select specific fields to display.
|
* `fields <CourseMaterialsFieldNameList>` - Select specific fields to display.
|
||||||
|
|
||||||
With `print course-materials`, the materials selected for display are all output on one row/line as a repeating item with the other course fields.
|
With `print course-materials`, the materials selected for display are all output on one row/line as a repeating item with the other course fields.
|
||||||
@@ -669,7 +681,8 @@ gam print course-work [todrive <ToDriveAttribute>*]
|
|||||||
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
(course|class <CourseEntity>)*|([teacher <UserItem>] [student <UserItem>] states <CourseStateList>])
|
||||||
(workids <CourseWorkIDEntity>)|(workstates <CourseWorkStateList>)*
|
(workids <CourseWorkIDEntity>)|(workstates <CourseWorkStateList>)*
|
||||||
(orderby <CourseWorkOrderByFieldName> [ascending|descending])*)
|
(orderby <CourseWorkOrderByFieldName> [ascending|descending])*)
|
||||||
[showcreatoremails] [showtopicnames] [fields <CourseWorkFieldNameList>]
|
[showcreatoremails|creatoremail] [showcreatornames|creatorname] [showtopicnames]
|
||||||
|
[fields <CourseWorkFieldNameList>]
|
||||||
[showstudentsaslist [<Boolean>]] [delimiter <Character>]
|
[showstudentsaslist [<Boolean>]] [delimiter <Character>]
|
||||||
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
[timefilter creationtime|updatetime|scheduledtime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
||||||
[oneitemperrow]
|
[oneitemperrow]
|
||||||
@@ -699,8 +712,10 @@ By default, all published course work for a course is displayed; use the followi
|
|||||||
* `workstates <CourseWorkStateList>` - Display course work with any of the specified states.
|
* `workstates <CourseWorkStateList>` - Display course work with any of the specified states.
|
||||||
|
|
||||||
By default, all course work fields are displayed; use the following options to modify the output.
|
By default, all course work fields are displayed; use the following options to modify the output.
|
||||||
* `showcreatoremails` - Display course work creator email; requires an additional API call per course work.
|
* `showcreatoremails|creatoremail` - Display course materials creator email.
|
||||||
* `showtopicnames` - Display topic names; requires and additional API call per course.
|
* `showcreatornames|creatorname` - Display course materials creator name.
|
||||||
|
* These options require an additional API call per course.
|
||||||
|
* `showtopicnames` - Display topic names; requires an additional API call per course.
|
||||||
* `fields <CourseWorkFieldNameList>` - Select specific fields to display.
|
* `fields <CourseWorkFieldNameList>` - Select specific fields to display.
|
||||||
|
|
||||||
By default, when course work is assigned to individual students, the student IDs are displayed in multiple indexed columns.
|
By default, when course work is assigned to individual students, the student IDs are displayed in multiple indexed columns.
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ Use this table to filter/query for specific device types:
|
|||||||
```
|
```
|
||||||
<AssetTag> ::= <String>
|
<AssetTag> ::= <String>
|
||||||
<AssetTagList> ::= "<AssetTag>(,<AssetTag>)*"
|
<AssetTagList> ::= "<AssetTag>(,<AssetTag>)*"
|
||||||
<QueryDevice> ::= <String>
|
<QueryDevice> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryDeviceList> ::= "<QueryDevice>(,<QueryDevice>)*"
|
<QueryDeviceList> ::= "<QueryDevice>(,<QueryDevice>)*"
|
||||||
<DeviceID> ::= devices/<String>
|
<DeviceID> ::= devices/<String>
|
||||||
@@ -133,6 +133,8 @@ Use this table to filter/query for specific device types:
|
|||||||
|
|
||||||
```
|
```
|
||||||
## Create a company device
|
## Create a company device
|
||||||
|
This method is available only to customers who have one of the following SKUs: Enterprise Standard, Enterprise Plus, Enterprise for Education, and Cloud Identity Premium.
|
||||||
|
|
||||||
Adds a new device to the Google company-owned inventory. Once a user is assigned and enrolled on the device the device will be considered company-owned for management purposes.
|
Adds a new device to the Google company-owned inventory. Once a user is assigned and enrolled on the device the device will be considered company-owned for management purposes.
|
||||||
The device will also register as company-owned with Google services like [Context-Aware Access (CAA)](https://support.google.com/a/answer/9275380).
|
The device will also register as company-owned with Google services like [Context-Aware Access (CAA)](https://support.google.com/a/answer/9275380).
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -76,12 +76,14 @@ and Cloud Identity Premium accounts.
|
|||||||
<RESubstitution> ::= <String>>
|
<RESubstitution> ::= <String>>
|
||||||
|
|
||||||
<GroupSettingsAttribute> ::=
|
<GroupSettingsAttribute> ::=
|
||||||
|
(accesstype public|team|announcementonly|restricted)|
|
||||||
(allowexternalmembers <Boolean>)|
|
(allowexternalmembers <Boolean>)|
|
||||||
(allowwebposting <Boolean>)|
|
(allowwebposting <Boolean>)|
|
||||||
(archiveonly <Boolean>)|
|
(archiveonly <Boolean>)|
|
||||||
(customfootertext <String>)|
|
(customfootertext <String>)|
|
||||||
(customreplyto <EmailAddress>)|
|
(customreplyto <EmailAddress>)|
|
||||||
(defaultmessagedenynotificationtext <String>)|
|
(defaultmessagedenynotificationtext <String>)|
|
||||||
|
(defaultsender self|group)|
|
||||||
(description <String>)|
|
(description <String>)|
|
||||||
(enablecollaborativeinbox|collaborative <Boolean>)|
|
(enablecollaborativeinbox|collaborative <Boolean>)|
|
||||||
(includeinglobaladdresslist|gal <Boolean>)|
|
(includeinglobaladdresslist|gal <Boolean>)|
|
||||||
@@ -95,7 +97,8 @@ and Cloud Identity Premium accounts.
|
|||||||
(sendmessagedenynotification <Boolean>)|
|
(sendmessagedenynotification <Boolean>)|
|
||||||
(spammoderationlevel allow|moderate|silently_moderate|reject)|
|
(spammoderationlevel allow|moderate|silently_moderate|reject)|
|
||||||
(whocanadd all_members_can_add|all_managers_can_add|all_owners_can_add|none_can_add)|
|
(whocanadd all_members_can_add|all_managers_can_add|all_owners_can_add|none_can_add)|
|
||||||
(whocancontactowner anyone_can_contact|all_in_domain_can_contact|all_members_can_contact|all_managers_can_contact)|
|
(whocanaddexternalmembers only_owners_can_add_external_members|end_users_can_add_external_members)|
|
||||||
|
(whocancontactowner anyone_can_contact|all_in_domain_can_contact|all_members_can_contact|all_managers_can_contact|all_owners_can_contact)|
|
||||||
(whocanjoin anyone_can_join|all_in_domain_can_join|invited_can_join|can_request_to_join)|
|
(whocanjoin anyone_can_join|all_in_domain_can_join|invited_can_join|can_request_to_join)|
|
||||||
(whocanleavegroup all_members_can_leave|all_managers_can_leave|all_owners_can_leave|none_can_leave)|
|
(whocanleavegroup all_members_can_leave|all_managers_can_leave|all_owners_can_leave|none_can_leave)|
|
||||||
(whocanpostmessage none_can_post|all_managers_can_post|all_members_can_post|all_owners_can_post|all_in_domain_can_post|anyone_can_post)|
|
(whocanpostmessage none_can_post|all_managers_can_post|all_members_can_post|all_owners_can_post|all_in_domain_can_post|anyone_can_post)|
|
||||||
@@ -139,7 +142,7 @@ and Cloud Identity Premium accounts.
|
|||||||
<GroupAttribute> ::=
|
<GroupAttribute> ::=
|
||||||
<JSONData>|
|
<JSONData>|
|
||||||
<GroupSettingsAttribute>|
|
<GroupSettingsAttribute>|
|
||||||
(whocandiscovergroup allmemberscandiscover|allindomaincandiscover|anyonecandiscover)|
|
(whocandiscovergroup all_members_can_discover|all_in_domain_can_discover|anyone_can_discover)|
|
||||||
(whocanassistcontent all_members|owners_and_managers|managers_only|owners_only|none)|
|
(whocanassistcontent all_members|owners_and_managers|managers_only|owners_only|none)|
|
||||||
(whocanmoderatecontent all_members|owners_and_managers|owners_only|none)|
|
(whocanmoderatecontent all_members|owners_and_managers|owners_only|none)|
|
||||||
(whocanmoderatemembers all_members|owners_and_managers|owners_only|none)|
|
(whocanmoderatemembers all_members|owners_and_managers|owners_only|none)|
|
||||||
@@ -182,6 +185,7 @@ and Cloud Identity Premium accounts.
|
|||||||
spammoderationlevel|
|
spammoderationlevel|
|
||||||
whocanaddreferences|
|
whocanaddreferences|
|
||||||
whocanadd|
|
whocanadd|
|
||||||
|
whocanaddexternalmembers|
|
||||||
whocanapprovemessages|
|
whocanapprovemessages|
|
||||||
whocanassigntopics|
|
whocanassigntopics|
|
||||||
whocanassistcontent|
|
whocanassistcontent|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [Policies](#policies)
|
- [Policies](#policies)
|
||||||
- [Display Cloud Identity Policies](#display-cloud-identity-policies)
|
- [Display Cloud Identity Policies](#display-cloud-identity-policies)
|
||||||
|
- [Create and Update Cloud Identity Policies](#create-and-update-cloud-identity-policies)
|
||||||
|
- [Delete Cloud Identity Policies](#delete-cloud-identity-policies)
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Policy API](https://cloud.google.com/identity/docs/reference/rest/v1/policies)
|
* [Policy API](https://cloud.google.com/identity/docs/reference/rest/v1/policies)
|
||||||
@@ -35,6 +37,9 @@ You must enable access to policies in the GCP cloud console.
|
|||||||
* Click Organization Policy Administrator
|
* Click Organization Policy Administrator
|
||||||
* Click Save
|
* Click Save
|
||||||
|
|
||||||
|
The commands to create, update and delete Cloud Identity policies for data loss prevention (DLP) rules and detectors
|
||||||
|
were added in version `7.46.00`.
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
```
|
```
|
||||||
<CIPolicyName> ::= policies/<String>|settings/<String>|<String>
|
<CIPolicyName> ::= policies/<String>|settings/<String>|<String>
|
||||||
@@ -87,7 +92,7 @@ gam show policies
|
|||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
By default, all policies are displayed.
|
By default, all policies are displayed.
|
||||||
* `filter <String>` - Display filtered policies, See https://cloud.google.com/identity/docs/reference/rest/v1beta1/policies/list
|
* `filter <String>` - Display filtered policies, See https://cloud.google.com/identity/docs/reference/rest/v1/policies/list
|
||||||
* `group <REMatchPattern>` - Only display policies whose group email address matches the `<REMatchPattern>`
|
* `group <REMatchPattern>` - Only display policies whose group email address matches the `<REMatchPattern>`
|
||||||
* `ou|org|orgunit <REMatchPattern>` - Only display policies whose OU path matches the `<REMatchPattern>`
|
* `ou|org|orgunit <REMatchPattern>` - Only display policies whose OU path matches the `<REMatchPattern>`
|
||||||
|
|
||||||
@@ -110,7 +115,7 @@ gam print policies [todrive <ToDriveAttribute>*]
|
|||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
By default, all policies are displayed:
|
By default, all policies are displayed:
|
||||||
* `filter <String>` - Display filtered policies, See https://cloud.google.com/identity/docs/reference/rest/v1beta1/policies/list
|
* `filter <String>` - Display filtered policies, See https://cloud.google.com/identity/docs/reference/rest/v1/policies/list
|
||||||
* `group <REMatchPattern>` - Only display policies whose group email address matches the `<REMatchPattern>`
|
* `group <REMatchPattern>` - Only display policies whose group email address matches the `<REMatchPattern>`
|
||||||
* `ou|org|orgunit <REMatchPattern>` - Only display policies whose OU path matches the `<REMatchPattern>`
|
* `ou|org|orgunit <REMatchPattern>` - Only display policies whose OU path matches the `<REMatchPattern>`
|
||||||
|
|
||||||
@@ -152,3 +157,32 @@ Print all polices that apply to the OU "/Staff" and its sub-OUs.
|
|||||||
```
|
```
|
||||||
gam redirect csv ./StaffPolicies.csv print policies ou "^/Staff"
|
gam redirect csv ./StaffPolicies.csv print policies ou "^/Staff"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Create and Update Cloud Identity Policies
|
||||||
|
Policies can be complex objects, it is probably easiest to create template policies in the Admin console (under Rules),
|
||||||
|
output the JSON format data for those policies to be used in subsequent create and update commands.
|
||||||
|
|
||||||
|
```
|
||||||
|
gam create policy
|
||||||
|
json <JSONData>
|
||||||
|
[(ou|orgunit <OrgUnitItem>)|(group <GroupItem>)|(query <String>)]
|
||||||
|
gam update policy
|
||||||
|
json <JSONData>
|
||||||
|
[(ou|orgunit <OrgUnitItem>)|(group <GroupItem>)|(query <String>)]
|
||||||
|
```
|
||||||
|
```
|
||||||
|
gam redirect stdout ./policy.json info policies policies/akajj264aoclblvncu
|
||||||
|
Make changes to policy.json and update the policy.
|
||||||
|
gam update policy json file policy.json
|
||||||
|
|
||||||
|
Update the policy to reference a different group.
|
||||||
|
gam update policy json file policy.json group <EmailAddress>
|
||||||
|
|
||||||
|
Make changes to policy.json and create a new policy in a different OU.
|
||||||
|
gam create policy json file policy.json ou <OrgUnitPath>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Delete Cloud Identity Policies
|
||||||
|
```
|
||||||
|
gam delete policies <CIPolicyNameEntity>
|
||||||
|
```
|
||||||
|
|||||||
@@ -3,9 +3,19 @@
|
|||||||
- [Notes](#notes)
|
- [Notes](#notes)
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [User Type Entity](#user-type-entity)
|
- [User Type Entity](#user-type-entity)
|
||||||
|
- [All non-archived Users](#all-non-archived-users)
|
||||||
|
- [All archived Users](#all-archived-Users)
|
||||||
- [All non-suspended Users](#all-non-suspended-users)
|
- [All non-suspended Users](#all-non-suspended-users)
|
||||||
- [All suspended Users](#all-suspended-Users)
|
- [All suspended Users](#all-suspended-Users)
|
||||||
|
- [All archived or suspended Users](#all-archived-or-suspended-users)
|
||||||
|
- [All non-archived and non-suspended Users](#all-non-archived-and-non-suspended-users)
|
||||||
- [All non-suspended and suspended Users](#all-non-suspended-and-suspended-users)
|
- [All non-suspended and suspended Users](#all-non-suspended-and-suspended-users)
|
||||||
|
- [All non-suspended Guests](#all-non-suspended-guests)
|
||||||
|
- [All suspended Guests](#all-suspended-Guests)
|
||||||
|
- [All non-suspended and suspended Guests](#all-non-suspended-and-suspended-guests)
|
||||||
|
- [All non-suspended Users and Guests](#all-non-suspended-users-and-guests)
|
||||||
|
- [All suspended Users and Guests](#all-suspended-users-and-guests)
|
||||||
|
- [All non-suspended and suspended Users and Guests](#all-non-suspended-and-suspended-users-and-guests)
|
||||||
- [A single User](#a-single-user)
|
- [A single User](#a-single-user)
|
||||||
- [A list of Users](#a-list-of-users)
|
- [A list of Users](#a-list-of-users)
|
||||||
- [The admin user referenced in oauth2.txt](#the-admin-user-referenced-in-oauth2txt)
|
- [The admin user referenced in oauth2.txt](#the-admin-user-referenced-in-oauth2txt)
|
||||||
@@ -40,6 +50,18 @@
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
|
The following items referencing guest users were added to `<UserTypeEntity>` in version 7.43.00.
|
||||||
|
```
|
||||||
|
all_guests
|
||||||
|
all_guests_ns
|
||||||
|
all_guests_susp
|
||||||
|
all_guests_ns_susp
|
||||||
|
all_users_and_guests
|
||||||
|
all_users_and_guests_ns
|
||||||
|
all_users_and_guests_susp
|
||||||
|
all_users_and_guests_ns_susp
|
||||||
|
```
|
||||||
|
|
||||||
The followig items referencing non-archived/archived users were added to `<UserTypeEntity>` in version 7.22.00.
|
The followig items referencing non-archived/archived users were added to `<UserTypeEntity>` in version 7.22.00.
|
||||||
```
|
```
|
||||||
all users_na
|
all users_na
|
||||||
@@ -123,6 +145,8 @@ ous_and_children_na_ns
|
|||||||
|
|
||||||
<UserTypeEntity> ::=
|
<UserTypeEntity> ::=
|
||||||
(all users|users_na|users_arch|users_ns|users_susp|users_ns_susp|users_arch_or_susp|users_na_ns)|
|
(all users|users_na|users_arch|users_ns|users_susp|users_ns_susp|users_arch_or_susp|users_na_ns)|
|
||||||
|
(all guests|guests_ns|guests_susp|guests_ns_susp)|
|
||||||
|
(all users_and_guests|users_and_guests_ns|users_and_guests_susp|users_and_guests_ns_susp)|
|
||||||
(user <UserItem>)|
|
(user <UserItem>)|
|
||||||
(users <UserList>)|
|
(users <UserList>)|
|
||||||
(oauthuser)
|
(oauthuser)
|
||||||
@@ -232,6 +256,26 @@ Use these options to select users for GAM commands.
|
|||||||
## All non-suspended and suspended Users
|
## All non-suspended and suspended Users
|
||||||
* `all users_ns_susp`
|
* `all users_ns_susp`
|
||||||
|
|
||||||
|
## All non-suspended Guests
|
||||||
|
* `all guests`
|
||||||
|
* `all guests_ns`
|
||||||
|
|
||||||
|
## All suspended Guests
|
||||||
|
* `all guests_susp`
|
||||||
|
|
||||||
|
## All non-suspended and suspended Guests
|
||||||
|
* `all guests_ns_susp`
|
||||||
|
|
||||||
|
## All non-suspended Users and Guests
|
||||||
|
* `all users_and_guests`
|
||||||
|
* `all users_and_guests_ns`
|
||||||
|
|
||||||
|
## All suspended Users and Guests
|
||||||
|
* `all users_and_guests_susp`
|
||||||
|
|
||||||
|
## All non-suspended and suspended Users and Guests
|
||||||
|
* `all users_and_guests_ns_susp`
|
||||||
|
|
||||||
## A single User
|
## A single User
|
||||||
* `user <UserItem>`
|
* `user <UserItem>`
|
||||||
|
|
||||||
|
|||||||
@@ -16,12 +16,12 @@ In zsh, if an argument contains a `~`, `|`, `!`, `>`, or `<`, you must enclose t
|
|||||||
|
|
||||||
To embed a `'` in a string enclosed in `"`, enter `'`; `name "Test'Group"`.
|
To embed a `'` in a string enclosed in `"`, enter `'`; `name "Test'Group"`.
|
||||||
|
|
||||||
|
To embed a `"` in a string enclosed in `"`, enter `\"`; `name "Test\"Group"`.
|
||||||
|
|
||||||
To embed a `"` in a string enclosed in `'`, enter `"`; `name 'Test"Group'`.
|
To embed a `"` in a string enclosed in `'`, enter `"`; `name 'Test"Group'`.
|
||||||
|
|
||||||
To embed a `'` in a string enclosed in `'`, enter `'\''`; `name 'Test'\''Group'`.
|
To embed a `'` in a string enclosed in `'`, enter `'\''`; `name 'Test'\''Group'`.
|
||||||
|
|
||||||
To embed a `"` in a string enclosed in `"`, enter `\"`; `name "Test\"Group"`.
|
|
||||||
|
|
||||||
Linux and MacOS do not recognize smart or curly quotes, `“` and `”`, they can not be used to enclose arguments.
|
Linux and MacOS do not recognize smart or curly quotes, `“` and `”`, they can not be used to enclose arguments.
|
||||||
|
|
||||||
## Windows Command Prompt
|
## Windows Command Prompt
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ gam info domain [<DomainName>]
|
|||||||
gam show domains
|
gam show domains
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
For `info`, if `<DomainName>` is omitted, information about the primary domain will be displayed.
|
For `info`, if `<DomainName>` is omitted, customer information about the primary domain will be displayed.
|
||||||
|
|
||||||
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.
|
||||||
|
|||||||
@@ -36,13 +36,15 @@ gam version
|
|||||||
Updating from Jay’s GAM to GAM7 may introduce some issues. If your GAM install is critical to your product Google environment you may want to wait for some of the upgrade challenges to be ironed out in the next few weeks. Having said that, GAM stores all of it’s configuration in the GAM install folder so backing up that folder should preserve your old GAM config. For [upgrade instructions see the wiki](https://github.com/GAM-team/GAM/wiki/How-to-upgrade-from-Standard-GAM).
|
Updating from Jay’s GAM to GAM7 may introduce some issues. If your GAM install is critical to your product Google environment you may want to wait for some of the upgrade challenges to be ironed out in the next few weeks. Having said that, GAM stores all of it’s configuration in the GAM install folder so backing up that folder should preserve your old GAM config. For [upgrade instructions see the wiki](https://github.com/GAM-team/GAM/wiki/How-to-upgrade-from-Standard-GAM).
|
||||||
|
|
||||||
# What does this mean if I’m using Ross’ GAM-ADV?
|
# What does this mean if I’m using Ross’ GAM-ADV?
|
||||||
GAM7 is effectively the same source as GAMADV-XTD3 with minor changes to point to the [github.com/GAM-team/GAM](http://github.com/GAM-team/GAM) site. On Linux/MacOS you should be able to run:
|
GAM7 is effectively the same source as GAMADV-XTD3 with minor changes to point to the [github.com/GAM-team/GAM](http://github.com/GAM-team/GAM) site.
|
||||||
|
|
||||||
|
On Linux/MacOS you should be able to run:
|
||||||
|
|
||||||
```
|
```
|
||||||
bash <(curl -s -S -L https://git.io/gam-install) -l
|
bash <(curl -s -S -L https://git.io/gam-install) -l
|
||||||
```
|
```
|
||||||
|
|
||||||
To upgrade. On Windows, download the latest MSI from [git.io/gam-releases](http://git.io/gam-releases) and install it to the same path you had GAM-ADV installed.
|
On Windows, download the latest EXE installer from [git.io/gam-releases](http://git.io/gam-releases), run it and install it to the same path you had GAM-ADV installed.
|
||||||
|
|
||||||
Both GAM7 and GAM-ADV versions use the same configuration file (gam.cfg), and credentials; they are interchangeable.
|
Both GAM7 and GAM-ADV versions use the same configuration file (gam.cfg), and credentials; they are interchangeable.
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,219 @@ 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.46.01
|
||||||
|
|
||||||
|
Fixed bug in `gam <CrOSTypeEntity> issuecommand command <CrOSCommand> ... csv` where
|
||||||
|
command execution status lines were improperly indented.
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.6.
|
||||||
|
|
||||||
|
### 7.46.00
|
||||||
|
|
||||||
|
Added commands to create, update and delete Cloud Identity policies for data loss prevention (DLP) rules and detectors.
|
||||||
|
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Cloud-Identity-Policies
|
||||||
|
* See: https://workspaceupdates.googleblog.com/2026/06/introducing-workspace-policy-api-mutate-endpoints-for-DLP.html
|
||||||
|
|
||||||
|
### 7.45.00
|
||||||
|
|
||||||
|
Added options `isdisabled [<Boolean>]`, `disabledafter <DateTime>` and `disabledbefore <DateTime>`
|
||||||
|
to `gam print users`. These options along with `issuspended [<Boolean>]` and `isarchived [<Boolean>]`
|
||||||
|
are useful when identifying users to deprovision.
|
||||||
|
|
||||||
|
Added option `movefilepermissions [<Boolean>]]` to `gam <UserTypeEntity> move drivefile` that, when False,
|
||||||
|
causes GAM to remove ACLs from a file before moving it; this will be most useful when moving files to
|
||||||
|
Shared Drives so that only the Shared Drive ACls apply. When not specified or set True, file permissions
|
||||||
|
are not removed; this is the current GAM behavior.
|
||||||
|
|
||||||
|
Upgraded to OpenSSL 4.0.1.
|
||||||
|
|
||||||
|
### 7.44.03
|
||||||
|
|
||||||
|
Added `writerwithoutprivateaccess` to `<CalendarACLRole>`; this will become effective 2026-06-29.
|
||||||
|
* See: https://developers.google.com/workspace/calendar/release-notes#June_01_2026
|
||||||
|
|
||||||
|
### 7.44.02
|
||||||
|
|
||||||
|
Added fields `bluetoothadapterinfo` and `osversioncompliance` to `<CrOSFieldName>` for use
|
||||||
|
in `gam info|print cros`.
|
||||||
|
|
||||||
|
### 7.44.01
|
||||||
|
|
||||||
|
Added option `oneitemperrow` to `gam print crostelemetry` to have each of a device's
|
||||||
|
report field entries displayed on a separate row with all of the other device fields.
|
||||||
|
|
||||||
|
Added additional fields to `<CrOSTelemetryFieldName>`and `<CrOSTelemetryListFieldName>`:
|
||||||
|
```
|
||||||
|
appreport
|
||||||
|
heartbeatstatusreport
|
||||||
|
kioskappstatusreport
|
||||||
|
networkbandwidthreport
|
||||||
|
runtimecountersreport
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.44.00
|
||||||
|
|
||||||
|
Added support for User data `archivalTime` and `suspensionTime` that is available
|
||||||
|
when fields `archived` and `suspended` are requested in `gam info user` and `gam print users`.
|
||||||
|
|
||||||
|
Added the following options to `gam <UserTypeEntity> show chatmessages` to simplify specifying a filter.
|
||||||
|
```
|
||||||
|
start|starttime <Date>|<Time>
|
||||||
|
end|endtime <Date>|<Time>
|
||||||
|
range <Date>|<Time> <Date>|<Time>
|
||||||
|
thread <ChatThread>
|
||||||
|
```
|
||||||
|
|
||||||
|
Added commands to search for and display chat messages.
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Users-Chat#display-chat-messages-by-searching
|
||||||
|
|
||||||
|
These commands are in Developer Preview; to use them you must have these values set in `gam.cfg`.
|
||||||
|
```
|
||||||
|
developer_preview_apis = chat
|
||||||
|
developer_preview_api_key = <DeveloperPreviewKey>
|
||||||
|
```
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.5.
|
||||||
|
|
||||||
|
### 7.43.10
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> forward message|thread [recipient|to] <RecipientEntity>` to not forward messages
|
||||||
|
to the `Bcc` recipients of the original message.
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> forward message|thread [recipient|to] <RecipientEntity> addorigfieldstosubject`
|
||||||
|
where the recipient of the forwarded message was added to the subject line instead of the recipient of the original message.
|
||||||
|
|
||||||
|
### 7.43.09
|
||||||
|
|
||||||
|
Fixed bug in `gam <UserTypeEntity> print filelist` that caused a trap.
|
||||||
|
|
||||||
|
### 7.43.08
|
||||||
|
|
||||||
|
Fixed bug and formatting issues in `gam info device <DeviceEntity>`.
|
||||||
|
|
||||||
|
### 7.43.07
|
||||||
|
|
||||||
|
Improved validation of `<QueryCrOS>`, `<QueryDevice>` and `<QueryMobile>`.
|
||||||
|
|
||||||
|
### 7.43.06
|
||||||
|
|
||||||
|
Updated commands that use `<QueryCrOS>`, `<QueryDevice>` or `<QueryMobile>` to validate
|
||||||
|
that it is of the form `field:value` and that `value` does not contain a '?'.
|
||||||
|
Without validation, Google can return many more devices than are expected.
|
||||||
|
|
||||||
|
### 7.43.05
|
||||||
|
|
||||||
|
Added option `matchfield attendeesorganizer <Boolean> <EmailAddressEntity>` to `<EventMatchProperty>`
|
||||||
|
that is used in commands that process events. The match is true if all of the addresses in `<EmailAddressEntity>`
|
||||||
|
are present as attendees in the event and are an organizer or not based on `<Boolean>`.
|
||||||
|
|
||||||
|
Added option `max_to_deprov <Integer>` to `gam update cros <CrOSEntity> action <CrOSAction>`
|
||||||
|
that is used when `<CrOSAction>` is any of the following:
|
||||||
|
```
|
||||||
|
deprovision_different_model_replace|
|
||||||
|
deprovision_different_model_replacement|
|
||||||
|
deprovision_retiring_device|
|
||||||
|
deprovision_same_model_replace|
|
||||||
|
deprovision_same_model_replacement|
|
||||||
|
deprovision_upgrade_transfer
|
||||||
|
```
|
||||||
|
`max_to_deprov <Integer>` - No deprovisions are processed if the number of devices in `<CrOSEntity>` exceeds `<Integer>`;
|
||||||
|
the default value is one; set `<Integer>` to 0 for no limit.
|
||||||
|
|
||||||
|
### 7.43.04
|
||||||
|
|
||||||
|
Added option `include_suspended_zeros [<Boolean>]` to `gam print vaultcounts` that causes
|
||||||
|
GAM to generate zero count lines for suspended users with zero items as well as non-suspended users.
|
||||||
|
|
||||||
|
### 7.43.03
|
||||||
|
|
||||||
|
Added option `parentpathonly [<Boolean>]` to the following commands that causes GAM
|
||||||
|
to display only the parent folder names when displaying the path to a file.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> info drivefile ... filepath|fullpath
|
||||||
|
gam <UserTypeEntity> show fileinfo ... filepath|fullpath
|
||||||
|
gam <UserTypeEntity> print|show filepath
|
||||||
|
gam <UserTypeEntity> print filelist ... filepath|fullpath
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.43.02
|
||||||
|
|
||||||
|
Added option `maxactivities <Integer>` to `gam <UserTypeEntity> print driveactivity` to limit
|
||||||
|
the number of activities displayed; the default is 0, no limit.
|
||||||
|
|
||||||
|
### 7.43.01
|
||||||
|
|
||||||
|
Updated `gam info user` and `gam print users` to display guest user attributes: `isGuestUser, guestAccountInfo`
|
||||||
|
|
||||||
|
Expanded `<UserTypeEntity>` to allow specification of guest users.
|
||||||
|
* See [Collections of Users](Collections-of-Users)
|
||||||
|
|
||||||
|
### 7.42.00
|
||||||
|
|
||||||
|
In versions prior to 7.42.00, when `redirect csv <FileName>` was used, GAM did not open and write `<FileName>`
|
||||||
|
until all processing was complete; if `<FileName>` was not accessible, an error was generated
|
||||||
|
and no results were saved. Now, `<FileName>` is opened initially to verify accessiblity
|
||||||
|
and then written when processing is complete.
|
||||||
|
|
||||||
|
In the unlikely event that this causes issues, you can do `redirect csv <FileName> delayopen`
|
||||||
|
to get the previous behavior.
|
||||||
|
|
||||||
|
### 7.41.03
|
||||||
|
|
||||||
|
Fixed bug in the following:
|
||||||
|
Added the following to `<RowValueFilter>` used in CSV input/output row filtering; these are
|
||||||
|
synonyms for `count` and `countrange`.
|
||||||
|
```
|
||||||
|
[(any|all):]number<Operator><Number>|
|
||||||
|
[(any|all):]numberrange!=<Number>/<Number>|
|
||||||
|
[(any|all):]numberrange=<Number>/<Number>|
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.41.02
|
||||||
|
|
||||||
|
Added option `ownername` to `gam info|print courses` to have GAM display the course owners full name;
|
||||||
|
there is an extra API call per course to get the name.
|
||||||
|
|
||||||
|
Added option `creatorname` to `gam print course-announcements|course-materials|course-works` to have
|
||||||
|
GAM display the item creators full name; there is an extra API call per course to get the name.
|
||||||
|
|
||||||
|
After creating a group, it may be sometime, e.g. 30-45 seconds, before members can
|
||||||
|
successfully be added to the group even though the API reported that the group was created.
|
||||||
|
The following options can be used with `gam create group` to verify that the group is actually ready to be updated.
|
||||||
|
This will be most useful in scripts that are used to create and then populate groups.
|
||||||
|
```
|
||||||
|
verifycreationretries <Integer> - Verify group creation, defaults to 0, no verification performed, range 0-20
|
||||||
|
verifycreationinitialdelay <Integer> - Number of seconds to delay before first verification performed, defaults to 5, range 0-60
|
||||||
|
verifycreationretrydelay <Integer> - Number of seconds to delay between verificaton retries, defaults to 5, range 1-60
|
||||||
|
```
|
||||||
|
|
||||||
|
If you have a script that deletes a group and then immediately tries to create a new group with the same email address,
|
||||||
|
you may run into issues. There seems to be a 30-45 second window after the deletion in which a couple
|
||||||
|
of strange errors can occur on the creation: `Resource not found` and `Duplicate`.
|
||||||
|
The following options can be used with `gam create group` to handle these errors. This will be most useful
|
||||||
|
in scripts that are used to delete and then immediately recreate groups.
|
||||||
|
```
|
||||||
|
recentdeleteretries <Integer> - Handle group delete/create errors, defaults to 0, no errors handled, range 0-20
|
||||||
|
recentdeleteretrydelay <Integer> - Number of seconds to delay between retries, defaults to 5, range 1-60
|
||||||
|
```
|
||||||
|
|
||||||
|
Added the following to `<RowValueFilter>` used in CSV input/output row filtering; these are
|
||||||
|
synonyms for `count` and `countrange`.
|
||||||
|
```
|
||||||
|
[(any|all):]number<Operator><Number>|
|
||||||
|
[(any|all):]numberrange!=<Number>/<Number>|
|
||||||
|
[(any|all):]numberrange=<Number>/<Number>|
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.41.01
|
||||||
|
|
||||||
|
Fixed bug in `gam print cigroups members managers owners countsonly totalcount internal external` that caused a trap.
|
||||||
|
|
||||||
|
### 7.41.00
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.4 and OpenSSL 4.0.0.
|
||||||
|
|
||||||
### 7.40.03
|
### 7.40.03
|
||||||
|
|
||||||
Added option `whocanaddexternalmembers only_owners_can_add_external_members|end_users_can_add_external_members` to `<GroupSettingsAttribute>`.
|
Added option `whocanaddexternalmembers only_owners_can_add_external_members|end_users_can_add_external_members` to `<GroupSettingsAttribute>`.
|
||||||
@@ -17,7 +230,7 @@ It appears that `allowexternalmembers true` must be set in the same command.
|
|||||||
Added option `whocanaddexternalmembers` to `<GroupFieldName>`.
|
Added option `whocanaddexternalmembers` to `<GroupFieldName>`.
|
||||||
These options are not in general release as of 2026-04-13; experiment.
|
These options are not in general release as of 2026-04-13; experiment.
|
||||||
|
|
||||||
### - 7.40.02
|
### 7.40.02
|
||||||
|
|
||||||
Updated `gam info|print cigroups` and `gam print|show cigroup-members` to handle trap caused
|
Updated `gam info|print cigroups` and `gam print|show cigroup-members` to handle trap caused
|
||||||
by API returning invalid member data; `preferredMemberKey` with no `id`.
|
by API returning invalid member data; `preferredMemberKey` with no `id`.
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
- [GUI API Group access type settings mapping](#gui-api-group-access-type-settings-mapping)
|
- [GUI API Group access type settings mapping](#gui-api-group-access-type-settings-mapping)
|
||||||
- [whoCanViewMembership and whoCanDiscoverGroup interactions](#whocanviewmembership-and-whocandiscovergroup-interactions)
|
- [whoCanViewMembership and whoCanDiscoverGroup interactions](#whocanviewmembership-and-whocandiscovergroup-interactions)
|
||||||
- [Manage groups](#manage-groups)
|
- [Manage groups](#manage-groups)
|
||||||
|
- [Handle group deletion and immediate recreation](#handle-group-deletion-and-immediate-recreation)
|
||||||
|
- [Verify group creation](#verify-group-creation)
|
||||||
- [Update a group's primary email address](#update-a-groups-primary-email-address)
|
- [Update a group's primary email address](#update-a-groups-primary-email-address)
|
||||||
- [Update a group's settings with JSON data](#update-a-groups-settings-with-json-data)
|
- [Update a group's settings with JSON data](#update-a-groups-settings-with-json-data)
|
||||||
- [Display information about specific groups](#display-information-about-specific-groups)
|
- [Display information about specific groups](#display-information-about-specific-groups)
|
||||||
@@ -79,7 +81,7 @@ See [Collections of Items](Collections-of-Items)
|
|||||||
(isarchived <Boolean>)|
|
(isarchived <Boolean>)|
|
||||||
(memberscanpostasthegroup <Boolean>)|
|
(memberscanpostasthegroup <Boolean>)|
|
||||||
(messagemoderationlevel moderate_all_messages|moderate_non_members|moderate_new_members|moderate_none)|
|
(messagemoderationlevel moderate_all_messages|moderate_non_members|moderate_new_members|moderate_none)|
|
||||||
(name <String>)|
|
(name|displayname <String>)|
|
||||||
(primarylanguage <Language>)|
|
(primarylanguage <Language>)|
|
||||||
(replyto reply_to_custom|reply_to_sender|reply_to_list|reply_to_owner|reply_to_ignore|reply_to_managers)|
|
(replyto reply_to_custom|reply_to_sender|reply_to_list|reply_to_owner|reply_to_ignore|reply_to_managers)|
|
||||||
(sendmessagedenynotification <Boolean>)|
|
(sendmessagedenynotification <Boolean>)|
|
||||||
@@ -350,6 +352,8 @@ These commands allow you to create, update and delete groups.
|
|||||||
gam create group <EmailAddress>
|
gam create group <EmailAddress>
|
||||||
[copyfrom <GroupItem>] <GroupAttribute>*
|
[copyfrom <GroupItem>] <GroupAttribute>*
|
||||||
[verifynotinvitable]
|
[verifynotinvitable]
|
||||||
|
[recentdeleteretries <Integer>] [recentdeleteretrydelay <Integer>]
|
||||||
|
[verifycreationretries <Integer>] [verifycreationinitialdelay <Integer>] [verifycreationretrydelay <Integer>]
|
||||||
gam update group|groups <GroupEntity> [email <EmailAddress>]
|
gam update group|groups <GroupEntity> [email <EmailAddress>]
|
||||||
[updateprimaryemail <RESearchPattern> <RESubstitution> [preview]]
|
[updateprimaryemail <RESearchPattern> <RESubstitution> [preview]]
|
||||||
[copyfrom <GroupItem>] <GroupAttribute>*
|
[copyfrom <GroupItem>] <GroupAttribute>*
|
||||||
@@ -367,6 +371,28 @@ You can update a group to a security group with the `makesecuritygroup` option.
|
|||||||
|
|
||||||
When deleting and `noactionifalias` is specified, no action is performed if `<GroupEntity>` specifies an alias rather than a primary email address.
|
When deleting and `noactionifalias` is specified, no action is performed if `<GroupEntity>` specifies an alias rather than a primary email address.
|
||||||
|
|
||||||
|
## Handle group deletion and immediate recreation
|
||||||
|
If you have a script that deletes a group and then immediately tries to create a new group with the same email address,
|
||||||
|
you may run into issues. There seems to be a 30-45 second window after the deletion in which a couple
|
||||||
|
of strange errors can occur on the creation: `Resource not found` and `Duplicate`.
|
||||||
|
The following options can be used with `gam create group` to handle these errors. This will be most useful
|
||||||
|
in scripts that are used to delete and then immediately recreate groups.
|
||||||
|
```
|
||||||
|
recentdeleteretries <Integer> - Handle group delete/create errors, defaults to 0, no errors handled, range 0-20
|
||||||
|
recentdeleteretrydelay <Integer> - Number of seconds to delay between retries, defaults to 5, range 1-60
|
||||||
|
```
|
||||||
|
|
||||||
|
## Verify group creation
|
||||||
|
After creating a group, it may be sometime, e.g. 30-45 seconds, before members can
|
||||||
|
successfully be added to the group even though the API reported that the group was created.
|
||||||
|
The following options can be used with `gam create group` to verify that the group is actually ready to be updated.
|
||||||
|
This will be most useful in scripts that are used to create and then populate groups.
|
||||||
|
```
|
||||||
|
verifycreationretries <Integer> - Verify group creation, defaults to 0, no verification performed, range 0-20
|
||||||
|
verifycreationinitialdelay <Integer> - Number of seconds to delay before first verification performed, defaults to 5, range 0-60
|
||||||
|
verifycreationretrydelay <Integer> - Number of seconds to delay between verificaton retries, defaults to 5, range 1-60
|
||||||
|
```
|
||||||
|
|
||||||
## Update a group's primary email address
|
## Update a group's primary email address
|
||||||
You can simply update a group's primary email address with the `email` option.
|
You can simply update a group's primary email address with the `email` option.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -251,10 +251,10 @@ writes the credentials into the file oauth2.txt.
|
|||||||
```
|
```
|
||||||
gamteam@server:/Users/gamteam$ rm -f /Users/gamteam/GAMConfig/oauth2.txt
|
gamteam@server:/Users/gamteam$ rm -f /Users/gamteam/GAMConfig/oauth2.txt
|
||||||
gamteam@server:/Users/gamteam$ gam version
|
gamteam@server:/Users/gamteam$ gam version
|
||||||
GAM 7.40.03 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.46.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.6 64-bit final
|
||||||
macOS Tahoe 26.4.1 arm64
|
macOS Tahoe 26.5.1 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
|
|
||||||
@@ -1034,9 +1034,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
|
||||||
GAM 7.40.03 - https://github.com/GAM-team/GAM - pythonsource
|
GAM 7.46.01 - https://github.com/GAM-team/GAM - pythonsource
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.6 64-bit final
|
||||||
Windows 11 10.0.26200 AMD64
|
Windows 11 10.0.26200 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
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
| Assured Controls | 1010390001 | assuredcontrols |
|
| Assured Controls | 1010390001 | assuredcontrols |
|
||||||
| Assured Controls Plus | 1010390002 | assuredcontrolsplus |
|
| Assured Controls Plus | 1010390002 | assuredcontrolsplus |
|
||||||
| Chrome Enterprise Premium | 1010400001 | cep | chromeenterprisepremium |
|
| Chrome Enterprise Premium | 1010400001 | cep | chromeenterprisepremium |
|
||||||
| Cloud Identity | 1010010001 | cloudidentity |
|
| Cloud Identity Free | 1010010001 | cloudidentity |
|
||||||
| Cloud Identity Premium | 1010050001 | cloudidentitypremium |
|
| Cloud Identity Premium | 1010050001 | cloudidentitypremium |
|
||||||
| Cloud Search | 1010350001 | cloudsearch |
|
| Cloud Search | 1010350001 | cloudsearch |
|
||||||
| Colab Pro | 1010500001 | colabpro |
|
| Colab Pro | 1010500001 | colabpro |
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
assuredcontrolsplus | 1010390002 | Assured Controls Plus |
|
||||||
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
bce | beyondcorp | beyondcorpenterprise | cep | chromeenterprisepremium | 1010400001 | Chrome Enterprise Premium |
|
||||||
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
cdm | chrome | googlechromedevicemanagement | Google-Chrome-Device-Management |
|
||||||
cloudidentity | identity | 1010010001 | Cloud Identity |
|
cloudidentityfree| cloudidentity | identity | 1010010001 | Cloud Identity Free |
|
||||||
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
cloudidentitypremium | identitypremium | 1010050001 | Cloud Identity Premium |
|
||||||
cloudsearch | 1010350001 | Cloud Search |
|
cloudsearch | 1010350001 | Cloud Search |
|
||||||
colabpro | 1010500001 | Colab Pro |
|
colabpro | 1010500001 | Colab Pro |
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ You can redirect CSV file output and stdout/stderr output to files. By using red
|
|||||||
You can redirect stdout and stderr to null and stderr can be redirected to stdout.
|
You can redirect stdout and stderr to null and stderr can be redirected to stdout.
|
||||||
```
|
```
|
||||||
<Redirect> ::=
|
<Redirect> ::=
|
||||||
redirect csv <FileName> [multiprocess] [append] [noheader] [charset <Charset>]
|
redirect csv <FileName> [delayopen] [multiprocess] [append] [noheader] [charset <Charset>]
|
||||||
[columndelimiter <Character>] [quotechar <Character>] [noescapechar [<Boolean>]]
|
[columndelimiter <Character>] [quotechar <Character>] [noescapechar [<Boolean>]]
|
||||||
[sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Boolean>]]
|
[sortheaders <StringList>] [timestampcolumn <String>] [transpose [<Boolean>]]
|
||||||
[todrive <ToDriveAttribute>*] |
|
[todrive <ToDriveAttribute>*] |
|
||||||
@@ -129,12 +129,20 @@ You can redirect stdout and stderr to null and stderr can be redirected to stdou
|
|||||||
redirect stderr null [multiprocess] |
|
redirect stderr null [multiprocess] |
|
||||||
redirect stderr stdout [multiprocess]
|
redirect stderr stdout [multiprocess]
|
||||||
```
|
```
|
||||||
For `redirect`, the optional subarguments must appear in the order shown.
|
In versions prior to 7.42.00`, the `redirect csv` optional subarguments had to be specified in the order shown.
|
||||||
|
Now the arguments can be specified in any order except that `todrive <ToDriveAttribute>*` must still be last.
|
||||||
|
|
||||||
If `<FileName>` specifies a relative path, the file will be put in the directory specified by `drive_dir` in gam.cfg.
|
If `<FileName>` specifies a relative path, the file will be put in the directory specified by `drive_dir` in gam.cfg.
|
||||||
If `<FileName>` specifies an absolute path, the file will be put in the directory specified.
|
If `<FileName>` specifies an absolute path, the file will be put in the directory specified.
|
||||||
Specify `./<FileName>` to put the file in your current working directory.
|
Specify `./<FileName>` to put the file in your current working directory.
|
||||||
|
|
||||||
|
In versions prior to 7.42.00, when `redirect csv <FileName>` was used, GAM did not open and write `<FileName>`
|
||||||
|
until all processing was complete; if `<FileName>` was not accessible, an error was generated and no results were saved.
|
||||||
|
Now, `<FileName>` is opened initially to verify accessiblity and then written when processing is complete.
|
||||||
|
|
||||||
|
In the unlikely event that this causes issues, you can do `redirect csv <FileName> delayopen`
|
||||||
|
to get the previous behavior.
|
||||||
|
|
||||||
The `multiprocess` subargument allows the multiple subprocesses started by `gam csv` to write intelligently
|
The `multiprocess` subargument allows the multiple subprocesses started by `gam csv` to write intelligently
|
||||||
to a single redirected CSV/stdout/stderr file. If you don't specify `multiprocess`, each subprocess
|
to a single redirected CSV/stdout/stderr file. If you don't specify `multiprocess`, each subprocess
|
||||||
writes `<FileName>` independently; you end up with a single file written by the last subprocess.
|
writes `<FileName>` independently; you end up with a single file written by the last subprocess.
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
```
|
```
|
||||||
<QueryMobile> ::= <String>
|
<QueryMobile> ::= <String>:<String>
|
||||||
See: https://support.google.com/a/answer/7549103
|
See: https://support.google.com/a/answer/7549103
|
||||||
<QueryMobileList> ::= "<QueryMobile>(,<QueryMobile>)*"
|
<QueryMobileList> ::= "<QueryMobile>(,<QueryMobile>)*"
|
||||||
<ResourceID> ::= <String>
|
<ResourceID> ::= <String>
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ Thank you.
|
|||||||
* James Seymour - https://sites.google.com/view/gam--commands/
|
* James Seymour - https://sites.google.com/view/gam--commands/
|
||||||
* Kevin Melillo - https://github.com/KevinMelilloIEEE/gam-script
|
* Kevin Melillo - https://github.com/KevinMelilloIEEE/gam-script
|
||||||
* Korey Rideout - https://chatgpt.com/g/g-PTxxnVPMG-gam-assist-now-turbocharged-with-gam7
|
* Korey Rideout - https://chatgpt.com/g/g-PTxxnVPMG-gam-assist-now-turbocharged-with-gam7
|
||||||
|
* Paul Ogier (Taming.Tech) - GAM Scripts https://github.com/PaulOgier/GAMScripts
|
||||||
* Paul Ogier (Taming.Tech) - GAM7 Course on Udemy https://taming.tech/GAMCourse
|
* Paul Ogier (Taming.Tech) - GAM7 Course on Udemy https://taming.tech/GAMCourse
|
||||||
* Paul Ogier (Taming.Tech) - GAM7 Tutorials https://www.youtube.com/watch?v=g9LDeyXQNLI&list=PL_dLiK09pJVhKJxZHNk9CHK0q5hkZ856w
|
* Paul Ogier (Taming.Tech) - GAM7 Tutorials https://www.youtube.com/watch?v=g9LDeyXQNLI&list=PL_dLiK09pJVhKJxZHNk9CHK0q5hkZ856w
|
||||||
* Paul Ogier (Taming.Tech) - Installation videos
|
* Paul Ogier (Taming.Tech) - Installation videos
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ See: [Users - Calendars - Transfer](Users-Calendars-Transfer)
|
|||||||
|
|
||||||
GAM7 supports domain shared contacts and user contacts.
|
GAM7 supports domain shared contacts and user contacts.
|
||||||
|
|
||||||
See: [Domain Shared Contacts](Contacts)
|
See: [Domain Shared Contacts](Domain-SharedContacts)
|
||||||
|
|
||||||
See: [Users - People - Contacts & Profiles](Users-People-Contacts-Profiles)
|
See: [Users - People - Contacts & Profiles](Users-People-Contacts-Profiles)
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ Calendar ACL roles (as seen in Calendar GUI):
|
|||||||
* `owner` - Make changes to events and manage sharing
|
* `owner` - Make changes to events and manage sharing
|
||||||
* `freebusy` & `freebusyreader` - See only free/busy (hide details)
|
* `freebusy` & `freebusyreader` - See only free/busy (hide details)
|
||||||
|
|
||||||
|
Added `writerwithoutprivateaccess` to `<CalendarACLRole>` in 7.44.03; this will become effective 2026-06-29.
|
||||||
|
* See: https://developers.google.com/workspace/calendar/release-notes#June_01_2026
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Calendar API - ACLs](https://developers.google.com/google-apps/calendar/v3/reference/acl)
|
* [Calendar API - ACLs](https://developers.google.com/google-apps/calendar/v3/reference/acl)
|
||||||
|
|
||||||
@@ -55,10 +58,10 @@ Calendar ACL roles (as seen in Calendar GUI):
|
|||||||
(timezone <TimeZone>)
|
(timezone <TimeZone>)
|
||||||
|
|
||||||
<CalendarACLRole> ::=
|
<CalendarACLRole> ::=
|
||||||
editor|freebusy|freebusyreader|owner|reader|writer
|
editor|freebusy|freebusyreader|owner|reader|writer|writerwithoutprivateaccess|none
|
||||||
<CalendarACLScope> ::=
|
<CalendarACLScope> ::=
|
||||||
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
<EmailAddress>|user:<EmailAdress>|group:<EmailAddress>|
|
||||||
domain:<DomainName>|domain|default
|
domain:<DomainName>|domain|default
|
||||||
<CalendarACLScopeList> ::=
|
<CalendarACLScopeList> ::=
|
||||||
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
"<CalendarACLScope>(,<CalendarACLScope>)*"
|
||||||
<CalendarACLScopeEntity>::=
|
<CalendarACLScopeEntity>::=
|
||||||
@@ -150,3 +153,4 @@ This capability is no longer available, see: https://developers.google.com/works
|
|||||||
|
|
||||||
Data ownership can be transferred in the Google Calendar UI.
|
Data ownership can be transferred in the Google Calendar UI.
|
||||||
|
|
||||||
|
See: https://workspaceupdates.googleblog.com/2026/03/an-update-on-secondary-calendar-lifecycle-changes-and-a-new-API.html
|
||||||
|
|||||||
@@ -277,6 +277,7 @@
|
|||||||
|
|
||||||
<EventMatchProperty> ::=
|
<EventMatchProperty> ::=
|
||||||
(matchfield attendees <EmailAddressEntity>)|
|
(matchfield attendees <EmailAddressEntity>)|
|
||||||
|
(matchfield attendeesorganizer <Boolean> <EmailAddressEntity>)|
|
||||||
(matchfield attendeesonlydomainlist <DomainNameList>)|
|
(matchfield attendeesonlydomainlist <DomainNameList>)|
|
||||||
(matchfield attendeesdomainlist <DomainNameList>)|
|
(matchfield attendeesdomainlist <DomainNameList>)|
|
||||||
(matchfield attendeesnotdomainlist <DomainNameList>)|
|
(matchfield attendeesnotdomainlist <DomainNameList>)|
|
||||||
@@ -460,8 +461,11 @@ The Google Calendar API processes `<EventSelectProperty>*`; you may specify none
|
|||||||
* `singleevents` - Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves
|
* `singleevents` - Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves
|
||||||
* `updatedmin <Time>` - Lower bound for an event's last modification time (as a RFC3339 timestamp) to filter by. When specified, entries deleted since this time will always be included regardless of showdeletedevents
|
* `updatedmin <Time>` - Lower bound for an event's last modification time (as a RFC3339 timestamp) to filter by. When specified, entries deleted since this time will always be included regardless of showdeletedevents
|
||||||
|
|
||||||
GAM processes `<EventMatchProperty>*`; you may specify none or multiple properties.
|
GAM processes `<EventMatchProperty>*`
|
||||||
* `matchfield attendees <EmailAddressEntity>` - All of the attendees in `<EmailAddressEntity>` must be present
|
; you may specify none or multiple properties.
|
||||||
|
* `matchfield attendees <EmailAddressEntity>` - All of the addresses in `<EmailAddressEntity>` must be present as attendees
|
||||||
|
* `matchfield attendeesorganizer <Boolean> <EmailAddressEntity>` - All of the addressed in `<EmailAddressEntity>` must be present
|
||||||
|
as attendees and are an organizer or not based on `<Boolean>`
|
||||||
* `matchfield attendeesonlydomainlist <DomainNameList>` - All attendee's email addresses must be in a domain in `<DomainNameList>`
|
* `matchfield attendeesonlydomainlist <DomainNameList>` - All attendee's email addresses must be in a domain in `<DomainNameList>`
|
||||||
* For example, this lets you look for events with all attendees in your internal domains. You should include `resource.calendar.google.com`
|
* For example, this lets you look for events with all attendees in your internal domains. You should include `resource.calendar.google.com`
|
||||||
in `<DomainNameList>` if the events use resources.
|
in `<DomainNameList>` if the events use resources.
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
- [Display Chat Members](#display-chat-members)
|
- [Display Chat Members](#display-chat-members)
|
||||||
- [Manage Chat Messages](#manage-chat-messages)
|
- [Manage Chat Messages](#manage-chat-messages)
|
||||||
- [Display Chat Messages](#display-chat-messages)
|
- [Display Chat Messages](#display-chat-messages)
|
||||||
|
- [Display Chat Messages by Searching](#display-chat-messages-by-searching)
|
||||||
- [Display Chat Events](#display-chat-events)
|
- [Display Chat Events](#display-chat-events)
|
||||||
- [Manage Chat Emojis](#manage-chat-emojis)
|
- [Manage Chat Emojis](#manage-chat-emojis)
|
||||||
- [Display Chat Emojis](#display-chat-emojis)
|
- [Display Chat Emojis](#display-chat-emojis)
|
||||||
@@ -65,6 +66,7 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
|||||||
* [Chat API - Custom Emojis](https://developers.google.com/workspace/chat/api/reference/rest/v1/customEmojis)
|
* [Chat API - Custom Emojis](https://developers.google.com/workspace/chat/api/reference/rest/v1/customEmojis)
|
||||||
* [Chat API - Members](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.members/list)
|
* [Chat API - Members](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.members/list)
|
||||||
* [Chat API - Messages](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/list)
|
* [Chat API - Messages](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/list)
|
||||||
|
* [Chat API - Search Messages](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/search)
|
||||||
* [Chat API - Events](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.spaceEvents/list)
|
* [Chat API - Events](https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.spaceEvents/list)
|
||||||
* [Chat API - User Sections](https://developers.google.com/workspace/chat/api/reference/rest/v1/users.sections)
|
* [Chat API - User Sections](https://developers.google.com/workspace/chat/api/reference/rest/v1/users.sections)
|
||||||
* [Apps in Google Chat](https://support.google.com/chat/answer/7655820)
|
* [Apps in Google Chat](https://support.google.com/chat/answer/7655820)
|
||||||
@@ -109,8 +111,8 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
|||||||
<ChatThread> ::= spaces/<String>/threads/<String>
|
<ChatThread> ::= spaces/<String>/threads/<String>
|
||||||
<ChatSpaceType> ::=
|
<ChatSpaceType> ::=
|
||||||
space|
|
space|
|
||||||
groupchat|
|
groupchat|
|
||||||
directmessage
|
directmessage
|
||||||
<ChatSpaceTypeList> ::= "<ChatSpaceType>(,<ChatSpaceType>)*"
|
<ChatSpaceTypeList> ::= "<ChatSpaceType>(,<ChatSpaceType>)*"
|
||||||
<ChatMessageID> ::= client-<String>
|
<ChatMessageID> ::= client-<String>
|
||||||
<String> must contain only lowercase letters, numbers, and hyphens up to 56 characters in length.
|
<String> must contain only lowercase letters, numbers, and hyphens up to 56 characters in length.
|
||||||
@@ -908,7 +910,7 @@ gam user user@domain.com delete chatmessage name spaces/AAAADi-pvqc/messages/PKJ
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Display Chat Messages
|
## Display Chat Messages
|
||||||
Display a specific Chat message.
|
Display a specific chat message.
|
||||||
|
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> info chatmessage name <ChatMessage>
|
gam <UserTypeEntity> info chatmessage name <ChatMessage>
|
||||||
@@ -923,12 +925,15 @@ By default, Gam displays the information as an indented list of keys and values.
|
|||||||
gam user user@domain.com info chatmessage name spaces/AAAADi-pvqc/messages/PKJrx90ooIU.PKJrx90ooIU
|
gam user user@domain.com info chatmessage name spaces/AAAADi-pvqc/messages/PKJrx90ooIU.PKJrx90ooIU
|
||||||
```
|
```
|
||||||
|
|
||||||
### Display information about all chat messages in a chat space
|
### Display information about chat messages in a chat space
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> show chatmessages
|
gam <UserTypeEntity> show chatmessages
|
||||||
<ChatSpace>+
|
<ChatSpace>+
|
||||||
[showdeleted [<Boolean>]] [filter <String>]
|
[showdeleted [<Boolean>]]
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[thread <ChatThread>])
|
||||||
[fields <ChatMessageFieldNameList>]
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime [ascending|descending]]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
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.
|
||||||
@@ -937,8 +942,11 @@ By default, Gam displays the information as an indented list of keys and values.
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print chatmessages [todrive <ToDriveAttribute>*]
|
||||||
<ChatSpace>+
|
<ChatSpace>+
|
||||||
[showdeleted [<Boolean>]] [filter <String>]
|
[showdeleted [<Boolean>]]
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[thread <ChatThread>])
|
||||||
[fields <ChatMessageFieldNameList>]
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime [ascending|descending]]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
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,
|
||||||
@@ -952,38 +960,76 @@ The `quotechar <Character>` option allows you to choose an alternate quote chara
|
|||||||
|
|
||||||
By default, deleted messages are not displayed; use `showdeleted` to also display deleted messages.
|
By default, deleted messages are not displayed; use `showdeleted` to also display deleted messages.
|
||||||
|
|
||||||
Use `filter <String>` to filter messages by `createTime` and `thread.name`.
|
To filter messages by the time they were created:
|
||||||
|
* `start|starttime <Date>|<Time>` - Display messages created on or after the `<Date>|<Time>`
|
||||||
|
* `end|endtime <Date>|<Time>` - Display messages created before the `<Date>|<Time>`
|
||||||
|
* `range <Date>|<Time> <Date>|<Time>` - Display messages created on or after the first `<Date>|<Time>` and before the second `<Date>|<Time>`
|
||||||
|
|
||||||
To filter messages by the date they were created, specify the createTime with a timestamp in RFC-3339 format and double quotation marks. For example, "2023-04-21T11:30:00-04:00".
|
Use `thread <String>` to filter messages by their thread name, e.g., `spaces/AAAAAAAAAAA/threads/123`.
|
||||||
* Use the greater than operator `>` to list messages that were created after a timestamp.
|
|
||||||
* Use the less than operator `<` to list messages that were created before a timestamp.
|
|
||||||
* To filter messages within a time interval, use the AND operator between two timestamps.
|
|
||||||
* To filter by thread, specify the thread.name, formatted as spaces/{space}/threads/{thread}. You can only specify one thread.name per query.
|
|
||||||
* To filter by both thread and date, use the AND operator in your query.
|
|
||||||
|
|
||||||
For example, the following queries are valid on Linux/MacOS:
|
## Display Chat Messages by Searching
|
||||||
|
These commands are in Developer Preview; to use them you must have these values set in `gam.cfg`.
|
||||||
```
|
```
|
||||||
filter 'createTime > "2012-04-21T11:30:00-04:00"'
|
developer_preview_apis = chat
|
||||||
filter 'createTime > "2012-04-21T11:30:00-04:00" AND thread.name = spaces/AAAAAAAAAAA/threads/123'
|
developer_preview_api_key = <DeveloperPreviewKey>
|
||||||
filter 'createTime > "2012-04-21T11:30:00+00:00" AND createTime < "2013-01-01T00:00:00+00:00" AND thread.name = spaces/AAAAAAAAAAA/threads/123'
|
|
||||||
filter 'thread.name = spaces/AAAAAAAAAAA/threads/123'
|
|
||||||
```
|
```
|
||||||
|
See the following for search option details:
|
||||||
|
https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces.messages/search
|
||||||
|
|
||||||
For example, the following queries are valid on Windows Command Prompt:
|
You must specify `keywords <StringList>`; messages that match any word|phrase in `<StringList>` are displayed.
|
||||||
```
|
Phrases must be enclosed in `"`.
|
||||||
filter "createTime > \"2012-04-21T11:30:00-04:00\""
|
* Linux, macOS, Windows Command Prompt - `keywords "\"things to do\" urgent"`
|
||||||
filter "createTime > \"2012-04-21T11:30:00-04:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"
|
* Windows Power Shell - ```keywords "`"things to do`" urgent"```
|
||||||
filter "createTime > \"2012-04-21T11:30:00+00:00\" AND createTime < \"2013-01-01T00:00:00+00:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"
|
|
||||||
filter "thread.name = spaces/AAAAAAAAAAA/threads/123"
|
|
||||||
```
|
|
||||||
|
|
||||||
For example, the following queries are valid on Windows PowerShell:
|
By default, all spaces the user has access to are searched; use the following options to limit the search.
|
||||||
|
* `<ChatSpace>*` - Specific chat spaces
|
||||||
|
* `displaynames [all|any] <StringList>` - Spaces with display names with partial matches of `all|any` of the words in `<StringList>`
|
||||||
|
|
||||||
|
Use the following to limit the search to messages with specific characteristics.
|
||||||
|
* `senders <EmailAddressEntity>` - Messages with any sender in `<EmailAddressEntity>`
|
||||||
|
* `usermentions [all|any] <EmailAddressEntity>` - Messages with mentions of `all|any` users in `<EmailAddressEntity>`
|
||||||
|
* `start|starttime <Date>|<Time>` - Messages created on or after the `<Date>|<Time>`
|
||||||
|
* `end|endtime <Date>|<Time>` - Messages created before the `<Date>|<Time>`
|
||||||
|
* `range <Date>|<Time> <Date>|<Time>` - Messages created on or after the first `<Date>|<Time>` and before the second `<Date>|<Time>`
|
||||||
|
* `hasattachment` - Messages with at least one attachment
|
||||||
```
|
```
|
||||||
filter 'createTime > \"2012-04-21T11:30:00-04:00\"'
|
gam <UserTypeEntity> show chatsearchmessages
|
||||||
filter 'createTime > \"2012-04-21T11:30:00-04:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123"'
|
keywords <StringList>
|
||||||
filter 'createTime > \"2012-04-21T11:30:00+00:00\" AND createTime < \"2013-01-01T00:00:00+00:00\" AND thread.name = spaces/AAAAAAAAAAA/threads/123'
|
<ChatSpace>*
|
||||||
filter 'thread.name = spaces/AAAAAAAAAAA/threads/123'
|
[displaynames [all|any] <StringList>]
|
||||||
|
[senders <EmailAddressEntity>]*
|
||||||
|
[usermentions [all|any] <EmailAddressEntity>]*
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[hasattachment]
|
||||||
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime|relevance]
|
||||||
|
[formatjson]
|
||||||
```
|
```
|
||||||
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> print chatsearchmessages [todrive <ToDriveAttribute>*]
|
||||||
|
keywords <StringList>
|
||||||
|
<ChatSpace>*
|
||||||
|
[displaynames [all|any] <StringList>]
|
||||||
|
[senders <EmailAddressEntity>]*
|
||||||
|
[usermentions [all|any] <EmailAddressEntity>]*
|
||||||
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date>|<Time>)]
|
||||||
|
[hasattachment]
|
||||||
|
[fields <ChatMessageFieldNameList>]
|
||||||
|
[orderby createtime|relevance]
|
||||||
|
[formatjson [quotechar <Character>]]
|
||||||
|
```
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
## Display Chat Events
|
## Display Chat Events
|
||||||
Display a specific Chat event.
|
Display a specific Chat event.
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ gam <UserTypeEntity> print driveactivity [todrive <ToDriveAttributes>*]
|
|||||||
(query <QueryDriveFile>)]
|
(query <QueryDriveFile>)]
|
||||||
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date)|<Time>|
|
[([start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>])|(range <Date>|<Time> <Date)|<Time>|
|
||||||
yesterday|today|thismonth|(previousmonths <Integer>)]
|
yesterday|today|thismonth|(previousmonths <Integer>)]
|
||||||
[action|actions [not] <DriveActivityActionList>]
|
[action|actions [not] <DriveActivityActionList>] [maxactivities <Number>]
|
||||||
[consolidationstrategy legacy|none]
|
[consolidationstrategy legacy|none]
|
||||||
[idmapfile <FileName>|(gsheet <UserGoogleSheet>) [charset <String>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]]
|
[idmapfile <FileName>|(gsheet <UserGoogleSheet>) [charset <String>] [columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]]
|
||||||
[stripcrsfromname] [formatjson [quotechar <Character>]]
|
[stripcrsfromname] [formatjson [quotechar <Character>]]
|
||||||
@@ -99,6 +99,8 @@ Google does the filtering.
|
|||||||
* `action|actions <DriveActivityActionList>` - Only display activities with the specified actions; by default, all actions are displayed
|
* `action|actions <DriveActivityActionList>` - Only display activities with the specified actions; by default, all actions are displayed
|
||||||
* `action|actions not <DriveActivityActionList>` - Only display activities without the specified actions; by default, all actions are displayed
|
* `action|actions not <DriveActivityActionList>` - Only display activities without the specified actions; by default, all actions are displayed
|
||||||
|
|
||||||
|
You can limit the number of activities displayed with the `maxactivities <Number>; the default is 0, no limit.
|
||||||
|
|
||||||
The API only returns a permissionId and user name for each event but no user email address. To get an email address perform the
|
The API only returns a permissionId and user name for each event but no user email address. To get an email address perform the
|
||||||
following command to generate a file that contains the email address and permissionId for all users. You can substitute for `all users` if desired.
|
following command to generate a file that contains the email address and permissionId for all users. You can substitute for `all users` if desired.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -528,7 +528,7 @@ There are two methods for moving a folder from a My Drive to a Shared Drive:
|
|||||||
* GAM
|
* GAM
|
||||||
* The Drive API doesn't allow moving a folder from a My Drive to a Shared Drive; GAM has to recreate the folders on the Shared Drive, thus changing their IDs
|
* The Drive API doesn't allow moving a folder from a My Drive to a Shared Drive; GAM has to recreate the folders on the Shared Drive, thus changing their IDs
|
||||||
* Files are simply moved from their existing My Drive folder to the recreated Shared Drive folder; their IDs do not change
|
* Files are simply moved from their existing My Drive folder to the recreated Shared Drive folder; their IDs do not change
|
||||||
* Files owmed by users outside of your domain can't be moved
|
* Files owned by users outside of your domain can't be moved
|
||||||
|
|
||||||
## Simple moves by changing parents
|
## Simple moves by changing parents
|
||||||
Use this command in the following cases:
|
Use this command in the following cases:
|
||||||
@@ -583,6 +583,7 @@ gam <UserTypeEntity> move drivefile <DriveFileEntity> [newfilename <DriveFileNam
|
|||||||
[copysubfolderpermissions [<Boolean>]]
|
[copysubfolderpermissions [<Boolean>]]
|
||||||
[copysubfolderinheritedpermissions [<Boolean>]]
|
[copysubfolderinheritedpermissions [<Boolean>]]
|
||||||
[copysubfoldernoninheritedpermissions never|always|syncallfolders|syncupdatedfolders]
|
[copysubfoldernoninheritedpermissions never|always|syncallfolders|syncupdatedfolders]
|
||||||
|
[movefilepermissions [<Boolean>]]
|
||||||
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
||||||
(mappermissionsemail <EmailAddress> <EmailAddress)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
(mappermissionsemail <EmailAddress> <EmailAddress)* [mappermissionsemailfile <CSVFileInput> endcsv]
|
||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
@@ -729,6 +730,8 @@ and any remaining copy errors.
|
|||||||
### Moved File Permissions
|
### Moved File Permissions
|
||||||
By default, the permissions of a moved file are not modified.
|
By default, the permissions of a moved file are not modified.
|
||||||
|
|
||||||
|
When `movefilerpermissions false` is specified, all ACLs are removed.
|
||||||
|
|
||||||
When `excludepermissionsfromdomains <DomainNameList>` is specified, any ACL that references a domain in `<DomainNameList>` will be removed.
|
When `excludepermissionsfromdomains <DomainNameList>` is specified, any ACL that references a domain in `<DomainNameList>` will be removed.
|
||||||
|
|
||||||
When `includepermissionsfromdomains <DomainNameList>` is specified, any ACLs that references a domain not in `<DomainNameList>` will be removed.
|
When `includepermissionsfromdomains <DomainNameList>` is specified, any ACLs that references a domain not in `<DomainNameList>` will be removed.
|
||||||
|
|||||||
@@ -425,7 +425,7 @@ Display file details in indented keyword: value format. The two forms are equiva
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> show fileinfo <DriveFileEntity>
|
gam <UserTypeEntity> show fileinfo <DriveFileEntity>
|
||||||
[returnidonly]
|
[returnidonly]
|
||||||
[filepath|fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[filepath|fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[showdrivename] [showshareddrivepermissions]
|
[showdrivename] [showshareddrivepermissions]
|
||||||
@@ -436,7 +436,7 @@ gam <UserTypeEntity> show fileinfo <DriveFileEntity>
|
|||||||
[formatjson]
|
[formatjson]
|
||||||
gam <UserTypeEntity> info drivefile <DriveFileEntity>
|
gam <UserTypeEntity> info drivefile <DriveFileEntity>
|
||||||
[returnidonly]
|
[returnidonly]
|
||||||
[filepath|fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[filepath|fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[showdrivename] [showshareddrivepermissions]
|
[showdrivename] [showshareddrivepermissions]
|
||||||
@@ -455,6 +455,7 @@ Use `fullpath` to add additional path information indicating that a file is an O
|
|||||||
By default, the path to a file includes the file name as the last element of the path.
|
By default, the path to a file includes the file name as the last element of the path.
|
||||||
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
||||||
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
||||||
|
Use `parentpathonly` to display only the parent folder names when displaying the path to a file.
|
||||||
|
|
||||||
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
||||||
|
|
||||||
@@ -517,12 +518,12 @@ gam <UserTypeEntity> show filepath <DriveFileEntity>
|
|||||||
[returnpathonly]
|
[returnpathonly]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[stripcrsfromname]
|
[stripcrsfromname]
|
||||||
[folderpathonly [<Boolean>]] [fullpath] [pathdelimiter <Character>]
|
[folderpathonly|parentpathonly [<Boolean>]] [fullpath] [pathdelimiter <Character>]
|
||||||
[followshortcuts [<Boolean>]]
|
[followshortcuts [<Boolean>]]
|
||||||
gam <UserTypeEntity> print filepath <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print filepath <DriveFileEntity> [todrive <ToDriveAttribute>*]
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[stripcrsfromname] [oneitemperrow]
|
[stripcrsfromname] [oneitemperrow]
|
||||||
[fullpath] [folderpathonly [<Boolean>]] [pathdelimiter <Character>]
|
[fullpath] [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>]
|
||||||
[followshortcuts [<Boolean>]]
|
[followshortcuts [<Boolean>]]
|
||||||
```
|
```
|
||||||
Use `returnpathonly` to display just the file path of the files in `<DriveFileEntity>`.
|
Use `returnpathonly` to display just the file path of the files in `<DriveFileEntity>`.
|
||||||
@@ -532,6 +533,7 @@ Use `fullpath` to add additional path information indicating that a file is an O
|
|||||||
By default, the path to a file includes the file name as the last element of the path.
|
By default, the path to a file includes the file name as the last element of the path.
|
||||||
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
||||||
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
||||||
|
Use `parentpathonly` to display only the parent folder names when displaying the path to a file.
|
||||||
|
|
||||||
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
||||||
|
|
||||||
@@ -1106,7 +1108,7 @@ gam <UserTypeEntity> print|show filelist [todrive <ToDriveAttribute>*]
|
|||||||
[countsonly [summary none|only|plus] [summaryuser <String>]
|
[countsonly [summary none|only|plus] [summaryuser <String>]
|
||||||
[showsource] [showsize] [showsizeunits] [showmimetypesize]]
|
[showsource] [showsize] [showsizeunits] [showmimetypesize]]
|
||||||
[countsrowfilter]
|
[countsrowfilter]
|
||||||
[filepath|fullpath [folderpathonly [<Boolean>]] [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
|
[filepath|fullpath [folderpathonly|parentpathonly [<Boolean>]] [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
[showdrivename] [showshareddrivepermissions]
|
[showdrivename] [showshareddrivepermissions]
|
||||||
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
|
[(showlabels details|ids)|(includelabels <ClassificationLabelIDList>)]
|
||||||
@@ -1239,6 +1241,7 @@ JSON data rather than as additional columns
|
|||||||
By default, the path to a file includes the file name as the last element of the path.
|
By default, the path to a file includes the file name as the last element of the path.
|
||||||
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
Use `folderpathonly` to display only the folder names when displaying the path to a file. This folder only path
|
||||||
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
an be used in `gam <UserTypeEntity> create drivefolderpath` to recreate the folder hierarchy.
|
||||||
|
Use `parentpathonly` to display only the parent folder names when displaying the path to a file.
|
||||||
|
|
||||||
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
By default, file path components are separated by `/`; use `pathdelimiter <Character>` to use `<Character>` as the separator.
|
||||||
|
|
||||||
|
|||||||
@@ -477,12 +477,12 @@ When `matchlabel <LabelName>` is specified, the following characters are replace
|
|||||||
|
|
||||||
## Forward messages/threads
|
## Forward messages/threads
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> forward message|messages recipient|to <RecipientEntity>
|
gam <UserTypeEntity> forward message|messages [recipient|to] <RecipientEntity>
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
[labelids <LabelIDList>]
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <MessageIDEntity>)
|
||||||
[subject <String>] [addorigfieldstosubject]
|
[subject <String>] [addorigfieldstosubject]
|
||||||
gam <UserTypeEntity> forward thread|threads recipient|to <RecipientEntity>
|
gam <UserTypeEntity> forward thread|threads [recipient|to] <RecipientEntity>
|
||||||
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
(((query <QueryGmail> [querytime<String> <Date>]*) (matchlabel <LabelName>) [or|and])+
|
||||||
[labelids <LabelIDList>]
|
[labelids <LabelIDList>]
|
||||||
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
[quick|notquick] [doit] [max_to_forward <Number>])|(ids <ThreadIDEntity>)
|
||||||
|
|||||||
@@ -91,8 +91,8 @@ gam <UserItem> show meetconferences
|
|||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
By default, conferences are shown for all of a user's meet spaces. To limit the display use:
|
By default, conferences are shown for all of a user's meet spaces. To limit the display use:
|
||||||
* `space <MeetSpaceName>` - Display conferences for a specifc space by giving its name
|
* `space <MeetSpaceName>` - Display conferences for a specific space by giving its name
|
||||||
* `code <String>` - Display conferences for a specifc space by giving its code
|
* `code <String>` - Display conferences for a specific space by giving its code
|
||||||
|
|
||||||
By default, Gam displays the information about the meet conferences as an indented list of keys and values.
|
By default, Gam displays the information about the meet conferences as an indented list of keys and values.
|
||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
@@ -103,8 +103,8 @@ gam <UserItem> print meetconferences [todrive <ToDriveAttribute>*]
|
|||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
By default, conferences are shown for all of a user's meet spaces. To limit the display use:
|
By default, conferences are shown for all of a user's meet spaces. To limit the display use:
|
||||||
* `space <MeetSpaceName>` - Display conferences for a specifc space by giving its name
|
* `space <MeetSpaceName>` - Display conferences for a specific space by giving its name
|
||||||
* `code <String>` - Display conferences for a specifc space by giving its code
|
* `code <String>` - Display conferences for a specific space by giving its code
|
||||||
|
|
||||||
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.
|
||||||
|
|||||||
@@ -1093,7 +1093,9 @@ gam print users [todrive <ToDriveAttribute>*]
|
|||||||
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
([issuspended [<Boolean>]] [isarchived [<Boolean>]])|(isdisabled [<Boolean>])]
|
||||||
|
[disabledafter <DateTime>] [disabledbefore <DateTime>]
|
||||||
|
[aliasmatchpattern <REMatchPattern>]
|
||||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -1103,8 +1105,45 @@ By default, users in all domains in the account are selected; these options allo
|
|||||||
* `(query <QueryUser>)|(queries <QueryUserList>)` - Limit users to those that match a query; each query is run against each domain
|
* `(query <QueryUser>)|(queries <QueryUserList>)` - Limit users to those that match a query; each query is run against each domain
|
||||||
* `limittoou <OrgUnitPath>|<OrgUnitID>` - Limit users to those in the specified `<OrgUnitItem>>`
|
* `limittoou <OrgUnitPath>|<OrgUnitID>` - Limit users to those in the specified `<OrgUnitItem>>`
|
||||||
* `deleted_only|only_deleted` - Only display deleted users
|
* `deleted_only|only_deleted` - Only display deleted users
|
||||||
* `issuspended <Boolean>` - Limit users based on their status
|
|
||||||
* `isarchived <Boolean>` - Limit users based on their status
|
The `isarchived`, `issuspended` and `isdisabled` options can be used to select users based on their archival/suspension status.
|
||||||
|
|
||||||
|
| Options | Users Displayed |
|
||||||
|
|---------|-----------------|
|
||||||
|
| None | All Users|
|
||||||
|
| isarchived [true] | Archived Users |
|
||||||
|
| isarchived false | Non-Archived Users |
|
||||||
|
| issuspended [true] | Suspended Users |
|
||||||
|
| issuspended false | Non-Suspended Users |
|
||||||
|
| isarchived [true] issuspended [true] | Archived Users that are Suspended |
|
||||||
|
| isarchived [true] issuspended false | Archived Users that are not Suspended |
|
||||||
|
| isarchived false issuspended [true] | Suspended Users that are not Archived |
|
||||||
|
| isarchived false issuspended false | Non-Archived and Non-Suspended Users |
|
||||||
|
| isdisabled [true] | Archived or Suspended Users |
|
||||||
|
| isdisabled false | Non-Archived and Non-Suspended Users |
|
||||||
|
|
||||||
|
When none of `isarchived`, `issuspended`, `isdisabled` are specified,
|
||||||
|
but one or both of `disabledafter` or `disabledbefore` is specified,
|
||||||
|
then `isdisabled true` is selected.
|
||||||
|
|
||||||
|
When any of `isarchived [true]`, `issuspended [true]`, `isdisabled [true]` are specified,
|
||||||
|
the following options can be used to further limit the users displayed.
|
||||||
|
* `disabledafter <DateTime>` - Display users disabled on/after `<DateTime>`
|
||||||
|
* `disabledbefore <DateTime>` - Display users disabled before `<DateTime>`
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
Display users suspended more than 90 days ago.
|
||||||
|
```
|
||||||
|
gam print users issuspended disabledbefore -90d
|
||||||
|
```
|
||||||
|
Display users archived within the last 10 days.
|
||||||
|
```
|
||||||
|
gam print users isarchived disabledafter -10d
|
||||||
|
```
|
||||||
|
Display users archived/suspended within a range.
|
||||||
|
```
|
||||||
|
gam print users isdisabled disabledafter -60d disabledbefore -30d
|
||||||
|
```
|
||||||
|
|
||||||
### Print a header row and fields for users specified by `<UserTypeEntity>`
|
### Print a header row and fields for users specified by `<UserTypeEntity>`
|
||||||
```
|
```
|
||||||
@@ -1121,7 +1160,9 @@ gam print users [todrive <ToDriveAttribute>*] select <UserTypeEntity>
|
|||||||
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
([issuspended [<Boolean>]] [isarchived [<Boolean>]])|(isdisabled [<Boolean>])]
|
||||||
|
[disabledafter <DateTime>] [disabledbefore <DateTime>]
|
||||||
|
[aliasmatchpattern <REMatchPattern>]
|
||||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
||||||
|
|
||||||
gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
||||||
@@ -1137,7 +1178,9 @@ gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
|||||||
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
[delimiter <Character>] [sortheaders [<Boolean>]] [scalarsfirst [<Boolean>]]
|
||||||
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
[formatjson [quotechar <Character>]] [quoteplusphonenumbers]
|
||||||
[issuspended <Boolean>] [isarchived <Boolean>] [aliasmatchpattern <REMatchPattern>]
|
([issuspended [<Boolean>]] [isarchived [<Boolean>]])|(isdisabled [<Boolean>])]
|
||||||
|
[disabledafter <DateTime>] [disabledbefore <DateTime>]
|
||||||
|
[aliasmatchpattern <REMatchPattern>]
|
||||||
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
[showvalidcolumn] (addcsvdata <FieldName> <String>)* [includecsvdatainjson [<Boolean>]]
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -1175,6 +1218,45 @@ of a specified `type` or `customType`.
|
|||||||
* `filtermultiattrtype <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `type` is `<String>`
|
* `filtermultiattrtype <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `type` is `<String>`
|
||||||
* `filtermultiattrcustom <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `customType` is `<String>`
|
* `filtermultiattrcustom <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `customType` is `<String>`
|
||||||
|
|
||||||
|
The `isarchived`, `issuspended` and `isdisabled` options can be used to select users from `<UserTypeEntity>` based on their archival/suspension status.
|
||||||
|
|
||||||
|
| Options | Users Displayed |
|
||||||
|
|---------|-----------------|
|
||||||
|
| None | All Users|
|
||||||
|
| isarchived [true] | Archived Users |
|
||||||
|
| isarchived false | Non-Archived Users |
|
||||||
|
| issuspended [true] | Suspended Users |
|
||||||
|
| issuspended false | Non-Suspended Users |
|
||||||
|
| isarchived [true] issuspended [true] | Archived Users that are Suspended |
|
||||||
|
| isarchived [true] issuspended false | Archived Users that are not Suspended |
|
||||||
|
| isarchived false issuspended [true] | Suspended Users that are not Archived |
|
||||||
|
| isarchived false issuspended false | Non-Archived and Non-Suspended Users |
|
||||||
|
| isdisabled [true] | Archived or Suspended Users |
|
||||||
|
| isdisabled false | Non-Archived and Non-Suspended Users |
|
||||||
|
|
||||||
|
When none of `isarchived`, `issuspended`, `isdisabled` are specified,
|
||||||
|
but one or both of `disabledafter` or `disabledbefore` is specified,
|
||||||
|
then `isdisabled true` is selected.
|
||||||
|
|
||||||
|
When any of `isarchived [true]`, `issuspended [true]`, `isdisabled [true]` are specified,
|
||||||
|
the following options can be used to further limit the users displayed.
|
||||||
|
* `disabledafter <DateTime>` - Display users disabled on/after `<DateTime>`
|
||||||
|
* `disabledbefore <DateTime>` - Display users disabled before `<DateTime>`
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
Display staff users suspended more than 90 days ago.
|
||||||
|
```
|
||||||
|
gam ou /Staff print users issuspended disabledbefore -90d
|
||||||
|
```
|
||||||
|
Display staff users archived within the last 10 days.
|
||||||
|
```
|
||||||
|
gam ou /Staff print users isarchived disabledafter -10d
|
||||||
|
```
|
||||||
|
Display staff users archived/suspended within a range.
|
||||||
|
```
|
||||||
|
gam ou /Staff print users isdisabled disabledafter -60d disabledbefore -30d
|
||||||
|
```
|
||||||
|
|
||||||
By default, when aliases are displayed, all aliases are displayed. Use `aliasmatchpattern <REMatchPattern>`
|
By default, when aliases are displayed, all aliases are displayed. Use `aliasmatchpattern <REMatchPattern>`
|
||||||
to limit the display of aliases to those that match `<REMatchPattern>`.
|
to limit the display of aliases to those that match `<REMatchPattern>`.
|
||||||
|
|
||||||
|
|||||||
@@ -257,11 +257,17 @@ gam print vaultcounts [todrive <ToDriveAttributes>*]
|
|||||||
[excludedrafts <Boolean>]
|
[excludedrafts <Boolean>]
|
||||||
[<JSONData>]
|
[<JSONData>]
|
||||||
[wait <Integer>]
|
[wait <Integer>]
|
||||||
|
[include_suspended_zeros [<Boolean>]]
|
||||||
```
|
```
|
||||||
Specify the search method, this is optional:
|
Specify the search method, this is optional:
|
||||||
* `accounts <EmailAddressEntity>` - Search all accounts specified in `<EmailAddressEntity>`
|
* `accounts <EmailAddressEntity>` - Search all accounts specified in `<EmailAddressEntity>`
|
||||||
* `orgunit|org|ou <OrgUnitPath>` - Search all accounts in the OU `<OrgUnitPath>`
|
* `orgunit|org|ou <OrgUnitPath>` - Search all accounts in the OU `<OrgUnitPath>`
|
||||||
* `everyone|entireorg` - Search for all accounts in the organization
|
* `everyone|entireorg` - Search all accounts in the organization
|
||||||
|
|
||||||
|
By default, the Vault API doesn't return accounts with zero items; GAM
|
||||||
|
generates a zero count line for non-suspended accounts with zero items.
|
||||||
|
The `include_suspended_zeros` option causes GAM to generate a zero count line
|
||||||
|
for suspended accounts with zero items.
|
||||||
|
|
||||||
For `corpus mail|group`, you can specify search terms to limit the search.
|
For `corpus mail|group`, you can specify search terms to limit the search.
|
||||||
* `terms <String>` - [Vault search](https://support.google.com/vault/answer/2474474)
|
* `terms <String>` - [Vault search](https://support.google.com/vault/answer/2474474)
|
||||||
@@ -370,7 +376,7 @@ For `corpus calendar`, you can specify advanced search options:
|
|||||||
* `minuswords <StringList>`
|
* `minuswords <StringList>`
|
||||||
* Matches only those events that do not contain any of the words in the given set in title, description, location, or attendees.
|
* Matches only those events that do not contain any of the words in the given set in title, description, location, or attendees.
|
||||||
* Entries in the set are considered in "or".
|
* Entries in the set are considered in "or".
|
||||||
* `responsestatuses <AttendeeStatus>(,<AttendeeStatus>)*
|
* `responsestatuses <AttendeeStatus>(,<AttendeeStatus>)*`
|
||||||
* Matches only events for which the custodian gave one of these responses. If the set is empty, there will be no filtering on responses.
|
* Matches only events for which the custodian gave one of these responses. If the set is empty, there will be no filtering on responses.
|
||||||
* `calendarversiondate <Date>|<Time>`
|
* `calendarversiondate <Date>|<Time>`
|
||||||
* Search the current version of the Calendar event, but export the contents of the last version saved before 12:00 AM UTC on the specified date.
|
* Search the current version of the Calendar event, but export the contents of the last version saved before 12:00 AM UTC on the specified date.
|
||||||
|
|||||||
@@ -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.40.03 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.46.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.6 64-bit final
|
||||||
macOS Tahoe 26.4.1 arm64
|
macOS Tahoe 26.5.1 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2026-02-15T07:51:00-08:00
|
Time: 2026-02-15T07:51:00-08:00
|
||||||
@@ -15,10 +15,10 @@ Time: 2026-02-15T07:51:00-08: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.40.03 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.46.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.6 64-bit final
|
||||||
macOS Tahoe 26.4.1 arm64
|
macOS Tahoe 26.5.1 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/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,29 +27,29 @@ 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.40.03 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.46.01 - https://github.com/GAM-team/GAM - pyinstaller
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.6 64-bit final
|
||||||
macOS Tahoe 26.4.1 arm64
|
macOS Tahoe 26.5.1 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2026-02-15T07:51:00-08:00
|
Time: 2026-02-15T07:51:00-08: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.6.2 7 Apr 2026
|
OpenSSL 4.0.1 9 Jun 2026
|
||||||
arrow 1.4.0
|
arrow 1.4.0
|
||||||
chardet 5.2.0
|
chardet 7.4.3
|
||||||
cryptography 46.0.5
|
cryptography 48.0.0
|
||||||
filelock 3.21.2
|
filelock 3.29.0
|
||||||
google-api-python-client 2.190.0
|
google-api-python-client 2.196.0
|
||||||
google-auth-httplib2 0.3.0
|
google-auth-httplib2 0.4.0
|
||||||
google-auth-oauthlib 1.2.4
|
google-auth-oauthlib 1.4.0
|
||||||
google-auth 2.48.0
|
google-auth 2.53.0
|
||||||
lxml 6.0.2
|
lxml 6.1.1
|
||||||
httplib2 0.31.2
|
httplib2 0.31.2
|
||||||
passlib 1.7.4
|
passlib 1.7.4
|
||||||
pathvalidate 3.3.1
|
pathvalidate 3.3.1
|
||||||
pyscard 2.3.1
|
pyscard 2.3.1
|
||||||
yubikey-manager 5.9.0
|
yubikey-manager 5.9.1
|
||||||
admin.googleapis.com connects using TLSv1.3 TLS_AES_256_GCM_SHA384
|
admin.googleapis.com connects using TLSv1.3 TLS_AES_256_GCM_SHA384
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Version Check:
|
Version Check:
|
||||||
Current: 5.35.08
|
Current: 5.35.08
|
||||||
Latest: 7.40.03
|
Latest: 7.46.01
|
||||||
echo $?
|
echo $?
|
||||||
1
|
1
|
||||||
```
|
```
|
||||||
@@ -76,7 +76,7 @@ echo $?
|
|||||||
Print the current version number without details
|
Print the current version number without details
|
||||||
```
|
```
|
||||||
gam version simple
|
gam version simple
|
||||||
7.40.03
|
7.46.01
|
||||||
```
|
```
|
||||||
In Linux/MacOS you can do:
|
In Linux/MacOS you can do:
|
||||||
```
|
```
|
||||||
@@ -86,10 +86,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.40.03 - https://github.com/GAM-team/GAM
|
GAM 7.46.01 - https://github.com/GAM-team/GAM
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.4 64-bit final
|
Python 3.14.6 64-bit final
|
||||||
macOS Tahoe 26.4.1 arm64
|
macOS Tahoe 26.5.1 arm64
|
||||||
Path: /Users/gamteam/bin/gam7
|
Path: /Users/gamteam/bin/gam7
|
||||||
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
Config File: /Users/gamteam/GamConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
|
||||||
Time: 2026-02-15T07:51:00-08:00
|
Time: 2026-02-15T07:51:00-08:00
|
||||||
|
|||||||
Reference in New Issue
Block a user