mirror of
https://github.com/GAM-team/GAM.git
synced 2026-06-29 18:31:38 +00:00
Compare commits
83 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
93
.github/workflows/build.yml
vendored
93
.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-ssl3 no-tls1 no-tls1_1 no-dtls no-comp no-srp no-psk no-engine no-dynamic-engine no-nextprotoneg no-weak-ssl-ciphers no-idea no-seed no-camellia no-sm2 no-sm3 no-sm4 no-rc2 no-rc4 no-rc5 no-md2 no-md4 no-cast no-des no-shared no-tests -O3
|
||||||
OPENSSL_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 }}-20260408-01
|
||||||
|
|
||||||
- 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,10 +342,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}"
|
||||||
#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
|
||||||
"${PERL}" ./Configure --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" $OPENSSL_CONFIG_OPTS
|
"${PERL}" ./Configure --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" $OPENSSL_CONFIG_OPTS
|
||||||
|
|
||||||
@@ -352,10 +355,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 +363,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'
|
||||||
@@ -391,7 +393,12 @@ jobs:
|
|||||||
cd "${GITHUB_WORKSPACE}/src"
|
cd "${GITHUB_WORKSPACE}/src"
|
||||||
git clone https://github.com/python/cpython.git
|
git clone https://github.com/python/cpython.git
|
||||||
cd "${PYTHON_SOURCE_PATH}"
|
cd "${PYTHON_SOURCE_PATH}"
|
||||||
export LATEST_STABLE_TAG=$(git tag --list | grep -v a | grep -v rc | grep -v b | sort -Vr | head -n1)
|
if [[ "${RUNNER_OS}" == "Linux" ]]; then
|
||||||
|
# TEMP lock Linux to 3.14.3 until the PyInstaller multiprocess issues are resolved.
|
||||||
|
export LATEST_STABLE_TAG="v3.14.3"
|
||||||
|
else
|
||||||
|
export LATEST_STABLE_TAG=$(git tag --list | grep -v a | grep -v rc | grep -v b | sort -Vr | head -n1)
|
||||||
|
fi
|
||||||
git checkout "${LATEST_STABLE_TAG}"
|
git checkout "${LATEST_STABLE_TAG}"
|
||||||
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 +412,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 +461,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 +491,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 +559,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'
|
||||||
@@ -875,7 +888,7 @@ jobs:
|
|||||||
exit $exit_code # Hard fail the step for unapproved errors
|
exit $exit_code # Hard fail the step for unapproved errors
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
export gam_user="gam-gha-${JID}@pdl.jaylee.us"
|
export gam_user="gam-gha-${JID}@pdl.jaylee.us"
|
||||||
echo "gam_user=${gam_user}" >> $GITHUB_ENV
|
echo "gam_user=${gam_user}" >> $GITHUB_ENV
|
||||||
run_gam config customer_id "C03uzfv2s" save
|
run_gam config customer_id "C03uzfv2s" save
|
||||||
@@ -927,6 +940,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 +952,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
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -3544,6 +3549,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
|
||||||
@@ -3882,6 +3891,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>]
|
||||||
@@ -4109,6 +4119,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 +4346,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 +4673,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 +4939,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 +5211,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 +5224,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 +5252,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 +5763,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|
|
||||||
@@ -6514,7 +6530,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>]
|
||||||
@@ -6954,7 +6971,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>]]
|
||||||
@@ -6979,7 +6995,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]
|
||||||
@@ -7086,10 +7101,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]
|
||||||
@@ -7213,7 +7228,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>*]
|
||||||
@@ -7222,7 +7236,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>*]
|
||||||
@@ -7230,7 +7243,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]
|
||||||
@@ -8905,19 +8917,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,163 @@
|
|||||||
|
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
|
7.36.00
|
||||||
|
|
||||||
Added options `filtermultiattrtype` and filtermultiattrcustom` to `gam info user` and
|
Added options `filtermultiattrtype` and filtermultiattrcustom` to `gam info user` and
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -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,21 @@ SCOPELESS_APIS = {
|
|||||||
SERVICEACCOUNTLOOKUP,
|
SERVICEACCOUNTLOOKUP,
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Scopes not in the discovery doc that are still valid for the API.
|
||||||
|
EXTRA_SCOPES = {
|
||||||
|
BUSINESSACCOUNTMANAGEMENT: ['https://www.googleapis.com/auth/business.manage'],
|
||||||
|
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 +264,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'},
|
||||||
@@ -305,9 +320,8 @@ READONLY = ['readonly',]
|
|||||||
_CLIENT_SCOPES = [
|
_CLIENT_SCOPES = [
|
||||||
{'name': 'Business Account Management API',
|
{'name': 'Business Account Management API',
|
||||||
'api': BUSINESSACCOUNTMANAGEMENT,
|
'api': BUSINESSACCOUNTMANAGEMENT,
|
||||||
'subscopes': [],
|
|
||||||
'offByDefault': True,
|
'offByDefault': True,
|
||||||
'scope': BUSINESSACCOUNTMANAGEMENT_SCOPE},
|
'scope': EXTRA_SCOPES[BUSINESSACCOUNTMANAGEMENT]},
|
||||||
{'name': 'Calendar API',
|
{'name': 'Calendar API',
|
||||||
'api': CALENDAR,
|
'api': CALENDAR,
|
||||||
'subscopes': READONLY,
|
'subscopes': READONLY,
|
||||||
@@ -316,21 +330,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 +353,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 +380,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 +412,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 +420,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 +455,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 +475,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 +482,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 +502,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 +538,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,11 +564,9 @@ 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': 'Calendar API',
|
{'name': 'Calendar API',
|
||||||
'api': CALENDAR,
|
'api': CALENDAR,
|
||||||
@@ -611,11 +603,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 +625,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 +644,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 +652,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 +659,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 +675,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 +704,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 +732,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 +755,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 +813,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,11 +841,11 @@ 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
|
||||||
|
|
||||||
requiredAPIs = []
|
requiredAPIs = []
|
||||||
for scope in scopesList:
|
for scope in scopesList:
|
||||||
for cscope in _CLIENT_SCOPES:
|
for cscope in _CLIENT_SCOPES:
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -239,6 +240,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 +261,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
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -10,10 +10,189 @@ 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.35.04
|
### 7.39.08
|
||||||
|
|
||||||
Fixed bug in `gam create feature name <Name>` where the result was incorrectly shown as
|
Upgraded to Python 3.14.4.
|
||||||
`Building: <Name>, Added` instead of `Feature: <Name>, Added`.
|
|
||||||
|
### 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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -348,6 +349,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 +365,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.04 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.39.08 - 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 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.04 - https://github.com/GAM-team/GAM - pythonsource
|
GAM 7.39.08 - 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"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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`.
|
||||||
|
|||||||
@@ -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.04 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.39.08 - 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 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.04 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.39.08 - 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 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.04 - https://github.com/GAM-team/GAM - pyinstaller
|
GAM 7.39.08 - 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 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 3.6.2 7 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.04
|
Latest: 7.39.08
|
||||||
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.04
|
7.39.08
|
||||||
```
|
```
|
||||||
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.04 - https://github.com/GAM-team/GAM
|
GAM 7.39.08 - 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 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
|
||||||
|
|||||||
@@ -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