mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-04 21:01:36 +00:00
Compare commits
118 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
26f121b120 | ||
|
|
c3dc91d61d | ||
|
|
5a43aac095 | ||
|
|
0e335322dd | ||
|
|
c5215392d6 | ||
|
|
93534b8626 | ||
|
|
8ffa4e3822 | ||
|
|
97db67790d | ||
|
|
d5e6ab46d3 | ||
|
|
a11e07ffa4 | ||
|
|
9bd564bbca | ||
|
|
6f35df439c | ||
|
|
baacc4c77b | ||
|
|
10ef587ce1 | ||
|
|
251ba6a8b3 | ||
|
|
4c97aa8ccf | ||
|
|
d7f5a59115 | ||
|
|
79e6835c30 | ||
|
|
ec2bd02391 | ||
|
|
8ba0b55346 | ||
|
|
f1dfcc877d | ||
|
|
f0fa7aa25e | ||
|
|
2445b4f92d | ||
|
|
eb2b9f0e4f | ||
|
|
91c0d66a14 | ||
|
|
0dd05e7b93 | ||
|
|
da93cdbc06 | ||
|
|
cf750e0d58 | ||
|
|
ddda0593f2 | ||
|
|
7798504282 | ||
|
|
10a1c072bb | ||
|
|
b2e472fafe | ||
|
|
b876042cb7 | ||
|
|
64a3af0952 | ||
|
|
447031815a | ||
|
|
dab7ec6884 | ||
|
|
c9df92b7ee | ||
|
|
b96f55d819 | ||
|
|
b400133fd6 | ||
|
|
2c756abd6a | ||
|
|
e7079923a5 | ||
|
|
1586df8349 | ||
|
|
3ca1d6366b | ||
|
|
af4144b103 | ||
|
|
18eebaa293 | ||
|
|
ae6570823b | ||
|
|
9c44a11a6a | ||
|
|
28adb4b1ce | ||
|
|
93ace6dacd | ||
|
|
117c239cc8 | ||
|
|
ce4a867802 | ||
|
|
d5ccb2a2c4 | ||
|
|
3a921f39dc | ||
|
|
63b0d9ae5f | ||
|
|
56bdca9d41 | ||
|
|
8018783aed | ||
|
|
4642868969 | ||
|
|
1ea3c29ba2 | ||
|
|
18b83204a7 | ||
|
|
1d1dc90a49 | ||
|
|
6b6b29ca3c | ||
|
|
94232d5135 | ||
|
|
de83607be3 | ||
|
|
462e39ca13 | ||
|
|
12be449aa6 | ||
|
|
259f0dd6f8 | ||
|
|
0f9b3467a4 | ||
|
|
6fa13bebe5 | ||
|
|
6fd397365c | ||
|
|
71890c7ec6 | ||
|
|
fc09eb3b02 | ||
|
|
ef17a7853b | ||
|
|
60a784cf15 | ||
|
|
f778f95935 | ||
|
|
c487fbb76e | ||
|
|
4ce4c0094c | ||
|
|
bbe41d32ed | ||
|
|
5b5615bf86 | ||
|
|
f6fa040532 | ||
|
|
98bbc04c25 | ||
|
|
755f0aba87 | ||
|
|
0aef44bf5b | ||
|
|
1b7966b1cf | ||
|
|
c838ca65ea | ||
|
|
d9f1463379 | ||
|
|
07450700d8 | ||
|
|
11325c8d39 | ||
|
|
70b962dbb5 | ||
|
|
ceac6d7892 | ||
|
|
c33d99184a | ||
|
|
e55cfe7360 | ||
|
|
ab3dd49fb4 | ||
|
|
327dd6d7e5 | ||
|
|
e5562eb917 | ||
|
|
2b9629894f | ||
|
|
47a97a07df | ||
|
|
6ce8f5dd10 | ||
|
|
2fc8c8d718 | ||
|
|
a3e5f7b504 | ||
|
|
4137b3b77b | ||
|
|
ce47c9bc7c | ||
|
|
d302563045 | ||
|
|
c5f4bb18fa | ||
|
|
0fdcab4c4f | ||
|
|
130a245906 | ||
|
|
d8bf368c92 | ||
|
|
e7b238e85e | ||
|
|
28b909a686 | ||
|
|
ce73c62e81 | ||
|
|
8e71e18aaa | ||
|
|
d78506fa9b | ||
|
|
a2b226a124 | ||
|
|
8412ba78b2 | ||
|
|
9d01e3fa27 | ||
|
|
9a981bf02e | ||
|
|
12667bf898 | ||
|
|
7e664b437d | ||
|
|
ad3d4e9a57 |
94
.github/workflows/build.yml
vendored
94
.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
|
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
|
||||||
@@ -156,6 +156,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
workload_identity_provider: projects/297925809119/locations/global/workloadIdentityPools/gha-pool/providers/gha-provider
|
workload_identity_provider: projects/297925809119/locations/global/workloadIdentityPools/gha-pool/providers/gha-provider
|
||||||
service_account: github-actions-testing-for-gam@gam-project-wyo-lub-ivl.iam.gserviceaccount.com
|
service_account: github-actions-testing-for-gam@gam-project-wyo-lub-ivl.iam.gserviceaccount.com
|
||||||
|
access_token_scopes: https://www.googleapis.com/auth/iam
|
||||||
|
|
||||||
- name: Cache multiple paths
|
- name: Cache multiple paths
|
||||||
if: matrix.goal == 'build'
|
if: matrix.goal == 'build'
|
||||||
@@ -164,7 +165,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
cache.tar.xz
|
cache.tar.xz
|
||||||
key: gam-${{ matrix.jid }}-20260227
|
key: gam-${{ matrix.jid }}-20260416
|
||||||
|
|
||||||
- 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'
|
||||||
@@ -277,6 +278,8 @@ jobs:
|
|||||||
echo "We are running on ${RUNNER_OS}"
|
echo "We are running on ${RUNNER_OS}"
|
||||||
LD_LIBRARY_PATH="${OPENSSL_INSTALL_PATH}/lib:${PYTHON_INSTALL_PATH}/lib:/usr/local/lib"
|
LD_LIBRARY_PATH="${OPENSSL_INSTALL_PATH}/lib:${PYTHON_INSTALL_PATH}/lib:/usr/local/lib"
|
||||||
if [[ "${RUNNER_OS}" == "macOS" ]]; then
|
if [[ "${RUNNER_OS}" == "macOS" ]]; then
|
||||||
|
export CFLAGS="-O3 -pipe"
|
||||||
|
export LDFLAGS="-Wl,-dead_strip"
|
||||||
MAKE=make
|
MAKE=make
|
||||||
MAKEOPT="-j$(sysctl -n hw.logicalcpu)"
|
MAKEOPT="-j$(sysctl -n hw.logicalcpu)"
|
||||||
PERL=perl
|
PERL=perl
|
||||||
@@ -285,6 +288,8 @@ jobs:
|
|||||||
echo "We are running on and targetting MacOS ${MACOSX_DEPLOYMENT_TARGET}"
|
echo "We are running on and targetting MacOS ${MACOSX_DEPLOYMENT_TARGET}"
|
||||||
echo "PYTHON=${PYTHON_INSTALL_PATH}/bin/python3" >> $GITHUB_ENV
|
echo "PYTHON=${PYTHON_INSTALL_PATH}/bin/python3" >> $GITHUB_ENV
|
||||||
elif [[ "${RUNNER_OS}" == "Linux" ]]; then
|
elif [[ "${RUNNER_OS}" == "Linux" ]]; then
|
||||||
|
export CFLAGS="-O3 -pipe"
|
||||||
|
export LDFLAGS="-Wl,--strip-all"
|
||||||
MAKE=make
|
MAKE=make
|
||||||
MAKEOPT="-j$(nproc)"
|
MAKEOPT="-j$(nproc)"
|
||||||
PERL=perl
|
PERL=perl
|
||||||
@@ -311,6 +316,8 @@ jobs:
|
|||||||
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" >> $GITHUB_ENV
|
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" >> $GITHUB_ENV
|
||||||
echo "MAKE=${MAKE}" >> $GITHUB_ENV
|
echo "MAKE=${MAKE}" >> $GITHUB_ENV
|
||||||
echo "MAKEOPT=${MAKEOPT}" >> $GITHUB_ENV
|
echo "MAKEOPT=${MAKEOPT}" >> $GITHUB_ENV
|
||||||
|
echo "CFLAGS=${CFLAGS}" >> $GITHUB_ENV
|
||||||
|
echo "LDFLAGS=${LDFLAGS}" >> $GITHUB_ENV
|
||||||
echo "PERL=${PERL}" >> $GITHUB_ENV
|
echo "PERL=${PERL}" >> $GITHUB_ENV
|
||||||
echo "PYEXTERNALS_PATH=${PYEXTERNALS_PATH}" >> $GITHUB_ENV
|
echo "PYEXTERNALS_PATH=${PYEXTERNALS_PATH}" >> $GITHUB_ENV
|
||||||
|
|
||||||
@@ -335,12 +342,15 @@ jobs:
|
|||||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
cd "${OPENSSL_SOURCE_PATH}"
|
cd "${OPENSSL_SOURCE_PATH}"
|
||||||
#if ([ "$RUNNER_OS" == "Windows" ] && [ "$RUNNER_ARCH" == "ARM64" ]); then
|
|
||||||
# https://github.com/openssl/openssl/issues/26239
|
|
||||||
export CFLAGS=-DNO_INTERLOCKEDOR64
|
|
||||||
#fi
|
|
||||||
# --libdir=lib is needed so Python can find OpenSSL libraries
|
# --libdir=lib is needed so Python can find OpenSSL libraries
|
||||||
|
# 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
|
"${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'
|
||||||
@@ -352,10 +362,6 @@ jobs:
|
|||||||
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit != 'true'
|
||||||
run: |
|
run: |
|
||||||
cd "${OPENSSL_SOURCE_PATH}"
|
cd "${OPENSSL_SOURCE_PATH}"
|
||||||
# TODO: remove this once https://github.com/openssl/openssl/issues/26239 is fixed.
|
|
||||||
if ([ "$RUNNER_OS" == "Windows" ] && [ "$RUNNER_ARCH" == "ARM64" ]); then
|
|
||||||
export CFLAGS=-DNO_INTERLOCKEDOR64
|
|
||||||
fi
|
|
||||||
$MAKE "$MAKEOPT"
|
$MAKE "$MAKEOPT"
|
||||||
|
|
||||||
- name: Install OpenSSL
|
- name: Install OpenSSL
|
||||||
@@ -364,20 +370,23 @@ jobs:
|
|||||||
cd "${OPENSSL_SOURCE_PATH}"
|
cd "${OPENSSL_SOURCE_PATH}"
|
||||||
# install_sw saves us ages processing man pages :-)
|
# install_sw saves us ages processing man pages :-)
|
||||||
$MAKE install_sw
|
$MAKE install_sw
|
||||||
|
#if [[ "${RUNNER_OS}" != "Windows" ]]; then
|
||||||
|
# echo "LDFLAGS=-L${OPENSSL_INSTALL_PATH}/lib" >> $GITHUB_ENV
|
||||||
|
#fi
|
||||||
|
#echo "CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1" >> $GITHUB_ENV
|
||||||
|
#case $RUNNER_ARCH in
|
||||||
|
# X64)
|
||||||
|
# echo "CFLAGS=-I${OPENSSL_INSTALL_PATH}/include ${CFLAGS}" >> $GITHUB_ENV
|
||||||
|
# echo "ARCHFLAGS=-arch x86_64" >> $GITHUB_ENV
|
||||||
|
# ;;
|
||||||
|
# ARM64)
|
||||||
|
# echo "CFLAGS=-I${OPENSSL_INSTALL_PATH}/include ${CFLAGS}" >> $GITHUB_ENV
|
||||||
|
# echo "ARCHFLAGS=-arch arm64" >> $GITHUB_ENV
|
||||||
|
# ;;
|
||||||
|
#esac
|
||||||
if [[ "${RUNNER_OS}" != "Windows" ]]; then
|
if [[ "${RUNNER_OS}" != "Windows" ]]; then
|
||||||
echo "LDFLAGS=-L${OPENSSL_INSTALL_PATH}/lib" >> $GITHUB_ENV
|
strip "${OPENSSL_INSTALL_PATH}/bin/openssl"
|
||||||
fi
|
fi
|
||||||
echo "CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1" >> $GITHUB_ENV
|
|
||||||
case $RUNNER_ARCH in
|
|
||||||
X64)
|
|
||||||
echo "CFLAGS=-I${OPENSSL_INSTALL_PATH}/include ${CFLAGS}" >> $GITHUB_ENV
|
|
||||||
echo "ARCHFLAGS=-arch x86_64" >> $GITHUB_ENV
|
|
||||||
;;
|
|
||||||
ARM64)
|
|
||||||
echo "CFLAGS=-I${OPENSSL_INSTALL_PATH}/include ${CFLAGS}" >> $GITHUB_ENV
|
|
||||||
echo "ARCHFLAGS=-arch arm64" >> $GITHUB_ENV
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
- name: Run OpenSSL
|
- name: Run OpenSSL
|
||||||
if: matrix.goal == 'build'
|
if: matrix.goal == 'build'
|
||||||
@@ -393,6 +402,9 @@ jobs:
|
|||||||
cd "${PYTHON_SOURCE_PATH}"
|
cd "${PYTHON_SOURCE_PATH}"
|
||||||
export LATEST_STABLE_TAG=$(git tag --list | grep -v a | grep -v rc | grep -v b | sort -Vr | head -n1)
|
export LATEST_STABLE_TAG=$(git tag --list | grep -v a | grep -v rc | grep -v b | sort -Vr | head -n1)
|
||||||
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
|
||||||
|
|
||||||
@@ -405,7 +417,9 @@ jobs:
|
|||||||
--enable-shared \
|
--enable-shared \
|
||||||
--with-ensurepip=upgrade \
|
--with-ensurepip=upgrade \
|
||||||
--enable-optimizations \
|
--enable-optimizations \
|
||||||
--with-lto || : # exit 0
|
--with-lto \
|
||||||
|
--disable-test-modules \
|
||||||
|
--without-doc-strings || : # exit 0
|
||||||
cat config.log
|
cat config.log
|
||||||
|
|
||||||
- name: Windows Get External Python deps
|
- name: Windows Get External Python deps
|
||||||
@@ -452,8 +466,10 @@ jobs:
|
|||||||
shell: powershell
|
shell: powershell
|
||||||
run: |
|
run: |
|
||||||
cd "${env:PYTHON_SOURCE_PATH}"
|
cd "${env:PYTHON_SOURCE_PATH}"
|
||||||
# We need out custom openssl.props which uses OpenSSL 3 DLL names
|
# We need our custom openssl.props which uses OpenSSL 3 DLL names
|
||||||
Copy-Item -Path "${env:GITHUB_WORKSPACE}\src\tools\openssl.props" -Destination PCBuild\ -Verbose
|
Copy-Item -Path "${env:GITHUB_WORKSPACE}\src\tools\openssl.props" -Destination PCBuild\ -Verbose
|
||||||
|
# We need our custom _hashlib.vcxproj
|
||||||
|
Copy-Item -Path "${env:GITHUB_WORKSPACE}\src\tools\_hashlib.vcxproj" -Destination PCBuild\ -Verbose
|
||||||
if (${env:RUNNER_ARCH} -eq "X64") {
|
if (${env:RUNNER_ARCH} -eq "X64") {
|
||||||
$env:arch = "x64"
|
$env:arch = "x64"
|
||||||
#PCBuild\build.bat -c Release -p $env:arch --pgo
|
#PCBuild\build.bat -c Release -p $env:arch --pgo
|
||||||
@@ -480,6 +496,7 @@ jobs:
|
|||||||
cd "${PYTHON_SOURCE_PATH}"
|
cd "${PYTHON_SOURCE_PATH}"
|
||||||
$MAKE altinstall
|
$MAKE altinstall
|
||||||
$MAKE bininstall
|
$MAKE bininstall
|
||||||
|
strip "${PYTHON_INSTALL_PATH}/bin/python3"
|
||||||
export PATH="${PATH}:${PYTHON_INSTALL_PATH}/bin"
|
export PATH="${PATH}:${PYTHON_INSTALL_PATH}/bin"
|
||||||
echo "PATH=${PATH}" >> $GITHUB_ENV
|
echo "PATH=${PATH}" >> $GITHUB_ENV
|
||||||
echo "PATH: ${PATH}"
|
echo "PATH: ${PATH}"
|
||||||
@@ -547,18 +564,19 @@ jobs:
|
|||||||
- name: Install PyInstaller
|
- name: Install PyInstaller
|
||||||
if: matrix.goal == 'build'
|
if: matrix.goal == 'build'
|
||||||
run: |
|
run: |
|
||||||
git clone https://github.com/pyinstaller/pyinstaller.git
|
#git clone https://github.com/pyinstaller/pyinstaller.git
|
||||||
cd pyinstaller
|
#cd pyinstaller
|
||||||
export latest_release=$(git tag --list | grep -v dev | grep -v rc | sort -Vr | head -n1)
|
#export latest_release=$(git tag --list | grep -v dev | grep -v rc | sort -Vr | head -n1)
|
||||||
git checkout "${latest_release}"
|
#git checkout "${latest_release}"
|
||||||
# git checkout "v6.9.0"
|
# git checkout "v6.9.0"
|
||||||
# remove pre-compiled bootloaders so we fail if bootloader compile fails
|
# remove pre-compiled bootloaders so we fail if bootloader compile fails
|
||||||
rm -rvf PyInstaller/bootloader/*-*/*
|
#rm -rvf PyInstaller/bootloader/*-*/*
|
||||||
cd bootloader
|
#cd bootloader
|
||||||
"${PYTHON}" ./waf all
|
#"${PYTHON}" ./waf all
|
||||||
cd ..
|
#cd ..
|
||||||
echo "---- Installing PyInstaller ----"
|
#echo "---- Installing PyInstaller ----"
|
||||||
"${PYTHON}" -m pip install .
|
#"${PYTHON}" -m pip install .
|
||||||
|
"$PYTHON" -m pip install --upgrade pyinstaller
|
||||||
|
|
||||||
- name: Build GAM with PyInstaller
|
- name: Build GAM with PyInstaller
|
||||||
if: matrix.goal != 'test'
|
if: matrix.goal != 'test'
|
||||||
@@ -927,6 +945,8 @@ jobs:
|
|||||||
run_gam csv ./resources.csv gam delete resource ~resourceId
|
run_gam csv ./resources.csv gam delete resource ~resourceId
|
||||||
run_gam config csv_output_row_filter "buildingId:regex:^gha_test_${JID}_" redirect csv ./buildings.csv print buildings
|
run_gam config csv_output_row_filter "buildingId:regex:^gha_test_${JID}_" redirect csv ./buildings.csv print buildings
|
||||||
run_gam csv ./buildings.csv gam delete building ~buildingId
|
run_gam csv ./buildings.csv gam delete building ~buildingId
|
||||||
|
run_gam config csv_output_row_filter "displayName:regex:^El\ Goog\ gha_test_${JID}_" redirect csv ./ssoprofiles.csv print inboundssoprofiles
|
||||||
|
run_gam csv ./ssoprofiles.csv gam delete inboundssoprofile "id:~~name~~"
|
||||||
|
|
||||||
echo "Creating OrgUnit ${newou}"
|
echo "Creating OrgUnit ${newou}"
|
||||||
run_gam create ou "${newou}"
|
run_gam create ou "${newou}"
|
||||||
@@ -937,14 +957,16 @@ jobs:
|
|||||||
done
|
done
|
||||||
driveid=$($gam user $gam_user add shareddrive "${newbase}" returnidonly)
|
driveid=$($gam user $gam_user add shareddrive "${newbase}" returnidonly)
|
||||||
echo "Created shared drive ${driveid}"
|
echo "Created shared drive ${driveid}"
|
||||||
run_gam create user $newuser firstname GHA lastname $JID displayname "Github Actions ${JID}" password random recoveryphone 12125121110 recoveryemail jay0lee@gmail.com gha.jid $JID languages en+,en-GB- ou "${newou}"
|
run_gam create user $newuser firstname GHA lastname $JID displayname "Github Actions ${JID}" password uniquerandom recoveryphone 12125121110 recoveryemail jay0lee@gmail.com gha.jid $JID languages en+,en-GB- ou "$newou"
|
||||||
run_gam user $newuser add license workspaceenterpriseplus
|
|
||||||
run_gam user $newuser update photo https://dummyimage.com/98x98/000/fff.jpg
|
run_gam user $newuser update photo https://dummyimage.com/98x98/000/fff.jpg
|
||||||
run_gam user $newuser get photo
|
run_gam user $newuser get photo
|
||||||
run_gam user $newuser delete photo
|
run_gam user $newuser delete photo
|
||||||
run_gam create alias $newalias user $newuser
|
run_gam create alias $newalias user $newuser
|
||||||
run_gam create group $newgroup name "GHA $JID group" description "This is a description" isarchived true
|
run_gam create group $newgroup name "GHA $JID group" description "This is a description" isarchived true
|
||||||
run_gam user $gam_user sendemail recipient dev-null@pdl.jaylee.us subject "test message $newbase" message "GHA test message"
|
run_gam user $gam_user sendemail recipient dev-null@pdl.jaylee.us subject "test message $newbase" message "GHA test message"
|
||||||
|
run_gam user $newuser add license workspaceenterpriseplus
|
||||||
|
run_gam update user $newuser ou root # GAM synonym for / root OU
|
||||||
|
run_gam update user $newuser ou "$newou"
|
||||||
run_gam config enable_dasa false save
|
run_gam config enable_dasa false save
|
||||||
# don't expose policy output
|
# don't expose policy output
|
||||||
run_gam show policies > policies.csv
|
run_gam show policies > policies.csv
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -260,6 +260,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
4tb | drive4tb | googledrivestorage4tb | Google-Drive-storage-4TB |
|
4tb | drive4tb | googledrivestorage4tb | Google-Drive-storage-4TB |
|
||||||
8tb | drive8tb | googledrivestorage8tb | Google-Drive-storage-8TB |
|
8tb | drive8tb | googledrivestorage8tb | Google-Drive-storage-8TB |
|
||||||
16tb | drive16tb | googledrivestorage16tb | Google-Drive-storage-16TB |
|
16tb | drive16tb | googledrivestorage16tb | Google-Drive-storage-16TB |
|
||||||
|
aiexpandedaccess | 1010470009 | AI Expanded Access |
|
||||||
aimeetingsandmessaging | 1010470007 | AI Meetings and Messaging |
|
aimeetingsandmessaging | 1010470007 | AI Meetings and Messaging |
|
||||||
aisecurity | 1010470006 | AI Security |
|
aisecurity | 1010470006 | AI Security |
|
||||||
appsheetcore | 1010380001 | AppSheet Core |
|
appsheetcore | 1010380001 | AppSheet Core |
|
||||||
@@ -278,7 +279,7 @@ If an item contains spaces, it should be surrounded by ".
|
|||||||
gaiproedu | geminiedu | 1010470004 | Google AI Pro for Education |
|
gaiproedu | geminiedu | 1010470004 | Google AI Pro for Education |
|
||||||
geminibiz | 1010470003 | Gemini Business |
|
geminibiz | 1010470003 | Gemini Business |
|
||||||
geminiedupremium| 1010470005 | Gemini Education Premium |
|
geminiedupremium| 1010470005 | Gemini Education Premium |
|
||||||
geminient| duetai | 1010470001 | Gemini Enterprise |
|
geminient| duetai | 1010470001 | Gemini Enterprise - Legacy |
|
||||||
geminiultra | 1010470008 | Google AI Ultra for Business |
|
geminiultra | 1010470008 | Google AI Ultra for Business |
|
||||||
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
||||||
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
||||||
@@ -1429,6 +1430,8 @@ gam print addresses [todrive <ToDriveAttribute>*]
|
|||||||
|
|
||||||
# Authorization
|
# Authorization
|
||||||
|
|
||||||
|
gam info gcporgid
|
||||||
|
|
||||||
gam create gcpfolder <String>
|
gam create gcpfolder <String>
|
||||||
gam create gcpfolder [admin <EmailAddress>] folder <String>
|
gam create gcpfolder [admin <EmailAddress>] folder <String>
|
||||||
|
|
||||||
@@ -2990,6 +2993,8 @@ gam [<UserTypeEntity>] show classificationlabelpermissions <ClassificationLabelN
|
|||||||
(combiningfunction <CAACombiningFunction>) |
|
(combiningfunction <CAACombiningFunction>) |
|
||||||
(condition <CAAConditionAttribute>+ endcondition)
|
(condition <CAAConditionAttribute>+ endcondition)
|
||||||
|
|
||||||
|
gam info gcporgid
|
||||||
|
|
||||||
gam create caalevel <String> [description <String>] (basic <CAABasicAttribute>+)|(custom <QueryCEL>)|<JSONData>
|
gam create caalevel <String> [description <String>] (basic <CAABasicAttribute>+)|(custom <QueryCEL>)|<JSONData>
|
||||||
gam update caalevel <CAALevelName> [description <String>] (basic <CAABasicAttribute>+)|(custom <QueryCEL>)|<JSONData>
|
gam update caalevel <CAALevelName> [description <String>] (basic <CAABasicAttribute>+)|(custom <QueryCEL>)|<JSONData>
|
||||||
gam delete caalevel <CAALevelName>
|
gam delete caalevel <CAALevelName>
|
||||||
@@ -3509,13 +3514,6 @@ gam print guardian|guardians [todrive <ToDriveAttribute>*] [accepted|invitations
|
|||||||
[showstudentemails]
|
[showstudentemails]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
|
|
||||||
# Business Profile Accounts
|
|
||||||
|
|
||||||
gam show businessprofileaccounts
|
|
||||||
[type locationgroup|organization|personal|usergroup]
|
|
||||||
gam print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
|
||||||
[type locationgroup|organization|personal|usergroup]
|
|
||||||
|
|
||||||
# Classroom User Profiles
|
# Classroom User Profiles
|
||||||
|
|
||||||
gam <UserTypeEntity> print classroomprofile [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print classroomprofile [todrive <ToDriveAttribute>*]
|
||||||
@@ -3544,6 +3542,10 @@ gam info customer [formatjson]
|
|||||||
|
|
||||||
gam info instance [formatjson]
|
gam info instance [formatjson]
|
||||||
|
|
||||||
|
gam info customerid
|
||||||
|
|
||||||
|
gam info gcporgid
|
||||||
|
|
||||||
# Data Transfers
|
# Data Transfers
|
||||||
|
|
||||||
gam print|show transferapps
|
gam print|show transferapps
|
||||||
@@ -3824,6 +3826,7 @@ gam audit monitor list <EmailAddress>
|
|||||||
(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)|
|
||||||
|
(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)|
|
(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)|
|
||||||
@@ -3882,6 +3885,7 @@ gam create|add group <EmailAddress>
|
|||||||
[copyfrom <GroupItem>] <GroupAttribute>*
|
[copyfrom <GroupItem>] <GroupAttribute>*
|
||||||
[verifynotinvitable]
|
[verifynotinvitable]
|
||||||
gam update group|groups <GroupEntity> [email <EmailAddress>]
|
gam update group|groups <GroupEntity> [email <EmailAddress>]
|
||||||
|
[updateprimaryemail <RESearchPattern> <RESubstitution>]
|
||||||
[copyfrom <GroupItem>] <GroupAttribute>*
|
[copyfrom <GroupItem>] <GroupAttribute>*
|
||||||
[security|makesecuritygroup]
|
[security|makesecuritygroup]
|
||||||
[admincreated <Boolean>]
|
[admincreated <Boolean>]
|
||||||
@@ -3952,6 +3956,7 @@ gam delete group|groups <GroupEntity> [noactionifalias]
|
|||||||
spammoderationlevel|
|
spammoderationlevel|
|
||||||
whocanaddreferences|
|
whocanaddreferences|
|
||||||
whocanadd|
|
whocanadd|
|
||||||
|
whocanaddexternalmembers|
|
||||||
whocanapprovemessages|
|
whocanapprovemessages|
|
||||||
whocanassigntopics|
|
whocanassigntopics|
|
||||||
whocanassistcontent|
|
whocanassistcontent|
|
||||||
@@ -4109,6 +4114,7 @@ gam create cigroup <EmailAddress>
|
|||||||
[security|makesecuritygroup] [locked]
|
[security|makesecuritygroup] [locked]
|
||||||
[dynamic <QueryDynamicGroup>]
|
[dynamic <QueryDynamicGroup>]
|
||||||
gam update cigroup <GroupEntity> [copyfrom <GroupItem>] <GroupAttribute>
|
gam update cigroup <GroupEntity> [copyfrom <GroupItem>] <GroupAttribute>
|
||||||
|
[updateprimaryemail <RESearchPattern> <RESubstitution>]
|
||||||
[security|makesecuritygroup|
|
[security|makesecuritygroup|
|
||||||
dynamicsecurity|makedynamicsecuritygroup|
|
dynamicsecurity|makedynamicsecuritygroup|
|
||||||
lockedsecurity|makelockedsecuritygroup]
|
lockedsecurity|makelockedsecuritygroup]
|
||||||
@@ -4335,14 +4341,14 @@ gam update deviceuserstate <DeviceUserEntity> [clientid <String>]
|
|||||||
# Cloud Identity Policies
|
# Cloud Identity Policies
|
||||||
|
|
||||||
gam info policies <CIPolicyNameEntity>
|
gam info policies <CIPolicyNameEntity>
|
||||||
[nowarnings] [noappnames]
|
[nowarnings] [noappnames] [noidmappimg]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam print policies [todrive <ToDriveAttribute>*]
|
gam print policies [todrive <ToDriveAttribute>*]
|
||||||
[filter <String>] [nowarnings] [noappnames]
|
[filter <String>] [nowarnings] [noappnames] [noidmappimg]
|
||||||
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
gam show policies
|
gam show policies
|
||||||
[filter <String>] [nowarnings] [noappnames]
|
[filter <String>] [nowarnings] [noappnames] [noidmappimg]
|
||||||
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
|
|
||||||
@@ -4662,6 +4668,8 @@ gam report <ActivityApplicationName> [todrive <ToDriveAttribute>*]
|
|||||||
[event|events <EventNameList>] [ip <String>]
|
[event|events <EventNameList>] [ip <String>]
|
||||||
[gmaileventtypes <NumberRangeList>]
|
[gmaileventtypes <NumberRangeList>]
|
||||||
[groupidfilter <String>] [resourcedetailsfilter <String>]
|
[groupidfilter <String>] [resourcedetailsfilter <String>]
|
||||||
|
[networkinfofilter <String>] [statusfilter <String>]
|
||||||
|
[applicationinfofilter <String>] [includesensitivedata]
|
||||||
[notimesort]
|
[notimesort]
|
||||||
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
||||||
[countsonly [bydate|summary] [eventrowfilter]]
|
[countsonly [bydate|summary] [eventrowfilter]]
|
||||||
@@ -4926,36 +4934,43 @@ gam print schema|schemas [todrive <ToDriveAttribute>*]
|
|||||||
gam sendemail [recipient|to] <RecipientEntity>
|
gam sendemail [recipient|to] <RecipientEntity>
|
||||||
[from <EmailAddress>] [mailbox <EmailAddress>] [replyto <EmailAddress>]
|
[from <EmailAddress>] [mailbox <EmailAddress>] [replyto <EmailAddress>]
|
||||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||||
[subject <String>]
|
[subject <String>] [<MessageContent>] [html [<Boolean>]]
|
||||||
[<MessageContent>]
|
|
||||||
(replace <Tag> <String>)*
|
(replace <Tag> <String>)*
|
||||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <String>)*
|
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <String>)*
|
||||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
(attach <FileName> [charset <Charset>])*
|
||||||
(embedimage <FileName> <String>)*
|
(embedimage <FileName> <String>)*
|
||||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
[threadid <String>]
|
||||||
gam <UserTypeEntity> sendemail recipient|to <RecipientEntity>
|
gam <UserTypeEntity> sendemail recipient|to <RecipientEntity>
|
||||||
[replyto <EmailAddress>]
|
[replyto <EmailAddress>]
|
||||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||||
[subject <String>]
|
[subject <String>] [<MessageContent>] [html [<Boolean>]]
|
||||||
[<MessageContent>]
|
|
||||||
(replace <Tag> <String>)*
|
(replace <Tag> <String>)*
|
||||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <String>)*
|
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <String>)*
|
||||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
(attach <FileName> [charset <Charset>])*
|
||||||
(embedimage <FileName> <String>)*
|
(embedimage <FileName> <String>)*
|
||||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
[threadid <String>]
|
||||||
gam <UserTypeEntity> sendemail from <EmailAddress>
|
gam <UserTypeEntity> sendemail from <EmailAddress>
|
||||||
[replyto <EmailAddress>]
|
[replyto <EmailAddress>]
|
||||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||||
[subject <String>]
|
[subject <String>] [<MessageContent>] [html [<Boolean>]]
|
||||||
[<MessageContent>]
|
|
||||||
(replace <Tag> <String>)*
|
(replace <Tag> <String>)*
|
||||||
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <String>)*
|
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <String>)*
|
||||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
(attach <FileName> [charset <Charset>])*
|
||||||
(embedimage <FileName> <String>)*
|
(embedimage <FileName> <String>)*
|
||||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
[threadid <String>]
|
||||||
|
gam <UserTypeEntity> sendreply
|
||||||
|
(((query <QueryGmail> [querytime<String> <Date>]*) [or|and])+) | (ids <MessageIDEntity>)
|
||||||
|
[replyto <EmailAddress>]
|
||||||
|
[subject <String>] [<MessageContent>] [html [<Boolean>]]
|
||||||
|
(attach <FileName> [charset <CharSet>])*
|
||||||
|
(embedimage <FileName> <String>)*
|
||||||
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
|
||||||
# Shared Drives - Administrator
|
# Shared Drives - Administrator
|
||||||
|
|
||||||
@@ -5191,7 +5206,6 @@ gam create|add permissions <SharedDriveEntityAdmin> <DriveFilePermissionEntity>
|
|||||||
<PermissionMatch>* [<PermissionMatchAction>]
|
<PermissionMatch>* [<PermissionMatchAction>]
|
||||||
gam delete permissions <SharedDriveEntityAdmin> <DriveFilePermissionIDEntity>
|
gam delete permissions <SharedDriveEntityAdmin> <DriveFilePermissionIDEntity>
|
||||||
<PermissionMatch>* [<PermissionMatchAction>]
|
<PermissionMatch>* [<PermissionMatchAction>]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
|
|
||||||
In these commands, you specify an administrator and then indicate that you want domain administrator access with the adminaccess option.
|
In these commands, you specify an administrator and then indicate that you want domain administrator access with the adminaccess option.
|
||||||
|
|
||||||
@@ -5205,11 +5219,9 @@ gam <UserTypeEntity> create|add drivefileacl <SharedDriveEntityAdmin>
|
|||||||
adminaccess
|
adminaccess
|
||||||
gam <UserTypeEntity> update drivefileacl <SharedDriveEntityAdmin> <DriveFilePermissionIDorEmail>
|
gam <UserTypeEntity> update drivefileacl <SharedDriveEntityAdmin> <DriveFilePermissionIDorEmail>
|
||||||
(role <DriveFileACLRole>) [expires|expiration <Time>] [removeexpiration [<Boolean>]]
|
(role <DriveFileACLRole>) [expires|expiration <Time>] [removeexpiration [<Boolean>]]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
||||||
adminaccess
|
adminaccess
|
||||||
gam <UserTypeEntity> delete drivefileacl <SharedDriveEntityAdmin> <DriveFilePermissionIDorEmail>
|
gam <UserTypeEntity> delete drivefileacl <SharedDriveEntityAdmin> <DriveFilePermissionIDorEmail>
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
[showtitles] adminaccess
|
[showtitles] adminaccess
|
||||||
gam <UserTypeEntity> info drivefileacl <SharedDriveEntityAdmin> <DriveFilePermissionIDorEmail> adminaccess
|
gam <UserTypeEntity> info drivefileacl <SharedDriveEntityAdmin> <DriveFilePermissionIDorEmail> adminaccess
|
||||||
[showtitles]
|
[showtitles]
|
||||||
@@ -5235,7 +5247,6 @@ gam <UserTypeEntity> create|add permissions <SharedDriveEntityAdmin> <DriveFileP
|
|||||||
<PermissionMatch>* [<PermissionMatchAction>]
|
<PermissionMatch>* [<PermissionMatchAction>]
|
||||||
gam <UserTypeEntity> delete permissions <SharedDriveEntityAdmin> <DriveFilePermissionIDEntity> adminaccess
|
gam <UserTypeEntity> delete permissions <SharedDriveEntityAdmin> <DriveFilePermissionIDEntity> adminaccess
|
||||||
<PermissionMatch>* [<PermissionMatchAction>]
|
<PermissionMatch>* [<PermissionMatchAction>]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
|
|
||||||
In these commands, the Google administrator named in oauth2.txt is used.
|
In these commands, the Google administrator named in oauth2.txt is used.
|
||||||
|
|
||||||
@@ -5747,7 +5758,7 @@ gam download storagefile <StorageBucketObjectName>
|
|||||||
(language clear|<LanguageList>)|
|
(language clear|<LanguageList>)|
|
||||||
(lastname|familyname <String>)|
|
(lastname|familyname <String>)|
|
||||||
(note clear|([text_html|text_plain] <UserNoteContent))|
|
(note clear|([text_html|text_plain] <UserNoteContent))|
|
||||||
(ou|org|orgunitpath <OrgUnitPath>|<OrgUnitID>)
|
(ou|org|orgunitpath <OrgUnitPath>|<OrgUnitID>|root)
|
||||||
(password (random [<Integer>])|(uniquerandom [<Integer>])|
|
(password (random [<Integer>])|(uniquerandom [<Integer>])|
|
||||||
blocklogin|
|
blocklogin|
|
||||||
prompt|uniqueprompt|
|
prompt|uniqueprompt|
|
||||||
@@ -5803,12 +5814,12 @@ gam download storagefile <StorageBucketObjectName>
|
|||||||
|
|
||||||
<UserClearAttribute> ::=
|
<UserClearAttribute> ::=
|
||||||
(address clear)|
|
(address clear)|
|
||||||
(otheremail clear)|
|
|
||||||
(externalid clear)|
|
(externalid clear)|
|
||||||
(im clear)|
|
(im clear)|
|
||||||
(keyword clear)|
|
(keyword clear)|
|
||||||
(location clear)|
|
(location clear)|
|
||||||
(organization clear)|
|
(organization clear)|
|
||||||
|
(otheremail clear)|
|
||||||
(phone clear)|
|
(phone clear)|
|
||||||
(posix clear)|
|
(posix clear)|
|
||||||
(relation clear)|
|
(relation clear)|
|
||||||
@@ -5821,6 +5832,18 @@ gam download storagefile <StorageBucketObjectName>
|
|||||||
<UserMultiAttribute>|
|
<UserMultiAttribute>|
|
||||||
<UserClearAttribute>
|
<UserClearAttribute>
|
||||||
|
|
||||||
|
<UserMultiAttributeFilterName> ::=
|
||||||
|
address|addresses|
|
||||||
|
externalid|externalids|
|
||||||
|
im|ims|
|
||||||
|
keyword|keywords|
|
||||||
|
location|locations|
|
||||||
|
orgainzation|organizations|
|
||||||
|
otheremail|otheremails|
|
||||||
|
phone|phones|
|
||||||
|
relation|relations|
|
||||||
|
website|websites
|
||||||
|
|
||||||
gam create|add user <EmailAddress> [ignorenullpassword] <UserAttribute>*
|
gam create|add user <EmailAddress> [ignorenullpassword] <UserAttribute>*
|
||||||
[verifynotinvitable|alwaysevict]
|
[verifynotinvitable|alwaysevict]
|
||||||
(groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
|
(groups [<GroupRole>] [[delivery] <DeliverySetting>] <GroupEntity>)*
|
||||||
@@ -5875,6 +5898,8 @@ gam info user [<UserItem>]
|
|||||||
[nolicenses|nolicences|licenses|licences]
|
[nolicenses|nolicences|licenses|licences]
|
||||||
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
||||||
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
||||||
|
(filtermultiattrtype <UserMultiAttributeFilterName> <String>)*
|
||||||
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
|
|
||||||
@@ -5911,6 +5936,8 @@ gam info users <UserTypeEntity>
|
|||||||
[nolicenses|nolicences|licenses|licences]
|
[nolicenses|nolicences|licenses|licences]
|
||||||
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
||||||
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
||||||
|
(filtermultiattrtype <UserMultiAttributeFilterName> <String>)*
|
||||||
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
|
|
||||||
@@ -5947,6 +5974,8 @@ gam <UserTypeEntity> info users
|
|||||||
[nolicenses|nolicences|licenses|licences]
|
[nolicenses|nolicences|licenses|licences]
|
||||||
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
||||||
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
||||||
|
(filtermultiattrtype <UserMultiAttributeFilterName> <String>)*
|
||||||
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
|
|
||||||
@@ -5966,6 +5995,8 @@ gam print users [todrive <ToDriveAttribute>*]
|
|||||||
[schemas|custom|customschemas all|<SchemaNameList>]
|
[schemas|custom|customschemas all|<SchemaNameList>]
|
||||||
[emailpart|emailparts|username]
|
[emailpart|emailparts|username]
|
||||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||||
|
(filtermultiattrtype <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>] [aliasmatchpattern <REMatchPattern>]
|
||||||
@@ -5983,6 +6014,8 @@ gam print users [todrive <ToDriveAttribute>*] select <UserTypeEntity>
|
|||||||
[schemas|custom|customschemas all|<SchemaNameList>]
|
[schemas|custom|customschemas all|<SchemaNameList>]
|
||||||
[emailpart|emailparts|username]
|
[emailpart|emailparts|username]
|
||||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||||
|
(filtermultiattrtype <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>] [aliasmatchpattern <REMatchPattern>]
|
||||||
@@ -5998,6 +6031,8 @@ gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
|||||||
[schemas|custom|customschemas all|<SchemaNameList>]
|
[schemas|custom|customschemas all|<SchemaNameList>]
|
||||||
[emailpart|emailparts|username]
|
[emailpart|emailparts|username]
|
||||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||||
|
(filtermultiattrtype <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>] [aliasmatchpattern <REMatchPattern>]
|
||||||
@@ -6060,6 +6095,13 @@ gam <UserTypeEntity> show backupcodes|verificationcodes
|
|||||||
gam <UserTypeEntity> print backupcodes|verificationcodes [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print backupcodes|verificationcodes [todrive <ToDriveAttribute>*]
|
||||||
[delimiter <Character>] [countsonly]
|
[delimiter <Character>] [countsonly]
|
||||||
|
|
||||||
|
# Users - Business Profile Accounts
|
||||||
|
|
||||||
|
gam <UserTypeEntity> show businessprofileaccounts
|
||||||
|
[type locationgroup|organization|personal|usergroup]
|
||||||
|
gam <UserTypeEntity> print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
||||||
|
[type locationgroup|organization|personal|usergroup]
|
||||||
|
|
||||||
# Users - Calendars
|
# Users - Calendars
|
||||||
|
|
||||||
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer
|
<CalendarACLRole> ::= editor|freebusy|freebusyreader|owner|reader|writer
|
||||||
@@ -6490,7 +6532,8 @@ gam <UserTypeEntity> create chatspace
|
|||||||
[description <String>] [guidelines <String>]
|
[description <String>] [guidelines <String>]
|
||||||
[history <Boolean>]
|
[history <Boolean>]
|
||||||
[<ChatContent>]
|
[<ChatContent>]
|
||||||
[formatjson|returnidonly]
|
[(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*) | formatjson | returnidonly]
|
||||||
|
|
||||||
gam <UserTypeEntity> update chatspace <ChatSpace>
|
gam <UserTypeEntity> update chatspace <ChatSpace>
|
||||||
[restricted|(audience <String>)]|
|
[restricted|(audience <String>)]|
|
||||||
([displayname <String>]
|
([displayname <String>]
|
||||||
@@ -6930,7 +6973,6 @@ gam <UserTypeEntity> copy drivefile <DriveFileEntity>
|
|||||||
[sendemailifrequired [<Boolean>]]
|
[sendemailifrequired [<Boolean>]]
|
||||||
[suppressnotselectedmessages [<Boolean>]]
|
[suppressnotselectedmessages [<Boolean>]]
|
||||||
[verifyorganizer [<Boolean>]]
|
[verifyorganizer [<Boolean>]]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
|
|
||||||
gam <UserTypeEntity> move drivefile <DriveFileEntity> [newfilename <DriveFileName>]
|
gam <UserTypeEntity> move drivefile <DriveFileEntity> [newfilename <DriveFileName>]
|
||||||
[summary [<Boolean>]] [showpermissionmessages [<Boolean>]]
|
[summary [<Boolean>]] [showpermissionmessages [<Boolean>]]
|
||||||
@@ -6955,7 +6997,6 @@ gam <UserTypeEntity> move drivefile <DriveFileEntity> [newfilename <DriveFileNam
|
|||||||
[retainsourcefolders [<Boolean>]]
|
[retainsourcefolders [<Boolean>]]
|
||||||
[sendemailifrequired [<Boolean>]]
|
[sendemailifrequired [<Boolean>]]
|
||||||
[verifyorganizer [<Boolean>]]
|
[verifyorganizer [<Boolean>]]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
|
|
||||||
gam <UserTypeEntity> get document <DriveFileEntity>
|
gam <UserTypeEntity> get document <DriveFileEntity>
|
||||||
[viewmode default|suggestions_inline|preview_suggestions_accepted|preview_without_suggestions]
|
[viewmode default|suggestions_inline|preview_suggestions_accepted|preview_without_suggestions]
|
||||||
@@ -7062,10 +7103,10 @@ gam <UserTypeEntity> create|add drivefileacl <DriveFileEntity> [adminaccess|asad
|
|||||||
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
||||||
gam <UserTypeEntity> update drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
gam <UserTypeEntity> update drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
||||||
(role <DriveFileACLRole>) [expires|expiration <Time>] [removeexpiration [<Boolean>]]
|
(role <DriveFileACLRole>) [expires|expiration <Time>] [removeexpiration [<Boolean>]]
|
||||||
[updatesheetprotectedranges [<Boolean>]] [enforceexpansiveaccess [<Boolean>]]
|
[updatesheetprotectedranges [<Boolean>]]
|
||||||
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
||||||
gam <UserTypeEntity> delete drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
gam <UserTypeEntity> delete drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
||||||
[updatesheetprotectedranges [<Boolean>]] [enforceexpansiveaccess [<Boolean>]]
|
[updatesheetprotectedranges [<Boolean>]]
|
||||||
[showtitles]
|
[showtitles]
|
||||||
gam <UserTypeEntity> info drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
gam <UserTypeEntity> info drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
||||||
[showtitles]
|
[showtitles]
|
||||||
@@ -7189,7 +7230,6 @@ gam <UserTypeEntity> print filerevisions <DriveFileEntity> [todrive <ToDriveAttr
|
|||||||
|
|
||||||
gam <UserTypeEntity> transfer ownership <DriveFileEntity> <UserItem>
|
gam <UserTypeEntity> transfer ownership <DriveFileEntity> <UserItem>
|
||||||
[<DriveFileParentAttribute>] [includetrashed] [norecursion [<Boolean>]]
|
[<DriveFileParentAttribute>] [includetrashed] [norecursion [<Boolean>]]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[preview] [filepath] [pathdelimiter <Character>] [buildtree]
|
[preview] [filepath] [pathdelimiter <Character>] [buildtree]
|
||||||
[todrive <ToDriveAttribute>*]
|
[todrive <ToDriveAttribute>*]
|
||||||
@@ -7198,7 +7238,6 @@ gam <UserTypeEntity> claim ownership <DriveFileEntity>
|
|||||||
[skipids <DriveFileEntity>] [onlyusers|skipusers <UserTypeEntity>] [subdomains <DomainNameEntity>]
|
[skipids <DriveFileEntity>] [onlyusers|skipusers <UserTypeEntity>] [subdomains <DomainNameEntity>]
|
||||||
[restricted [<Boolean>]] [writerscanshare|writerscantshare [<Boolean>]]
|
[restricted [<Boolean>]] [writerscanshare|writerscantshare [<Boolean>]]
|
||||||
[keepuser | (retainrole commenter|reader|writer|editor|fileorganizer|none)] [noretentionmessages]
|
[keepuser | (retainrole commenter|reader|writer|editor|fileorganizer|none)] [noretentionmessages]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[preview] [filepath] [pathdelimiter <Character>] [buildtree]
|
[preview] [filepath] [pathdelimiter <Character>] [buildtree]
|
||||||
[todrive <ToDriveAttribute>*]
|
[todrive <ToDriveAttribute>*]
|
||||||
@@ -7206,7 +7245,6 @@ gam <UserTypeEntity> claim ownership <DriveFileEntity>
|
|||||||
gam <UserTypeEntity> transfer drive <UserItem> [select <DriveFileEntity>]
|
gam <UserTypeEntity> transfer drive <UserItem> [select <DriveFileEntity>]
|
||||||
[(targetfolderid <DriveFolderID>)|(targetfoldername <DriveFolderName>)]
|
[(targetfolderid <DriveFolderID>)|(targetfoldername <DriveFolderName>)]
|
||||||
[targetuserfoldername <DriveFolderName>] [targetuserorphansfoldername <DriveFolderName>]
|
[targetuserfoldername <DriveFolderName>] [targetuserorphansfoldername <DriveFolderName>]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
[mergewithtarget [<Boolean>]]
|
[mergewithtarget [<Boolean>]]
|
||||||
[skipids <DriveFileEntity>]
|
[skipids <DriveFileEntity>]
|
||||||
[keepuser | (retainrole reader|commenter|writer|editor|fileorganizer|none)] [noretentionmessages]
|
[keepuser | (retainrole reader|commenter|writer|editor|fileorganizer|none)] [noretentionmessages]
|
||||||
@@ -8881,19 +8919,21 @@ gam <UserTypeEntity> show sheetrange <DriveFileEntity>
|
|||||||
|
|
||||||
gam <UserTypeEntity> delete tokens clientid <ClientID>
|
gam <UserTypeEntity> delete tokens clientid <ClientID>
|
||||||
|
|
||||||
|
gam info gcporgid
|
||||||
|
|
||||||
gam <UserTypeEntity> print tokens|token [todrive <ToDriveAttribute>*] [clientid <ClientID>]
|
gam <UserTypeEntity> print tokens|token [todrive <ToDriveAttribute>*] [clientid <ClientID>]
|
||||||
[usertokencounts|(aggregateusersby|orderby clientid|id|appname|displaytext)]
|
[usertokencounts|(aggregateusersby|orderby clientid|id|appname|displaytext)]
|
||||||
[delimiter <Character>]
|
[delimiter <Character>] [gcpdetails]
|
||||||
gam <UserTypeEntity> show tokens|token|3lo|oauth [clientid <ClientID>]
|
gam <UserTypeEntity> show tokens|token|3lo|oauth [clientid <ClientID>]
|
||||||
[usertokencounts|(aggregateusersby|orderby clientid|id|appname|displaytext)]
|
[usertokencounts|(aggregateusersby|orderby clientid|id|appname|displaytext)]
|
||||||
[delimiter <Character>]
|
[delimiter <Character>] [gcpdetails]
|
||||||
gam print tokens|token [todrive <ToDriveAttribute>*] [clientid <ClientID>]
|
gam print tokens|token [todrive <ToDriveAttribute>*] [clientid <ClientID>]
|
||||||
[usertokencounts|(aggregateusersby|orderby clientid|id|appname|displaytext)]
|
[usertokencounts|(aggregateusersby|orderby clientid|id|appname|displaytext)]
|
||||||
[delimiter <Character>]
|
[delimiter <Character>] [gcpdetails]
|
||||||
[<UserTypeEntity>]
|
[<UserTypeEntity>]
|
||||||
gam show tokens|token [clientid <ClientID>]
|
gam show tokens|token [clientid <ClientID>]
|
||||||
[usertokencounts|(aggregateusersby|orderby clientid|id|appname|displaytext)]
|
[usertokencounts|(aggregateusersby|orderby clientid|id|appname|displaytext)]
|
||||||
[delimiter <Character>]
|
[delimiter <Character>] [gcpdetails]
|
||||||
[<UserTypeEntity>]
|
[<UserTypeEntity>]
|
||||||
|
|
||||||
# Users - YouTube
|
# Users - YouTube
|
||||||
|
|||||||
@@ -1,3 +1,226 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
Added option `whocanaddexternalmembers only_owners_can_add_external_members|end_users_can_add_external_members` to `<GroupSettingsAttribute>`.
|
||||||
|
It appears that `allowexternalmembers true` must be set in the same command.
|
||||||
|
Added option `whocanaddexternalmembers` to `<GroupFieldName>`.
|
||||||
|
These options are not in general release as of 2026-04-13; experiment.
|
||||||
|
|
||||||
|
7.40.02
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
|
7.40.01
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> print filelist|filecounts` to handle the `permissionDetails` subfield
|
||||||
|
of the `permissions` field for My Drives; this useful when trying to display permission inheritance.
|
||||||
|
An additional API call per file is required to get the `permissionDetails` subfield.
|
||||||
|
```
|
||||||
|
gam user user@domain.com print filelist fields id,name,mimetype,basicpermissions,permissiondetails oneitemperrow
|
||||||
|
gam user user@domain.com print filelist fields id,name,mimetype,basicpermissions,permissiondetails pm inherited false em pmfilter oneitemperrow
|
||||||
|
```
|
||||||
|
|
||||||
|
7.40.00
|
||||||
|
|
||||||
|
Updated `gam print|show businessprofileaccounts` (client access) to
|
||||||
|
`gam <UserTypeEntity> print|show businessprofileaccounts` (service account access).
|
||||||
|
You'll need to run `gam user user@domain.com update serviceaccount` and
|
||||||
|
select `2) Business Account Management API`.
|
||||||
|
|
||||||
|
7.39.08
|
||||||
|
|
||||||
|
Fixed bug in `gam oauth create` that caused a trap when `0) Business Account Management API` was selected.
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.4 on macOS and Windows; Linux is still 3.14.3.
|
||||||
|
|
||||||
|
7.39.07
|
||||||
|
|
||||||
|
Upgraded to OpenSSL 3.6.2.
|
||||||
|
|
||||||
|
7.39.06
|
||||||
|
|
||||||
|
Fixed bug in `gam version checkrc`.
|
||||||
|
|
||||||
|
7.39.05
|
||||||
|
|
||||||
|
Added optional argument `preview` to `updateprimaryemail <RegularExpression> <EmailReplacement> [preview]`
|
||||||
|
for the following commands that causes GAM to preview, but not perform, primary email address changes.
|
||||||
|
This allows verification of the primary email address changes before commiting the changes.
|
||||||
|
```
|
||||||
|
gam update group <GroupEntity>
|
||||||
|
gam update cigroup <GroupEntity>
|
||||||
|
gam <UserTypeEntity> update user
|
||||||
|
```
|
||||||
|
|
||||||
|
7.39.04
|
||||||
|
|
||||||
|
Added `updateprimaryemail <RegularExpression> <EmailReplacement>` option to
|
||||||
|
`gam update group <GroupEntity>` and `gam update cigroup <GroupEntity>` to allow modifying
|
||||||
|
the group's current primary email address.
|
||||||
|
For example, to change the domain of a set of groups from the current domain.com to newdomain.com:
|
||||||
|
```
|
||||||
|
gam update group csvfile Groups.csv:email updateprimaryemail "^(.+)@domain.com$" "\1@newdomain.com"
|
||||||
|
```
|
||||||
|
|
||||||
|
7.39.03
|
||||||
|
|
||||||
|
Added the following options to `gam <UserTypeEntity> create chatspace` that can be used to capture
|
||||||
|
space details when creating chat spaces in bulk.
|
||||||
|
```
|
||||||
|
csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*
|
||||||
|
```
|
||||||
|
|
||||||
|
See: https://github.com/GAM-team/GAM/wiki/Users-Chat#bulk-build-chat-spaces
|
||||||
|
|
||||||
|
7.39.02
|
||||||
|
|
||||||
|
Fixed progress messages for `gam <UserTypeEntity> print filelist` when permissions were being
|
||||||
|
displayed/matched for Shared Drives.
|
||||||
|
|
||||||
|
7.39.01
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> transfer drive <UserItem>` to handle the following error:
|
||||||
|
```
|
||||||
|
ERROR: 403: cannotDeletePermission - The authenticated user cannot delete the permission.
|
||||||
|
```
|
||||||
|
|
||||||
|
7.39.00
|
||||||
|
|
||||||
|
Deleted variable `enforce_expansive_access` from `gam.cfg` and removed option `enforceexpansiveaccess`
|
||||||
|
from the following commands as expansive access is now always enforced by Google on My Drives.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> delete permissions
|
||||||
|
gam <UserTypeEntity> delete drivefileacl
|
||||||
|
gam <UserTypeEntity> update drivefileacl
|
||||||
|
gam <UserTypeEntity> copy drivefile
|
||||||
|
gam <UserTypeEntity> move drivefile
|
||||||
|
gam <UserTypeEntity> transfer ownership
|
||||||
|
gam <UserTypeEntity> claim ownership
|
||||||
|
```
|
||||||
|
|
||||||
|
7.38.02
|
||||||
|
|
||||||
|
Added license SKU `1010470009` for `AI Expanded Access`; abbreviation `aiexpandedaccess`.
|
||||||
|
|
||||||
|
Renamed license SKU `1010470001` from `Gemini Enterprise` to `Gemini Enterprise - Legacy`.
|
||||||
|
|
||||||
|
7.38.01
|
||||||
|
|
||||||
|
Added `root` as a synonym for '/' in command line arguments that specify an OU.
|
||||||
|
This is to avoid issues where a stand-alone `/` on the command line may be mis-interpreted
|
||||||
|
by the command line interpreter as a reference to the file system root.
|
||||||
|
|
||||||
|
7.38.00
|
||||||
|
|
||||||
|
Added variable `gcp_org_id` to `gam.cfg` that is used by the following commands;
|
||||||
|
by setting the value, additional API calls are eliminated.
|
||||||
|
```
|
||||||
|
gam create project
|
||||||
|
gam create gcpfolder
|
||||||
|
gam create|update|delete caalevel
|
||||||
|
gam print|show caalevels
|
||||||
|
gam print|show tokens gcpdetails
|
||||||
|
```
|
||||||
|
You can get and set the `gam.cfg/gcp_org_id` value with these commands:
|
||||||
|
```
|
||||||
|
$ gam info gcporgid
|
||||||
|
organizations/906207637890
|
||||||
|
$ gam config gcp_org_id organizations/906207637890 save
|
||||||
|
```
|
||||||
|
|
||||||
|
You can get and set the `gam.cfg/customer_id` value with these commands:
|
||||||
|
```
|
||||||
|
$ gam info customerid
|
||||||
|
C78abc9de
|
||||||
|
$ gam config customer_id C78abc9de save
|
||||||
|
```
|
||||||
|
|
||||||
|
Added the following options to `gam report <ActivityApplicationName>`.
|
||||||
|
```
|
||||||
|
applicationinfofilter <String>
|
||||||
|
networkinfofilter <String>
|
||||||
|
statusfilter <String>
|
||||||
|
includesensitivedata
|
||||||
|
```
|
||||||
|
|
||||||
|
7.37.00
|
||||||
|
|
||||||
|
Added new client access scopes used by `gam print tokens`.
|
||||||
|
```
|
||||||
|
[*] 52) Resource Manager API - Organizations readonly
|
||||||
|
[*] 53) Resource Manager API - Projects readonly
|
||||||
|
```
|
||||||
|
|
||||||
|
Added option `gcpdetails` to `gam print tokens` that uses these scopes to get additional project information.
|
||||||
|
|
||||||
|
7.36.03
|
||||||
|
|
||||||
|
Added command to send email replies that causes Gmail to recognize the message
|
||||||
|
in conversation mode for the user sending the reply and the user receiving the reply;
|
||||||
|
GAM supplies the necessary headers and options.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> sendreply
|
||||||
|
(((query <QueryGmail> [querytime<String> <Date>]*) [or|and])+) | (ids <MessageIDEntity>)
|
||||||
|
[replyto <EmailAddress>]
|
||||||
|
[subject <String>] [<MessageContent>] [html [<Boolean>]]
|
||||||
|
(attach <FileName> [charset <CharSet>])*
|
||||||
|
(embedimage <FileName> <String>)*
|
||||||
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
|
||||||
|
gam user user@domain.com sendreply query "rfc822MsgId:<CAAMmEdqj43...1OsQ@mail.gmail.com>" textmessage "Thanks for the information"
|
||||||
|
gam user user@domain.com sendreply ids 19cfc3506c02c22b textmessage "Thanks for the information"
|
||||||
|
```
|
||||||
|
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Send-Email#conversation-mode
|
||||||
|
|
||||||
|
7.36.02
|
||||||
|
|
||||||
|
Added option `threadid <String>` to `gam [<UserTypeEntity>] sendemail` that causes Gmail to recognize the message
|
||||||
|
in conversation mode in for the user sending the message.
|
||||||
|
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Send-Email#conversation-mode
|
||||||
|
|
||||||
|
7.36.01
|
||||||
|
|
||||||
|
Fixed bug in `gam info|print|show policies` where the `policyQuery/query` field was not displayed.
|
||||||
|
|
||||||
|
Added option `noidmapping` to `gam info|print|show policies` to suppress adding the `policyQuery/groupEmail` and
|
||||||
|
`policyQuery/orgUnitPath` name fields that are mapped from the `policyQuery/group` and `policyQuery/orgInit` id fields.
|
||||||
|
|
||||||
|
7.36.00
|
||||||
|
|
||||||
|
Added options `filtermultiattrtype` and filtermultiattrcustom` to `gam info user` and
|
||||||
|
`gam print users` that support filtering `<UserMultiAttribute>` display based on `type` or `customType`.
|
||||||
|
|
||||||
|
```
|
||||||
|
<UserMultiAttributeFilterName> ::=
|
||||||
|
address|addresses|
|
||||||
|
externalid|externalids|
|
||||||
|
im|ims|
|
||||||
|
keyword|keywords|
|
||||||
|
location|locations|
|
||||||
|
orgainzation|organizations|
|
||||||
|
otheremail|otheremails|
|
||||||
|
phone|phones|
|
||||||
|
relation|relations|
|
||||||
|
website|websites
|
||||||
|
```
|
||||||
|
|
||||||
|
* `filtermultiattrtype <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `type` is `<String>`
|
||||||
|
* `filtermultiattrcustom <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `customType` is `<String>`
|
||||||
|
|
||||||
|
```
|
||||||
|
gam info user user@domain.com quick filtermultiattrtype organizations work filtermultiattrcustom phones private
|
||||||
|
```
|
||||||
|
|
||||||
7.35.03
|
7.35.03
|
||||||
|
|
||||||
Updated `gam <UserTypeEntity> print filelist|filecounts` to handle options `showsize` and `showsizeunits` as independent options.
|
Updated `gam <UserTypeEntity> print filelist|filecounts` to handle options `showsize` and `showsizeunits` as independent options.
|
||||||
|
|||||||
@@ -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()
|
||||||
|
# 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)
|
multiprocessing.set_start_method('spawn', force=True)
|
||||||
main()
|
main()
|
||||||
|
|||||||
1000
src/gam/__init__.py
1000
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:
|
||||||
|
|
||||||
|
# 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')
|
multiprocessing.set_start_method('spawn')
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (C) 2024 Ross Scroggs All Rights Reserved.
|
# Copyright (C) 2026 Ross Scroggs All Rights Reserved.
|
||||||
#
|
#
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
@@ -107,6 +107,7 @@ class GamAction():
|
|||||||
SAVE = 'save'
|
SAVE = 'save'
|
||||||
SEND = 'send'
|
SEND = 'send'
|
||||||
SENDEMAIL = 'snem'
|
SENDEMAIL = 'snem'
|
||||||
|
SENDREPLY = 'sner'
|
||||||
SET = 'set '
|
SET = 'set '
|
||||||
SETUP = 'setu'
|
SETUP = 'setu'
|
||||||
SHARE = 'shar'
|
SHARE = 'shar'
|
||||||
@@ -225,6 +226,7 @@ class GamAction():
|
|||||||
SAVE: ['Saved', 'Save'],
|
SAVE: ['Saved', 'Save'],
|
||||||
SEND: ['Sent', 'Send'],
|
SEND: ['Sent', 'Send'],
|
||||||
SENDEMAIL: ['Email Sent', 'Send Email'],
|
SENDEMAIL: ['Email Sent', 'Send Email'],
|
||||||
|
SENDREPLY: ['Reply Sent', 'Send Reply'],
|
||||||
SET: ['Set', 'Set'],
|
SET: ['Set', 'Set'],
|
||||||
SETUP: ['Set Up', 'Set Up'],
|
SETUP: ['Set Up', 'Set Up'],
|
||||||
SHARE: ['Shared', 'Share'],
|
SHARE: ['Shared', 'Share'],
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ CLOUDIDENTITY_POLICY = 'cloudidentitypolicy'
|
|||||||
CLOUDIDENTITY_POLICY_BETA = 'cloudidentitypolicybeta'
|
CLOUDIDENTITY_POLICY_BETA = 'cloudidentitypolicybeta'
|
||||||
CLOUDIDENTITY_USERINVITATIONS = 'cloudidentityuserinvitations'
|
CLOUDIDENTITY_USERINVITATIONS = 'cloudidentityuserinvitations'
|
||||||
CLOUDRESOURCEMANAGER = 'cloudresourcemanager'
|
CLOUDRESOURCEMANAGER = 'cloudresourcemanager'
|
||||||
|
CLOUDRESOURCEMANAGERV1 = 'cloudresourcemanagerv1'
|
||||||
CONTACTS = 'contacts'
|
CONTACTS = 'contacts'
|
||||||
CONTACTDELEGATION = 'contactdelegation'
|
CONTACTDELEGATION = 'contactdelegation'
|
||||||
DATATRANSFER = 'datatransfer'
|
DATATRANSFER = 'datatransfer'
|
||||||
@@ -103,7 +104,6 @@ TASKS = 'tasks'
|
|||||||
VAULT = 'vault'
|
VAULT = 'vault'
|
||||||
YOUTUBE = 'youtube'
|
YOUTUBE = 'youtube'
|
||||||
#
|
#
|
||||||
BUSINESSACCOUNTMANAGEMENT_SCOPE = 'https://www.googleapis.com/auth/business.manage'
|
|
||||||
CHROMEVERSIONHISTORY_URL = 'https://versionhistory.googleapis.com/v1/chrome/platforms'
|
CHROMEVERSIONHISTORY_URL = 'https://versionhistory.googleapis.com/v1/chrome/platforms'
|
||||||
DRIVE_SCOPE = 'https://www.googleapis.com/auth/drive'
|
DRIVE_SCOPE = 'https://www.googleapis.com/auth/drive'
|
||||||
DRIVE_FILE_SCOPE = 'https://www.googleapis.com/auth/drive.file'
|
DRIVE_FILE_SCOPE = 'https://www.googleapis.com/auth/drive.file'
|
||||||
@@ -119,7 +119,6 @@ STORAGE_READONLY_SCOPE = 'https://www.googleapis.com/auth/devstorage.read_only'
|
|||||||
STORAGE_READWRITE_SCOPE = 'https://www.googleapis.com/auth/devstorage.read_write'
|
STORAGE_READWRITE_SCOPE = 'https://www.googleapis.com/auth/devstorage.read_write'
|
||||||
USERINFO_EMAIL_SCOPE = 'https://www.googleapis.com/auth/userinfo.email' # email
|
USERINFO_EMAIL_SCOPE = 'https://www.googleapis.com/auth/userinfo.email' # email
|
||||||
USERINFO_PROFILE_SCOPE = 'https://www.googleapis.com/auth/userinfo.profile' # profile
|
USERINFO_PROFILE_SCOPE = 'https://www.googleapis.com/auth/userinfo.profile' # profile
|
||||||
VAULT_SCOPES = ['https://www.googleapis.com/auth/ediscovery', 'https://www.googleapis.com/auth/ediscovery.readonly']
|
|
||||||
REQUIRED_SCOPES = [USERINFO_EMAIL_SCOPE, USERINFO_PROFILE_SCOPE]
|
REQUIRED_SCOPES = [USERINFO_EMAIL_SCOPE, USERINFO_PROFILE_SCOPE]
|
||||||
REQUIRED_SCOPES_SET = set(REQUIRED_SCOPES)
|
REQUIRED_SCOPES_SET = set(REQUIRED_SCOPES)
|
||||||
NUM_CLIENT_SCOPES_ERROR_LIMIT = 48
|
NUM_CLIENT_SCOPES_ERROR_LIMIT = 48
|
||||||
@@ -138,6 +137,20 @@ SCOPELESS_APIS = {
|
|||||||
SERVICEACCOUNTLOOKUP,
|
SERVICEACCOUNTLOOKUP,
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Scopes not in the discovery doc that are still valid for the API.
|
||||||
|
EXTRA_SCOPES = {
|
||||||
|
CLOUDRESOURCEMANAGER: ['https://www.googleapis.com/auth/cloudplatformfolders',
|
||||||
|
'https://www.googleapis.com/auth/cloudplatformfolders.readonly',
|
||||||
|
'https://www.googleapis.com/auth/cloudplatformprojects',
|
||||||
|
'https://www.googleapis.com/auth/cloudplatformprojects.readonly',
|
||||||
|
'https://www.googleapis.com/auth/cloudplatformorganizations',
|
||||||
|
'https://www.googleapis.com/auth/cloudplatformorganizations.readonly',
|
||||||
|
],
|
||||||
|
VAULT: ['https://www.googleapis.com/auth/ediscovery', 'https://www.googleapis.com/auth/ediscovery.readonly'],
|
||||||
|
}
|
||||||
|
EXTRA_SCOPES[CLOUDRESOURCEMANAGERV1] = EXTRA_SCOPES[CLOUDRESOURCEMANAGER]
|
||||||
|
|
||||||
APIS_NEEDING_ACCESS_TOKEN = {
|
APIS_NEEDING_ACCESS_TOKEN = {
|
||||||
CBCM: ['https://www.googleapis.com/auth/admin.directory.device.chromebrowsers']
|
CBCM: ['https://www.googleapis.com/auth/admin.directory.device.chromebrowsers']
|
||||||
}
|
}
|
||||||
@@ -250,7 +263,8 @@ _INFO = {
|
|||||||
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_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': 'Cloud 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'},
|
||||||
CONTACTS: {'name': 'Contacts API', 'version': 'v3', 'v2discovery': False},
|
CONTACTS: {'name': 'Contacts API', 'version': 'v3', 'v2discovery': False},
|
||||||
CONTACTDELEGATION: {'name': 'Contact Delegation API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
CONTACTDELEGATION: {'name': 'Contact Delegation API', 'version': 'v1', 'v2discovery': True, 'localjson': True},
|
||||||
DATATRANSFER: {'name': 'Data Transfer API', 'version': 'datatransfer_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
DATATRANSFER: {'name': 'Data Transfer API', 'version': 'datatransfer_v1', 'v2discovery': True, 'mappedAPI': 'admin'},
|
||||||
@@ -303,11 +317,6 @@ _INFO = {
|
|||||||
READONLY = ['readonly',]
|
READONLY = ['readonly',]
|
||||||
|
|
||||||
_CLIENT_SCOPES = [
|
_CLIENT_SCOPES = [
|
||||||
{'name': 'Business Account Management API',
|
|
||||||
'api': BUSINESSACCOUNTMANAGEMENT,
|
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
|
||||||
'scope': BUSINESSACCOUNTMANAGEMENT_SCOPE},
|
|
||||||
{'name': 'Calendar API',
|
{'name': 'Calendar API',
|
||||||
'api': CALENDAR,
|
'api': CALENDAR,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
@@ -316,21 +325,18 @@ _CLIENT_SCOPES = [
|
|||||||
'api': CBCM,
|
'api': CBCM,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.device.chromebrowsers'},
|
'scope': 'https://www.googleapis.com/auth/admin.directory.device.chromebrowsers'},
|
||||||
{'name': 'Chrome Management API - read only',
|
{'name': 'Chrome Management API - readonly',
|
||||||
'api': CHROMEMANAGEMENT,
|
'api': CHROMEMANAGEMENT,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chrome.management.reports.readonly'},
|
'scope': 'https://www.googleapis.com/auth/chrome.management.reports.readonly'},
|
||||||
{'name': 'Chrome Management API - AppDetails read only',
|
{'name': 'Chrome Management API - AppDetails readonly',
|
||||||
'api': CHROMEMANAGEMENT_APPDETAILS,
|
'api': CHROMEMANAGEMENT_APPDETAILS,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chrome.management.appdetails.readonly'},
|
'scope': 'https://www.googleapis.com/auth/chrome.management.appdetails.readonly'},
|
||||||
{'name': 'Chrome Management API - Profiles',
|
{'name': 'Chrome Management API - Profiles',
|
||||||
'api': CHROMEMANAGEMENT_CHROMEPROFILES,
|
'api': CHROMEMANAGEMENT_CHROMEPROFILES,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': 'https://www.googleapis.com/auth/chrome.management.profiles'},
|
'scope': 'https://www.googleapis.com/auth/chrome.management.profiles'},
|
||||||
{'name': 'Chrome Management API - Telemetry read only',
|
{'name': 'Chrome Management API - Telemetry readonly',
|
||||||
'api': CHROMEMANAGEMENT_TELEMETRY,
|
'api': CHROMEMANAGEMENT_TELEMETRY,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chrome.management.telemetry.readonly'},
|
'scope': 'https://www.googleapis.com/auth/chrome.management.telemetry.readonly'},
|
||||||
{'name': 'Chrome Policy API',
|
{'name': 'Chrome Policy API',
|
||||||
'api': CHROMEPOLICY,
|
'api': CHROMEPOLICY,
|
||||||
@@ -342,7 +348,6 @@ _CLIENT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/admin.chrome.printers'},
|
'scope': 'https://www.googleapis.com/auth/admin.chrome.printers'},
|
||||||
{'name': 'Chrome Version History API',
|
{'name': 'Chrome Version History API',
|
||||||
'api': CHROMEVERSIONHISTORY,
|
'api': CHROMEVERSIONHISTORY,
|
||||||
'subscopes': [],
|
|
||||||
'scope': ''},
|
'scope': ''},
|
||||||
{'name': 'Classroom API - Courses',
|
{'name': 'Classroom API - Courses',
|
||||||
'api': CLASSROOM,
|
'api': CLASSROOM,
|
||||||
@@ -370,11 +375,9 @@ _CLIENT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/classroom.guardianlinks.students'},
|
'scope': 'https://www.googleapis.com/auth/classroom.guardianlinks.students'},
|
||||||
{'name': 'Classroom API - Profile Emails',
|
{'name': 'Classroom API - Profile Emails',
|
||||||
'api': CLASSROOM,
|
'api': CLASSROOM,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.profile.emails'},
|
'scope': 'https://www.googleapis.com/auth/classroom.profile.emails'},
|
||||||
{'name': 'Classroom API - Profile Photos',
|
{'name': 'Classroom API - Profile Photos',
|
||||||
'api': CLASSROOM,
|
'api': CLASSROOM,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.profile.photos'},
|
'scope': 'https://www.googleapis.com/auth/classroom.profile.photos'},
|
||||||
{'name': 'Classroom API - Rosters',
|
{'name': 'Classroom API - Rosters',
|
||||||
'api': CLASSROOM,
|
'api': CLASSROOM,
|
||||||
@@ -404,7 +407,6 @@ _CLIENT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
||||||
{'name': 'Cloud Identity API - Policy Beta',
|
{'name': 'Cloud Identity API - Policy Beta',
|
||||||
'api': CLOUDIDENTITY_POLICY_BETA,
|
'api': CLOUDIDENTITY_POLICY_BETA,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
||||||
{'name': 'Cloud Identity API - User Invitations',
|
{'name': 'Cloud Identity API - User Invitations',
|
||||||
@@ -413,17 +415,14 @@ _CLIENT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/cloud-identity.userinvitations'},
|
'scope': 'https://www.googleapis.com/auth/cloud-identity.userinvitations'},
|
||||||
{'name': 'Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)',
|
{'name': 'Cloud Storage API (Read Only, Vault/Takeout Download, Cloud Storage)',
|
||||||
'api': STORAGEREAD,
|
'api': STORAGEREAD,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': STORAGE_READONLY_SCOPE},
|
'scope': STORAGE_READONLY_SCOPE},
|
||||||
{'name': 'Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)',
|
{'name': 'Cloud Storage API (Read/Write, Vault/Takeout Copy/Download, Cloud Storage)',
|
||||||
'api': STORAGEWRITE,
|
'api': STORAGEWRITE,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': STORAGE_READWRITE_SCOPE},
|
'scope': STORAGE_READWRITE_SCOPE},
|
||||||
{'name': 'Contacts API - Domain Shared Contacts',
|
{'name': 'Contacts API - Domain Shared Contacts',
|
||||||
'api': CONTACTS,
|
'api': CONTACTS,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.google.com/m8/feeds'},
|
'scope': 'https://www.google.com/m8/feeds'},
|
||||||
{'name': 'Contact Delegation API',
|
{'name': 'Contact Delegation API',
|
||||||
'api': CONTACTDELEGATION,
|
'api': CONTACTDELEGATION,
|
||||||
@@ -451,7 +450,7 @@ _CLIENT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.group'},
|
'scope': 'https://www.googleapis.com/auth/admin.directory.group'},
|
||||||
{'name': 'Directory API - Mobile Devices Directory',
|
{'name': 'Directory API - Mobile Devices Directory',
|
||||||
'api': DIRECTORY,
|
'api': DIRECTORY,
|
||||||
'subscopes': ['readonly', 'action'],
|
'subscopes': ['readonly', 'actiononly'],
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.device.mobile'},
|
'scope': 'https://www.googleapis.com/auth/admin.directory.device.mobile'},
|
||||||
{'name': 'Directory API - Organizational Units',
|
{'name': 'Directory API - Organizational Units',
|
||||||
'api': DIRECTORY,
|
'api': DIRECTORY,
|
||||||
@@ -471,7 +470,6 @@ _CLIENT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.userschema'},
|
'scope': 'https://www.googleapis.com/auth/admin.directory.userschema'},
|
||||||
{'name': 'Directory API - User Security',
|
{'name': 'Directory API - User Security',
|
||||||
'api': DIRECTORY,
|
'api': DIRECTORY,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.user.security'},
|
'scope': 'https://www.googleapis.com/auth/admin.directory.user.security'},
|
||||||
{'name': 'Directory API - Users',
|
{'name': 'Directory API - Users',
|
||||||
'api': DIRECTORY,
|
'api': DIRECTORY,
|
||||||
@@ -479,24 +477,19 @@ _CLIENT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/admin.directory.user'},
|
'scope': 'https://www.googleapis.com/auth/admin.directory.user'},
|
||||||
{'name': 'Email Audit API',
|
{'name': 'Email Audit API',
|
||||||
'api': EMAIL_AUDIT,
|
'api': EMAIL_AUDIT,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://apps-apis.google.com/a/feeds/compliance/audit/'},
|
'scope': 'https://apps-apis.google.com/a/feeds/compliance/audit/'},
|
||||||
{'name': 'Groups Migration API',
|
{'name': 'Groups Migration API',
|
||||||
'api': GROUPSMIGRATION,
|
'api': GROUPSMIGRATION,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.groups.migration'},
|
'scope': 'https://www.googleapis.com/auth/apps.groups.migration'},
|
||||||
{'name': 'Groups Settings API',
|
{'name': 'Groups Settings API',
|
||||||
'api': GROUPSSETTINGS,
|
'api': GROUPSSETTINGS,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.groups.settings'},
|
'scope': 'https://www.googleapis.com/auth/apps.groups.settings'},
|
||||||
{'name': 'License Manager API',
|
{'name': 'License Manager API',
|
||||||
'api': LICENSING,
|
'api': LICENSING,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.licensing'},
|
'scope': 'https://www.googleapis.com/auth/apps.licensing'},
|
||||||
{'name': 'People Directory API - read only',
|
{'name': 'People Directory API - readonly',
|
||||||
'api': PEOPLE_DIRECTORY,
|
'api': PEOPLE_DIRECTORY,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/directory.readonly'},
|
'scope': 'https://www.googleapis.com/auth/directory.readonly'},
|
||||||
{'name': 'People API',
|
{'name': 'People API',
|
||||||
'api': PEOPLE,
|
'api': PEOPLE,
|
||||||
@@ -504,29 +497,31 @@ _CLIENT_SCOPES = [
|
|||||||
'scope': PEOPLE_SCOPE},
|
'scope': PEOPLE_SCOPE},
|
||||||
{'name': 'Pub / Sub API',
|
{'name': 'Pub / Sub API',
|
||||||
'api': PUBSUB,
|
'api': PUBSUB,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/pubsub'},
|
'scope': 'https://www.googleapis.com/auth/pubsub'},
|
||||||
{'name': 'Reports API - Audit Reports',
|
{'name': 'Reports API - Audit Reports readonly',
|
||||||
'api': REPORTS,
|
'api': REPORTS,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.reports.audit.readonly'},
|
'scope': 'https://www.googleapis.com/auth/admin.reports.audit.readonly'},
|
||||||
{'name': 'Reports API - Usage Reports',
|
{'name': 'Reports API - Usage Reports readonly',
|
||||||
'api': REPORTS,
|
'api': REPORTS,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/admin.reports.usage.readonly'},
|
'scope': 'https://www.googleapis.com/auth/admin.reports.usage.readonly'},
|
||||||
{'name': 'Reseller API',
|
{'name': 'Reseller API',
|
||||||
'api': RESELLER,
|
'api': RESELLER,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.order'},
|
'scope': 'https://www.googleapis.com/auth/apps.order'},
|
||||||
|
{'name': 'Resource Manager API - Organizations readonly',
|
||||||
|
'api': CLOUDRESOURCEMANAGER,
|
||||||
|
'offByDefault': True,
|
||||||
|
'scope': 'https://www.googleapis.com/auth/cloudplatformorganizations.readonly'},
|
||||||
|
{'name': 'Resource Manager API - Projects readonly',
|
||||||
|
'api': CLOUDRESOURCEMANAGER,
|
||||||
|
'offByDefault': True,
|
||||||
|
'scope': 'https://www.googleapis.com/auth/cloudplatformprojects.readonly'},
|
||||||
{'name': 'Service Account Lookup pseudo-API',
|
{'name': 'Service Account Lookup pseudo-API',
|
||||||
'api': SERVICEACCOUNTLOOKUP,
|
'api': SERVICEACCOUNTLOOKUP,
|
||||||
'subscopes': [],
|
|
||||||
'scope': ''},
|
'scope': ''},
|
||||||
{'name': 'Site Verification API',
|
{'name': 'Site Verification API',
|
||||||
'api': SITEVERIFICATION,
|
'api': SITEVERIFICATION,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/siteverification'},
|
'scope': 'https://www.googleapis.com/auth/siteverification'},
|
||||||
{'name': 'Vault API',
|
{'name': 'Vault API',
|
||||||
@@ -538,30 +533,24 @@ _CLIENT_SCOPES = [
|
|||||||
_COMMANDDATA_CLIENT_SCOPES = [
|
_COMMANDDATA_CLIENT_SCOPES = [
|
||||||
{'name': 'Drive API - commanddata_clientaccess',
|
{'name': 'Drive API - commanddata_clientaccess',
|
||||||
'api': DRIVE3,
|
'api': DRIVE3,
|
||||||
'subscopes': [],
|
|
||||||
'scope': DRIVE_READONLY_SCOPE},
|
'scope': DRIVE_READONLY_SCOPE},
|
||||||
{'name': 'Sheets API - commanddata_clientaccess',
|
{'name': 'Sheets API - commanddata_clientaccess readonly',
|
||||||
'api': SHEETS,
|
'api': SHEETS,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/spreadsheets.readonly'},
|
'scope': 'https://www.googleapis.com/auth/spreadsheets.readonly'},
|
||||||
]
|
]
|
||||||
|
|
||||||
_TODRIVE_CLIENT_SCOPES = [
|
_TODRIVE_CLIENT_SCOPES = [
|
||||||
{'name': 'Drive API - todrive_clientaccess',
|
{'name': 'Drive API - todrive_clientaccess',
|
||||||
'api': DRIVE3,
|
'api': DRIVE3,
|
||||||
'subscopes': [],
|
|
||||||
'scope': DRIVE_SCOPE},
|
'scope': DRIVE_SCOPE},
|
||||||
{'name': 'Drive File API - todrive_clientaccess',
|
{'name': 'Drive File API - todrive_clientaccess',
|
||||||
'api': DRIVE3,
|
'api': DRIVE3,
|
||||||
'subscopes': [],
|
|
||||||
'scope': DRIVE_FILE_SCOPE},
|
'scope': DRIVE_FILE_SCOPE},
|
||||||
{'name': 'Gmail API - todrive_clientaccess',
|
{'name': 'Gmail API - todrive_clientaccess',
|
||||||
'api': GMAIL,
|
'api': GMAIL,
|
||||||
'subscopes': [],
|
|
||||||
'scope': GMAIL_SEND_SCOPE},
|
'scope': GMAIL_SEND_SCOPE},
|
||||||
{'name': 'Sheets API - todrive_clientaccess',
|
{'name': 'Sheets API - todrive_clientaccess',
|
||||||
'api': SHEETS,
|
'api': SHEETS,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -570,12 +559,14 @@ OAUTH2SA_SCOPES = 'us_scopes'
|
|||||||
_SVCACCT_SCOPES = [
|
_SVCACCT_SCOPES = [
|
||||||
{'name': 'AlertCenter API',
|
{'name': 'AlertCenter API',
|
||||||
'api': ALERTCENTER,
|
'api': ALERTCENTER,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.alerts'},
|
'scope': 'https://www.googleapis.com/auth/apps.alerts'},
|
||||||
{'name': 'Analytics Admin API - read only',
|
{'name': 'Analytics Admin API - readonly',
|
||||||
'api': ANALYTICS_ADMIN,
|
'api': ANALYTICS_ADMIN,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/analytics.readonly'},
|
'scope': 'https://www.googleapis.com/auth/analytics.readonly'},
|
||||||
|
{'name': 'Business Account Management API',
|
||||||
|
'api': BUSINESSACCOUNTMANAGEMENT,
|
||||||
|
'offByDefault': True,
|
||||||
|
'scope': 'https://www.googleapis.com/auth/business.manage'},
|
||||||
{'name': 'Calendar API',
|
{'name': 'Calendar API',
|
||||||
'api': CALENDAR,
|
'api': CALENDAR,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
@@ -611,11 +602,9 @@ _SVCACCT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/chat.admin.spaces'},
|
'scope': 'https://www.googleapis.com/auth/chat.admin.spaces'},
|
||||||
{'name': 'Chat API - Spaces Delete',
|
{'name': 'Chat API - Spaces Delete',
|
||||||
'api': CHAT_SPACES_DELETE,
|
'api': CHAT_SPACES_DELETE,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.delete'},
|
'scope': 'https://www.googleapis.com/auth/chat.delete'},
|
||||||
{'name': 'Chat API - Spaces Delete Admin',
|
{'name': 'Chat API - Spaces Delete Admin',
|
||||||
'api': CHAT_SPACES_DELETE_ADMIN,
|
'api': CHAT_SPACES_DELETE_ADMIN,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/chat.admin.delete'},
|
'scope': 'https://www.googleapis.com/auth/chat.admin.delete'},
|
||||||
{'name': 'Classroom API - Course Announcements',
|
{'name': 'Classroom API - Course Announcements',
|
||||||
'api': CLASSROOM,
|
'api': CLASSROOM,
|
||||||
@@ -635,11 +624,9 @@ _SVCACCT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/classroom.coursework.students'},
|
'scope': 'https://www.googleapis.com/auth/classroom.coursework.students'},
|
||||||
{'name': 'Classroom API - Profile Emails',
|
{'name': 'Classroom API - Profile Emails',
|
||||||
'api': CLASSROOM,
|
'api': CLASSROOM,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.profile.emails'},
|
'scope': 'https://www.googleapis.com/auth/classroom.profile.emails'},
|
||||||
{'name': 'Classroom API - Profile Photos',
|
{'name': 'Classroom API - Profile Photos',
|
||||||
'api': CLASSROOM,
|
'api': CLASSROOM,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/classroom.profile.photos'},
|
'scope': 'https://www.googleapis.com/auth/classroom.profile.photos'},
|
||||||
{'name': 'Classroom API - Rosters',
|
{'name': 'Classroom API - Rosters',
|
||||||
'api': CLASSROOM,
|
'api': CLASSROOM,
|
||||||
@@ -656,7 +643,6 @@ _SVCACCT_SCOPES = [
|
|||||||
# 'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
# 'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
||||||
# {'name': 'Cloud Identity API - Policy Beta',
|
# {'name': 'Cloud Identity API - Policy Beta',
|
||||||
# 'api': CLOUDIDENTITY_POLICY_BETA,
|
# 'api': CLOUDIDENTITY_POLICY_BETA,
|
||||||
# 'subscopes': [],
|
|
||||||
# 'offByDefault': True,
|
# 'offByDefault': True,
|
||||||
# 'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
# 'scope': 'https://www.googleapis.com/auth/cloud-identity.policies'},
|
||||||
# {'name': 'Cloud Identity User Invitations API',
|
# {'name': 'Cloud Identity User Invitations API',
|
||||||
@@ -665,7 +651,6 @@ _SVCACCT_SCOPES = [
|
|||||||
# 'scope': 'https://www.googleapis.com/auth/cloud-identity'},
|
# 'scope': 'https://www.googleapis.com/auth/cloud-identity'},
|
||||||
# {'name': 'Contacts API - Users',
|
# {'name': 'Contacts API - Users',
|
||||||
# 'api': CONTACTS,
|
# 'api': CONTACTS,
|
||||||
# 'subscopes': [],
|
|
||||||
# 'scope': 'https://www.google.com/m8/feeds'},
|
# 'scope': 'https://www.google.com/m8/feeds'},
|
||||||
{'name': 'Drive API',
|
{'name': 'Drive API',
|
||||||
'api': DRIVE3,
|
'api': DRIVE3,
|
||||||
@@ -673,7 +658,6 @@ _SVCACCT_SCOPES = [
|
|||||||
'scope': DRIVE_SCOPE},
|
'scope': DRIVE_SCOPE},
|
||||||
{'name': 'Drive Activity API v2 - must pair with Drive API',
|
{'name': 'Drive Activity API v2 - must pair with Drive API',
|
||||||
'api': DRIVEACTIVITY,
|
'api': DRIVEACTIVITY,
|
||||||
'subscopes': [],
|
|
||||||
'scope': [DRIVE_READONLY_SCOPE,
|
'scope': [DRIVE_READONLY_SCOPE,
|
||||||
'https://www.googleapis.com/auth/drive.activity']},
|
'https://www.googleapis.com/auth/drive.activity']},
|
||||||
{'name': 'Drive Labels API - Admin',
|
{'name': 'Drive Labels API - Admin',
|
||||||
@@ -690,30 +674,24 @@ _SVCACCT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/documents'},
|
'scope': 'https://www.googleapis.com/auth/documents'},
|
||||||
{'name': 'Forms API - must pair with Drive API',
|
{'name': 'Forms API - must pair with Drive API',
|
||||||
'api': FORMS,
|
'api': FORMS,
|
||||||
'subscopes': [],
|
|
||||||
'scope': [DRIVE_READONLY_SCOPE,
|
'scope': [DRIVE_READONLY_SCOPE,
|
||||||
'https://www.googleapis.com/auth/forms.body',
|
'https://www.googleapis.com/auth/forms.body',
|
||||||
'https://www.googleapis.com/auth/forms.responses.readonly']},
|
'https://www.googleapis.com/auth/forms.responses.readonly']},
|
||||||
{'name': 'Gmail API - Full Access (Labels, Messages)',
|
{'name': 'Gmail API - Full Access (Labels, Messages)',
|
||||||
'api': GMAIL,
|
'api': GMAIL,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://mail.google.com/'},
|
'scope': 'https://mail.google.com/'},
|
||||||
{'name': 'Gmail API - Full Access (Labels, Messages) except delete message',
|
{'name': 'Gmail API - Full Access (Labels, Messages) except delete message',
|
||||||
'api': GMAIL,
|
'api': GMAIL,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.modify'},
|
'scope': 'https://www.googleapis.com/auth/gmail.modify'},
|
||||||
{'name': 'Gmail API - Basic Settings (Filters, IMAP, Language, POP, Vacation) - read/write, Sharing Settings (Delegates, Forwarding, SendAs) - read',
|
{'name': 'Gmail API - Basic Settings (Filters, IMAP, Language, POP, Vacation) - read/write, Sharing Settings (Delegates, Forwarding, SendAs) - read',
|
||||||
'api': GMAIL,
|
'api': GMAIL,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.settings.basic'},
|
'scope': 'https://www.googleapis.com/auth/gmail.settings.basic'},
|
||||||
{'name': 'Gmail API - Sharing Settings (Delegates, Forwarding, SendAs) - write',
|
{'name': 'Gmail API - Sharing Settings (Delegates, Forwarding, SendAs) - write',
|
||||||
'api': GMAIL,
|
'api': GMAIL,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.settings.sharing'},
|
'scope': 'https://www.googleapis.com/auth/gmail.settings.sharing'},
|
||||||
# {'name': 'Identity and Access Management API',
|
# {'name': 'Identity and Access Management API',
|
||||||
# 'api': IAM,
|
# 'api': IAM,
|
||||||
# 'offByDefault': True,
|
# 'offByDefault': True,
|
||||||
# 'subscopes': [],
|
|
||||||
# 'scope': CLOUD_PLATFORM_SCOPE},
|
# 'scope': CLOUD_PLATFORM_SCOPE},
|
||||||
{'name': 'Keep API',
|
{'name': 'Keep API',
|
||||||
'api': KEEP,
|
'api': KEEP,
|
||||||
@@ -725,32 +703,26 @@ _SVCACCT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/datastudio'},
|
'scope': 'https://www.googleapis.com/auth/datastudio'},
|
||||||
{'name': 'Meet API - Manage/Display Meeting Spaces',
|
{'name': 'Meet API - Manage/Display Meeting Spaces',
|
||||||
'api': MEET_SPACES,
|
'api': MEET_SPACES,
|
||||||
'subscopes': [],
|
|
||||||
'scope': ['https://www.googleapis.com/auth/meetings.space.created',
|
'scope': ['https://www.googleapis.com/auth/meetings.space.created',
|
||||||
'https://www.googleapis.com/auth/meetings.space.settings']},
|
'https://www.googleapis.com/auth/meetings.space.settings']},
|
||||||
{'name': 'Meet API - Read Meeting Spaces metadata',
|
{'name': 'Meet API - Read Meeting Spaces metadata readonly',
|
||||||
'api': MEET_READONLY,
|
'api': MEET_READONLY,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/meetings.space.readonly'},
|
'scope': 'https://www.googleapis.com/auth/meetings.space.readonly'},
|
||||||
{'name': 'OAuth2 API',
|
{'name': 'OAuth2 API',
|
||||||
'api': OAUTH2,
|
'api': OAUTH2,
|
||||||
'subscopes': [],
|
|
||||||
'scope': USERINFO_PROFILE_SCOPE},
|
'scope': USERINFO_PROFILE_SCOPE},
|
||||||
{'name': 'People API',
|
{'name': 'People API',
|
||||||
'api': PEOPLE,
|
'api': PEOPLE,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': PEOPLE_SCOPE},
|
'scope': PEOPLE_SCOPE},
|
||||||
{'name': 'People Directory API - read only',
|
{'name': 'People Directory API - readonly',
|
||||||
'api': PEOPLE_DIRECTORY,
|
'api': PEOPLE_DIRECTORY,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/directory.readonly'},
|
'scope': 'https://www.googleapis.com/auth/directory.readonly'},
|
||||||
{'name': 'People API - Other Contacts - read only',
|
{'name': 'People API - Other Contacts - readonly',
|
||||||
'api': PEOPLE_OTHERCONTACTS,
|
'api': PEOPLE_OTHERCONTACTS,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/contacts.other.readonly'},
|
'scope': 'https://www.googleapis.com/auth/contacts.other.readonly'},
|
||||||
{'name': 'Search Console API - read only',
|
{'name': 'Search Console API - readonly',
|
||||||
'api': SEARCHCONSOLE,
|
'api': SEARCHCONSOLE,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/webmasters.readonly'},
|
'scope': 'https://www.googleapis.com/auth/webmasters.readonly'},
|
||||||
{'name': 'Sheets API',
|
{'name': 'Sheets API',
|
||||||
@@ -759,26 +731,22 @@ _SVCACCT_SCOPES = [
|
|||||||
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
||||||
{'name': 'Site Verification API',
|
{'name': 'Site Verification API',
|
||||||
'api': SITEVERIFICATION,
|
'api': SITEVERIFICATION,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/siteverification'},
|
'scope': 'https://www.googleapis.com/auth/siteverification'},
|
||||||
{'name': 'Tag Manager API - Accounts, Containers, Workspaces, Tags - read only',
|
{'name': 'Tag Manager API - Accounts, Containers, Workspaces, Tags - readonly',
|
||||||
'api': TAGMANAGER,
|
'api': TAGMANAGER,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/tagmanager.readonly'},
|
'scope': 'https://www.googleapis.com/auth/tagmanager.readonly'},
|
||||||
{'name': 'Tag Manager API - Users',
|
{'name': 'Tag Manager API - Users',
|
||||||
'api': TAGMANAGER_USERS,
|
'api': TAGMANAGER_USERS,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/tagmanager.manage.users'},
|
'scope': 'https://www.googleapis.com/auth/tagmanager.manage.users'},
|
||||||
{'name': 'Tasks API',
|
{'name': 'Tasks API',
|
||||||
'api': TASKS,
|
'api': TASKS,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
'scope': 'https://www.googleapis.com/auth/tasks'},
|
'scope': 'https://www.googleapis.com/auth/tasks'},
|
||||||
{'name': 'Youtube API - read only',
|
{'name': 'Youtube API - readonly',
|
||||||
'api': YOUTUBE,
|
'api': YOUTUBE,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/youtube.readonly'},
|
'scope': 'https://www.googleapis.com/auth/youtube.readonly'},
|
||||||
]
|
]
|
||||||
@@ -786,30 +754,25 @@ _SVCACCT_SCOPES = [
|
|||||||
_SVCACCT_SPECIAL_SCOPES = [
|
_SVCACCT_SPECIAL_SCOPES = [
|
||||||
{'name': 'Drive API - write todrive data - has access to all Drive',
|
{'name': 'Drive API - write todrive data - has access to all Drive',
|
||||||
'api': DRIVETD,
|
'api': DRIVETD,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': DRIVE_SCOPE},
|
'scope': DRIVE_SCOPE},
|
||||||
{'name': 'Gmail API - Full Access - read only',
|
{'name': 'Gmail API - Full Access - readonly',
|
||||||
'api': GMAIL,
|
'api': GMAIL,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': 'https://www.googleapis.com/auth/gmail.readonly'},
|
'scope': 'https://www.googleapis.com/auth/gmail.readonly'},
|
||||||
{'name': 'Gmail API - Send Messages - including todrive',
|
{'name': 'Gmail API - Send Messages - including todrive',
|
||||||
'api': GMAIL,
|
'api': GMAIL,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': GMAIL_SEND_SCOPE},
|
'scope': GMAIL_SEND_SCOPE},
|
||||||
{'name': 'Sheets API - write todrive data - has access to all Sheets',
|
{'name': 'Sheets API - write todrive data - has access to all Sheets',
|
||||||
'api': SHEETSTD,
|
'api': SHEETSTD,
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
||||||
]
|
]
|
||||||
|
|
||||||
_USER_SVCACCT_ONLY_SCOPES = [
|
_USER_SVCACCT_ONLY_SCOPES = [
|
||||||
{'name': 'Groups Migration API',
|
{'name': 'Groups Migration API',
|
||||||
'api': GROUPSMIGRATION,
|
'api': GROUPSMIGRATION,
|
||||||
'subscopes': [],
|
|
||||||
'scope': 'https://www.googleapis.com/auth/apps.groups.migration'},
|
'scope': 'https://www.googleapis.com/auth/apps.groups.migration'},
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -849,7 +812,7 @@ def getClientScopesURLs(commanddataClientAccess, todriveClientAccess):
|
|||||||
|
|
||||||
def getSvcAcctScopeAPI(uscope):
|
def getSvcAcctScopeAPI(uscope):
|
||||||
for scope in _SVCACCT_SCOPES:
|
for scope in _SVCACCT_SCOPES:
|
||||||
if uscope == scope['scope'] or (uscope.endswith('.readonly') and 'readonly' in scope['subscopes']):
|
if uscope == scope['scope'] or (uscope.endswith('.readonly') and 'readonly' in scope.get('subscopes', [])):
|
||||||
return scope['api']
|
return scope['api']
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -877,7 +840,7 @@ def findAPIforScope(scopesList):
|
|||||||
if cscope['scope'] == scope:
|
if cscope['scope'] == scope:
|
||||||
requiredAPIs.append(cscope['name'])
|
requiredAPIs.append(cscope['name'])
|
||||||
return True
|
return True
|
||||||
if cscope['subscopes'] == READONLY and cscope['scope']+'.readonly' == scope:
|
if 'readonly' in cscope.get('subscopes', []) and cscope['scope']+'.readonly' == scope:
|
||||||
requiredAPIs.append(cscope['name']+' (supports readonly)')
|
requiredAPIs.append(cscope['name']+' (supports readonly)')
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|||||||
@@ -171,12 +171,12 @@ EMAIL_BATCH_SIZE = 'email_batch_size'
|
|||||||
ENABLE_DASA = 'enable_dasa'
|
ENABLE_DASA = 'enable_dasa'
|
||||||
# Enable Cloud Session Reauthentication by borrowing a RAPT token from gcloud command
|
# Enable Cloud Session Reauthentication by borrowing a RAPT token from gcloud command
|
||||||
ENABLE_GCLOUD_REAUTH = 'enable_gcloud_reauth'
|
ENABLE_GCLOUD_REAUTH = 'enable_gcloud_reauth'
|
||||||
# Value for enforceExpansiveAccess for commands that delete or update drive file ACLs/permissions.
|
|
||||||
ENFORCE_EXPANSIVE_ACCESS = 'enforce_expansive_access'
|
|
||||||
# When retrieving lists of calendar events from API, how many should be retrieved in each chunk
|
# When retrieving lists of calendar events from API, how many should be retrieved in each chunk
|
||||||
EVENT_MAX_RESULTS = 'event_max_results'
|
EVENT_MAX_RESULTS = 'event_max_results'
|
||||||
# Path to extra_args.txt
|
# Path to extra_args.txt
|
||||||
EXTRA_ARGS = 'extra_args'
|
EXTRA_ARGS = 'extra_args'
|
||||||
|
# Google Cloud Project Organization ID
|
||||||
|
GCP_ORG_ID = 'gcp_org_id'
|
||||||
# Gmail CSE certificates directory
|
# Gmail CSE certificates directory
|
||||||
GMAIL_CSE_INCERT_DIR = 'gmail_cse_incert_dir'
|
GMAIL_CSE_INCERT_DIR = 'gmail_cse_incert_dir'
|
||||||
# Gmail CSE KACL wrapped key files
|
# Gmail CSE KACL wrapped key files
|
||||||
@@ -396,13 +396,13 @@ Defaults = {
|
|||||||
DEVICE_MAX_RESULTS: '200',
|
DEVICE_MAX_RESULTS: '200',
|
||||||
DOMAIN: '',
|
DOMAIN: '',
|
||||||
DRIVE_DIR: '',
|
DRIVE_DIR: '',
|
||||||
ENFORCE_EXPANSIVE_ACCESS: TRUE,
|
|
||||||
DRIVE_MAX_RESULTS: '1000',
|
DRIVE_MAX_RESULTS: '1000',
|
||||||
EMAIL_BATCH_SIZE: '50',
|
EMAIL_BATCH_SIZE: '50',
|
||||||
ENABLE_DASA: FALSE,
|
ENABLE_DASA: FALSE,
|
||||||
ENABLE_GCLOUD_REAUTH: FALSE,
|
ENABLE_GCLOUD_REAUTH: FALSE,
|
||||||
EVENT_MAX_RESULTS: '250',
|
EVENT_MAX_RESULTS: '250',
|
||||||
EXTRA_ARGS: '',
|
EXTRA_ARGS: '',
|
||||||
|
GCP_ORG_ID: '',
|
||||||
GMAIL_CSE_INCERT_DIR: '',
|
GMAIL_CSE_INCERT_DIR: '',
|
||||||
GMAIL_CSE_INKEY_DIR: '',
|
GMAIL_CSE_INKEY_DIR: '',
|
||||||
INPUT_DIR: '.',
|
INPUT_DIR: '.',
|
||||||
@@ -570,13 +570,13 @@ VAR_INFO = {
|
|||||||
DEVICE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
|
DEVICE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
|
||||||
DOMAIN: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'GA_DOMAIN', VAR_LIMITS: (0, None)},
|
DOMAIN: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'GA_DOMAIN', VAR_LIMITS: (0, None)},
|
||||||
DRIVE_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMDRIVEDIR'},
|
DRIVE_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMDRIVEDIR'},
|
||||||
ENFORCE_EXPANSIVE_ACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
|
||||||
DRIVE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
DRIVE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 1000)},
|
||||||
EMAIL_BATCH_SIZE: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 100)},
|
EMAIL_BATCH_SIZE: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 100)},
|
||||||
ENABLE_DASA: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'enabledasa.txt', VAR_SFFT: (FALSE, TRUE)},
|
ENABLE_DASA: {VAR_TYPE: TYPE_BOOLEAN, VAR_SIGFILE: 'enabledasa.txt', VAR_SFFT: (FALSE, TRUE)},
|
||||||
ENABLE_GCLOUD_REAUTH: {VAR_TYPE: TYPE_BOOLEAN},
|
ENABLE_GCLOUD_REAUTH: {VAR_TYPE: TYPE_BOOLEAN},
|
||||||
EVENT_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 2500)},
|
EVENT_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 2500)},
|
||||||
EXTRA_ARGS: {VAR_TYPE: TYPE_FILE, VAR_SIGFILE: FN_EXTRA_ARGS_TXT, VAR_SFFT: ('', FN_EXTRA_ARGS_TXT), VAR_ACCESS: os.R_OK},
|
EXTRA_ARGS: {VAR_TYPE: TYPE_FILE, VAR_SIGFILE: FN_EXTRA_ARGS_TXT, VAR_SFFT: ('', FN_EXTRA_ARGS_TXT), VAR_ACCESS: os.R_OK},
|
||||||
|
GCP_ORG_ID: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
|
||||||
GMAIL_CSE_INCERT_DIR: {VAR_TYPE: TYPE_DIRECTORY},
|
GMAIL_CSE_INCERT_DIR: {VAR_TYPE: TYPE_DIRECTORY},
|
||||||
GMAIL_CSE_INKEY_DIR: {VAR_TYPE: TYPE_DIRECTORY},
|
GMAIL_CSE_INKEY_DIR: {VAR_TYPE: TYPE_DIRECTORY},
|
||||||
INPUT_DIR: {VAR_TYPE: TYPE_DIRECTORY},
|
INPUT_DIR: {VAR_TYPE: TYPE_DIRECTORY},
|
||||||
|
|||||||
@@ -830,6 +830,7 @@ class GamCLArgs():
|
|||||||
ARG_CSEKEYPAIRS = 'csekeypairs'
|
ARG_CSEKEYPAIRS = 'csekeypairs'
|
||||||
ARG_CURRENTPROJECTID = 'currentprojectid'
|
ARG_CURRENTPROJECTID = 'currentprojectid'
|
||||||
ARG_CUSTOMER = 'customer'
|
ARG_CUSTOMER = 'customer'
|
||||||
|
ARG_CUSTOMERID = 'customerid'
|
||||||
ARG_DATASTUDIOASSET = 'datastudioasset'
|
ARG_DATASTUDIOASSET = 'datastudioasset'
|
||||||
ARG_DATASTUDIOASSETS = 'datastudioassets'
|
ARG_DATASTUDIOASSETS = 'datastudioassets'
|
||||||
ARG_DATASTUDIOPERMISSION = 'datastudiopermission'
|
ARG_DATASTUDIOPERMISSION = 'datastudiopermission'
|
||||||
@@ -913,6 +914,7 @@ class GamCLArgs():
|
|||||||
ARG_FORWARDINGADDRESS = 'forwardingaddress'
|
ARG_FORWARDINGADDRESS = 'forwardingaddress'
|
||||||
ARG_FORWARDINGADDRESSES = 'forwardingaddresses'
|
ARG_FORWARDINGADDRESSES = 'forwardingaddresses'
|
||||||
ARG_GCPFOLDER = 'gcpfolder'
|
ARG_GCPFOLDER = 'gcpfolder'
|
||||||
|
ARG_GCPORGID = 'gcporgid'
|
||||||
ARG_GCPSERVICEACCOUNT = 'gcpserviceaccount'
|
ARG_GCPSERVICEACCOUNT = 'gcpserviceaccount'
|
||||||
ARG_GMAIL = 'gmail'
|
ARG_GMAIL = 'gmail'
|
||||||
ARG_GMAILPROFILE = 'gmailprofile'
|
ARG_GMAILPROFILE = 'gmailprofile'
|
||||||
|
|||||||
@@ -242,6 +242,7 @@ class GamEntity():
|
|||||||
FORWARDING_ADDRESS = 'fwda'
|
FORWARDING_ADDRESS = 'fwda'
|
||||||
GCP_FOLDER = 'gcpf'
|
GCP_FOLDER = 'gcpf'
|
||||||
GCP_FOLDER_NAME = 'gcpn'
|
GCP_FOLDER_NAME = 'gcpn'
|
||||||
|
GCP_ORG_ID = 'gcpo'
|
||||||
GMAIL_PROFILE = 'gmpr'
|
GMAIL_PROFILE = 'gmpr'
|
||||||
GROUP = 'grou'
|
GROUP = 'grou'
|
||||||
GROUP_ALIAS = 'gali'
|
GROUP_ALIAS = 'gali'
|
||||||
@@ -613,6 +614,7 @@ class GamEntity():
|
|||||||
FORWARDING_ADDRESS: ['Forwarding Addresses', 'Forwarding Address'],
|
FORWARDING_ADDRESS: ['Forwarding Addresses', 'Forwarding Address'],
|
||||||
GCP_FOLDER: ['GCP Folders', 'GCP Folder'],
|
GCP_FOLDER: ['GCP Folders', 'GCP Folder'],
|
||||||
GCP_FOLDER_NAME: ['GCP Folder Names', 'GCP Folder Name'],
|
GCP_FOLDER_NAME: ['GCP Folder Names', 'GCP Folder Name'],
|
||||||
|
GCP_ORG_ID: ['GCP Organization ID', 'GCP Organization ID'],
|
||||||
GMAIL_PROFILE: ['Gmail Profile', 'Gmail Profile'],
|
GMAIL_PROFILE: ['Gmail Profile', 'Gmail Profile'],
|
||||||
GROUP: ['Groups', 'Group'],
|
GROUP: ['Groups', 'Group'],
|
||||||
GROUP_ALIAS: ['Group Aliases', 'Group Alias'],
|
GROUP_ALIAS: ['Group Aliases', 'Group Alias'],
|
||||||
|
|||||||
@@ -257,10 +257,10 @@ DRIVE3_UPDATE_ACL_THROW_REASONS = [BAD_REQUEST, INVALID_OWNERSHIP_TRANSFER, CANN
|
|||||||
CANNOT_UPDATE_PERMISSION,
|
CANNOT_UPDATE_PERMISSION,
|
||||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION, CANNOT_MODIFY_INHERITED_PERMISSION,
|
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION, CANNOT_MODIFY_INHERITED_PERMISSION,
|
||||||
FIELD_NOT_WRITABLE, PERMISSION_NOT_FOUND]
|
FIELD_NOT_WRITABLE, PERMISSION_NOT_FOUND]
|
||||||
DRIVE3_DELETE_ACL_THROW_REASONS = [BAD_REQUEST, CANNOT_REMOVE_OWNER,
|
DRIVE3_DELETE_ACL_THROW_REASONS = [BAD_REQUEST, NOT_FOUND, PERMISSION_NOT_FOUND, CANNOT_REMOVE_OWNER,
|
||||||
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION, CANNOT_MODIFY_INHERITED_PERMISSION,
|
CANNOT_MODIFY_INHERITED_TEAMDRIVE_PERMISSION, CANNOT_MODIFY_INHERITED_PERMISSION,
|
||||||
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, SHARING_RATE_LIMIT_EXCEEDED,
|
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, SHARING_RATE_LIMIT_EXCEEDED,
|
||||||
NOT_FOUND, PERMISSION_NOT_FOUND, CANNOT_DELETE_PERMISSION]
|
CANNOT_DELETE_PERMISSION, FILE_NEVER_WRITABLE]
|
||||||
DRIVE3_MODIFY_LABEL_THROW_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, NOT_FOUND, FORBIDDEN, INTERNAL_ERROR,
|
DRIVE3_MODIFY_LABEL_THROW_REASONS = DRIVE_USER_THROW_REASONS+[FILE_NOT_FOUND, NOT_FOUND, FORBIDDEN, INTERNAL_ERROR,
|
||||||
FILE_NEVER_WRITABLE, APPLY_LABEL_FORBIDDEN,
|
FILE_NEVER_WRITABLE, APPLY_LABEL_FORBIDDEN,
|
||||||
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, INSUFFICIENT_FILE_PERMISSIONS,
|
INSUFFICIENT_ADMINISTRATOR_PRIVILEGES, INSUFFICIENT_FILE_PERMISSIONS,
|
||||||
|
|||||||
@@ -534,6 +534,7 @@ UNKNOWN_API_OR_VERSION = 'Unknown Google API or version: ({0}), contact {1}'
|
|||||||
UNRECOVERABLE_ERROR = 'Unrecoverable error'
|
UNRECOVERABLE_ERROR = 'Unrecoverable error'
|
||||||
UPDATE_ATTENDEE_CHANGES = 'Update attendee changes'
|
UPDATE_ATTENDEE_CHANGES = 'Update attendee changes'
|
||||||
UPDATE_GAM_TO_64BIT = "You're running a 32-bit version of GAM on a 64-bit version of Windows, upgrade to a windows-x86_64 version of GAM"
|
UPDATE_GAM_TO_64BIT = "You're running a 32-bit version of GAM on a 64-bit version of Windows, upgrade to a windows-x86_64 version of GAM"
|
||||||
|
UPDATE_PRIMARY_EMAIL_PREVIEW = 'updateprimaryemail preview: {0}'
|
||||||
UPDATE_USER_PASSWORD_CHANGE_NOTIFY_MESSAGE = 'The account password for #givenname# #familyname#, #user# has been changed to: #password#\n'
|
UPDATE_USER_PASSWORD_CHANGE_NOTIFY_MESSAGE = 'The account password for #givenname# #familyname#, #user# has been changed to: #password#\n'
|
||||||
UPDATE_USER_PASSWORD_CHANGE_NOTIFY_SUBJECT = 'Account #user# password has been changed'
|
UPDATE_USER_PASSWORD_CHANGE_NOTIFY_SUBJECT = 'Account #user# password has been changed'
|
||||||
UPLOAD_CSV_FILE_INTERNAL_ERROR = 'Google reported "{0}" but the file was probably uploaded, check that it has {1} rows'
|
UPLOAD_CSV_FILE_INTERNAL_ERROR = 'Google reported "{0}" but the file was probably uploaded, check that it has {1} rows'
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ _SKUS = {
|
|||||||
'1010430001': {
|
'1010430001': {
|
||||||
'product': '101043', 'aliases': ['gwas', 'plusstorage'], 'displayName': 'Google Workspace Additional Storage'},
|
'product': '101043', 'aliases': ['gwas', 'plusstorage'], 'displayName': 'Google Workspace Additional Storage'},
|
||||||
'1010470001': {
|
'1010470001': {
|
||||||
'product': '101047', 'aliases': ['geminient', 'duetai'], 'displayName': 'Gemini Enterprise'},
|
'product': '101047', 'aliases': ['geminient', 'duetai'], 'displayName': 'Gemini Enterprise - Legacy'},
|
||||||
'1010470002': {
|
'1010470002': {
|
||||||
'product': '101047', 'aliases': ['gwlabs', 'workspacelabs'], 'displayName': 'Google Workspace Labs'},
|
'product': '101047', 'aliases': ['gwlabs', 'workspacelabs'], 'displayName': 'Google Workspace Labs'},
|
||||||
'1010470003': {
|
'1010470003': {
|
||||||
@@ -109,6 +109,8 @@ _SKUS = {
|
|||||||
'product': '101047', 'aliases': ['aimeetingsandmessaging'], 'displayName': 'AI Meetings and Messaging'},
|
'product': '101047', 'aliases': ['aimeetingsandmessaging'], 'displayName': 'AI Meetings and Messaging'},
|
||||||
'1010470008': {
|
'1010470008': {
|
||||||
'product': '101047', 'aliases': ['geminiultra'], 'displayName': 'Google AI Ultra for Business'},
|
'product': '101047', 'aliases': ['geminiultra'], 'displayName': 'Google AI Ultra for Business'},
|
||||||
|
'1010470009': {
|
||||||
|
'product': '101047', 'aliases': ['aiexpandedaccess'], 'displayName': 'AI Expanded Access'},
|
||||||
'1010490001': {
|
'1010490001': {
|
||||||
'product': '101049', 'aliases': ['eeu'], 'displayName': 'Endpoint Education Upgrade'},
|
'product': '101049', 'aliases': ['eeu'], 'displayName': 'Endpoint Education Upgrade'},
|
||||||
'1010500001': {
|
'1010500001': {
|
||||||
|
|||||||
115
src/tools/_hashlib.vcxproj
Normal file
115
src/tools/_hashlib.vcxproj
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|ARM">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|ARM64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGInstrument|ARM">
|
||||||
|
<Configuration>PGInstrument</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGInstrument|ARM64">
|
||||||
|
<Configuration>PGInstrument</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGInstrument|Win32">
|
||||||
|
<Configuration>PGInstrument</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGInstrument|x64">
|
||||||
|
<Configuration>PGInstrument</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGUpdate|ARM">
|
||||||
|
<Configuration>PGUpdate</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGUpdate|ARM64">
|
||||||
|
<Configuration>PGUpdate</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGUpdate|Win32">
|
||||||
|
<Configuration>PGUpdate</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="PGUpdate|x64">
|
||||||
|
<Configuration>PGUpdate</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{447F05A8-F581-4CAC-A466-5AC7936E207E}</ProjectGuid>
|
||||||
|
<RootNamespace>_hashlib</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="python.props" />
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>NotSet</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetExt>$(PyStdlibPydExt)</TargetExt>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="pyproject.props" />
|
||||||
|
<Import Project="openssl.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>ws2_32.lib;crypt32.lib;advapi32.lib;user32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\Modules\_hashopenssl.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\PC\python_nt.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="pythoncore.vcxproj">
|
||||||
|
<Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
||||||
@@ -15,12 +15,14 @@
|
|||||||
<_DLLSuffix Condition="$(Platform) == 'ARM64'">$(_DLLSuffix)-arm64</_DLLSuffix>
|
<_DLLSuffix Condition="$(Platform) == 'ARM64'">$(_DLLSuffix)-arm64</_DLLSuffix>
|
||||||
<_DLLSuffix Condition="$(Platform) == 'x64'">$(_DLLSuffix)-x64</_DLLSuffix>
|
<_DLLSuffix Condition="$(Platform) == 'x64'">$(_DLLSuffix)-x64</_DLLSuffix>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<!-- GAM Static Build: Disable missing DLL/PDB copy
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).dll" />
|
<_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).dll" />
|
||||||
<_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).pdb" />
|
<_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).pdb" />
|
||||||
<_SSLDLL Include="$(opensslOutDir)\libssl$(_DLLSuffix).dll" />
|
<_SSLDLL Include="$(opensslOutDir)\libssl$(_DLLSuffix).dll" />
|
||||||
<_SSLDLL Include="$(opensslOutDir)\libssl$(_DLLSuffix).pdb" />
|
<_SSLDLL Include="$(opensslOutDir)\libssl$(_DLLSuffix).pdb" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
-->
|
||||||
<Target Name="_CopySSLDLL" Inputs="@(_SSLDLL)" Outputs="@(_SSLDLL->'$(OutDir)%(Filename)%(Extension)')" AfterTargets="Build">
|
<Target Name="_CopySSLDLL" Inputs="@(_SSLDLL)" Outputs="@(_SSLDLL->'$(OutDir)%(Filename)%(Extension)')" AfterTargets="Build">
|
||||||
<Copy SourceFiles="@(_SSLDLL)" DestinationFolder="$(OutDir)" />
|
<Copy SourceFiles="@(_SSLDLL)" DestinationFolder="$(OutDir)" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|||||||
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
|
||||||
@@ -428,7 +428,7 @@ See https://support.google.com/chrome/a/answer/3523633 for full details.
|
|||||||
Thanks to Jay for most of the following.
|
Thanks to Jay for most of the following.
|
||||||
|
|
||||||
Send a remote command to the managed Chrome OS device. It's important to note that the device must be in a proper state to accept the command or an error may be returned.
|
Send a remote command to the managed Chrome OS device. It's important to note that the device must be in a proper state to accept the command or an error may be returned.
|
||||||
For example, the `reboot`, `set_volume` and `take_a_screenshot` commands only work if the device is configured in auto-start kiosk app mode.
|
For example, the `set_volume` and `take_a_screenshot` commands only work if the device is configured in auto-start kiosk app mode.
|
||||||
|
|
||||||
The `wipe_users` and `remote_powerwash` commands will erase all user data on the device and the `remote_powerwash` command will require that the device is physically reconnected to the
|
The `wipe_users` and `remote_powerwash` commands will erase all user data on the device and the `remote_powerwash` command will require that the device is physically reconnected to the
|
||||||
WiFi network and re-enrolled before it can be managed again. These commands require the `doit` argument so that the admin confirms the potential loss of user data and management.
|
WiFi network and re-enrolled before it can be managed again. These commands require the `doit` argument so that the admin confirms the potential loss of user data and management.
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
# Cloud Identity Groups
|
# Cloud Identity Groups
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
- [Query documentation](#query-documentation)
|
- [Query documentation](#query-documentation)
|
||||||
- [Python Regular Expressions](Python-Regular-Expressions) Match function
|
- [Python Regular Expressions](Python-Regular-Expressions) Match function and Search function
|
||||||
- [Notes](#Notes)
|
- [Notes](#Notes)
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [Manage groups](#manage-groups)
|
- [Manage groups](#manage-groups)
|
||||||
|
- [Update a group's primary email address](#update-a-groups-primary-email-address)
|
||||||
- [Display information about individual groups](#display-information-about-individual-groups)
|
- [Display information about individual groups](#display-information-about-individual-groups)
|
||||||
- [Display information about multiple groups](#display-information-about-multiple-groups)
|
- [Display information about multiple groups](#display-information-about-multiple-groups)
|
||||||
- [Display group counts](#display-group-counts)
|
- [Display group counts](#display-group-counts)
|
||||||
@@ -75,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>)|
|
||||||
@@ -94,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)|
|
||||||
@@ -138,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)|
|
||||||
@@ -181,6 +185,7 @@ and Cloud Identity Premium accounts.
|
|||||||
spammoderationlevel|
|
spammoderationlevel|
|
||||||
whocanaddreferences|
|
whocanaddreferences|
|
||||||
whocanadd|
|
whocanadd|
|
||||||
|
whocanaddexternalmembers|
|
||||||
whocanapprovemessages|
|
whocanapprovemessages|
|
||||||
whocanassigntopics|
|
whocanassigntopics|
|
||||||
whocanassistcontent|
|
whocanassistcontent|
|
||||||
@@ -239,6 +244,7 @@ gam create cigroup <EmailAddress>
|
|||||||
[security|makesecuritygroup] [locked]
|
[security|makesecuritygroup] [locked]
|
||||||
[dynamic <QueryDynamicGroup>]
|
[dynamic <QueryDynamicGroup>]
|
||||||
gam update cigroup <GroupEntity> [copyfrom <GroupItem>] <GroupAttribute>
|
gam update cigroup <GroupEntity> [copyfrom <GroupItem>] <GroupAttribute>
|
||||||
|
[updateprimaryemail <RESearchPattern> <RESubstitution> [preview]]
|
||||||
[security|makesecuritygroup|
|
[security|makesecuritygroup|
|
||||||
dynamicsecurity|makedynamicsecuritygroup|
|
dynamicsecurity|makedynamicsecuritygroup|
|
||||||
lockedsecurity|makelockedsecuritygroup]
|
lockedsecurity|makelockedsecuritygroup]
|
||||||
@@ -259,6 +265,22 @@ You can update a group to restrict its membership with the `memberrestrictions <
|
|||||||
|
|
||||||
The `makeowner` option makes the administrator in `oauth2.txt` the initial owner of the group.
|
The `makeowner` option makes the administrator in `oauth2.txt` the initial owner of the group.
|
||||||
|
|
||||||
|
## Update a group's primary email address
|
||||||
|
You can simply update a group's primary email address with the `email` option.
|
||||||
|
```
|
||||||
|
gam update cigroup groupold@domain.com email groupnew@domain.com
|
||||||
|
```
|
||||||
|
The `updateprimaryemail <RESearchPattern> <RESubstitution> [preview]` option allows modification several group's
|
||||||
|
current primary email address. For example, to change the domain of a set of groups from the current domain.com to newdomain.com,
|
||||||
|
make a CSV file Groups.csv with a column `email` that contains the group email addresses that are to be changed.
|
||||||
|
You can list all groups with: `gam redirect csv ./Groups.csv print cigroups`
|
||||||
|
```
|
||||||
|
gam update cigroup csvfile Groups.csv:email updateprimaryemail "^(.+)@domain.com$" "\1@newdomain.com"
|
||||||
|
```
|
||||||
|
The `preview` option allows verification of the primary email address changes before commiting the changes.
|
||||||
|
|
||||||
|
If the group's current primary email address does not match the <REMatchPattern> then no modification is made.
|
||||||
|
|
||||||
## Display information about individual groups
|
## Display information about individual groups
|
||||||
This command displays information as an indented list of keys and values.
|
This command displays information as an indented list of keys and values.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -12,13 +12,13 @@
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
To use these commands you must update your client access authentication.
|
To use these commands you must update your client access authentication.
|
||||||
You'll enter 20r to turn on the Cloud Identity Policy scope; then continue
|
You'll enter 23 or 23r to turn on the Cloud Identity Policy scope; then continue
|
||||||
with authentication.
|
with authentication.
|
||||||
```
|
```
|
||||||
gam oauth delete
|
gam oauth delete
|
||||||
gam oauth create
|
gam oauth create
|
||||||
...
|
...
|
||||||
[R] 20) Cloud Identity - Policy (supports readonly)
|
[R] 23) Cloud Identity - Policy (supports readonly)
|
||||||
```
|
```
|
||||||
You must enable access to policies in the GCP cloud console.
|
You must enable access to policies in the GCP cloud console.
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ See: https://cloud.google.com/identity/docs/concepts/supported-policy-api-settin
|
|||||||
Display selected policies.
|
Display selected policies.
|
||||||
```
|
```
|
||||||
gam info policies <CIPolicyEntity>
|
gam info policies <CIPolicyEntity>
|
||||||
[nowarnings] [noappnames]
|
[nowarnings] [noappnames] [noidmappimg]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -67,18 +67,22 @@ Select policies::
|
|||||||
* `settings/<String>` - A policy setting type, `settings/workspace_marketplace.apps_allowlist`
|
* `settings/<String>` - A policy setting type, `settings/workspace_marketplace.apps_allowlist`
|
||||||
* `<String>` - A policy setting type, `workspace_marketplace.apps_allowlist`
|
* `<String>` - A policy setting type, `workspace_marketplace.apps_allowlist`
|
||||||
|
|
||||||
By default, policy warnings are displayed, use the 'nowarnings` option to suppress their display.
|
By default, policy warnings are displayed, use the `nowarnings` option to suppress their display.
|
||||||
|
|
||||||
By default, additional API calls are made for `settings/workspace_marketplace.apps_allowlist`
|
By default, additional API calls are made for `settings/workspace_marketplace.apps_allowlist`
|
||||||
to get the application name for the application ID. Use option `noappnames` to suppress these calls.
|
to get the application name for the application ID. Use option `noappnames` to suppress these calls.
|
||||||
|
|
||||||
|
By default, additional API calls are made to add the `policyQuery/groupEmail` and `policyQuery/orgUnitPath` fields
|
||||||
|
that are mapped from the `policyQuery/group` and `policyQuery/orgUnit` fields. Use option `noidmapping'
|
||||||
|
to suppress these calls and not add the additional fields.
|
||||||
|
|
||||||
By default, Gam displays the information as an indented list of keys and values.
|
By default, Gam displays the information as an indented list of keys and values.
|
||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
Display all or filtered policies.
|
Display all or filtered policies.
|
||||||
```
|
```
|
||||||
gam show policies
|
gam show policies
|
||||||
[filter <String>] [nowarnings] [noappnames]
|
[filter <String>] [nowarnings] [noappnames] [noidmappimg]
|
||||||
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
@@ -92,12 +96,16 @@ By default, policy warnings are displayed, use the `nowarnings` option to suppre
|
|||||||
By default, additional API calls are made for `settings/workspace_marketplace.apps_allowlist`
|
By default, additional API calls are made for `settings/workspace_marketplace.apps_allowlist`
|
||||||
to get the application name for the application ID. Use option `noappnames` to suppress these calls.
|
to get the application name for the application ID. Use option `noappnames` to suppress these calls.
|
||||||
|
|
||||||
|
By default, additional API calls are made to add the `policyQuery/groupEmail` and `policyQuery/orgUnitPath` fields
|
||||||
|
that are mapped from the `policyQuery/group` and `policyQuery/orgUnit` fields. Use option `noidmapping'
|
||||||
|
to suppress these calls and not add the additional fields.
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
```
|
```
|
||||||
gam print policies [todrive <ToDriveAttribute>*]
|
gam print policies [todrive <ToDriveAttribute>*]
|
||||||
[filter <String>] [nowarnings] [noappnames]
|
[filter <String>] [nowarnings] [noappnames] [noidmappimg]
|
||||||
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
[group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
|
||||||
[formatjson [quotechar <Character>]]
|
[formatjson [quotechar <Character>]]
|
||||||
```
|
```
|
||||||
@@ -108,6 +116,10 @@ By default, all policies are displayed:
|
|||||||
|
|
||||||
By default, policy warnings are displayed, use the `nowarnings` option to suppress their display.
|
By default, policy warnings are displayed, use the `nowarnings` option to suppress their display.
|
||||||
|
|
||||||
|
By default, additional API calls are made to add the `policyQuery/groupEmail` and `policyQuery/orgUnitPath` fields
|
||||||
|
that are mapped from the `policyQuery/group` and `policyQuery/orgUnit` fields. Use option `noidmapping'
|
||||||
|
to suppress these calls and not add the additional fields.
|
||||||
|
|
||||||
By default, additional API calls are made for `settings/workspace_marketplace.apps_allowlist`
|
By default, additional API calls are made for `settings/workspace_marketplace.apps_allowlist`
|
||||||
to get the application name for the application ID. Use option `noappnames` to suppress these calls.
|
to get the application name for the application ID. Use option `noappnames` to suppress these calls.
|
||||||
|
|
||||||
@@ -126,6 +138,11 @@ Print all service status policies.
|
|||||||
gam redirect csv ./ServiceStatusPolicies.csv print policies filter "setting.type.matches('.*service_status')"
|
gam redirect csv ./ServiceStatusPolicies.csv print policies filter "setting.type.matches('.*service_status')"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Print Drive external sharing policies.
|
||||||
|
```
|
||||||
|
gam redirect csv ./DriveExternalSharingPolicies.csv print policies filter "setting.type.matches('settings/drive_and_docs.external_sharing')"
|
||||||
|
```
|
||||||
|
|
||||||
Print all polices that apply directly to the OU "/Staff".
|
Print all polices that apply directly to the OU "/Staff".
|
||||||
```
|
```
|
||||||
gam redirect csv ./StaffPolicies.csv print policies ou "^/Staff$"
|
gam redirect csv ./StaffPolicies.csv print policies ou "^/Staff$"
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
- [Notes](#Notes)
|
- [Notes](#Notes)
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
- [Grant Service Account Rights to Manage CAA](#grant-service-account-rights-to-manage-caa)
|
- [Grant Service Account Rights to Manage CAA](#grant-service-account-rights-to-manage-caa)
|
||||||
|
- [Get Google Cloud organization ID for your workspace](#Get Google Cloud organization ID for your workspace)
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [Parameters for Basic Levels](#parameters-for-basic-levels)
|
- [Parameters for Basic Levels](#parameters-for-basic-levels)
|
||||||
- [Create an Access Level](#create-an-access-level)
|
- [Create an Access Level](#create-an-access-level)
|
||||||
@@ -36,6 +37,15 @@ In order for GAM to manage CAA access levels, you need to grant your service acc
|
|||||||
10. Click `Save`. It may take 15 minutes or more for the role permissions to propagate.
|
10. Click `Save`. It may take 15 minutes or more for the role permissions to propagate.
|
||||||
11. Confirm the role is in place by re-running `gam print caalevels`
|
11. Confirm the role is in place by re-running `gam print caalevels`
|
||||||
|
|
||||||
|
## Get Google Cloud organization ID for your workspace
|
||||||
|
This ID is used by the caalevel commands; to eliminate additional API calls,
|
||||||
|
you can get the value and store it in the `gam.cfg/gcp_org_id` variable.
|
||||||
|
```
|
||||||
|
$ gam info gcporgid
|
||||||
|
organizations/906207637890
|
||||||
|
$ gam config gcp_org_id organizations/906207637890 save
|
||||||
|
```
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
```
|
```
|
||||||
<JSONData> ::= (json [charset <Charset>] <String>) | (json file <FileName> [charset <Charset>]) |
|
<JSONData> ::= (json [charset <Charset>] <String>) | (json file <FileName> [charset <Charset>]) |
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
- [Update customer](#update-customer)
|
- [Update customer](#update-customer)
|
||||||
- [Display customer](#display-customer)
|
- [Display customer](#display-customer)
|
||||||
- [Display instance](#display-instance)
|
- [Display instance](#display-instance)
|
||||||
|
- [Display Customer ID](#display-customer-id)
|
||||||
|
- [Display GCP organization ID](#display-gcp-organization-id)
|
||||||
|
|
||||||
## API documentation
|
## API documentation
|
||||||
* [Directory API - Customers](https://developers.google.com/admin-sdk/directory/reference/rest/v1/customers)
|
* [Directory API - Customers](https://developers.google.com/admin-sdk/directory/reference/rest/v1/customers)
|
||||||
@@ -45,3 +47,19 @@ gam info instance [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.
|
||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
|
|
||||||
|
## Display Customer ID
|
||||||
|
You can get and set the `gam.cfg/customer_id` value with these commands:
|
||||||
|
```
|
||||||
|
$ gam info customerid
|
||||||
|
C78abc9de
|
||||||
|
$ gam config customer_id C78abc9de save
|
||||||
|
```
|
||||||
|
## Display GCP organization ID
|
||||||
|
You can get and set the `gam.cfg/gcp_org_id` value with these commands:
|
||||||
|
```
|
||||||
|
$ gam info gcporgid
|
||||||
|
organizations/906207637890
|
||||||
|
$ gam config gcp_org_id organizations/906207637890 save
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -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,237 @@ 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.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
|
||||||
|
|
||||||
|
Added option `whocanaddexternalmembers only_owners_can_add_external_members|end_users_can_add_external_members` to `<GroupSettingsAttribute>`.
|
||||||
|
It appears that `allowexternalmembers true` must be set in the same command.
|
||||||
|
Added option `whocanaddexternalmembers` to `<GroupFieldName>`.
|
||||||
|
These options are not in general release as of 2026-04-13; experiment.
|
||||||
|
|
||||||
|
### 7.40.02
|
||||||
|
|
||||||
|
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`.
|
||||||
|
|
||||||
|
### 7.40.01
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> print filelist|filecounts` to handle the `permissionDetails` subfield
|
||||||
|
of the `permissions` field for My Drives; this useful when trying to display permission inheritance.
|
||||||
|
An additional API call per file is required to get the `permissionDetails` subfield.
|
||||||
|
```
|
||||||
|
gam user user@domain.com print filelist fields id,name,mimetype,basicpermissions,permissiondetails oneitemperrow
|
||||||
|
gam user user@domain.com print filelist fields id,name,mimetype,basicpermissions,permissiondetails pm inherited false em pmfilter oneitemperrow
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.40.00
|
||||||
|
|
||||||
|
Updated `gam print|show businessprofileaccounts` (client access) to
|
||||||
|
`gam <UserTypeEntity> print|show businessprofileaccounts` (service account access).
|
||||||
|
You'll need to run `gam user user@domain.com update serviceaccount` and
|
||||||
|
select `2) Business Account Management API`.
|
||||||
|
|
||||||
|
### 7.39.08
|
||||||
|
|
||||||
|
Fixed bug in `gam oauth create` that caused a trap when `0) Business Account Management API` was selected.
|
||||||
|
|
||||||
|
Upgraded to Python 3.14.4 on macOS and Windows; Linux is still 3.14.3.
|
||||||
|
|
||||||
|
### 7.39.07
|
||||||
|
|
||||||
|
Upgraded to OpenSSL 3.6.2.
|
||||||
|
|
||||||
|
### 7.39.06
|
||||||
|
|
||||||
|
Fixed bug in `gam version checkrc`.
|
||||||
|
|
||||||
|
### 7.39.05
|
||||||
|
|
||||||
|
Added optional argument `preview` to `updateprimaryemail <RegularExpression> <EmailReplacement> [preview]`
|
||||||
|
for the following commands that causes GAM to preview, but not perform, primary email address changes.
|
||||||
|
This allows verification of the primary email address changes before commiting the changes.
|
||||||
|
```
|
||||||
|
gam update group <GroupEntity>
|
||||||
|
gam update cigroup <GroupEntity>
|
||||||
|
gam <UserTypeEntity> update user
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.39.04
|
||||||
|
|
||||||
|
Added `updateprimaryemail <RegularExpression> <EmailReplacement>` option to
|
||||||
|
`gam update group <GroupEntity>` and `gam update cigroup <GroupEntity>` to allow modifying
|
||||||
|
the group's current primary email address.
|
||||||
|
For example, to change the domain of a set of groups from the current domain.com to newdomain.com:
|
||||||
|
```
|
||||||
|
gam update group csvfile Groups.csv:email updateprimaryemail "^(.+)@domain.com$" "\1@newdomain.com"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.39.03
|
||||||
|
|
||||||
|
Added the following options to `gam <UserTypeEntity> create chatspace` that can be used to capture
|
||||||
|
space details when creating chat spaces in bulk.
|
||||||
|
```
|
||||||
|
csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]] (addcsvdata <FieldName> <String>)*
|
||||||
|
```
|
||||||
|
|
||||||
|
See: https://github.com/GAM-team/GAM/wiki/Users-Chat#bulk-build-chat-spaces
|
||||||
|
|
||||||
|
### 7.39.02
|
||||||
|
|
||||||
|
Fixed progress messages for `gam <UserTypeEntity> print filelist` when permissions were being
|
||||||
|
displayed/matched for Shared Drives.
|
||||||
|
|
||||||
|
### 7.39.01
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> transfer drive <UserItem>` to handle the following error:
|
||||||
|
```
|
||||||
|
ERROR: 403: cannotDeletePermission - The authenticated user cannot delete the permission.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.39.00
|
||||||
|
|
||||||
|
Deleted variable `enforce_expansive_access` from `gam.cfg` and removed option `enforceexpansiveaccess`
|
||||||
|
from the following commands as expansive access is now always enforced by Google on My Drives.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> delete permissions
|
||||||
|
gam <UserTypeEntity> delete drivefileacl
|
||||||
|
gam <UserTypeEntity> update drivefileacl
|
||||||
|
gam <UserTypeEntity> copy drivefile
|
||||||
|
gam <UserTypeEntity> move drivefile
|
||||||
|
gam <UserTypeEntity> transfer ownership
|
||||||
|
gam <UserTypeEntity> claim ownership
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.38.02
|
||||||
|
|
||||||
|
Added license SKU `1010470009` for `AI Expanded Access`; abbreviation `aiexpandedaccess`.
|
||||||
|
|
||||||
|
Renamed license SKU `1010470001` from `Gemini Enterprise` to `Gemini Enterprise - Legacy`.
|
||||||
|
|
||||||
|
### 7.38.01
|
||||||
|
|
||||||
|
Added `root` as a synonym for '/' in command line arguments that specify an OU.
|
||||||
|
This is to avoid issues where a stand-alone `/` on the command line may be mis-interpreted
|
||||||
|
by the command line interpreter as a reference to the file system root.
|
||||||
|
|
||||||
|
### 7.38.00
|
||||||
|
|
||||||
|
Added variable `gcp_org_id` to `gam.cfg` that is used by the following commands;
|
||||||
|
by setting the value, additional API calls are eliminated.
|
||||||
|
```
|
||||||
|
gam create project
|
||||||
|
gam create gcpfolder
|
||||||
|
gam create|update|delete caalevel
|
||||||
|
gam print|show caalevels
|
||||||
|
gam print|show tokens gcpdetails
|
||||||
|
```
|
||||||
|
You can get and set the `gam.cfg/gcp_org_id` value with these commands:
|
||||||
|
```
|
||||||
|
$ gam info gcporgid
|
||||||
|
organizations/906207637890
|
||||||
|
$ gam config gcp_org_id organizations/906207637890 save
|
||||||
|
```
|
||||||
|
|
||||||
|
You can get and set the `gam.cfg/customer_id` value with these commands:
|
||||||
|
```
|
||||||
|
$ gam info customerid
|
||||||
|
C78abc9de
|
||||||
|
$ gam config customer_id C78abc9de save
|
||||||
|
```
|
||||||
|
|
||||||
|
Added the following options to `gam report <ActivityApplicationName>`.
|
||||||
|
```
|
||||||
|
applicationinfofilter <String>
|
||||||
|
networkinfofilter <String>
|
||||||
|
statusfilter <String>
|
||||||
|
includesensitivedata
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.37.00
|
||||||
|
|
||||||
|
Added new client access scopes used by `gam print tokens`.
|
||||||
|
```
|
||||||
|
[*] 52) Resource Manager API - Organizations readonly
|
||||||
|
[*] 53) Resource Manager API - Projects readonly
|
||||||
|
```
|
||||||
|
|
||||||
|
Added option `gcpdetails` to `gam print tokens` that uses these scopes to get additional project information.
|
||||||
|
|
||||||
|
### 7.36.03
|
||||||
|
|
||||||
|
Added command to send email replies that causes Gmail to recognize the message
|
||||||
|
in conversation mode for the user sending the reply and the user receiving the reply;
|
||||||
|
GAM supplies the necessary headers and options.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> sendreply
|
||||||
|
(((query <QueryGmail> [querytime<String> <Date>]*) [or|and])+) | (ids <MessageIDEntity>)
|
||||||
|
[replyto <EmailAddress>]
|
||||||
|
[subject <String>] [<MessageContent>] [html [<Boolean>]]
|
||||||
|
(attach <FileName> [charset <CharSet>])*
|
||||||
|
(embedimage <FileName> <String>)*
|
||||||
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
|
||||||
|
gam user user@domain.com sendreply query "rfc822MsgId:<CAAMmEdqj43...1OsQ@mail.gmail.com>" textmessage "Thanks for the information"
|
||||||
|
gam user user@domain.com sendreply ids 19cfc3506c02c22b textmessage "Thanks for the information"
|
||||||
|
```
|
||||||
|
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Send-Email#conversation-mode
|
||||||
|
|
||||||
|
### 7.36.02
|
||||||
|
|
||||||
|
Added option `threadid <String>` to `gam [<UserTypeEntity>] sendemail` that causes Gmail to recognize the message
|
||||||
|
in conversation mode in for the user sending the message.
|
||||||
|
|
||||||
|
* See: https://github.com/GAM-team/GAM/wiki/Send-Email#conversation-mode
|
||||||
|
|
||||||
|
### 7.36.01
|
||||||
|
|
||||||
|
Fixed bug in `gam info|print|show policies` where the `policyQuery/query` field was not displayed.
|
||||||
|
|
||||||
|
Added option `noidmapping` to `gam info|print|show policies` to suppress adding the `policyQuery/groupEmail` and
|
||||||
|
`policyQuery/orgUnitPath` name fields that are mapped from the `policyQuery/group` and `policyQuery/orgInit` id fields.
|
||||||
|
|
||||||
|
### 7.36.00
|
||||||
|
|
||||||
|
Added options `filtermultiattrtype` and filtermultiattrcustom` to `gam info user` and
|
||||||
|
`gam print users` that support filtering `<UserMultiAttribute>` display based on `type` or `customType`.
|
||||||
|
|
||||||
|
```
|
||||||
|
<UserMultiAttributeFilterName> ::=
|
||||||
|
address|addresses|
|
||||||
|
externalid|externalids|
|
||||||
|
im|ims|
|
||||||
|
keyword|keywords|
|
||||||
|
location|locations|
|
||||||
|
orgainzation|organizations|
|
||||||
|
otheremail|otheremails|
|
||||||
|
phone|phones|
|
||||||
|
relation|relations|
|
||||||
|
website|websites
|
||||||
|
```
|
||||||
|
|
||||||
|
* `filtermultiattrtype <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `type` is `<String>`
|
||||||
|
* `filtermultiattrcustom <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `customType` is `<String>`
|
||||||
|
|
||||||
|
```
|
||||||
|
gam info user user@domain.com quick filtermultiattrtype organizations work filtermultiattrcustom phones private
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.35.03
|
||||||
|
|
||||||
|
Updated `gam <UserTypeEntity> print filelist|filecounts` to handle options `showsize` and `showsizeunits` as independent options.
|
||||||
|
* `showsize` - Display a column `Size` with a byte count
|
||||||
|
* `showsizeunits` - Display a column `SizeUnits` with a formatted size with units
|
||||||
|
|
||||||
|
If you select both options, you can sort multiple rows using the `Size` column.
|
||||||
|
|
||||||
### 7.35.02
|
### 7.35.02
|
||||||
|
|
||||||
Added option `showsizeunits` to `gam gam <UserTypeEntity> print filelist|filecounts` as an alternative to option `showsize`.
|
Added option `showsizeunits` to `gam gam <UserTypeEntity> print filelist|filecounts` as an alternative to option `showsize`.
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
# Groups
|
# Groups
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
- [Query documentation](#query-documentation)
|
- [Query documentation](#query-documentation)
|
||||||
- [Python Regular Expressions](Python-Regular-Expressions) Match function
|
- [Python Regular Expressions](Python-Regular-Expressions) Match function and Search function
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [GUI API Group settings mapping](#gui-api-group-settings-mapping)
|
- [GUI API Group settings mapping](#gui-api-group-settings-mapping)
|
||||||
- [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)
|
||||||
|
- [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)
|
||||||
- [Display information about selected groups](#display-information-about-selected-groups)
|
- [Display information about selected groups](#display-information-about-selected-groups)
|
||||||
@@ -78,12 +79,13 @@ 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>)|
|
||||||
(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)|
|
||||||
|
(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)|
|
(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)|
|
||||||
@@ -171,6 +173,7 @@ See [Collections of Items](Collections-of-Items)
|
|||||||
spammoderationlevel|
|
spammoderationlevel|
|
||||||
whocanaddreferences|
|
whocanaddreferences|
|
||||||
whocanadd|
|
whocanadd|
|
||||||
|
whocanaddexternalmembers|
|
||||||
whocanapprovemessages|
|
whocanapprovemessages|
|
||||||
whocanassigntopics|
|
whocanassigntopics|
|
||||||
whocanassistcontent|
|
whocanassistcontent|
|
||||||
@@ -348,6 +351,7 @@ gam create group <EmailAddress>
|
|||||||
[copyfrom <GroupItem>] <GroupAttribute>*
|
[copyfrom <GroupItem>] <GroupAttribute>*
|
||||||
[verifynotinvitable]
|
[verifynotinvitable]
|
||||||
gam update group|groups <GroupEntity> [email <EmailAddress>]
|
gam update group|groups <GroupEntity> [email <EmailAddress>]
|
||||||
|
[updateprimaryemail <RESearchPattern> <RESubstitution> [preview]]
|
||||||
[copyfrom <GroupItem>] <GroupAttribute>*
|
[copyfrom <GroupItem>] <GroupAttribute>*
|
||||||
[makesecuritygroup|security]
|
[makesecuritygroup|security]
|
||||||
[admincreated <Boolean>]
|
[admincreated <Boolean>]
|
||||||
@@ -363,6 +367,22 @@ 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.
|
||||||
|
|
||||||
|
## Update a group's primary email address
|
||||||
|
You can simply update a group's primary email address with the `email` option.
|
||||||
|
```
|
||||||
|
gam update group groupold@domain.com email groupnew@domain.com
|
||||||
|
```
|
||||||
|
The `updateprimaryemail <RESearchPattern> <RESubstitution> [preview]` option allows modification several group's
|
||||||
|
current primary email address. For example, to change the domain of a set of groups from the current domain.com to newdomain.com,
|
||||||
|
make a CSV file Groups.csv with a column `email` that contains the group email addresses that are to be changed.
|
||||||
|
You can list all groups with: `gam redirect csv ./Groups.csv print groups`
|
||||||
|
```
|
||||||
|
gam update group csvfile Groups.csv:email updateprimaryemail "^(.+)@domain.com$" "\1@newdomain.com"
|
||||||
|
```
|
||||||
|
The `preview` option allows verification of the primary email address changes before commiting the changes.
|
||||||
|
|
||||||
|
If the group's current primary email address does not match the <REMatchPattern> then no modification is made.
|
||||||
|
|
||||||
## Update a group's settings with JSON data
|
## Update a group's settings with JSON data
|
||||||
You can save group settings in JSON format which can simplify updating multiple settings. Suppose you have
|
You can save group settings in JSON format which can simplify updating multiple settings. Suppose you have
|
||||||
a set of test groups that you will use to experiment with the new group settings coming in May 2019. You
|
a set of test groups that you will use to experiment with the new group settings coming in May 2019. You
|
||||||
|
|||||||
@@ -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.35.02 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.41.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.3 64-bit final
|
Python 3.14.4 64-bit final
|
||||||
macOS Tahoe 26.3.1 arm64
|
macOS Tahoe 26.4.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.35.02 - https://github.com/GAM-team/GAM - pythonsource
|
GAM 7.41.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.3 64-bit final
|
Python 3.14.4 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
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
|
|
||||||
| License Name | License SKU | Abbreviation |
|
| License Name | License SKU | Abbreviation |
|
||||||
|--------------|-------------|---------------|
|
|--------------|-------------|---------------|
|
||||||
|
| AI Expanded Access | 1010470009 | aiexpandedaccess |
|
||||||
| AI Meetings and Messaging | 1010470007 | aimeetingsandmessaging |
|
| AI Meetings and Messaging | 1010470007 | aimeetingsandmessaging |
|
||||||
| AI Security | 1010470006 | aisecurity |
|
| AI Security | 1010470006 | aisecurity |
|
||||||
| AppSheet Core | 1010380001 | appsheetcore |
|
| AppSheet Core | 1010380001 | appsheetcore |
|
||||||
@@ -61,7 +62,7 @@
|
|||||||
| G Suite Lite | Google-Apps-Lite | gsuitelite |
|
| G Suite Lite | Google-Apps-Lite | gsuitelite |
|
||||||
| Gemini Business | 1010470003 | geminibiz
|
| Gemini Business | 1010470003 | geminibiz
|
||||||
| Gemini Education Premium | 1010470005 | geminiedupremium |
|
| Gemini Education Premium | 1010470005 | geminiedupremium |
|
||||||
| Gemini Enterprise | 1010470001 | geminient | duetai |
|
| Gemini Enterprise - Legacy | 1010470001 | geminient | duetai |
|
||||||
| Google AI Pro for Education | 1010470004 | gaiproedu |
|
| Google AI Pro for Education | 1010470004 | gaiproedu |
|
||||||
| Google AI Ultra for Business | 1010470008 | geminiultra |
|
| Google AI Ultra for Business | 1010470008 | geminiultra |
|
||||||
| Google Apps Message Security | Google-Apps-For-Postini | postini |
|
| Google Apps Message Security | Google-Apps-For-Postini | postini |
|
||||||
@@ -152,6 +153,7 @@
|
|||||||
4tb | drive4tb | googledrivestorage4tb | Google-Drive-storage-4TB |
|
4tb | drive4tb | googledrivestorage4tb | Google-Drive-storage-4TB |
|
||||||
8tb | drive8tb | googledrivestorage8tb | Google-Drive-storage-8TB |
|
8tb | drive8tb | googledrivestorage8tb | Google-Drive-storage-8TB |
|
||||||
16tb | drive16tb | googledrivestorage16tb | Google-Drive-storage-16TB |
|
16tb | drive16tb | googledrivestorage16tb | Google-Drive-storage-16TB |
|
||||||
|
aiexpandedaccess | 1010470009 | AI Expanded Access |
|
||||||
aimeetingsandmessaging | 1010470007 | AI Meetings and Messaging |
|
aimeetingsandmessaging | 1010470007 | AI Meetings and Messaging |
|
||||||
aisecurity | 1010470006 | AI Security |
|
aisecurity | 1010470006 | AI Security |
|
||||||
appsheetcore | 1010380001 | AppSheet Core |
|
appsheetcore | 1010380001 | AppSheet Core |
|
||||||
@@ -170,7 +172,7 @@
|
|||||||
gaiproedu | geminiedu | 1010470004 | Google AI Pro for Education |
|
gaiproedu | geminiedu | 1010470004 | Google AI Pro for Education |
|
||||||
geminibiz | 1010470003 | Gemini Business |
|
geminibiz | 1010470003 | Gemini Business |
|
||||||
geminiedupremium| 1010470005 | Gemini Education Premium |
|
geminiedupremium| 1010470005 | Gemini Education Premium |
|
||||||
geminient| duetai | 1010470001 | Gemini Enterprise |
|
geminient| duetai | 1010470001 | Gemini Enterprise - Legacy|
|
||||||
geminiultra | 1010470008 | Google AI Ultra for Business |
|
geminiultra | 1010470008 | Google AI Ultra for Business |
|
||||||
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
||||||
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
||||||
|
|||||||
@@ -99,6 +99,8 @@ gam report <ActivityApplicationName> [todrive <ToDriveAttribute>*]
|
|||||||
[event|events <EventNameList>] [ip <String>]
|
[event|events <EventNameList>] [ip <String>]
|
||||||
[gmaileventtypes <NumberRangeList>]
|
[gmaileventtypes <NumberRangeList>]
|
||||||
[groupidfilter <String>] [resourcedetailsfilter <String>]
|
[groupidfilter <String>] [resourcedetailsfilter <String>]
|
||||||
|
[networkinfofilter <String>] [statusfilter <String>]
|
||||||
|
[applicationinfofilter <String>] [includesensitivedata]
|
||||||
[notimesort]
|
[notimesort]
|
||||||
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
|
||||||
[countsonly [bydate|summary] [eventrowfilter]]
|
[countsonly [bydate|summary] [eventrowfilter]]
|
||||||
@@ -154,6 +156,15 @@ Limit to those users that are a member of at least one of a list of groups.
|
|||||||
Limit based on resource details.
|
Limit based on resource details.
|
||||||
* `resourcedetailsfilter <String>` - See: https://developers.google.com/workspace/admin/reports/reference/rest/v1/activities/list#query-parameters
|
* `resourcedetailsfilter <String>` - See: https://developers.google.com/workspace/admin/reports/reference/rest/v1/activities/list#query-parameters
|
||||||
|
|
||||||
|
Limit based on 'regionCode`.
|
||||||
|
* `networkinfofilter <String>` - Format: 'regionCode="IN"'
|
||||||
|
|
||||||
|
Limit based on `statusCode`.
|
||||||
|
* `statusfilter <String>` - Format: 'statusCode="200"'
|
||||||
|
|
||||||
|
Limit based on `oAuthClientId`.
|
||||||
|
* `applicationinfofilter <String>` - Format: 'oAuthClientId="clientId"'
|
||||||
|
|
||||||
You can use `config csv_output_row_filter` to filter the events if the API filter can't produce the results you want.
|
You can use `config csv_output_row_filter` to filter the events if the API filter can't produce the results you want.
|
||||||
|
|
||||||
Limit to a list of specific events.
|
Limit to a list of specific events.
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ Thanks to Duncan Isaksen-Loxton for a script to help manage multiple domains.
|
|||||||
4tb | drive4tb | googledrivestorage4tb | Google-Drive-storage-4TB |
|
4tb | drive4tb | googledrivestorage4tb | Google-Drive-storage-4TB |
|
||||||
8tb | drive8tb | googledrivestorage8tb | Google-Drive-storage-8TB |
|
8tb | drive8tb | googledrivestorage8tb | Google-Drive-storage-8TB |
|
||||||
16tb | drive16tb | googledrivestorage16tb | Google-Drive-storage-16TB |
|
16tb | drive16tb | googledrivestorage16tb | Google-Drive-storage-16TB |
|
||||||
|
aiexpandedaccess | 1010470009 | AI Expanded Access |
|
||||||
aimeetingsandmessaging | 1010470007 | AI Meetings and Messaging |
|
aimeetingsandmessaging | 1010470007 | AI Meetings and Messaging |
|
||||||
aisecurity | 1010470006 | AI Security |
|
aisecurity | 1010470006 | AI Security |
|
||||||
appsheetcore | 1010380001 | AppSheet Core |
|
appsheetcore | 1010380001 | AppSheet Core |
|
||||||
@@ -61,7 +62,7 @@ Thanks to Duncan Isaksen-Loxton for a script to help manage multiple domains.
|
|||||||
geminibiz | 1010470003 | Gemini Business |
|
geminibiz | 1010470003 | Gemini Business |
|
||||||
geminiedu | 1010470004 | Gemini Education |
|
geminiedu | 1010470004 | Gemini Education |
|
||||||
geminiedupremium| 1010470005 | Gemini Education Premium |
|
geminiedupremium| 1010470005 | Gemini Education Premium |
|
||||||
geminient| duetai | 1010470001 | Gemini Enterprise |
|
geminient| duetai | 1010470001 | Gemini Enterprise - Legacy |
|
||||||
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
gsuitebasic | gafb | gafw | basic | Google-Apps-For-Business |
|
||||||
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
gsuitebusiness | gau | gsb | unlimited | Google-Apps-Unlimited |
|
||||||
gsuitebusinessarchived | gsbau | businessarchived | 1010340002 | Google Workspace Business - Archived User |
|
gsuitebusinessarchived | gsbau | businessarchived | 1010340002 | Google Workspace Business - Archived User |
|
||||||
|
|||||||
@@ -377,6 +377,9 @@ features "CameraSet"
|
|||||||
features "'Laptop Cart'"
|
features "'Laptop Cart'"
|
||||||
features "CameraSet,'Laptop Cart'"
|
features "CameraSet,'Laptop Cart'"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For quoting rules, see: [List Quoting Rules](Command-Line-Parsing)
|
||||||
|
|
||||||
## Manage buildings
|
## Manage buildings
|
||||||
When creating a building, at a minimum you must enter `address|addresslines` and `country|regioncode`.
|
When creating a building, at a minimum you must enter `address|addresslines` and `country|regioncode`.
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
- [Send an email to users](#send-an-email-to-users)
|
- [Send an email to users](#send-an-email-to-users)
|
||||||
- [Simple `replace <Tag> <String>` processing](Tag-Replace)
|
- [Simple `replace <Tag> <String>` processing](Tag-Replace)
|
||||||
- [Example](#example)
|
- [Example](#example)
|
||||||
|
- [Conversation mode](#conversation-mode)
|
||||||
|
|
||||||
## Note
|
## Note
|
||||||
Thanks to @bousquf for the following enhancement. You want to send a message from an authorized group
|
Thanks to @bousquf for the following enhancement. You want to send a message from an authorized group
|
||||||
@@ -214,14 +215,14 @@ Configure it at Admin Console > Apps > Google Workspace > Gmail > Routing > SMTP
|
|||||||
gam sendemail [recipient|to] <RecipientEntity>
|
gam sendemail [recipient|to] <RecipientEntity>
|
||||||
[from <EmailAddress>] [mailbox <EmailAddress>] [replyto <EmailAddress>]
|
[from <EmailAddress>] [mailbox <EmailAddress>] [replyto <EmailAddress>]
|
||||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||||
[subject <String>]
|
[subject <String>] [<MessageContent>]
|
||||||
[<MessageContent>]
|
|
||||||
(replace <Tag> <String>)*
|
(replace <Tag> <String>)*
|
||||||
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
||||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||||
(embedimage <FileName> <String>)*
|
(embedimage <FileName> <String>)*
|
||||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
[threadid <String>]
|
||||||
```
|
```
|
||||||
By default, emails will be sent from the admin user named in oauth2.txt, override this with the `from <EmailAddress>` option.
|
By default, emails will be sent from the admin user named in oauth2.txt, override this with the `from <EmailAddress>` option.
|
||||||
|
|
||||||
@@ -272,14 +273,14 @@ You can specify additional recipients, e.g., help desk personnel.
|
|||||||
gam sendemail [recipient|to] <RecipientEntity> [from <EmailAddress>]
|
gam sendemail [recipient|to] <RecipientEntity> [from <EmailAddress>]
|
||||||
[replyto <EmailAddress>]
|
[replyto <EmailAddress>]
|
||||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||||
[subject <String>]
|
[subject <String>] [<MessageContent>]
|
||||||
[<MessageContent>]
|
|
||||||
(replace <Tag> <String>)*
|
(replace <Tag> <String>)*
|
||||||
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
||||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||||
(embedimage <FileName> <String>)*
|
(embedimage <FileName> <String>)*
|
||||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
[threadid <String>]
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, emails will be sent from the admin user named in oauth2.txt, override this with the `from <EmailAddress>` option.
|
By default, emails will be sent from the admin user named in oauth2.txt, override this with the `from <EmailAddress>` option.
|
||||||
@@ -353,14 +354,14 @@ gam csv Users.csv gam sendemail "~personal" subject "Your new #domain# account`
|
|||||||
gam <UserTypeEntity> sendemail recipient|to <RecipientEntity>
|
gam <UserTypeEntity> sendemail recipient|to <RecipientEntity>
|
||||||
[replyto <EmailAddress>]
|
[replyto <EmailAddress>]
|
||||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||||
[subject <String>]
|
[subject <String>] [<MessageContent>]
|
||||||
[<MessageContent>]
|
|
||||||
(replace <Tag> <String>)*
|
(replace <Tag> <String>)*
|
||||||
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
||||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||||
(embedimage <FileName> <String>)*
|
(embedimage <FileName> <String>)*
|
||||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
[threadid <String>]
|
||||||
```
|
```
|
||||||
Emails will be sent from the users in `<UserTypeEntity>` to the recipients in `<RecipientEntity>`.
|
Emails will be sent from the users in `<UserTypeEntity>` to the recipients in `<RecipientEntity>`.
|
||||||
|
|
||||||
@@ -395,14 +396,14 @@ Your command line will have: `embedimage file1.jpg image1 embedimage file2.jpg i
|
|||||||
gam <UserTypeEntity> sendemail from <EmailAddress>
|
gam <UserTypeEntity> sendemail from <EmailAddress>
|
||||||
[replyto <EmailAddress>]
|
[replyto <EmailAddress>]
|
||||||
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
[cc <RecipientEntity>] [bcc <RecipientEntity>] [singlemessage]
|
||||||
[subject <String>]
|
[subject <String>] [<MessageContent>]
|
||||||
[<MessageContent>]
|
|
||||||
(replace <Tag> <String>)*
|
(replace <Tag> <String>)*
|
||||||
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
(replaceregex <REMatchPattern> <RESubstitution> <Tag> <String>)*
|
||||||
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
[html [<Boolean>]] (attach <FileName> [charset <Charset>])*
|
||||||
(embedimage <FileName> <String>)*
|
(embedimage <FileName> <String>)*
|
||||||
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
[newuser <EmailAddress> firstname|givenname <String> lastname|familyname <string> password <Password>]
|
||||||
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
[threadid <String>]
|
||||||
```
|
```
|
||||||
Emails will be sent to the users in `<UserTypeEntity>`.
|
Emails will be sent to the users in `<UserTypeEntity>`.
|
||||||
|
|
||||||
@@ -451,3 +452,42 @@ $ gam csv UserEmail.csv gam user "~User" sendemail to "~To" subject "~Subject" t
|
|||||||
User: user1@domain.com, Send Email to 1 Recipient
|
User: user1@domain.com, Send Email to 1 Recipient
|
||||||
Recipient: user2@domain.com, Message: Test, Email Sent: 17677cdfbe1146f4
|
Recipient: user2@domain.com, Message: Test, Email Sent: 17677cdfbe1146f4
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Conversation mode
|
||||||
|
|
||||||
|
To reply to an email and have Gmail recognize it in conversation mode for the original sender, you have to specify the
|
||||||
|
`References` and `In-Reply-to` headers with the `RFC822 Message ID` from the original message
|
||||||
|
and the `subject` from the original message.
|
||||||
|
```
|
||||||
|
gam user recipient@domain.com sendemail to sender@domain.com references "<CAAMabc...XYZQ@mail.gmail.com>" in-reply-to "<CAAMabc...XYZQ@mail.gmail.com>" subject "Re: Original subject" textmessage "Reply text"
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to have Gmail recognize the reply in conversation mode in the Sent folder of the original recipient,
|
||||||
|
you must include `threadid <String>`; you can get the 'threadId` with:
|
||||||
|
```
|
||||||
|
gam user recipient@domain.com show threads query "rfc822MsgId:<CAAMabc...XYZQ@mail.gmail.com>"
|
||||||
|
Getting all Messages that match query ((rfc822MsgId:<CAAMabc...XYZQ@mail.gmail.com>)) for recipient@domain.com
|
||||||
|
Got 1 Message that matched query ((rfc822MsgId:<CAAMabc...XYZQ@mail.gmail.com>)) for recipient@domain.com...
|
||||||
|
User: recipient@domain.com, Show 1 Thread
|
||||||
|
Thread: 19cfd414fe48430d
|
||||||
|
Message: 19cfd414fe48430d
|
||||||
|
...
|
||||||
|
|
||||||
|
gam user recipient@domain.com sendemail to sender@domain.com references "<CAAMabc...XYZQ@mail.gmail.com>" in-reply-to "<CAAMabc...XYZQ@mail.gmail.com>" subject "Re: Original subject" textmessage "Reply text" threadid 19cfd414fe48430d
|
||||||
|
```
|
||||||
|
As of version 7.36.03, GAM has a command to simplify this process.
|
||||||
|
```
|
||||||
|
gam <UserTypeEntity> sendreply
|
||||||
|
(((query <QueryGmail> [querytime<String> <Date>]*) [or|and])+) | (ids <MessageIDEntity>)
|
||||||
|
[replyto <EmailAddress>]
|
||||||
|
[subject <String>] [<MessageContent>] [html [<Boolean>]]
|
||||||
|
(attach <FileName> [charset <CharSet>])*
|
||||||
|
(embedimage <FileName> <String>)*
|
||||||
|
(<SMTPDateHeader> <Time>)* (<SMTPHeader> <String>)* (header <String> <String>)*
|
||||||
|
|
||||||
|
gam user recipient@domain.com sendreply query "rfc822MsgId:<CAAMabc...XYZQ@mail.gmail.com>" textmessage "Reply text"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -571,12 +571,12 @@ Get a list of Shared Drives/organizers.
|
|||||||
gam redirect csv ./SharedDriveOrganizers.csv print shareddriveorganizers includefileorganizers
|
gam redirect csv ./SharedDriveOrganizers.csv print shareddriveorganizers includefileorganizers
|
||||||
```
|
```
|
||||||
Get SharedDrive Drive file count and storage info; use one of the following for size information:
|
Get SharedDrive Drive file count and storage info; use one of the following for size information:
|
||||||
* `showsize` - 31549200951 - This is a byte count
|
* `showsize` - 31549200951 - This is a byte count; include `Size` in `csv_output_header_filter`
|
||||||
* `showsizeunits` - 31.55 GB - This is as shown in the Admin console
|
* `showsizeunits` - 31.55 GB - This is as shown in the Admin console; include `SizeUnits` in csv_output_header_filter
|
||||||
```
|
```
|
||||||
gam config csv_output_header_filter "id,name,Total,Size,Item cap" csv_input_row_filter "organizers:regex:^.+$"
|
gam config csv_output_header_filter "id,name,Total,Size,SizeUnits,Item cap" csv_input_row_filter "organizers:regex:^.+$"
|
||||||
redirect csv ./SharedDriveStorageInfo.csv multiprocess redirect stderr - multiprocess
|
redirect csv ./SharedDriveStorageInfo.csv multiprocess redirect stderr - multiprocess
|
||||||
csv ./SharedDriveOrganizers.csv gam user "~organizers" print filecounts select shareddriveid "~id" showsizeunits
|
csv ./SharedDriveOrganizers.csv gam user "~organizers" print filecounts select shareddriveid "~id" showsize showsizeunits
|
||||||
```
|
```
|
||||||
|
|
||||||
## Display all Shared Drives with a specific organizer
|
## Display all Shared Drives with a specific organizer
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -9,12 +9,13 @@
|
|||||||
|
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
To use these commands you add the 'Business Account Management API' to your project and update client authorization.
|
To use these commands you must add the 'Business Account Management API' to your project and update
|
||||||
|
service account authorization.
|
||||||
```
|
```
|
||||||
gam update project
|
gam update project
|
||||||
gam oauth create
|
gam user user@domain.com update serviceaccount
|
||||||
...
|
...
|
||||||
[*] 0) Business Account Management API
|
[*] 2) Business Account Management API
|
||||||
|
|
||||||
```
|
```
|
||||||
## Definitions
|
## Definitions
|
||||||
@@ -22,13 +23,13 @@ gam oauth create
|
|||||||
|
|
||||||
## Display Business Profile Accounts
|
## Display Business Profile Accounts
|
||||||
```
|
```
|
||||||
gam <UserItem> show businessprofileaccounts
|
gam <UserTypeEntity> show businessprofileaccounts
|
||||||
[type locationgroup|organization|personal|usergroup]
|
[type locationgroup|organization|personal|usergroup]
|
||||||
```
|
```
|
||||||
Gam displays the information as an indented list of keys and values.
|
Gam displays the information as an indented list of keys and values.
|
||||||
|
|
||||||
```
|
```
|
||||||
gam <UserItem> print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
gam <UserTypeEntity> print businessprofileaccounts [todrive <ToDriveAttribute>*]
|
||||||
[type locationgroup|organization|personal|usergroup]
|
[type locationgroup|organization|personal|usergroup]
|
||||||
```
|
```
|
||||||
Gam displays the information as columns of fields.
|
Gam displays the information as columns of fields.
|
||||||
@@ -37,9 +37,6 @@ gam user user@domain.com update serviceaccount
|
|||||||
[*] 11) Chat API - User Sections (supports readonly)
|
[*] 11) Chat API - User Sections (supports readonly)
|
||||||
|
|
||||||
```
|
```
|
||||||
`Chat API - User Sections` is in Developer Preview; you must have a the following variables set in `gam.cfg` to use these commands.
|
|
||||||
* `developer_preview_apis = chat`
|
|
||||||
* `developer_preview_api_key = <String>`
|
|
||||||
|
|
||||||
Added `use_chat_admin_access` Boolean variable to `gam.cfg`.
|
Added `use_chat_admin_access` Boolean variable to `gam.cfg`.
|
||||||
```
|
```
|
||||||
@@ -214,16 +211,14 @@ gam <UserTypeEntity> create chatspace
|
|||||||
[members <UserTypeEntity>]
|
[members <UserTypeEntity>]
|
||||||
[displayname <String>]
|
[displayname <String>]
|
||||||
[description <String>] [guidelines <String>]
|
[description <String>] [guidelines <String>]
|
||||||
[history <Boolean>]
|
|
||||||
[<ChatContent>]
|
[<ChatContent>]
|
||||||
[formatjson|returnidonly]
|
[formatjson|returnidonly]
|
||||||
```
|
```
|
||||||
For `type space`, the following apply:
|
For `type space`, the following apply:
|
||||||
* `members <UserTypeEntity>` - Optional, can not specify more that 20 users
|
* `members <UserTypeEntity>` - Optional, can not specify more than 20 users
|
||||||
* `displayname <String>` - Required
|
* `displayname <String>` - Required
|
||||||
* `description <String>` - Optional
|
* `description <String>` - Optional
|
||||||
* `guidelines <String>` - Optional
|
* `guidelines <String>` - Optional
|
||||||
* `history <Boolean>` - Optional
|
|
||||||
* `announcement|collaboration` - Initial permission settings; default is `collaboration`
|
* `announcement|collaboration` - Initial permission settings; default is `collaboration`
|
||||||
|
|
||||||
For `type groupchat`, the following apply:
|
For `type groupchat`, the following apply:
|
||||||
@@ -231,23 +226,60 @@ For `type groupchat`, the following apply:
|
|||||||
* `displayname <String>` - Ignored
|
* `displayname <String>` - Ignored
|
||||||
* `description <String>` - Optional
|
* `description <String>` - Optional
|
||||||
* `guidelines <String>` - Optional
|
* `guidelines <String>` - Optional
|
||||||
* `history <Boolean>` - Optional
|
|
||||||
|
|
||||||
For `type directmessage`, the following apply:
|
For `type directmessage`, the following apply:
|
||||||
* `members <UserTypeEntity>` - Required, must specify 1 user
|
* `members <UserTypeEntity>` - Required, must specify 1 user
|
||||||
* `displayname <String>` - Ignored
|
* `displayname <String>` - Ignored
|
||||||
* `description <String>` - Ignored
|
* `description <String>` - Ignored
|
||||||
* `guidelines <String>` - Ignored
|
* `guidelines <String>` - Ignored
|
||||||
* `history <Boolean>` - Optional
|
|
||||||
|
|
||||||
By default, Gam displays the information about the created chatspace as an indented list of keys and values.
|
By default, Gam displays the information about the created chatspace as an indented list of keys and values.
|
||||||
* `formatjson` - Display the fields in JSON format.
|
* `formatjson` - Display the fields in JSON format.
|
||||||
* `returnidonly` - Display the chatspace name only
|
* `returnidonly` - Display the chatspace name only
|
||||||
|
|
||||||
|
Alternately, you can display the information about the created chatspace as columns of fields.
|
||||||
|
* `csv [todrive <ToDriveAttribute>*]` - Write Chat Space information to a CSV file.
|
||||||
|
* `addcsvdata <FieldName> <String>` - Add additional columns of data from the command line to the output
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
Use the `<ChatContent>` option to send an initial message to the created chatspace.
|
Use the `<ChatContent>` option to send an initial message to the created chatspace.
|
||||||
|
|
||||||
By default, details about the chatmessage are displayed.
|
By default, details about the chatmessage are displayed.
|
||||||
|
* `formatjson` - Display the chat message name in JSON format.
|
||||||
* `returnidonly` - Display the chatmessage name only
|
* `returnidonly` - Display the chatmessage name only
|
||||||
|
* `csv` - The column `message.name` is added the CSV file output
|
||||||
|
|
||||||
|
### Bulk build chat spaces
|
||||||
|
You want to create Chat Spaces for use by users that don't currently have Chat enabled;
|
||||||
|
all commands will be run by a super admin.
|
||||||
|
|
||||||
|
Make a CSV file NewSpaces.csv with columns: displayName,manager,members
|
||||||
|
```
|
||||||
|
displayName,manager,members
|
||||||
|
Chat 123,user1@domain.com,user1@domain.com user2@domain.com user3@domain.com
|
||||||
|
Chat 456,user4@domain.com,user4@domain.com user5@domain.com user6@domain.com
|
||||||
|
```
|
||||||
|
The manager column specifies the member that will be updated to be a manager.
|
||||||
|
|
||||||
|
Create the spaces
|
||||||
|
```
|
||||||
|
gam redirect csv ./NewSpaceDetails.csv multiprocess csv NewSpaces.csv gam user admin@domain.com create chatspace type space collaboration displayname "~displayName" members "~members" csv addcsvdata manager "~manager"
|
||||||
|
```
|
||||||
|
|
||||||
|
Update the specified member from ROLE_MEMBER to ROLE_MANAGER
|
||||||
|
```
|
||||||
|
gam redirect stdout ./UpdateMemberToManager.txt multiprocess redirect stderr stdout csv NewSpaceDetails.csv gam user admin@domain.com update chatmember "~name" role manager user "~manager"
|
||||||
|
```
|
||||||
|
|
||||||
|
Delete the super admin from the space
|
||||||
|
```
|
||||||
|
gam redirect stdout ./DeleteAdmin.txt multiprocess redirect stderr stdout csv NewSpaceDetails.csv gam user admin@domain.com delete chatmember "~name" user admin@domain.com
|
||||||
|
```
|
||||||
|
|
||||||
### Update a user's chat space
|
### Update a user's chat space
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -140,7 +140,6 @@ gam <UserTypeEntity> copy drivefile <DriveFileEntity>
|
|||||||
(mappermissionsdomain <DomainName> <DomainName>)*
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
||||||
[sendemailifrequired [<Boolean>]]
|
[sendemailifrequired [<Boolean>]]
|
||||||
[verifyorganizer [<Boolean>]]
|
[verifyorganizer [<Boolean>]]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
```
|
```
|
||||||
The files/folders specified by `<DriveFileEntity>` are referred to as `source`, `target` refers to where those files are being copied.
|
The files/folders specified by `<DriveFileEntity>` are referred to as `source`, `target` refers to where those files are being copied.
|
||||||
The files/folders specified by `<DriveFileEntity>` are referred to as `top`; when a folder is being copied recursively, the files/folders that it contains are referred as `sub`.
|
The files/folders specified by `<DriveFileEntity>` are referred to as `top`; when a folder is being copied recursively, the files/folders that it contains are referred as `sub`.
|
||||||
@@ -590,7 +589,6 @@ gam <UserTypeEntity> move drivefile <DriveFileEntity> [newfilename <DriveFileNam
|
|||||||
[retainsourcefolders [<Boolean>]]
|
[retainsourcefolders [<Boolean>]]
|
||||||
[sendemailifrequired [<Boolean>]]
|
[sendemailifrequired [<Boolean>]]
|
||||||
[verifyorganizer [<Boolean>]]
|
[verifyorganizer [<Boolean>]]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
```
|
```
|
||||||
The files/folders specified by `<DriveFileEntity>` are referred to as `source`, `target` refers to where those files are being moved.
|
The files/folders specified by `<DriveFileEntity>` are referred to as `source`, `target` refers to where those files are being moved.
|
||||||
The files/folders specified by `<DriveFileEntity>` are referred to as `top`; when a folder is being moved, the files/folders that it contains are referred as `sub`.
|
The files/folders specified by `<DriveFileEntity>` are referred to as `top`; when a folder is being moved, the files/folders that it contains are referred as `sub`.
|
||||||
|
|||||||
@@ -719,7 +719,7 @@ gam <UserTypeEntity> print filecounts [todrive <ToDriveAttribute>*]
|
|||||||
[filenamematchpattern <REMatchPattern>]
|
[filenamematchpattern <REMatchPattern>]
|
||||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||||
[excludetrashed]
|
[excludetrashed]
|
||||||
[showsize|showsizeunits] [showmimetypesize]
|
[showsize] [showsizeunits] [showmimetypesize]
|
||||||
[showlastmodification] [pathdelimiter <Character>]
|
[showlastmodification] [pathdelimiter <Character>]
|
||||||
(addcsvdata <FieldName> <String>)*
|
(addcsvdata <FieldName> <String>)*
|
||||||
[summary none|only|plus] [summaryuser <String>]
|
[summary none|only|plus] [summaryuser <String>]
|
||||||
@@ -735,7 +735,7 @@ gam <UserTypeEntity> show filecounts
|
|||||||
[filenamematchpattern <REMatchPattern>]
|
[filenamematchpattern <REMatchPattern>]
|
||||||
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
<PermissionMatch>* [<PermissionMatchMode>] [<PermissionMatchAction>]
|
||||||
[excludetrashed]
|
[excludetrashed]
|
||||||
[showsize|showsizeunits] [showmimetypesize]
|
[showsize] [showsizeunits] [showmimetypesize]
|
||||||
[showlastmodification] [pathdelimiter <Character>]
|
[showlastmodification] [pathdelimiter <Character>]
|
||||||
[summary none|only|plus] [summaryuser <String>]
|
[summary none|only|plus] [summaryuser <String>]
|
||||||
```
|
```
|
||||||
@@ -749,8 +749,10 @@ When `continueoninvalidquery` is true, GAM prints an error message and proceeds
|
|||||||
as it does now. Of course, if the query really is invalid, you will get the message for every user.
|
as it does now. Of course, if the query really is invalid, you will get the message for every user.
|
||||||
|
|
||||||
The `showsize` option displays the total size (in bytes) of the files counted; e.g., `31549200951`.
|
The `showsize` option displays the total size (in bytes) of the files counted; e.g., `31549200951`.
|
||||||
|
With `print filecounts`, this will be in a column labelled `Size`.
|
||||||
|
|
||||||
The `showsizeunits` option displays the total size of the files counted with two decimal places and units; e.g., `31.55 GB`.
|
The `showsizeunits` option displays the total size of the files counted with two decimal places and units; e.g., `31.55 GB`.
|
||||||
|
With `print filecounts`, this will be in a column labelled `SizeUnits`.
|
||||||
|
|
||||||
The `showmimetypesize` option displays the total size (in bytes) of each MIME type counted.
|
The `showmimetypesize` option displays the total size (in bytes) of each MIME type counted.
|
||||||
|
|
||||||
@@ -1102,7 +1104,7 @@ gam <UserTypeEntity> print|show filelist [todrive <ToDriveAttribute>*]
|
|||||||
[excludetrashed]
|
[excludetrashed]
|
||||||
[maxfiles <Integer>] [nodataheaders <String>]
|
[maxfiles <Integer>] [nodataheaders <String>]
|
||||||
[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 [<Boolean>]] [pathdelimiter <Character>] [addpathstojson] [showdepth]] [buildtree]
|
||||||
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
[allfields|<DriveFieldName>*|(fields <DriveFieldNameList>)]
|
||||||
@@ -1308,7 +1310,7 @@ The `countsonly` suboption `showsource` adds additional columns `Source` and `Na
|
|||||||
|
|
||||||
The `countsonly` suboption `showsize` adds an additional column `Size` that indicates the total size (in bytes) of the files represented on the row; e.g., `31549200951`.
|
The `countsonly` suboption `showsize` adds an additional column `Size` that indicates the total size (in bytes) of the files represented on the row; e.g., `31549200951`.
|
||||||
|
|
||||||
The `countsonly` suboption `showsizeunits` adds an additional column `Size` that indicates the total size of the files represented on the row with two decimal places and units; e.g., `31.55 GB`.
|
The `countsonly` suboption `showsizeunits` adds an additional column `SizeUnits` that indicates the total size of the files represented on the row with two decimal places and units; e.g., `31.55 GB`.
|
||||||
|
|
||||||
The `countsonly` suboption `showmimetypesize` adds additional columns `<MimeType>:Size` that indicate the total size (in bytes) of each MIME type.
|
The `countsonly` suboption `showmimetypesize` adds additional columns `<MimeType>:Size` that indicate the total size (in bytes) of each MIME type.
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ Use [Users - Drive - Transfer](Users-Drive-Transfer) for more complex ownership
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> transfer ownership <DriveFileEntity> <UserItem>
|
gam <UserTypeEntity> transfer ownership <DriveFileEntity> <UserItem>
|
||||||
[<DriveFileParentAttribute>] [includetrashed] [norecursion [<Boolean>]]
|
[<DriveFileParentAttribute>] [includetrashed] [norecursion [<Boolean>]]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
(orderby <DriveOrderByFieldName> [ascending|descending])*
|
(orderby <DriveOrderByFieldName> [ascending|descending])*
|
||||||
[preview] [filepath] [pathdelimiter <Character>] [buildtree] [todrive <ToDriveAttribute>*]
|
[preview] [filepath] [pathdelimiter <Character>] [buildtree] [todrive <ToDriveAttribute>*]
|
||||||
```
|
```
|
||||||
@@ -101,7 +100,6 @@ gam <UserTypeEntity> claim ownership <DriveFileEntity>
|
|||||||
[skipids <DriveFileEntity>] [onlyusers|skipusers <UserTypeEntity>] [subdomains <DomainNameEntity>]
|
[skipids <DriveFileEntity>] [onlyusers|skipusers <UserTypeEntity>] [subdomains <DomainNameEntity>]
|
||||||
[restricted [<Boolean>]] [writerscanshare|writerscantshare [<Boolean>]]
|
[restricted [<Boolean>]] [writerscanshare|writerscantshare [<Boolean>]]
|
||||||
[keepuser | (retainrole reader|commenter|writer|editor|none)] [noretentionmessages]
|
[keepuser | (retainrole reader|commenter|writer|editor|none)] [noretentionmessages]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
(orderby <DriveOrderByFieldName> [ascending|descending])*
|
(orderby <DriveOrderByFieldName> [ascending|descending])*
|
||||||
[preview] [filepath] [pathdelimiter <Character>] [buildtree] [todrive <ToDriveAttribute>*]
|
[preview] [filepath] [pathdelimiter <Character>] [buildtree] [todrive <ToDriveAttribute>*]
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ By default, when an ACL is created, GAM outputs details of the ACL as indented k
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> update drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
gam <UserTypeEntity> update drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
||||||
(role <DriveFileACLRole>) [expiration <Time>] [removeexpiration [<Boolean>]]
|
(role <DriveFileACLRole>) [expiration <Time>] [removeexpiration [<Boolean>]]
|
||||||
[updatesheetprotectedranges [<Boolean>]] [enforceexpansiveaccess [<Boolean>]]
|
[updatesheetprotectedranges [<Boolean>]]
|
||||||
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
[showtitles] [nodetails|(csv [todrive <ToDriveAttribute>*] [formatjson [quotechar <Character>]])]
|
||||||
```
|
```
|
||||||
There is no change of parents when a new user is updated to be a file's owner.
|
There is no change of parents when a new user is updated to be a file's owner.
|
||||||
@@ -236,10 +236,7 @@ The option `updatesheetprotectedranges` only applies to items in `<DriveFileEnti
|
|||||||
* ACLs with role reader or commenter will be removed from existing protected ranges
|
* ACLs with role reader or commenter will be removed from existing protected ranges
|
||||||
* ACLs with role writer or higher will be added to existing protected ranges
|
* ACLs with role writer or higher will be added to existing protected ranges
|
||||||
|
|
||||||
`enforceexpansiveaccess` defaults to the value of `gam.cfg/enforce_expansive_access` that controls
|
Inherited ACLs can not be updated.
|
||||||
the ability to update inherited ACLs.
|
|
||||||
* False - Inherited ACLs can be updated
|
|
||||||
* True = Inherited ACLs can not be updated
|
|
||||||
|
|
||||||
By default, the file ID is displayed in the output; to see the file name, use the `showtitles`
|
By default, the file ID is displayed in the output; to see the file name, use the `showtitles`
|
||||||
option; this requires an additional API call per file.
|
option; this requires an additional API call per file.
|
||||||
@@ -251,7 +248,7 @@ By default, when an ACL is updated, GAM outputs details of the ACL as indented k
|
|||||||
### Delete
|
### Delete
|
||||||
```
|
```
|
||||||
gam <UserTypeEntity> delete|del drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
gam <UserTypeEntity> delete|del drivefileacl <DriveFileEntity> <DriveFilePermissionIDorEmail>
|
||||||
[updatesheetprotectedranges [<Boolean>]] [enforceexpansiveaccess [<Boolean>]]
|
[updatesheetprotectedranges [<Boolean>]]
|
||||||
[showtitles]
|
[showtitles]
|
||||||
```
|
```
|
||||||
The option `updatesheetprotectedranges` only applies to items in `<DriveFileEntity>` that are Google Sheets.
|
The option `updatesheetprotectedranges` only applies to items in `<DriveFileEntity>` that are Google Sheets.
|
||||||
@@ -261,10 +258,7 @@ The option `updatesheetprotectedranges` only applies to items in `<DriveFileEnti
|
|||||||
* Sheet Protected Ranges are updated to reflect the deleted ACL; additional API calls are required.
|
* Sheet Protected Ranges are updated to reflect the deleted ACL; additional API calls are required.
|
||||||
* ACLs with any role will be removed from existing protected ranges
|
* ACLs with any role will be removed from existing protected ranges
|
||||||
|
|
||||||
`enforceexpansiveaccess` defaults to the value of `gam.cfg/enforce_expansive_access` that controls
|
Inherited ACLs can not be deleted.
|
||||||
the ability to delete inherited ACLs.
|
|
||||||
* False - Inherited ACLs can be deleted
|
|
||||||
* True = Inherited ACLs can not be deleted
|
|
||||||
|
|
||||||
By default, the file ID is displayed in the output; to see the file name, use the `showtitles`
|
By default, the file ID is displayed in the output; to see the file name, use the `showtitles`
|
||||||
option; this requires an additional API call per file.
|
option; this requires an additional API call per file.
|
||||||
@@ -306,12 +300,8 @@ When adding permissions from JSON data, permissions with `deleted` true are neve
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> delete permissions <DriveFileEntity> <DriveFilePermissionIDEntity>
|
gam <UserTypeEntity> delete permissions <DriveFileEntity> <DriveFilePermissionIDEntity>
|
||||||
<PermissionMatch>* [<PermissionMatchAction>]
|
<PermissionMatch>* [<PermissionMatchAction>]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
```
|
```
|
||||||
`enforceexpansiveaccess` defaults to the value of `gam.cfg/enforce_expansive_access` that controls
|
Inherited ACLs can not be deleted.
|
||||||
the ability to delete inherited ACLs.
|
|
||||||
* False - Inherited ACLs can be deleted
|
|
||||||
* True = Inherited ACLs can not be deleted
|
|
||||||
|
|
||||||
When deleting permissions from JSON data, permissions with role `owner` true are never processed.
|
When deleting permissions from JSON data, permissions with role `owner` true are never processed.
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ gam <UserTypeEntity> transfer drive <UserItem> [select <DriveFileEntity>]
|
|||||||
[noretentionmessages]
|
[noretentionmessages]
|
||||||
[nonowner_retainrole reader|commenter|writer|editor|contentmanager|fileorganizer|current|none]
|
[nonowner_retainrole reader|commenter|writer|editor|contentmanager|fileorganizer|current|none]
|
||||||
[nonowner_targetrole reader|commenter|writer|editor|contentmanager|fileorganizer|current|none|source]
|
[nonowner_targetrole reader|commenter|writer|editor|contentmanager|fileorganizer|current|none|source]
|
||||||
[enforceexpansiveaccess [<Boolean>]]
|
|
||||||
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
(orderby <DriveFileOrderByFieldName> [ascending|descending])*
|
||||||
[preview] [todrive <ToDriveAttribute>*]
|
[preview] [todrive <ToDriveAttribute>*]
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Users - Tokens
|
# Users - Tokens
|
||||||
- [API documentation](#api-documentation)
|
- [API documentation](#api-documentation)
|
||||||
|
- [Get Google Cloud organization ID for your workspace](#get-google-cloud-organization-id-for-your-workspace)
|
||||||
- [Definitions](#definitions)
|
- [Definitions](#definitions)
|
||||||
- [Delete a user's token](#delete-a-users-token)
|
- [Delete a user's token](#delete-a-users-token)
|
||||||
- [Display individual user's tokens](#display-individual-users-tokens)
|
- [Display individual user's tokens](#display-individual-users-tokens)
|
||||||
@@ -9,6 +10,15 @@
|
|||||||
## API documentation
|
## API documentation
|
||||||
* [Directory API - Tokens](https://developers.google.com/admin-sdk/directory/reference/rest/v1/tokens)
|
* [Directory API - Tokens](https://developers.google.com/admin-sdk/directory/reference/rest/v1/tokens)
|
||||||
|
|
||||||
|
## Get Google Cloud organization ID for your workspace
|
||||||
|
This ID is used by `gam print|show token gcpdetails`; to eliminate additional API calls,
|
||||||
|
you can get the value and store it in the `gam.cfg/gcp_org_id` variable.
|
||||||
|
```
|
||||||
|
$ gam info gcporgid
|
||||||
|
organizations/906207637890
|
||||||
|
$ gam config gcp_org_id organizations/906207637890 save
|
||||||
|
```
|
||||||
|
|
||||||
## Definitions
|
## Definitions
|
||||||
* [`<UserTypeEntity>`](Collections-of-Users)
|
* [`<UserTypeEntity>`](Collections-of-Users)
|
||||||
|
|
||||||
@@ -23,14 +33,18 @@ gam <UserTypeEntity> delete|del token|tokens clientid <ClientID>
|
|||||||
```
|
```
|
||||||
gam <UserTypeEntity> print tokens|token [todrive <ToDriveAttributes>*] [clientid <ClientID>]
|
gam <UserTypeEntity> print tokens|token [todrive <ToDriveAttributes>*] [clientid <ClientID>]
|
||||||
[orderby clientid|id|appname|displaytext] [delimiter <Character>]
|
[orderby clientid|id|appname|displaytext] [delimiter <Character>]
|
||||||
|
[gcpdetails]
|
||||||
gam <UserTypeEntity> show tokens|token|3lo|oauth [clientid <ClientID>]
|
gam <UserTypeEntity> show tokens|token|3lo|oauth [clientid <ClientID>]
|
||||||
[orderby clientid|id|appname|displaytext]
|
[orderby clientid|id|appname|displaytext]
|
||||||
|
[gcpdetails]
|
||||||
gam print tokens|token [todrive <ToDriveAttributes>*] [clientid <ClientID>]
|
gam print tokens|token [todrive <ToDriveAttributes>*] [clientid <ClientID>]
|
||||||
[orderby clientid|id|appname|displaytext] [delimiter <Character>]
|
[orderby clientid|id|appname|displaytext] [delimiter <Character>]
|
||||||
[<UserTypeEntity>]
|
[<UserTypeEntity>]
|
||||||
|
[gcpdetails]
|
||||||
gam show tokens|token [clientid <ClientID>]
|
gam show tokens|token [clientid <ClientID>]
|
||||||
[orderby clientid|id|appname|displaytext] [delimiter <Character>]
|
[orderby clientid|id|appname|displaytext] [delimiter <Character>]
|
||||||
[<UserTypeEntity>]
|
[<UserTypeEntity>]
|
||||||
|
[gcpdetails]
|
||||||
```
|
```
|
||||||
By default, all client tokens for a user are displayed, use `clientid <ClientID>` to display a specific client token.
|
By default, all client tokens for a user are displayed, use `clientid <ClientID>` to display a specific client token.
|
||||||
|
|
||||||
@@ -38,6 +52,9 @@ For each user, select the order of token presentation:
|
|||||||
* `orderby clientid|id` - Display each user's tokens ordered by Client ID
|
* `orderby clientid|id` - Display each user's tokens ordered by Client ID
|
||||||
* `orderby appname|displaytext` - Display each user's tokens ordered by App Name
|
* `orderby appname|displaytext` - Display each user's tokens ordered by App Name
|
||||||
|
|
||||||
|
Use `gcpdetails` to get project information about the client; you get the project number
|
||||||
|
and whether it is an internal project. In order to accurately determine if a project is internal, your GAM admin user must have at least the `Browser` [IAM role for the entire GCP organization](https://docs.cloud.google.com/iam/docs/roles-permissions/browser) which allows them to lookup basic metadata about your organization projects. If your admin is not able to see all GCP projects in your organization results may not be accurate.
|
||||||
|
|
||||||
For `print tokens`:
|
For `print tokens`:
|
||||||
* `delimiter <Character>` - Separate `scopes` entries with `<Character>`; the default value is `csv_output_field_delimiter` from `gam.cfg`.
|
* `delimiter <Character>` - Separate `scopes` entries with `<Character>`; the default value is `csv_output_field_delimiter` from `gam.cfg`.
|
||||||
|
|
||||||
|
|||||||
@@ -329,6 +329,20 @@ You can remove all instances of a `<UserMultiAttribute>` with `<UserClearAttribu
|
|||||||
<UserMultiAttribute>|
|
<UserMultiAttribute>|
|
||||||
<UserClearAttribute>
|
<UserClearAttribute>
|
||||||
```
|
```
|
||||||
|
```
|
||||||
|
<UserMultiAttributeFilterName> ::=
|
||||||
|
address|addresses|
|
||||||
|
externalid|externalids|
|
||||||
|
im|ims|
|
||||||
|
keyword|keywords|
|
||||||
|
location|locations|
|
||||||
|
orgainzation|organizations|
|
||||||
|
otheremail|otheremails|
|
||||||
|
phone|phones|
|
||||||
|
relation|relations|
|
||||||
|
website|websites
|
||||||
|
```
|
||||||
|
|
||||||
## Admin Console User Info
|
## Admin Console User Info
|
||||||
When defining a user in the admin console, there is a section labelled `Employee information` with the following items:
|
When defining a user in the admin console, there is a section labelled `Employee information` with the following items:
|
||||||
* `Employee ID`
|
* `Employee ID`
|
||||||
@@ -652,7 +666,7 @@ If the mailbox is setup, a zero return code is returned; if the retries are exha
|
|||||||
```
|
```
|
||||||
gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
||||||
[verifynotinvitable|alwaysevict] [noactionifalias]
|
[verifynotinvitable|alwaysevict] [noactionifalias]
|
||||||
[updateprimaryemail <RESearchPattern> <RESubstitution>]
|
[updateprimaryemail <RESearchPattern> <RESubstitution> [preview]]
|
||||||
[updateoufromgroup <FileName> [charset <Charset>]
|
[updateoufromgroup <FileName> [charset <Charset>]
|
||||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||||
@@ -674,7 +688,7 @@ gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
|||||||
[logpassword <FileName>]
|
[logpassword <FileName>]
|
||||||
gam update users <UserTypeEntity> [ignorenullpassword] <UserAttribute>*
|
gam update users <UserTypeEntity> [ignorenullpassword] <UserAttribute>*
|
||||||
[verifynotinvitable|alwaysevict] [noactionifalias]
|
[verifynotinvitable|alwaysevict] [noactionifalias]
|
||||||
[updateprimaryemail <RESearchPattern> <RESubstitution>]
|
[updateprimaryemail <RESearchPattern> <RESubstitution> [preview]]
|
||||||
[updateoufromgroup <FileName> [charset <Charset>]
|
[updateoufromgroup <FileName> [charset <Charset>]
|
||||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||||
@@ -695,7 +709,7 @@ gam update users <UserTypeEntity> [ignorenullpassword] <UserAttribute>*
|
|||||||
[logpassword <FileName>]
|
[logpassword <FileName>]
|
||||||
gam <UserTypeEntity> update users [ignorenullpassword] <UserAttribute>*
|
gam <UserTypeEntity> update users [ignorenullpassword] <UserAttribute>*
|
||||||
[verifynotinvitable|alwaysevict] [noactionifalias]
|
[verifynotinvitable|alwaysevict] [noactionifalias]
|
||||||
[updateprimaryemail <RESearchPattern>`< <RESubstitution>]
|
[updateprimaryemail <RESearchPattern> <RESubstitution> [preview]]
|
||||||
[updateoufromgroup <FileName> [charset <Charset>]
|
[updateoufromgroup <FileName> [charset <Charset>]
|
||||||
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
[columndelimiter <Character>] [noescapechar <Boolean>] [quotechar <Character>]
|
||||||
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
[fields <FieldNameList>] [keyfield <FieldName>] [datafield <FieldName>]]
|
||||||
@@ -798,16 +812,18 @@ You can simply update a user's primary email address with the `primaryemail` opt
|
|||||||
```
|
```
|
||||||
gam update user userold@domain.com primaryemail usernew@domain.com
|
gam update user userold@domain.com primaryemail usernew@domain.com
|
||||||
```
|
```
|
||||||
The `updateprimaryemail <RESearchPattern> <RESubstitution>` option allows modification of the user's current primary email address.
|
The `updateprimaryemail <RESearchPattern> <RESubstitution> [preview]` option allows modification of the user's current primary email address.
|
||||||
|
|
||||||
For example, to change the domain of a set of users from the current domain to newdomain.com:
|
For example, to change the domain of a set of users from the current domain.com to newdomain.com:
|
||||||
```
|
```
|
||||||
gam ou /Path/To/Ou update user updateprimaryemail "^(.+)@.*$" "\1@newdomain.com"
|
gam ou /Path/To/Ou update user updateprimaryemail "^(.+)@domain.com$" "\1@newdomain.com"
|
||||||
```
|
```
|
||||||
To change graduating students email addresses from flastname@domain.com to flastname_grad@domain.com:
|
To change graduating students email addresses from flastname@domain.com to flastname_grad@domain.com:
|
||||||
```
|
```
|
||||||
gam ou /Path/To/Ou update user updateprimaryemail "^(.+)@(.+)$" "\1_grad@\2"
|
gam ou /Path/To/Ou update user updateprimaryemail "^(.+)@(.+)$" "\1_grad@\2"
|
||||||
```
|
```
|
||||||
|
The `preview` option allows verification of the primary email address changes before commiting the changes.
|
||||||
|
|
||||||
If the user's current primary email address does not match the <REMatchPattern> then no modification is made.
|
If the user's current primary email address does not match the <REMatchPattern> then no modification is made.
|
||||||
|
|
||||||
## Update a user's attributes with JSON data
|
## Update a user's attributes with JSON data
|
||||||
@@ -971,6 +987,8 @@ gam info user [<UserItem>]
|
|||||||
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
||||||
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
||||||
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
||||||
|
(filtermultiattrtype <UserMultiAttributeFilterName> <String>)*
|
||||||
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
### Display information about multiple users
|
### Display information about multiple users
|
||||||
@@ -984,6 +1002,8 @@ gam info users <UserTypeEntity>
|
|||||||
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
||||||
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
||||||
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
||||||
|
(filtermultiattrtype <UserMultiAttributeFilterName> <String>)*
|
||||||
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[formatjson]
|
[formatjson]
|
||||||
gam <UserTypeEntity> info users
|
gam <UserTypeEntity> info users
|
||||||
[quick]
|
[quick]
|
||||||
@@ -994,6 +1014,8 @@ gam <UserTypeEntity> info users
|
|||||||
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
[(products|product <ProductIDList>)|(skus|sku <SKUIDList>)]
|
||||||
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
[noschemas|allschemas|(schemas|custom|customschemas <SchemaNameList>)]
|
||||||
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
[userview] <UserFieldName>* [fields <UserFieldNameList>]
|
||||||
|
(filtermultiattrtype <UserMultiAttributeFilterName> <String>)*
|
||||||
|
(filtermultiattrcustom <UserMultiAttributeFilterName> <String>)*
|
||||||
[formatjson]
|
[formatjson]
|
||||||
```
|
```
|
||||||
For `info users`, unlike all other GAM commands, a `<UserTypeEntity>` value of `all users` is actually `all users_ns_susp` not `all users_ns`.
|
For `info users`, unlike all other GAM commands, a `<UserTypeEntity>` value of `all users` is actually `all users_ns_susp` not `all users_ns`.
|
||||||
@@ -1031,6 +1053,11 @@ By default, Gam displays fields that only an adminstrator can view.
|
|||||||
By default, Gam displays all fields for a user.
|
By default, Gam displays all fields for a user.
|
||||||
* `<UserFieldName>* [fields <UserFieldNameList>]` - Only display selected fields.
|
* `<UserFieldName>* [fields <UserFieldNameList>]` - Only display selected fields.
|
||||||
|
|
||||||
|
By default, all instances of `<UserMultiAttribute>` are displayed, use these options to only display instances
|
||||||
|
of a specified `type` or `customType`.
|
||||||
|
* `filtermultiattrtype <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `type` is `<String>`
|
||||||
|
* `filtermultiattrcustom <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `customType` is `<String>`
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
@@ -1062,6 +1089,8 @@ gam print users [todrive <ToDriveAttribute>*]
|
|||||||
[schemas|custom|customschemas all|<SchemaNameList>]
|
[schemas|custom|customschemas all|<SchemaNameList>]
|
||||||
[emailpart|emailparts|username]
|
[emailpart|emailparts|username]
|
||||||
[userview] [allfields|basic|full|(<UserFieldName>*|fields <UserFieldNameList>)]
|
[userview] [allfields|basic|full|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||||
|
(filtermultiattrtype <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>] [aliasmatchpattern <REMatchPattern>]
|
||||||
@@ -1088,6 +1117,8 @@ gam print users [todrive <ToDriveAttribute>*] select <UserTypeEntity>
|
|||||||
[schemas|custom|customschemas all|<SchemaNameList>]
|
[schemas|custom|customschemas all|<SchemaNameList>]
|
||||||
[emailpart|emailparts|username]
|
[emailpart|emailparts|username]
|
||||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||||
|
(filtermultiattrtype <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>] [aliasmatchpattern <REMatchPattern>]
|
||||||
@@ -1102,6 +1133,8 @@ gam <UserTypeEntity> print users [todrive <ToDriveAttribute>*]
|
|||||||
[schemas|custom|customschemas all|<SchemaNameList>]
|
[schemas|custom|customschemas all|<SchemaNameList>]
|
||||||
[emailpart|emailparts|username]
|
[emailpart|emailparts|username]
|
||||||
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
[userview] [basic|full|allfields|(<UserFieldName>*|fields <UserFieldNameList>)]
|
||||||
|
(filtermultiattrtype <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>] [aliasmatchpattern <REMatchPattern>]
|
||||||
@@ -1137,6 +1170,11 @@ By default, Gam displays only the primary email address for each user.
|
|||||||
* `schemas|custom all` - Display custom schema information for all schemas.
|
* `schemas|custom all` - Display custom schema information for all schemas.
|
||||||
* `schemas|custom <SchemaNameList>` - Display all fields or selected fields of the specified custom schemas
|
* `schemas|custom <SchemaNameList>` - Display all fields or selected fields of the specified custom schemas
|
||||||
|
|
||||||
|
By default, all instances of `<UserMultiAttribute>` are displayed, use these options to only display instances
|
||||||
|
of a specified `type` or `customType`.
|
||||||
|
* `filtermultiattrtype <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `type` is `<String>`
|
||||||
|
* `filtermultiattrcustom <UserMultiAttributeFilterName> <String>` - Display `<UserMultiAttributeFilterName>` if its `customType` is `<String>`
|
||||||
|
|
||||||
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>`.
|
||||||
|
|
||||||
|
|||||||
@@ -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.35.02 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.41.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.3 64-bit final
|
Python 3.14.4 64-bit final
|
||||||
macOS Tahoe 26.3.1 arm64
|
macOS Tahoe 26.4.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.35.02 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.41.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.3 64-bit final
|
Python 3.14.4 64-bit final
|
||||||
macOS Tahoe 26.3.1 arm64
|
macOS Tahoe 26.4.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,15 +27,15 @@ Your system time differs from www.googleapis.com by less than 1 second
|
|||||||
Print the current version of Gam with extended details and SSL information
|
Print the current version of Gam with extended details and SSL information
|
||||||
```
|
```
|
||||||
gam version extended
|
gam version extended
|
||||||
GAM 7.35.02 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.41.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.3 64-bit final
|
Python 3.14.4 64-bit final
|
||||||
macOS Tahoe 26.3.1 arm64
|
macOS Tahoe 26.4.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.1 27 Jan 2026
|
OpenSSL 4.0.0 14 Apr 2026
|
||||||
arrow 1.4.0
|
arrow 1.4.0
|
||||||
chardet 5.2.0
|
chardet 5.2.0
|
||||||
cryptography 46.0.5
|
cryptography 46.0.5
|
||||||
@@ -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.35.02
|
Latest: 7.41.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.35.02
|
7.41.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.35.02 - https://github.com/GAM-team/GAM
|
GAM 7.41.01 - https://github.com/GAM-team/GAM
|
||||||
GAM Team <google-apps-manager@googlegroups.com>
|
GAM Team <google-apps-manager@googlegroups.com>
|
||||||
Python 3.14.3 64-bit final
|
Python 3.14.4 64-bit final
|
||||||
macOS Tahoe 26.3.1 arm64
|
macOS Tahoe 26.4.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
|
||||||
|
|||||||
@@ -70,7 +70,6 @@ Client Access
|
|||||||
* [Administrators](Administrators)
|
* [Administrators](Administrators)
|
||||||
* [Alert Center](Alert-Center)
|
* [Alert Center](Alert-Center)
|
||||||
* [Aliases](Aliases)
|
* [Aliases](Aliases)
|
||||||
* [Business Account Management](Business-Account-Management)
|
|
||||||
* [Calendars](Calendars)
|
* [Calendars](Calendars)
|
||||||
* [Calendars - Access](Calendars-Access)
|
* [Calendars - Access](Calendars-Access)
|
||||||
* [Calendars - Events](Calendars-Events)
|
* [Calendars - Events](Calendars-Events)
|
||||||
@@ -140,6 +139,7 @@ Special Service Account Access
|
|||||||
|
|
||||||
Service Account Access
|
Service Account Access
|
||||||
* [Users - Analytics Admin](Users-Analytics-Admin)
|
* [Users - Analytics Admin](Users-Analytics-Admin)
|
||||||
|
* [Users - Business Account Management](Users-Business-Account-Management)
|
||||||
* [Users - Calendars](Users-Calendars)
|
* [Users - Calendars](Users-Calendars)
|
||||||
* [Users - Calendars - Access](Users-Calendars-Access)
|
* [Users - Calendars - Access](Users-Calendars-Access)
|
||||||
* [Users - Calendars - Events](Users-Calendars-Events)
|
* [Users - Calendars - Events](Users-Calendars-Events)
|
||||||
|
|||||||
@@ -355,17 +355,6 @@ enable_dasa
|
|||||||
admin_email, customer_id and domain must be set when enable_dasa is True,
|
admin_email, customer_id and domain must be set when enable_dasa is True,
|
||||||
customer_id may not be set to my_customer
|
customer_id may not be set to my_customer
|
||||||
Signal file: OldGamPath/enabledasa.txt
|
Signal file: OldGamPath/enabledasa.txt
|
||||||
enforce_expansive_access
|
|
||||||
The default value for option `enforceexpansiveaccess` in all commands that delete or update
|
|
||||||
drive file ACLs/permissions.
|
|
||||||
gam <UserTypeEntity> delete permissions
|
|
||||||
gam <UserTypeEntity> delete drivefileacl
|
|
||||||
gam <UserTypeEntity> update drivefileacl
|
|
||||||
gam <UserTypeEntity> copy drivefile
|
|
||||||
gam <UserTypeEntity> move drivefile
|
|
||||||
gam <UserTypeEntity> transfer ownership
|
|
||||||
gam <UserTypeEntity> claim ownership
|
|
||||||
Default: True
|
|
||||||
event_max_results
|
event_max_results
|
||||||
When retrieving lists of Calendar events from API,
|
When retrieving lists of Calendar events from API,
|
||||||
how many should be retrieved in each API call
|
how many should be retrieved in each API call
|
||||||
@@ -375,6 +364,21 @@ extra_args
|
|||||||
Path to extra_args.txt
|
Path to extra_args.txt
|
||||||
Default: Blank
|
Default: Blank
|
||||||
Data file: extra_args.txt
|
Data file: extra_args.txt
|
||||||
|
gcp_org_id
|
||||||
|
The Google Cloud organization ID for your workspace.
|
||||||
|
Default: Blank
|
||||||
|
This value is used by the following commands;
|
||||||
|
by setting the value, additional API calls are eliminated.
|
||||||
|
gam create project
|
||||||
|
gam create gcpfolder
|
||||||
|
gam create|update|delete caalevel
|
||||||
|
gam print|show caalevels
|
||||||
|
gam print|show tokens gcpdetails
|
||||||
|
|
||||||
|
You can get and save the `gcp_org_id` value with these commands:
|
||||||
|
$ gam info gcporgid
|
||||||
|
organizations/906207637890
|
||||||
|
$ gam config gcp_org_id organizations/906207637890 save
|
||||||
gmail_cse_incert_dir
|
gmail_cse_incert_dir
|
||||||
Directory for the S/MIME certificate files used by Gmail Client Side Encryption.
|
Directory for the S/MIME certificate files used by Gmail Client Side Encryption.
|
||||||
Default: Blank
|
Default: Blank
|
||||||
@@ -1008,7 +1012,6 @@ drive_max_results = 1000
|
|||||||
email_batch_size = 50
|
email_batch_size = 50
|
||||||
enable_dasa = false
|
enable_dasa = false
|
||||||
enable_gcloud_reauth = false
|
enable_gcloud_reauth = false
|
||||||
enforce_expansive_access = true
|
|
||||||
event_max_results = 250
|
event_max_results = 250
|
||||||
extra_args = ''
|
extra_args = ''
|
||||||
gmail_cse_incert_dir = ''
|
gmail_cse_incert_dir = ''
|
||||||
|
|||||||
Reference in New Issue
Block a user