gam7 7.24.1__tar.gz → 7.25.0__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.24.1 → gam7-7.25.0}/.github/workflows/build.yml +1 -1
- {gam7-7.24.1 → gam7-7.25.0}/PKG-INFO +1 -1
- {gam7-7.24.1 → gam7-7.25.0}/src/GamUpdate.txt +21 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/__init__.py +30 -19
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/__main__.py +6 -1
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glapi.py +28 -22
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glcfg.py +4 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/GamUpdates.md +8 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Version-and-Help.md +3 -3
- {gam7-7.24.1 → gam7-7.25.0}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/actions/decrypt.sh +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/actions/entitlements.plist +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/stale.yml +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/.github/workflows/pypi.yml +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/LICENSE +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/README.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/pyproject.toml +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/.gitignore +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/GamCommands.txt +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/LICENSE +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/README.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/callgam.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/__init__.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/auth.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/client.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/core.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/data.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/http.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/http_core.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/service.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/token_store.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/atom/url.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/cacerts.pem +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/service.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam-install.sh +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam-setup.bat +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam.exe.manifest +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam.spec +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/gam.wxs +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/license.rtf +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/tools/hooks/hook-googleapiclient.model.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/tools/hooks/hook-httplib2.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/tools/mkGamRef.py +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/tools/openssl.props +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/tools/ssd.mjs +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/src/version_info.txt.in +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/00scratch.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Addresses.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Administrators.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Alert-Center.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Aliases.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Authorization.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Basic-Items.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Business-Account-Management.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Calendars-Access.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Calendars-Events.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Calendars.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Chat-Bot-Setup-Use.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Classroom-StudentGroups.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Customer.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Domain-SharedContacts.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Domains-Verification.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Domains.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Drive-Items.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/GAM-Release-Process.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/GAM7-FAQ.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Global-Address-List.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Groups-Membership.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Groups.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Home.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Licenses.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/List-Items.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/List.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Organizational-Units.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Other-Resources.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Permission-Matches.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/README.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Rclone.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Reports.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Reseller.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Resources.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Schemas.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Scripts.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Send-Email.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Shared-Drives.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Sites.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Tag-Replace.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Todrive.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Calendars.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Chat.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Contacts.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Files-Display.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Permissions.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Forms.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Meet.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Photo.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Tag-Manager.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Tasks.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Tokens.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-Web-Resources-and-Sites.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users-YouTube.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Users.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Using-GAM7-with-keyless-authentication-Workload-Identity-Federation.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/_Sidebar.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/gam.cfg.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-AdminSettingsExamples.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Android-Installation.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-BulkOperations.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-CalendarExamples.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Chat-Bot.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Command-Reference-Drive.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Command-Reference-Email.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Command-Reference-Groups.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Command-Reference-Users.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Custom-Schemas.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Data-Transfers.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-DomainVerification.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-ExamplesCSV.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-ExamplesOrganizations.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-GAM-options-files.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-GAM3CSVListings.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-GAM3GroupSettings.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-GoogleDriveManagement.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Home.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-LicenseExamples.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Managing-Admins.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Managing-Devices.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-OAuthKeyManagement.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Printers.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-ResellerCommands.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-SecurityExamples.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.24.1 → gam7-7.25.0}/wiki/legacy/l-_Footer.md +0 -0
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
7.25.00
|
|
2
|
+
|
|
3
|
+
Removed a capabilty added in 7.24.00 that allowed reading command data from Google Docs and Sheets
|
|
4
|
+
when a user's service account access to Drive and Sheets had been disabled. Jay was concerned
|
|
5
|
+
that this change could be exploited to give access to all user's files.
|
|
6
|
+
|
|
7
|
+
This capability has been replaced by issuing the following commands. The admin specified in `gam oauth create`
|
|
8
|
+
can read command data from Docs and Sheets to which it has access.
|
|
9
|
+
```
|
|
10
|
+
gam config commanddata_clientaccess true save
|
|
11
|
+
gam oauth create
|
|
12
|
+
Enable the following and proceed to authorization.
|
|
13
|
+
|
|
14
|
+
[*] 42) Drive API - commanddata_clientaccess
|
|
15
|
+
[*] 54) Sheets API - commanddata_clientaccess
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Fixed in bug in `gam report` that caused a trap with either of the `thismonth` or `previousmonths` options were used.
|
|
19
|
+
|
|
20
|
+
Upgraded to Python 3.14.0.
|
|
21
|
+
|
|
1
22
|
7.24.01
|
|
2
23
|
|
|
3
24
|
Updated GAM to handle the following error that occurs when GAM tries to authenticate
|
|
@@ -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.25.00'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -2113,12 +2113,12 @@ class StartEndTime():
|
|
|
2113
2113
|
else:
|
|
2114
2114
|
firstMonth = getInteger(minVal=1, maxVal=6)
|
|
2115
2115
|
currDate = todaysDate()
|
|
2116
|
-
self.startDateTime = currDate.
|
|
2116
|
+
self.startDateTime = currDate.replace(day=1, hour=0, minute=0, second=0, microsecond=0).shift(months=-firstMonth)
|
|
2117
2117
|
self.startTime = ISOformatTimeStamp(self.startDateTime)
|
|
2118
2118
|
if myarg == 'thismonth':
|
|
2119
2119
|
self.endDateTime = todaysTime()
|
|
2120
2120
|
else:
|
|
2121
|
-
self.endDateTime = currDate.
|
|
2121
|
+
self.endDateTime = currDate.replace(day=1, hour=23, minute=59, second=59, microsecond=0).shift(days=-1)
|
|
2122
2122
|
self.endTime = ISOformatTimeStamp(self.endDateTime)
|
|
2123
2123
|
if self.startDateTime and self.endDateTime and self.endDateTime < self.startDateTime:
|
|
2124
2124
|
Cmd.Backup()
|
|
@@ -3049,7 +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
|
+
if not GC.Values[GC.COMMANDDATA_CLIENTACCESS]:
|
|
3053
|
+
_, drive = buildGAPIServiceObject(API.DRIVE3, user)
|
|
3054
|
+
else:
|
|
3055
|
+
drive = buildGAPIObject(API.DRIVE3)
|
|
3053
3056
|
if not drive:
|
|
3054
3057
|
sys.exit(GM.Globals[GM.SYSEXITRC])
|
|
3055
3058
|
_, _, jcount = _validateUserGetFileIDs(user, 0, 0, fileIdEntity, drive=drive)
|
|
@@ -3106,7 +3109,10 @@ def getGSheetData():
|
|
|
3106
3109
|
user = getEmailAddress()
|
|
3107
3110
|
fileIdEntity = getDriveFileEntity(queryShortcutsOK=False)
|
|
3108
3111
|
sheetEntity = getSheetEntity(False)
|
|
3109
|
-
|
|
3112
|
+
if not GC.Values[GC.COMMANDDATA_CLIENTACCESS]:
|
|
3113
|
+
user, drive = buildGAPIServiceObject(API.DRIVE3, user)
|
|
3114
|
+
else:
|
|
3115
|
+
drive = buildGAPIObject(API.DRIVE3)
|
|
3110
3116
|
if not drive:
|
|
3111
3117
|
sys.exit(GM.Globals[GM.SYSEXITRC])
|
|
3112
3118
|
_, _, jcount = _validateUserGetFileIDs(user, 0, 0, fileIdEntity, drive=drive)
|
|
@@ -3114,7 +3120,10 @@ def getGSheetData():
|
|
|
3114
3120
|
getGDocSheetDataFailedExit([Ent.USER, user], Msg.NO_ENTITIES_FOUND.format(Ent.Singular(Ent.DRIVE_FILE)))
|
|
3115
3121
|
if jcount > 1:
|
|
3116
3122
|
getGDocSheetDataFailedExit([Ent.USER, user], Msg.MULTIPLE_ENTITIES_FOUND.format(Ent.Plural(Ent.DRIVE_FILE), jcount, ','.join(fileIdEntity['list'])))
|
|
3117
|
-
|
|
3123
|
+
if not GC.Values[GC.COMMANDDATA_CLIENTACCESS]:
|
|
3124
|
+
_, sheet = buildGAPIServiceObject(API.SHEETS, user)
|
|
3125
|
+
else:
|
|
3126
|
+
sheet = buildGAPIObject(API.SHEETS)
|
|
3118
3127
|
if not sheet:
|
|
3119
3128
|
sys.exit(GM.Globals[GM.SYSEXITRC])
|
|
3120
3129
|
fileId = fileIdEntity['list'][0]
|
|
@@ -9596,7 +9605,7 @@ def CSVFileQueueHandler(mpQueue, mpQueueStdout, mpQueueStderr, csvPF, datetimeNo
|
|
|
9596
9605
|
clearRowFilters = False
|
|
9597
9606
|
# if sys.platform.startswith('win'):
|
|
9598
9607
|
# signal.signal(signal.SIGINT, signal.SIG_IGN)
|
|
9599
|
-
if multiprocessing.get_start_method()
|
|
9608
|
+
if multiprocessing.get_start_method() != 'fork':
|
|
9600
9609
|
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
|
9601
9610
|
Cmd = glclargs.GamCLArgs()
|
|
9602
9611
|
else:
|
|
@@ -9638,7 +9647,7 @@ def CSVFileQueueHandler(mpQueue, mpQueueStdout, mpQueueStderr, csvPF, datetimeNo
|
|
|
9638
9647
|
Cmd.InitializeArguments(dataItem)
|
|
9639
9648
|
elif dataType == GM.REDIRECT_QUEUE_GLOBALS:
|
|
9640
9649
|
GM.Globals = dataItem
|
|
9641
|
-
if multiprocessing.get_start_method()
|
|
9650
|
+
if multiprocessing.get_start_method() != 'fork':
|
|
9642
9651
|
reopenSTDFile(GM.STDOUT)
|
|
9643
9652
|
reopenSTDFile(GM.STDERR)
|
|
9644
9653
|
elif dataType == GM.REDIRECT_QUEUE_VALUES:
|
|
@@ -9684,7 +9693,7 @@ def initializeCSVFileQueueHandler(mpManager, mpQueueStdout, mpQueueStderr):
|
|
|
9684
9693
|
def terminateCSVFileQueueHandler(mpQueue, mpQueueHandler):
|
|
9685
9694
|
GM.Globals[GM.PARSER] = None
|
|
9686
9695
|
GM.Globals[GM.CSVFILE][GM.REDIRECT_QUEUE] = None
|
|
9687
|
-
if multiprocessing.get_start_method()
|
|
9696
|
+
if multiprocessing.get_start_method() != 'fork':
|
|
9688
9697
|
mpQueue.put((GM.REDIRECT_QUEUE_ARGS, Cmd.AllArguments()))
|
|
9689
9698
|
savedValues = saveNonPickleableValues()
|
|
9690
9699
|
mpQueue.put((GM.REDIRECT_QUEUE_GLOBALS, GM.Globals))
|
|
@@ -9714,13 +9723,13 @@ def StdQueueHandler(mpQueue, stdtype, gmGlobals, gcValues):
|
|
|
9714
9723
|
|
|
9715
9724
|
# if sys.platform.startswith('win'):
|
|
9716
9725
|
# signal.signal(signal.SIGINT, signal.SIG_IGN)
|
|
9717
|
-
if multiprocessing.get_start_method()
|
|
9726
|
+
if multiprocessing.get_start_method() != 'fork':
|
|
9718
9727
|
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
|
9719
9728
|
GM.Globals = gmGlobals.copy()
|
|
9720
9729
|
GC.Values = gcValues.copy()
|
|
9721
9730
|
pid0DataItem = [KEYBOARD_INTERRUPT_RC, None]
|
|
9722
9731
|
pidData = {}
|
|
9723
|
-
if multiprocessing.get_start_method()
|
|
9732
|
+
if multiprocessing.get_start_method() != 'fork':
|
|
9724
9733
|
if GM.Globals[stdtype][GM.REDIRECT_NAME] == 'null':
|
|
9725
9734
|
fd = open(os.devnull, GM.Globals[stdtype][GM.REDIRECT_MODE], encoding=UTF8)
|
|
9726
9735
|
elif GM.Globals[stdtype][GM.REDIRECT_NAME] == '-':
|
|
@@ -9808,7 +9817,7 @@ def ProcessGAMCommandMulti(pid, numItems, logCmd, mpQueueCSVFile, mpQueueStdout,
|
|
|
9808
9817
|
with mplock:
|
|
9809
9818
|
initializeLogging()
|
|
9810
9819
|
# if sys.platform.startswith('win'):
|
|
9811
|
-
if multiprocessing.get_start_method()
|
|
9820
|
+
if multiprocessing.get_start_method() != 'fork':
|
|
9812
9821
|
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
|
9813
9822
|
GM.Globals[GM.API_CALLS_RETRY_DATA] = {}
|
|
9814
9823
|
GM.Globals[GM.CMDLOG_LOGGER] = None
|
|
@@ -9949,7 +9958,7 @@ def MultiprocessGAMCommands(items, showCmds):
|
|
|
9949
9958
|
mpManager = multiprocessing.Manager()
|
|
9950
9959
|
l = mpManager.Lock()
|
|
9951
9960
|
try:
|
|
9952
|
-
if multiprocessing.get_start_method()
|
|
9961
|
+
if multiprocessing.get_start_method() != 'fork':
|
|
9953
9962
|
pool = mpManager.Pool(processes=numPoolProcesses, initializer=initGamWorker, initargs=(l,), maxtasksperchild=200)
|
|
9954
9963
|
else:
|
|
9955
9964
|
pool = multiprocessing.Pool(processes=numPoolProcesses, initializer=initGamWorker, initargs=(l,), maxtasksperchild=200)
|
|
@@ -9958,7 +9967,7 @@ def MultiprocessGAMCommands(items, showCmds):
|
|
|
9958
9967
|
except AssertionError as e:
|
|
9959
9968
|
Cmd.SetLocation(0)
|
|
9960
9969
|
usageErrorExit(str(e))
|
|
9961
|
-
if multiprocessing.get_start_method()
|
|
9970
|
+
if multiprocessing.get_start_method() != 'fork':
|
|
9962
9971
|
savedValues = saveNonPickleableValues()
|
|
9963
9972
|
if GM.Globals[GM.STDOUT][GM.REDIRECT_MULTIPROCESS]:
|
|
9964
9973
|
mpQueueStdout, mpQueueHandlerStdout = initializeStdQueueHandler(mpManager, GM.STDOUT, GM.Globals, GC.Values)
|
|
@@ -9973,7 +9982,7 @@ def MultiprocessGAMCommands(items, showCmds):
|
|
|
9973
9982
|
mpQueueStderr = mpQueueStdout
|
|
9974
9983
|
else:
|
|
9975
9984
|
mpQueueStderr = None
|
|
9976
|
-
if multiprocessing.get_start_method()
|
|
9985
|
+
if multiprocessing.get_start_method() != 'fork':
|
|
9977
9986
|
restoreNonPickleableValues(savedValues)
|
|
9978
9987
|
if mpQueueStdout:
|
|
9979
9988
|
mpQueueStdout.put((0, GM.REDIRECT_QUEUE_DATA, GM.Globals[GM.STDOUT][GM.REDIRECT_MULTI_FD].getvalue()))
|
|
@@ -11137,7 +11146,7 @@ class Credentials(google.oauth2.credentials.Credentials):
|
|
|
11137
11146
|
|
|
11138
11147
|
def doOAuthRequest(currentScopes, login_hint, verifyScopes=False):
|
|
11139
11148
|
client_id, client_secret = getOAuthClientIDAndSecret()
|
|
11140
|
-
scopesList = API.getClientScopesList(GC.Values[GC.TODRIVE_CLIENTACCESS])
|
|
11149
|
+
scopesList = API.getClientScopesList(GC.Values[GC.COMMANDDATA_CLIENTACCESS], GC.Values[GC.TODRIVE_CLIENTACCESS])
|
|
11141
11150
|
if not currentScopes or verifyScopes:
|
|
11142
11151
|
selectedScopes = getScopesFromUser(scopesList, True, currentScopes)
|
|
11143
11152
|
if selectedScopes is None:
|
|
@@ -11183,7 +11192,7 @@ def doOAuthCreate():
|
|
|
11183
11192
|
else:
|
|
11184
11193
|
login_hint = None
|
|
11185
11194
|
scopes = []
|
|
11186
|
-
scopesList = API.getClientScopesList(GC.Values[GC.TODRIVE_CLIENTACCESS])
|
|
11195
|
+
scopesList = API.getClientScopesList(GC.Values[GC.COMMANDDATA_CLIENTACCESS], GC.Values[GC.TODRIVE_CLIENTACCESS])
|
|
11187
11196
|
while Cmd.ArgumentsRemaining():
|
|
11188
11197
|
myarg = getArgument()
|
|
11189
11198
|
if myarg == 'admin':
|
|
@@ -11199,7 +11208,9 @@ def doOAuthCreate():
|
|
|
11199
11208
|
scopes.append(uscope)
|
|
11200
11209
|
break
|
|
11201
11210
|
else:
|
|
11202
|
-
invalidChoiceExit(uscope,
|
|
11211
|
+
invalidChoiceExit(uscope,
|
|
11212
|
+
API.getClientScopesURLs(GC.Values[GC.COMMANDDATA_CLIENTACCESS], GC.Values[GC.TODRIVE_CLIENTACCESS]),
|
|
11213
|
+
True)
|
|
11203
11214
|
else:
|
|
11204
11215
|
unknownArgumentExit()
|
|
11205
11216
|
if len(scopes) == 0:
|
|
@@ -11310,7 +11321,7 @@ def doOAuthUpdate():
|
|
|
11310
11321
|
if 'scopes' in jsonDict:
|
|
11311
11322
|
currentScopes = jsonDict['scopes']
|
|
11312
11323
|
else:
|
|
11313
|
-
currentScopes = API.getClientScopesURLs(GC.Values[GC.TODRIVE_CLIENTACCESS])
|
|
11324
|
+
currentScopes = API.getClientScopesURLs(GC.Values[GC.COMMANDDATA_CLIENTACCESS], GC.Values[GC.TODRIVE_CLIENTACCESS])
|
|
11314
11325
|
else:
|
|
11315
11326
|
currentScopes = []
|
|
11316
11327
|
except (AttributeError, IndexError, KeyError, SyntaxError, TypeError, ValueError) as e:
|
|
@@ -34,7 +34,12 @@ def main():
|
|
|
34
34
|
|
|
35
35
|
# Run from command line
|
|
36
36
|
if __name__ == '__main__':
|
|
37
|
-
if
|
|
37
|
+
if getattr(sys, 'frozen', False): # we're frozen:
|
|
38
38
|
multiprocessing.freeze_support()
|
|
39
|
+
if platform.system() == 'Linux':
|
|
40
|
+
# set explictly since it's not default in Python < 3.14, forkserver should
|
|
41
|
+
# be safer than fork and less likely to see bulk command hangs.
|
|
42
|
+
multiprocessing.set_start_method('forkserver')
|
|
43
|
+
else:
|
|
39
44
|
multiprocessing.set_start_method('spawn')
|
|
40
45
|
main()
|
|
@@ -60,7 +60,6 @@ DIRECTORY = 'directory'
|
|
|
60
60
|
DOCS = 'docs'
|
|
61
61
|
DRIVE2 = 'drive2'
|
|
62
62
|
DRIVE3 = 'drive3'
|
|
63
|
-
DRIVECD = 'drivecd'
|
|
64
63
|
DRIVETD = 'drivetd'
|
|
65
64
|
DRIVEACTIVITY = 'driveactivity'
|
|
66
65
|
DRIVELABELS = 'drivelabels'
|
|
@@ -92,7 +91,6 @@ SERVICEACCOUNTLOOKUP = 'serviceaccountlookup'
|
|
|
92
91
|
SERVICEMANAGEMENT = 'servicemanagement'
|
|
93
92
|
SERVICEUSAGE = 'serviceusage'
|
|
94
93
|
SHEETS = 'sheets'
|
|
95
|
-
SHEETSCD = 'sheetscd'
|
|
96
94
|
SHEETSTD = 'sheetstd'
|
|
97
95
|
SITEVERIFICATION = 'siteVerification'
|
|
98
96
|
STORAGE = 'storage'
|
|
@@ -107,6 +105,8 @@ YOUTUBE = 'youtube'
|
|
|
107
105
|
BUSINESSACCOUNTMANAGEMENT_SCOPE = 'https://www.googleapis.com/auth/business.manage'
|
|
108
106
|
CHROMEVERSIONHISTORY_URL = 'https://versionhistory.googleapis.com/v1/chrome/platforms'
|
|
109
107
|
DRIVE_SCOPE = 'https://www.googleapis.com/auth/drive'
|
|
108
|
+
DRIVE_FILE_SCOPE = 'https://www.googleapis.com/auth/drive.file'
|
|
109
|
+
DRIVE_READONLY_SCOPE = 'https://www.googleapis.com/auth/drive.readonly'
|
|
110
110
|
GMAIL_SEND_SCOPE = 'https://www.googleapis.com/auth/gmail.send'
|
|
111
111
|
GOOGLE_AUTH_PROVIDER_X509_CERT_URL = 'https://www.googleapis.com/oauth2/v1/certs'
|
|
112
112
|
GOOGLE_OAUTH2_ENDPOINT = 'https://accounts.google.com/o/oauth2/v2/auth'
|
|
@@ -256,7 +256,6 @@ _INFO = {
|
|
|
256
256
|
DOCS: {'name': 'Docs API', 'version': 'v1', 'v2discovery': True},
|
|
257
257
|
DRIVE2: {'name': 'Drive API v2', 'version': 'v2', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
258
258
|
DRIVE3: {'name': 'Drive API v3', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
259
|
-
DRIVECD: {'name': 'Drive API v3 - read command data', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
260
259
|
DRIVETD: {'name': 'Drive API v3 - write todrive data', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
|
|
261
260
|
DRIVEACTIVITY: {'name': 'Drive Activity API v2', 'version': 'v2', 'v2discovery': True},
|
|
262
261
|
DRIVELABELS_ADMIN: {'name': 'Drive Labels API - Admin', 'version': 'v2', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
|
|
@@ -287,7 +286,6 @@ _INFO = {
|
|
|
287
286
|
SERVICEMANAGEMENT: {'name': 'Service Management API', 'version': 'v1', 'v2discovery': True},
|
|
288
287
|
SERVICEUSAGE: {'name': 'Service Usage API', 'version': 'v1', 'v2discovery': True},
|
|
289
288
|
SHEETS: {'name': 'Sheets API', 'version': 'v4', 'v2discovery': True},
|
|
290
|
-
SHEETSCD: {'name': 'Sheets API - read command data', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
|
|
291
289
|
SHEETSTD: {'name': 'Sheets API - write todrive data', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
|
|
292
290
|
SITEVERIFICATION: {'name': 'Site Verification API', 'version': 'v1', 'v2discovery': True},
|
|
293
291
|
STORAGE: {'name': 'Cloud Storage API', 'version': 'v1', 'v2discovery': True},
|
|
@@ -535,6 +533,17 @@ _CLIENT_SCOPES = [
|
|
|
535
533
|
'scope': 'https://www.googleapis.com/auth/ediscovery'},
|
|
536
534
|
]
|
|
537
535
|
|
|
536
|
+
_COMMANDDATA_CLIENT_SCOPES = [
|
|
537
|
+
{'name': 'Drive API - commanddata_clientaccess',
|
|
538
|
+
'api': DRIVE3,
|
|
539
|
+
'subscopes': [],
|
|
540
|
+
'scope': DRIVE_READONLY_SCOPE},
|
|
541
|
+
{'name': 'Sheets API - commanddata_clientaccess',
|
|
542
|
+
'api': SHEETS,
|
|
543
|
+
'subscopes': [],
|
|
544
|
+
'scope': 'https://www.googleapis.com/auth/spreadsheets.readonly'},
|
|
545
|
+
]
|
|
546
|
+
|
|
538
547
|
_TODRIVE_CLIENT_SCOPES = [
|
|
539
548
|
{'name': 'Drive API - todrive_clientaccess',
|
|
540
549
|
'api': DRIVE3,
|
|
@@ -543,7 +552,7 @@ _TODRIVE_CLIENT_SCOPES = [
|
|
|
543
552
|
{'name': 'Drive File API - todrive_clientaccess',
|
|
544
553
|
'api': DRIVE3,
|
|
545
554
|
'subscopes': [],
|
|
546
|
-
'scope':
|
|
555
|
+
'scope': DRIVE_FILE_SCOPE},
|
|
547
556
|
{'name': 'Gmail API - todrive_clientaccess',
|
|
548
557
|
'api': GMAIL,
|
|
549
558
|
'subscopes': [],
|
|
@@ -648,7 +657,8 @@ _SVCACCT_SCOPES = [
|
|
|
648
657
|
{'name': 'Drive Activity API v2 - must pair with Drive API',
|
|
649
658
|
'api': DRIVEACTIVITY,
|
|
650
659
|
'subscopes': [],
|
|
651
|
-
'scope':
|
|
660
|
+
'scope': [DRIVE_READONLY_SCOPE,
|
|
661
|
+
'https://www.googleapis.com/auth/drive.activity']},
|
|
652
662
|
{'name': 'Drive Labels API - Admin',
|
|
653
663
|
'api': DRIVELABELS_ADMIN,
|
|
654
664
|
'subscopes': READONLY,
|
|
@@ -661,10 +671,12 @@ _SVCACCT_SCOPES = [
|
|
|
661
671
|
'api': DOCS,
|
|
662
672
|
'subscopes': READONLY,
|
|
663
673
|
'scope': 'https://www.googleapis.com/auth/documents'},
|
|
664
|
-
{'name': 'Forms API',
|
|
674
|
+
{'name': 'Forms API - must pair with Drive API',
|
|
665
675
|
'api': FORMS,
|
|
666
676
|
'subscopes': [],
|
|
667
|
-
'scope':
|
|
677
|
+
'scope': [DRIVE_READONLY_SCOPE,
|
|
678
|
+
'https://www.googleapis.com/auth/forms.body',
|
|
679
|
+
'https://www.googleapis.com/auth/forms.responses.readonly']},
|
|
668
680
|
{'name': 'Gmail API - Full Access (Labels, Messages)',
|
|
669
681
|
'api': GMAIL,
|
|
670
682
|
'subscopes': [],
|
|
@@ -755,12 +767,7 @@ _SVCACCT_SCOPES = [
|
|
|
755
767
|
]
|
|
756
768
|
|
|
757
769
|
_SVCACCT_SPECIAL_SCOPES = [
|
|
758
|
-
{'name': 'Drive API -
|
|
759
|
-
'api': DRIVECD,
|
|
760
|
-
'subscopes': [],
|
|
761
|
-
'offByDefault': True,
|
|
762
|
-
'scope': DRIVE_SCOPE+'.readonly'},
|
|
763
|
-
{'name': 'Drive API - write todrive data',
|
|
770
|
+
{'name': 'Drive API - write todrive data - has access to all Drive',
|
|
764
771
|
'api': DRIVETD,
|
|
765
772
|
'subscopes': [],
|
|
766
773
|
'offByDefault': True,
|
|
@@ -775,12 +782,7 @@ _SVCACCT_SPECIAL_SCOPES = [
|
|
|
775
782
|
'subscopes': [],
|
|
776
783
|
'offByDefault': True,
|
|
777
784
|
'scope': GMAIL_SEND_SCOPE},
|
|
778
|
-
{'name': 'Sheets API -
|
|
779
|
-
'api': SHEETSCD,
|
|
780
|
-
'offByDefault': True,
|
|
781
|
-
'subscopes': [],
|
|
782
|
-
'scope': 'https://www.googleapis.com/auth/spreadsheets.readonly'},
|
|
783
|
-
{'name': 'Sheets API - write todrive data',
|
|
785
|
+
{'name': 'Sheets API - write todrive data - has access to all Sheets',
|
|
784
786
|
'api': SHEETSTD,
|
|
785
787
|
'offByDefault': True,
|
|
786
788
|
'subscopes': [],
|
|
@@ -806,14 +808,18 @@ def getVersion(api):
|
|
|
806
808
|
def getClientScopesSet(api):
|
|
807
809
|
return {scope['scope'] for scope in _CLIENT_SCOPES if scope['api'] == api}
|
|
808
810
|
|
|
809
|
-
def getClientScopesList(todriveClientAccess):
|
|
811
|
+
def getClientScopesList(commanddataClientAccess, todriveClientAccess):
|
|
810
812
|
caScopes = _CLIENT_SCOPES[:]
|
|
813
|
+
if commanddataClientAccess:
|
|
814
|
+
caScopes.extend(_COMMANDDATA_CLIENT_SCOPES)
|
|
811
815
|
if todriveClientAccess:
|
|
812
816
|
caScopes.extend(_TODRIVE_CLIENT_SCOPES)
|
|
813
817
|
return sorted(caScopes, key=lambda k: k['name'])
|
|
814
818
|
|
|
815
|
-
def getClientScopesURLs(todriveClientAccess):
|
|
819
|
+
def getClientScopesURLs(commanddataClientAccess, todriveClientAccess):
|
|
816
820
|
caScopes = _CLIENT_SCOPES[:]
|
|
821
|
+
if commanddataClientAccess:
|
|
822
|
+
caScopes.extend(_COMMANDDATA_CLIENT_SCOPES)
|
|
817
823
|
if todriveClientAccess:
|
|
818
824
|
caScopes.extend(_TODRIVE_CLIENT_SCOPES)
|
|
819
825
|
return sorted({scope['scope'] for scope in _CLIENT_SCOPES})
|
|
@@ -85,6 +85,8 @@ CMDLOG_MAX__BACKUPS = 'cmdlog_max__backups'
|
|
|
85
85
|
CMDLOG_MAX_BACKUPS = 'cmdlog_max_backups'
|
|
86
86
|
# Command logging max kilo bytes per log file
|
|
87
87
|
CMDLOG_MAX_KILO_BYTES = 'cmdlog_max_kilo_bytes'
|
|
88
|
+
# Use client access for command data from Google Docs/Sheets
|
|
89
|
+
COMMANDDATA_CLIENTACCESS = 'commanddata_clientaccess'
|
|
88
90
|
# GAM config directory containing client_secrets.json, oauth2.txt, oauth2service.json, extra_args.txt
|
|
89
91
|
CONFIG_DIR = 'config_dir'
|
|
90
92
|
# When retrieving lists of Google Contacts from API, how many should be retrieved in each chunk
|
|
@@ -344,6 +346,7 @@ Defaults = {
|
|
|
344
346
|
CMDLOG: '',
|
|
345
347
|
CMDLOG_MAX_BACKUPS: 5,
|
|
346
348
|
CMDLOG_MAX_KILO_BYTES: 1000,
|
|
349
|
+
COMMANDDATA_CLIENTACCESS: FALSE,
|
|
347
350
|
CONFIG_DIR: '',
|
|
348
351
|
CONTACT_MAX_RESULTS: '100',
|
|
349
352
|
CSV_INPUT_COLUMN_DELIMITER: ',',
|
|
@@ -512,6 +515,7 @@ VAR_INFO = {
|
|
|
512
515
|
CMDLOG: {VAR_TYPE: TYPE_FILE, VAR_ACCESS: os.W_OK},
|
|
513
516
|
CMDLOG_MAX_BACKUPS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 10)},
|
|
514
517
|
CMDLOG_MAX_KILO_BYTES: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (100, 10000)},
|
|
518
|
+
COMMANDDATA_CLIENTACCESS: {VAR_TYPE: TYPE_BOOLEAN},
|
|
515
519
|
CONFIG_DIR: {VAR_TYPE: TYPE_DIRECTORY, VAR_ENVVAR: 'GAMUSERCONFIGDIR'},
|
|
516
520
|
CONTACT_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 10000)},
|
|
517
521
|
CSV_INPUT_COLUMN_DELIMITER: {VAR_TYPE: TYPE_CHARACTER},
|
|
@@ -10,6 +10,14 @@ 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.01
|
|
14
|
+
|
|
15
|
+
Updated GAM to handle the following error that occurs when GAM tries to authenticate
|
|
16
|
+
as a user that has been disabled by Google.
|
|
17
|
+
```
|
|
18
|
+
ERROR: Authentication Token Error - invalid_account: Forbidden
|
|
19
|
+
```
|
|
20
|
+
|
|
13
21
|
### 7.24.00
|
|
14
22
|
|
|
15
23
|
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,
|
|
@@ -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.24.
|
|
255
|
+
GAM 7.24.01 - 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.24.
|
|
993
|
+
GAM 7.24.01 - 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
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Print the current version of Gam with details
|
|
4
4
|
```
|
|
5
5
|
gam version
|
|
6
|
-
GAM 7.24.
|
|
6
|
+
GAM 7.24.01 - 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.24.
|
|
18
|
+
GAM 7.24.01 - 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.24.
|
|
30
|
+
GAM 7.24.01 - 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
|