gam7 7.23.7__tar.gz → 7.24.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gam7 might be problematic. Click here for more details.
- {gam7-7.23.7 → gam7-7.24.1}/PKG-INFO +1 -1
- {gam7-7.23.7 → gam7-7.24.1}/src/GamUpdate.txt +21 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/__init__.py +23 -21
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glapi.py +21 -4
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +14 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/GamUpdates.md +18 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Todrive.md +8 -8
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Vault-Takeout.md +3 -3
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Version-and-Help.md +3 -3
- {gam7-7.23.7 → gam7-7.24.1}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/actions/decrypt.sh +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/actions/entitlements.plist +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/stale.yml +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/workflows/build.yml +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/.github/workflows/pypi.yml +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/LICENSE +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/README.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/pyproject.toml +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/.gitignore +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/GamCommands.txt +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/LICENSE +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/README.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/callgam.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/__main__.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/__init__.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/auth.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/client.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/core.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/data.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/http.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/http_core.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/service.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/token_store.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/url.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/cacerts.pem +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/service.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam-install.sh +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam-setup.bat +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam.exe.manifest +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam.spec +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/gam.wxs +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/license.rtf +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/tools/hooks/hook-googleapiclient.model.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/tools/hooks/hook-httplib2.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/tools/mkGamRef.py +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/tools/openssl.props +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/tools/ssd.mjs +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/src/version_info.txt.in +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/00scratch.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Addresses.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Administrators.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Alert-Center.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Aliases.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Authorization.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Basic-Items.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Business-Account-Management.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Calendars-Access.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Calendars-Events.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Calendars.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Chat-Bot-Setup-Use.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Classroom-StudentGroups.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Customer.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Domain-SharedContacts.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Domains-Verification.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Domains.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Drive-Items.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM-Release-Process.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM7-FAQ.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Global-Address-List.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Groups-Membership.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Groups.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Home.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Licenses.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/List-Items.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/List.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Organizational-Units.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Other-Resources.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Permission-Matches.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/README.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Rclone.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Reports.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Reseller.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Resources.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Schemas.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Scripts.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Send-Email.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Shared-Drives.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Sites.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Tag-Replace.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Calendars.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Chat.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Contacts.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Files-Display.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Permissions.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Forms.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Meet.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Photo.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Tag-Manager.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Tasks.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Tokens.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Web-Resources-and-Sites.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-YouTube.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Users.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Using-GAM7-with-keyless-authentication-Workload-Identity-Federation.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/_Sidebar.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/gam.cfg.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-AdminSettingsExamples.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Android-Installation.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-BulkOperations.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-CalendarExamples.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Chat-Bot.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Drive.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Email.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Groups.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Users.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Custom-Schemas.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Data-Transfers.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-DomainVerification.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-ExamplesCSV.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-ExamplesOrganizations.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM-options-files.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM3CSVListings.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM3GroupSettings.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GoogleDriveManagement.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Home.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-LicenseExamples.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Managing-Admins.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Managing-Devices.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-OAuthKeyManagement.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Printers.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-ResellerCommands.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-SecurityExamples.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-_Footer.md +0 -0
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
7.24.01
|
|
2
|
+
|
|
3
|
+
Updated GAM to handle the following error that occurs when GAM tries to authenticate
|
|
4
|
+
as a user that has been disabled by Google.
|
|
5
|
+
```
|
|
6
|
+
ERROR: Authentication Token Error - invalid_account: Forbidden
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
7.24.00
|
|
10
|
+
|
|
11
|
+
If you want to disable a user's service account access to Drive and Sheets but still allow reading command data from Google Docs and Sheets,
|
|
12
|
+
issue the following command and make these settings:
|
|
13
|
+
```
|
|
14
|
+
gam user user@domain.com update serviceaccount
|
|
15
|
+
|
|
16
|
+
[ ] 20) Drive API (supports readonly)
|
|
17
|
+
[*] 21) Drive API - read command data
|
|
18
|
+
[ ] 42) Sheets API (supports readonly)
|
|
19
|
+
[*] 43) Sheets API - read command data
|
|
20
|
+
```
|
|
21
|
+
|
|
1
22
|
7.23.07
|
|
2
23
|
|
|
3
24
|
Fixed bug in `gam print|show admins` where all admin assignments were not displayed when
|
|
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
|
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
27
|
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
|
|
28
|
-
__version__ = '7.
|
|
28
|
+
__version__ = '7.24.01'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -3049,9 +3049,10 @@ def getGDocData(gformat):
|
|
|
3049
3049
|
mimeType = GDOC_FORMAT_MIME_TYPES[gformat]
|
|
3050
3050
|
user = getEmailAddress()
|
|
3051
3051
|
fileIdEntity = getDriveFileEntity(queryShortcutsOK=False)
|
|
3052
|
-
|
|
3052
|
+
_, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVECD, API.DRIVE3), user)
|
|
3053
3053
|
if not drive:
|
|
3054
3054
|
sys.exit(GM.Globals[GM.SYSEXITRC])
|
|
3055
|
+
_, _, jcount = _validateUserGetFileIDs(user, 0, 0, fileIdEntity, drive=drive)
|
|
3055
3056
|
if jcount == 0:
|
|
3056
3057
|
getGDocSheetDataFailedExit([Ent.USER, user], Msg.NO_ENTITIES_FOUND.format(Ent.Singular(Ent.DRIVE_FILE)))
|
|
3057
3058
|
if jcount > 1:
|
|
@@ -3105,14 +3106,15 @@ def getGSheetData():
|
|
|
3105
3106
|
user = getEmailAddress()
|
|
3106
3107
|
fileIdEntity = getDriveFileEntity(queryShortcutsOK=False)
|
|
3107
3108
|
sheetEntity = getSheetEntity(False)
|
|
3108
|
-
user, drive
|
|
3109
|
+
user, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVECD, API.DRIVE3), user)
|
|
3109
3110
|
if not drive:
|
|
3110
3111
|
sys.exit(GM.Globals[GM.SYSEXITRC])
|
|
3112
|
+
_, _, jcount = _validateUserGetFileIDs(user, 0, 0, fileIdEntity, drive=drive)
|
|
3111
3113
|
if jcount == 0:
|
|
3112
3114
|
getGDocSheetDataFailedExit([Ent.USER, user], Msg.NO_ENTITIES_FOUND.format(Ent.Singular(Ent.DRIVE_FILE)))
|
|
3113
3115
|
if jcount > 1:
|
|
3114
3116
|
getGDocSheetDataFailedExit([Ent.USER, user], Msg.MULTIPLE_ENTITIES_FOUND.format(Ent.Plural(Ent.DRIVE_FILE), jcount, ','.join(fileIdEntity['list'])))
|
|
3115
|
-
_, sheet = buildGAPIServiceObject(API.SHEETS, user)
|
|
3117
|
+
_, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSCD, API.SHEETS), user)
|
|
3116
3118
|
if not sheet:
|
|
3117
3119
|
sys.exit(GM.Globals[GM.SYSEXITRC])
|
|
3118
3120
|
fileId = fileIdEntity['list'][0]
|
|
@@ -4801,8 +4803,6 @@ def defaultSvcAcctScopes():
|
|
|
4801
4803
|
saScopes[scope['api']].extend(scope['scope'])
|
|
4802
4804
|
saScopes[API.DRIVEACTIVITY].append(API.DRIVE_SCOPE)
|
|
4803
4805
|
saScopes[API.DRIVE2] = saScopes[API.DRIVE3]
|
|
4804
|
-
saScopes[API.DRIVETD] = saScopes[API.DRIVE3]
|
|
4805
|
-
saScopes[API.SHEETSTD] = saScopes[API.SHEETS]
|
|
4806
4806
|
return saScopes
|
|
4807
4807
|
|
|
4808
4808
|
def _getSvcAcctData():
|
|
@@ -5609,6 +5609,12 @@ def getSaUser(user):
|
|
|
5609
5609
|
GM.Globals[GM.CURRENT_CLIENT_API_SCOPES] = currentClientAPIScopes
|
|
5610
5610
|
return userEmail
|
|
5611
5611
|
|
|
5612
|
+
def chooseSaAPI(api1, api2):
|
|
5613
|
+
_getSvcAcctData()
|
|
5614
|
+
if api1 in GM.Globals[GM.SVCACCT_SCOPES]:
|
|
5615
|
+
return api1
|
|
5616
|
+
return api2
|
|
5617
|
+
|
|
5612
5618
|
def buildGAPIServiceObject(api, user, i=0, count=0, displayError=True):
|
|
5613
5619
|
userEmail = getSaUser(user)
|
|
5614
5620
|
httpObj = getHttpObj(cache=GM.Globals[GM.CACHE_DIR])
|
|
@@ -8030,7 +8036,7 @@ class CSVPrintFile():
|
|
|
8030
8036
|
|
|
8031
8037
|
def getDriveObject():
|
|
8032
8038
|
if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
|
|
8033
|
-
_, drive = buildGAPIServiceObject(API.DRIVETD, self.todrive['user'])
|
|
8039
|
+
_, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVETD, API.DRIVE3), self.todrive['user'])
|
|
8034
8040
|
if not drive:
|
|
8035
8041
|
invalidTodriveUserExit(Ent.USER, Msg.NOT_FOUND)
|
|
8036
8042
|
else:
|
|
@@ -8183,7 +8189,7 @@ class CSVPrintFile():
|
|
|
8183
8189
|
if result['mimeType'] != MIMETYPE_GA_SPREADSHEET:
|
|
8184
8190
|
invalidTodriveFileIdExit([], f'{Msg.NOT_A} {Ent.Singular(Ent.SPREADSHEET)}', tdfileidLocation)
|
|
8185
8191
|
if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
|
|
8186
|
-
_, sheet = buildGAPIServiceObject(API.SHEETSTD, self.todrive['user'])
|
|
8192
|
+
_, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSTD, API.SHEETS), self.todrive['user'])
|
|
8187
8193
|
if sheet is None:
|
|
8188
8194
|
invalidTodriveUserExit(Ent.USER, Msg.NOT_FOUND)
|
|
8189
8195
|
else:
|
|
@@ -8696,7 +8702,7 @@ class CSVPrintFile():
|
|
|
8696
8702
|
sheetTitle += tdtime.strftime(self.todrive['sheettimeformat'])
|
|
8697
8703
|
action = Act.Get()
|
|
8698
8704
|
if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
|
|
8699
|
-
user, drive = buildGAPIServiceObject(API.DRIVETD, self.todrive['user'])
|
|
8705
|
+
user, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVETD, API.DRIVE3), self.todrive['user'])
|
|
8700
8706
|
if not drive:
|
|
8701
8707
|
closeFile(csvFile)
|
|
8702
8708
|
return
|
|
@@ -8729,7 +8735,7 @@ class CSVPrintFile():
|
|
|
8729
8735
|
if result['mimeType'] != MIMETYPE_GA_SPREADSHEET:
|
|
8730
8736
|
todriveCSVErrorExit(entityValueList, f'{Msg.NOT_A} {Ent.Singular(Ent.SPREADSHEET)}')
|
|
8731
8737
|
if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
|
|
8732
|
-
_, sheet = buildGAPIServiceObject(API.SHEETSTD, user)
|
|
8738
|
+
_, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSTD, API.SHEETS), user)
|
|
8733
8739
|
if sheet is None:
|
|
8734
8740
|
return
|
|
8735
8741
|
else:
|
|
@@ -8877,7 +8883,7 @@ class CSVPrintFile():
|
|
|
8877
8883
|
(self.todrive['sheetEntity'] or self.todrive['locale'] or self.todrive['timeZone'] or
|
|
8878
8884
|
self.todrive['sheettitle'] or self.todrive['cellwrap'] or self.todrive['cellnumberformat'])):
|
|
8879
8885
|
if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
|
|
8880
|
-
_, sheet = buildGAPIServiceObject(API.SHEETSTD, user)
|
|
8886
|
+
_, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSTD, API.SHEETS), user)
|
|
8881
8887
|
if sheet is None:
|
|
8882
8888
|
return
|
|
8883
8889
|
else:
|
|
@@ -16263,7 +16269,7 @@ def _showCustomerLicenseInfo(customerInfo, FJQC):
|
|
|
16263
16269
|
while True:
|
|
16264
16270
|
try:
|
|
16265
16271
|
result = callGAPI(rep.customerUsageReports(), 'get',
|
|
16266
|
-
throwReasons=[GAPI.INVALID, GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
|
16272
|
+
throwReasons=[GAPI.INVALID, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
|
|
16267
16273
|
date=tryDate, customerId=customerInfo['id'],
|
|
16268
16274
|
fields='warnings,usageReports', parameters=parameters)
|
|
16269
16275
|
usageReports = numUsersAvailable(result)
|
|
@@ -16276,7 +16282,7 @@ def _showCustomerLicenseInfo(customerInfo, FJQC):
|
|
|
16276
16282
|
if fullData == 0:
|
|
16277
16283
|
continue
|
|
16278
16284
|
break
|
|
16279
|
-
except GAPI.invalid as e:
|
|
16285
|
+
except (GAPI.invalid, GAPI.failedPrecondition) as e:
|
|
16280
16286
|
tryDate = _adjustTryDate(str(e), 0, -1, tryDate)
|
|
16281
16287
|
if not tryDate:
|
|
16282
16288
|
return
|
|
@@ -17052,10 +17058,7 @@ def doPrintShowAdmins():
|
|
|
17052
17058
|
if assignedTo not in assignedToIdEmailMap:
|
|
17053
17059
|
emailTypes = ALL_ASSIGNEE_TYPES if admin.get('assigneeType', '') != 'group' else ['group']
|
|
17054
17060
|
assigneeEmail, assigneeType = convertUIDtoEmailAddressWithType(f'uid:{assignedTo}', cd, sal, emailTypes=emailTypes)
|
|
17055
|
-
|
|
17056
|
-
assignedToField = ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP[assigneeType]
|
|
17057
|
-
else:
|
|
17058
|
-
assignedToField = 'assignedToUnknown'
|
|
17061
|
+
assignedToField = ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP.get(assigneeType, 'assignedToUnknown')
|
|
17059
17062
|
if assignedToField == 'assignedToUnknown':
|
|
17060
17063
|
assigneeEmail = True
|
|
17061
17064
|
assignedToIdEmailMap[assignedTo] = {'assignedToField': assignedToField, 'assigneeEmail': assigneeEmail}
|
|
@@ -17084,6 +17087,7 @@ def doPrintShowAdmins():
|
|
|
17084
17087
|
typesSet = set()
|
|
17085
17088
|
kwargs = {}
|
|
17086
17089
|
rolePrivileges = {}
|
|
17090
|
+
allGroupRoles = ','.join(sorted(ALL_GROUP_ROLES))
|
|
17087
17091
|
fieldsList = PRINT_ADMIN_FIELDS+['assigneeType']
|
|
17088
17092
|
assignedToIdEmailMap = {}
|
|
17089
17093
|
while Cmd.ArgumentsRemaining():
|
|
@@ -17098,7 +17102,6 @@ def doPrintShowAdmins():
|
|
|
17098
17102
|
pass
|
|
17099
17103
|
elif myarg == 'recursive':
|
|
17100
17104
|
recursive = True
|
|
17101
|
-
allGroupRoles = ','.join(sorted(ALL_GROUP_ROLES))
|
|
17102
17105
|
memberOptions = initMemberOptions()
|
|
17103
17106
|
memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP] = True
|
|
17104
17107
|
memberOptions[MEMBEROPTION_DISPLAYMATCH] = False
|
|
@@ -17136,7 +17139,7 @@ def doPrintShowAdmins():
|
|
|
17136
17139
|
return
|
|
17137
17140
|
except GAPI.notFound as e:
|
|
17138
17141
|
entityActionFailedExit([Ent.ADMIN_ROLE, kwargs['roleId']], str(e))
|
|
17139
|
-
except
|
|
17142
|
+
except GAPI.serviceNotAvailable as e:
|
|
17140
17143
|
entityActionFailedExit([Ent.ADMINISTRATOR, userKey], str(e))
|
|
17141
17144
|
except (GAPI.badRequest, GAPI.customerNotFound):
|
|
17142
17145
|
accessErrorExit(cd)
|
|
@@ -17164,7 +17167,6 @@ def doPrintShowAdmins():
|
|
|
17164
17167
|
groupMembers[assignedTo] = membersList[:]
|
|
17165
17168
|
if not _setNamesFromIds(admin, _getPrivileges(admin)):
|
|
17166
17169
|
continue
|
|
17167
|
-
expandedAdmins.append(admin)
|
|
17168
17170
|
if not groupMembers[assignedTo]:
|
|
17169
17171
|
expandedAdmins.append(admin)
|
|
17170
17172
|
continue
|
|
@@ -17203,7 +17205,7 @@ def doPrintShowAdmins():
|
|
|
17203
17205
|
else:
|
|
17204
17206
|
for admin in expandedAdmins:
|
|
17205
17207
|
admin.pop('assigneeType', None)
|
|
17206
|
-
admin.pop('assignedToField')
|
|
17208
|
+
admin.pop('assignedToField', None)
|
|
17207
17209
|
if not oneItemPerRow or 'rolePrivileges' not in admin:
|
|
17208
17210
|
csvPF.WriteRowTitles(flattenJSON(admin))
|
|
17209
17211
|
else:
|
|
@@ -60,6 +60,7 @@ DIRECTORY = 'directory'
|
|
|
60
60
|
DOCS = 'docs'
|
|
61
61
|
DRIVE2 = 'drive2'
|
|
62
62
|
DRIVE3 = 'drive3'
|
|
63
|
+
DRIVECD = 'drivecd'
|
|
63
64
|
DRIVETD = 'drivetd'
|
|
64
65
|
DRIVEACTIVITY = 'driveactivity'
|
|
65
66
|
DRIVELABELS = 'drivelabels'
|
|
@@ -91,6 +92,7 @@ SERVICEACCOUNTLOOKUP = 'serviceaccountlookup'
|
|
|
91
92
|
SERVICEMANAGEMENT = 'servicemanagement'
|
|
92
93
|
SERVICEUSAGE = 'serviceusage'
|
|
93
94
|
SHEETS = 'sheets'
|
|
95
|
+
SHEETSCD = 'sheetscd'
|
|
94
96
|
SHEETSTD = 'sheetstd'
|
|
95
97
|
SITEVERIFICATION = 'siteVerification'
|
|
96
98
|
STORAGE = 'storage'
|
|
@@ -156,6 +158,7 @@ OAUTH2_TOKEN_ERRORS = [
|
|
|
156
158
|
'access_denied: Account restricted',
|
|
157
159
|
'internal_failure: Backend Error',
|
|
158
160
|
'internal_failure: None',
|
|
161
|
+
'invalid_account: Forbidden',
|
|
159
162
|
'invalid_grant',
|
|
160
163
|
'invalid_grant: Bad Request',
|
|
161
164
|
'invalid_grant: Invalid email or User ID',
|
|
@@ -253,7 +256,8 @@ _INFO = {
|
|
|
253
256
|
DOCS: {'name': 'Docs API', 'version': 'v1', 'v2discovery': True},
|
|
254
257
|
DRIVE2: {'name': 'Drive API v2', 'version': 'v2', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
255
258
|
DRIVE3: {'name': 'Drive API v3', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
256
|
-
|
|
259
|
+
DRIVECD: {'name': 'Drive API v3 - read command data', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
260
|
+
DRIVETD: {'name': 'Drive API v3 - write todrive data', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
257
261
|
DRIVEACTIVITY: {'name': 'Drive Activity API v2', 'version': 'v2', 'v2discovery': True},
|
|
258
262
|
DRIVELABELS_ADMIN: {'name': 'Drive Labels API - Admin', 'version': 'v2', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
|
|
259
263
|
DRIVELABELS_USER: {'name': 'Drive Labels API - User', 'version': 'v2', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
|
|
@@ -283,7 +287,8 @@ _INFO = {
|
|
|
283
287
|
SERVICEMANAGEMENT: {'name': 'Service Management API', 'version': 'v1', 'v2discovery': True},
|
|
284
288
|
SERVICEUSAGE: {'name': 'Service Usage API', 'version': 'v1', 'v2discovery': True},
|
|
285
289
|
SHEETS: {'name': 'Sheets API', 'version': 'v4', 'v2discovery': True},
|
|
286
|
-
|
|
290
|
+
SHEETSCD: {'name': 'Sheets API - read command data', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
|
|
291
|
+
SHEETSTD: {'name': 'Sheets API - write todrive data', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
|
|
287
292
|
SITEVERIFICATION: {'name': 'Site Verification API', 'version': 'v1', 'v2discovery': True},
|
|
288
293
|
STORAGE: {'name': 'Cloud Storage API', 'version': 'v1', 'v2discovery': True},
|
|
289
294
|
STORAGEREAD: {'name': 'Cloud Storage API - Read', 'version': 'v1', 'v2discovery': True, 'mappedAPI': STORAGE},
|
|
@@ -750,9 +755,15 @@ _SVCACCT_SCOPES = [
|
|
|
750
755
|
]
|
|
751
756
|
|
|
752
757
|
_SVCACCT_SPECIAL_SCOPES = [
|
|
753
|
-
{'name': 'Drive API -
|
|
758
|
+
{'name': 'Drive API - read command data',
|
|
759
|
+
'api': DRIVECD,
|
|
760
|
+
'subscopes': [],
|
|
761
|
+
'offByDefault': True,
|
|
762
|
+
'scope': DRIVE_SCOPE+'.readonly'},
|
|
763
|
+
{'name': 'Drive API - write todrive data',
|
|
754
764
|
'api': DRIVETD,
|
|
755
765
|
'subscopes': [],
|
|
766
|
+
'offByDefault': True,
|
|
756
767
|
'scope': DRIVE_SCOPE},
|
|
757
768
|
{'name': 'Gmail API - Full Access - read only',
|
|
758
769
|
'api': GMAIL,
|
|
@@ -764,8 +775,14 @@ _SVCACCT_SPECIAL_SCOPES = [
|
|
|
764
775
|
'subscopes': [],
|
|
765
776
|
'offByDefault': True,
|
|
766
777
|
'scope': GMAIL_SEND_SCOPE},
|
|
767
|
-
{'name': 'Sheets API -
|
|
778
|
+
{'name': 'Sheets API - read command data',
|
|
779
|
+
'api': SHEETSCD,
|
|
780
|
+
'offByDefault': True,
|
|
781
|
+
'subscopes': [],
|
|
782
|
+
'scope': 'https://www.googleapis.com/auth/spreadsheets.readonly'},
|
|
783
|
+
{'name': 'Sheets API - write todrive data',
|
|
768
784
|
'api': SHEETSTD,
|
|
785
|
+
'offByDefault': True,
|
|
769
786
|
'subscopes': [],
|
|
770
787
|
'scope': 'https://www.googleapis.com/auth/spreadsheets'},
|
|
771
788
|
]
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
- [Plain Text](#plain-text)
|
|
6
6
|
- [HTML](#html)
|
|
7
7
|
- [Read data from a Google Sheet](#read-data-from-a-google-sheet)
|
|
8
|
+
- [Limited Service Account Access](#limited-service-account-access)
|
|
8
9
|
- [Read data from a Google Cloud Storage File](#read-data-from-a-google-cloud-storage-file)
|
|
9
10
|
- [Plain Text](#plain-text)
|
|
10
11
|
- [CSV](#csv)
|
|
@@ -79,6 +80,19 @@ Example:
|
|
|
79
80
|
```
|
|
80
81
|
gam csv gsheet you@exmaple.com <DriveFileIDEntity> "Sheet 1" gam create user firstname "~FirstName" lastname "~lastName" email "~email"
|
|
81
82
|
```
|
|
83
|
+
|
|
84
|
+
## Limited Service Account Access
|
|
85
|
+
If you want to disable a user's service account access to Drive and Sheets but still allow reading command data from Google Docs and Sheets,
|
|
86
|
+
issue the following command and make these settings:
|
|
87
|
+
```
|
|
88
|
+
gam user user@domain.com update serviceaccount
|
|
89
|
+
|
|
90
|
+
[ ] 20) Drive API (supports readonly)
|
|
91
|
+
[*] 21) Drive API - read command data
|
|
92
|
+
[ ] 42) Sheets API (supports readonly)
|
|
93
|
+
[*] 43) Sheets API - read command data
|
|
94
|
+
```
|
|
95
|
+
|
|
82
96
|
## Read data from a Google Cloud Storage File
|
|
83
97
|
```
|
|
84
98
|
<StorageBucketName> ::= <String>
|
|
@@ -10,6 +10,24 @@ Add the `-s` option to the end of the above commands to suppress creating the `g
|
|
|
10
10
|
|
|
11
11
|
See [Downloads-Installs-GAM7](https://github.com/GAM-team/GAM/wiki/Downloads-Installs) for Windows or other options, including manual installation
|
|
12
12
|
|
|
13
|
+
### 7.24.00
|
|
14
|
+
|
|
15
|
+
If you want to disable a user's service account access to Drive and Sheets but still allow reading command data from Google Docs and Sheets,
|
|
16
|
+
issue the following command and make these settings:
|
|
17
|
+
```
|
|
18
|
+
gam user user@domain.com update serviceaccount
|
|
19
|
+
|
|
20
|
+
[ ] 20) Drive API (supports readonly)
|
|
21
|
+
[*] 21) Drive API - read command data
|
|
22
|
+
[ ] 42) Sheets API (supports readonly)
|
|
23
|
+
[*] 43) Sheets API - read command data
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 7.23.07
|
|
27
|
+
|
|
28
|
+
Fixed bug in `gam print|show admins` where all admin assignments were not displayed when
|
|
29
|
+
`types <AdminAssigneeTypeList>` was not specified, i.e., all assignments should be displayed.
|
|
30
|
+
|
|
13
31
|
### 7.23.06
|
|
14
32
|
|
|
15
33
|
Added option `types <AdminAssigneeTypeList>` to `gam print|show admins` that allows filtering
|
|
@@ -252,7 +252,7 @@ writes the credentials into the file oauth2.txt.
|
|
|
252
252
|
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
|
253
253
|
admin@server:/Users/admin$ gam version
|
|
254
254
|
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
|
255
|
-
GAM 7.
|
|
255
|
+
GAM 7.24.00 - https://github.com/GAM-team/GAM - pyinstaller
|
|
256
256
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
257
257
|
Python 3.13.7 64-bit final
|
|
258
258
|
macOS Tahoe 26.0.1 x86_64
|
|
@@ -990,7 +990,7 @@ writes the credentials into the file oauth2.txt.
|
|
|
990
990
|
C:\>del C:\GAMConfig\oauth2.txt
|
|
991
991
|
C:\>gam version
|
|
992
992
|
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
|
993
|
-
GAM 7.
|
|
993
|
+
GAM 7.24.00 - https://github.com/GAM-team/GAM - pythonsource
|
|
994
994
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
995
995
|
Python 3.13.7 64-bit final
|
|
996
996
|
Windows-10-10.0.17134 AMD64
|
|
@@ -330,16 +330,16 @@ you want the updated data copied to `Latest` so you don't have to remember what
|
|
|
330
330
|
gam redirect csv - todrive tdfileid <DriveFileID> tdupdatesheet tdsheet Tuesday tdbackupsheet "Backup Tuesday" tdcopysheet "Latest" ...
|
|
331
331
|
```
|
|
332
332
|
## Limited Service Account Access
|
|
333
|
-
If you want to limit a user's service account access but still allow `todrive
|
|
334
|
-
issue the following command and
|
|
333
|
+
If you want to limit a user's service account access to Drive, Gmail and Sheets but still allow `todrive`,
|
|
334
|
+
issue the following command and make these settings:
|
|
335
335
|
```
|
|
336
|
-
gam user user@domain.com update serviceaccount
|
|
336
|
+
gam user user@domain.com update serviceaccount
|
|
337
337
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
Sheets API - todrive
|
|
338
|
+
[ ] 20) Drive API (supports readonly)
|
|
339
|
+
[*] 22) Drive API - write todrive data
|
|
340
|
+
[*] 31) Gmail API - Send Messages - including todrive
|
|
341
|
+
[ ] 42) Sheets API (supports readonly)
|
|
342
|
+
[*] 44) Sheets API - write todrive data
|
|
343
343
|
```
|
|
344
344
|
|
|
345
345
|
## No Service Account Access
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
- [Delete Vault Saved Queries](#delete-vault-saved-queries)
|
|
28
28
|
- [Display Vault Saved Queries](#display-vault-saved-queries)
|
|
29
29
|
- [Takeout](#takeout)
|
|
30
|
-
- [Copy a Takeout Bucket](#copy-a-
|
|
30
|
+
- [Copy a Takeout Bucket](#copy-a-takeout-bucket)
|
|
31
31
|
- [Download a Takeout Bucket](#download-a-takeout-bucket)
|
|
32
32
|
|
|
33
33
|
## API documentation
|
|
@@ -848,7 +848,7 @@ gam create vaultquery <MatterItem> [name <String>]
|
|
|
848
848
|
[<JSONData>]
|
|
849
849
|
[shownames]
|
|
850
850
|
[showdetails|returnidonly|formatjson]
|
|
851
|
-
|
|
851
|
+
```
|
|
852
852
|
|
|
853
853
|
If `name <String>` is omitted, the query is named `GAM <corpus> Query - <Time>`
|
|
854
854
|
|
|
@@ -928,7 +928,7 @@ Select fields to display:
|
|
|
928
928
|
|
|
929
929
|
The `shownames` argument controls whether org unit and shared drive names are displayed in queries; additional API calls are required to get the names.
|
|
930
930
|
|
|
931
|
-
|
|
931
|
+
## Takeout
|
|
932
932
|
Many thanks to Jay for these commands and documentation.
|
|
933
933
|
|
|
934
934
|
GAM 6.42.00 and newer support copying and downloading Google Cloud Storage (GCS) buckets generated by [organization-wide Takeout](https://support.google.com/a/answer/100458?hl=en).
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Print the current version of Gam with details
|
|
4
4
|
```
|
|
5
5
|
gam version
|
|
6
|
-
GAM 7.
|
|
6
|
+
GAM 7.24.00 - https://github.com/GAM-team/GAM - pyinstaller
|
|
7
7
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
8
8
|
Python 3.13.7 64-bit final
|
|
9
9
|
macOS Tahoe 26.0.1 x86_64
|
|
@@ -15,7 +15,7 @@ Time: 2023-06-02T21:10:00-07:00
|
|
|
15
15
|
Print the current version of Gam with details and time offset information
|
|
16
16
|
```
|
|
17
17
|
gam version timeoffset
|
|
18
|
-
GAM 7.
|
|
18
|
+
GAM 7.24.00 - https://github.com/GAM-team/GAM - pyinstaller
|
|
19
19
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
20
20
|
Python 3.13.7 64-bit final
|
|
21
21
|
macOS Tahoe 26.0.1 x86_64
|
|
@@ -27,7 +27,7 @@ Your system time differs from www.googleapis.com by less than 1 second
|
|
|
27
27
|
Print the current version of Gam with extended details and SSL information
|
|
28
28
|
```
|
|
29
29
|
gam version extended
|
|
30
|
-
GAM 7.
|
|
30
|
+
GAM 7.24.00 - https://github.com/GAM-team/GAM - pyinstaller
|
|
31
31
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
32
32
|
Python 3.13.7 64-bit final
|
|
33
33
|
macOS Tahoe 26.0.1 x86_64
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|