gam7 7.6.10__tar.gz → 7.6.12__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.6.10 → gam7-7.6.12}/.github/workflows/build.yml +14 -2
- {gam7-7.6.10 → gam7-7.6.12}/PKG-INFO +2 -2
- {gam7-7.6.10 → gam7-7.6.12}/pyproject.toml +2 -1
- {gam7-7.6.10 → gam7-7.6.12}/src/GamCommands.txt +0 -11
- {gam7-7.6.10 → gam7-7.6.12}/src/GamUpdate.txt +15 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/__init__.py +68 -76
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glapi.py +1 -8
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glclargs.py +0 -2
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glentity.py +0 -2
- {gam7-7.6.10 → gam7-7.6.12}/src/requirements.txt +1 -1
- {gam7-7.6.10 → gam7-7.6.12}/src/setup.cfg +4 -2
- {gam7-7.6.10 → gam7-7.6.12}/wiki/GamUpdates.md +15 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Analytics-Admin.md +1 -38
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Chat.md +3 -3
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Version-and-Help.md +6 -6
- {gam7-7.6.10 → gam7-7.6.12}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/actions/decrypt.sh +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/actions/entitlements.plist +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/stale.yml +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.github/workflows/pypi.yml +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/.pre-commit-config.yaml +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/LICENSE +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/README.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/.gitignore +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/LICENSE +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/cacerts.pem +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/callgam.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/__main__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/__init__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/auth.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/client.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/core.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/data.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/http.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/http_core.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/service.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/token_store.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/url.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/cacerts.pem +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/service.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam/six.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam-install.sh +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam-setup.bat +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam.exe.manifest +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam.spec +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/gam.wxs +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/license.rtf +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/requirements-dev.txt +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/setup.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/tools/mkGamRef.py +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/tools/openssl.props +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/src/version_info.txt.in +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/00scratch.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Addresses.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Administrators.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Alert-Center.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Aliases.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Authorization.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Basic-Items.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Calendars-Access.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Calendars-Events.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Calendars.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Chat-Bot.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Customer.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Domain-SharedContacts-GAL.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Domains-Verification.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Domains.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Drive-Items.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Groups-Membership.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Groups.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Home.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Licenses.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/List-Items.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/List.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Organizational-Units.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Other-Resources.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Permission-Matches.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/README.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Rclone.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Reports.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Reseller.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Resources.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Schemas.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Scripts.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Send-Email.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Shared-Drives.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Sites.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Tag-Replace.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Todrive.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Calendars.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Contacts.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Files-Display.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Permissions.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Forms.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Meet.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Photo.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Tasks.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Tokens.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-YouTube.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Users.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/_Sidebar.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/gam.cfg.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-AdminSettingsExamples.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Android-Installation.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-BulkOperations.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-CalendarExamples.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Chat-Bot.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Drive.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Email.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Groups.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Users.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Custom-Schemas.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Data-Transfers.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-DomainVerification.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-ExamplesCSV.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-ExamplesOrganizations.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM-options-files.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM3CSVListings.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM3GroupSettings.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM7-FAQ.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GoogleDriveManagement.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Home.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-LicenseExamples.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Managing-Admins.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Managing-Devices.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-OAuthKeyManagement.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Printers.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-ResellerCommands.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-SecurityExamples.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Use-a-Yubikey.md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.6.10 → gam7-7.6.12}/wiki/l-_Footer.md +0 -0
|
@@ -28,6 +28,8 @@ env:
|
|
|
28
28
|
OPENSSL_SOURCE_PATH: ${{ github.workspace }}/src/openssl
|
|
29
29
|
PYTHON_INSTALL_PATH: ${{ github.workspace }}/bin/python
|
|
30
30
|
PYTHON_SOURCE_PATH: ${{ github.workspace }}/src/cpython
|
|
31
|
+
CRYPTOGRAPHY_BUILD_OPENSSL_NO_LEGACY: 1
|
|
32
|
+
CRYPTOGRAPHY_OPENSSL_NO_LEGACY: 1
|
|
31
33
|
|
|
32
34
|
jobs:
|
|
33
35
|
build:
|
|
@@ -197,7 +199,7 @@ jobs:
|
|
|
197
199
|
run: |
|
|
198
200
|
echo "RUNNING: apt update..."
|
|
199
201
|
sudo apt-get -qq --yes update
|
|
200
|
-
sudo apt-get -qq --yes install swig libpcsclite-dev libxslt1-dev libsqlite3-dev
|
|
202
|
+
sudo apt-get -qq --yes install swig libpcsclite-dev libxslt1-dev libsqlite3-dev libffi-dev pkg-config
|
|
201
203
|
|
|
202
204
|
- name: MacOS install tools
|
|
203
205
|
if: runner.os == 'macOS'
|
|
@@ -450,6 +452,9 @@ jobs:
|
|
|
450
452
|
"$PYTHON" -m pip install --upgrade pip
|
|
451
453
|
"$PYTHON" -m pip install --upgrade wheel
|
|
452
454
|
"$PYTHON" -m pip install --upgrade setuptools
|
|
455
|
+
"$PYTHON" -m pip install --upgrade importlib-metadata
|
|
456
|
+
"$PYTHON" -m pip install --upgrade setuptools-scm
|
|
457
|
+
"$PYTHON" -m pip list
|
|
453
458
|
|
|
454
459
|
- name: Custom wheels for Win arm64
|
|
455
460
|
if: runner.os == 'Windows' && runner.arch == 'ARM64'
|
|
@@ -462,7 +467,14 @@ jobs:
|
|
|
462
467
|
echo "Downloading ${latest_crypt_whl}..."
|
|
463
468
|
curl -O -L "$latest_crypt_whl"
|
|
464
469
|
"$PYTHON" -m pip install cryptography*.whl
|
|
465
|
-
|
|
470
|
+
|
|
471
|
+
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
472
|
+
|
|
473
|
+
# - name: Compile cryptography from source (no legacy)
|
|
474
|
+
# if: runner.os != 'Windows' || runner.arch != 'ARM64'
|
|
475
|
+
# run: |
|
|
476
|
+
# pip install --no-binary ":all:" --force cryptography
|
|
477
|
+
|
|
466
478
|
- name: Install pip requirements
|
|
467
479
|
run: |
|
|
468
480
|
echo "before anything..."
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gam7
|
|
3
|
-
Version: 7.6.
|
|
3
|
+
Version: 7.6.12
|
|
4
4
|
Summary: CLI tool to manage Google Workspace
|
|
5
5
|
Project-URL: Homepage, https://github.com/GAM-team/GAM
|
|
6
6
|
Project-URL: Issues, https://github.com/GAM-team/GAM/issues
|
|
@@ -27,7 +27,7 @@ Requires-Dist: google-auth-httplib2>=0.2.0
|
|
|
27
27
|
Requires-Dist: google-auth-oauthlib>=1.2.2
|
|
28
28
|
Requires-Dist: google-auth>=2.39.0
|
|
29
29
|
Requires-Dist: httplib2>=0.22.0
|
|
30
|
-
Requires-Dist: lxml
|
|
30
|
+
Requires-Dist: lxml>=5.4.0
|
|
31
31
|
Requires-Dist: passlib>=1.7.4
|
|
32
32
|
Requires-Dist: pathvalidate>=3.2.3
|
|
33
33
|
Requires-Dist: pyscard==2.2.1
|
|
@@ -7,6 +7,7 @@ authors = [
|
|
|
7
7
|
{ name="Jay Lee", email="jay0lee@gmail.com" },
|
|
8
8
|
{ name="Ross Scroggs", email="Ross.Scroggs@gmail.com" },
|
|
9
9
|
]
|
|
10
|
+
# # The following files should be edited to match: setup.cfg, requirements.txt
|
|
10
11
|
dependencies = [
|
|
11
12
|
"chardet>=5.2.0",
|
|
12
13
|
"cryptography>=44.0.2",
|
|
@@ -17,7 +18,7 @@ dependencies = [
|
|
|
17
18
|
"google-auth-oauthlib>=1.2.2",
|
|
18
19
|
"google-auth>=2.39.0",
|
|
19
20
|
"httplib2>=0.22.0",
|
|
20
|
-
"lxml",
|
|
21
|
+
"lxml>=5.4.0",
|
|
21
22
|
"passlib>=1.7.4",
|
|
22
23
|
"pathvalidate>=3.2.3",
|
|
23
24
|
"pyscard==2.2.1",
|
|
@@ -1523,17 +1523,6 @@ gam print alias|aliases [todrive <ToDriveAttribute>*]
|
|
|
1523
1523
|
|
|
1524
1524
|
gam whatis <EmailItem> [noinfo] [noinivitablecheck]
|
|
1525
1525
|
|
|
1526
|
-
# Analytics UA
|
|
1527
|
-
|
|
1528
|
-
gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
|
|
1529
|
-
accountid [accounts/]<String>
|
|
1530
|
-
[maxresults <Integer>]
|
|
1531
|
-
[formatjson [quotechar <Character>]]
|
|
1532
|
-
gam <UserTypeEntity> show analyticuaproperties
|
|
1533
|
-
accountid [accounts/]<String>
|
|
1534
|
-
[maxresults <Integer>]
|
|
1535
|
-
[formatjson]
|
|
1536
|
-
|
|
1537
1526
|
# Analytics Admin
|
|
1538
1527
|
|
|
1539
1528
|
gam <UserTypeEntity> print analyticaccounts [todrive <ToDriveAttribute>*]
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
7.06.12
|
|
2
|
+
|
|
3
|
+
Deleted commands to display Analytic UA properties; the API has been deprecated.
|
|
4
|
+
```
|
|
5
|
+
gam <UserTypeEntity> print|show analyticuaproperties
|
|
6
|
+
```
|
|
7
|
+
|
|
8
|
+
7.06.11
|
|
9
|
+
|
|
10
|
+
Improved `gam checkconn`.
|
|
11
|
+
|
|
12
|
+
Updated `gam print group-members` and `gam print cigroup-members` to recognize members
|
|
13
|
+
that are groups representing chat spaces. For now, these groups are not expanded when
|
|
14
|
+
`recursive` is specified.
|
|
15
|
+
|
|
1
16
|
7.06.10
|
|
2
17
|
|
|
3
18
|
Added the following license SKU.
|
|
@@ -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.06.
|
|
28
|
+
__version__ = '7.06.12'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -95,6 +95,8 @@ import wsgiref.simple_server
|
|
|
95
95
|
import wsgiref.util
|
|
96
96
|
import zipfile
|
|
97
97
|
|
|
98
|
+
# disable legacy stuff we don't use and isn't secure
|
|
99
|
+
os.environ['CRYPTOGRAPHY_OPENSSL_NO_LEGACY'] = "1"
|
|
98
100
|
from cryptography import x509
|
|
99
101
|
from cryptography.hazmat.backends import default_backend
|
|
100
102
|
from cryptography.hazmat.primitives import hashes, serialization
|
|
@@ -9358,32 +9360,9 @@ def getOSPlatform():
|
|
|
9358
9360
|
|
|
9359
9361
|
# gam checkconnection
|
|
9360
9362
|
def doCheckConnection():
|
|
9361
|
-
|
|
9362
|
-
|
|
9363
|
-
|
|
9364
|
-
'workspace.google.com',
|
|
9365
|
-
'oauth2.googleapis.com',
|
|
9366
|
-
'www.googleapis.com']
|
|
9367
|
-
fix_hosts = {'calendar-json.googleapis.com': 'www.googleapis.com',
|
|
9368
|
-
'storage-api.googleapis.com': 'storage.googleapis.com'}
|
|
9369
|
-
api_hosts = ['apps-apis.google.com',
|
|
9370
|
-
'sites.google.com',
|
|
9371
|
-
'versionhistory.googleapis.com',
|
|
9372
|
-
'www.google.com']
|
|
9373
|
-
for host in API.PROJECT_APIS:
|
|
9374
|
-
host = fix_hosts.get(host, host)
|
|
9375
|
-
if host not in api_hosts and host not in hosts:
|
|
9376
|
-
api_hosts.append(host)
|
|
9377
|
-
hosts.extend(sorted(api_hosts))
|
|
9378
|
-
host_count = len(hosts)
|
|
9379
|
-
httpObj = getHttpObj(timeout=30)
|
|
9380
|
-
httpObj.follow_redirects = False
|
|
9381
|
-
headers = {'user-agent': GAM_USER_AGENT}
|
|
9382
|
-
okay = createGreenText('OK')
|
|
9383
|
-
not_okay = createRedText('ERROR')
|
|
9384
|
-
try_count = 0
|
|
9385
|
-
success_count = 0
|
|
9386
|
-
for host in hosts:
|
|
9363
|
+
|
|
9364
|
+
def check_host(host):
|
|
9365
|
+
nonlocal try_count, okay, not_okay, success_count
|
|
9387
9366
|
try_count += 1
|
|
9388
9367
|
dns_err = None
|
|
9389
9368
|
ip = 'unknown'
|
|
@@ -9393,12 +9372,12 @@ def doCheckConnection():
|
|
|
9393
9372
|
dns_err = f'{not_okay}\n DNS failure: {str(e)}\n'
|
|
9394
9373
|
except Exception as e:
|
|
9395
9374
|
dns_err = f'{not_okay}\n Unknown DNS failure: {str(e)}\n'
|
|
9396
|
-
check_line = f'Checking {host} ({ip}) ({try_count}
|
|
9375
|
+
check_line = f'Checking {host} ({ip}) ({try_count})...'
|
|
9397
9376
|
writeStdout(f'{check_line:<100}')
|
|
9398
9377
|
flushStdout()
|
|
9399
9378
|
if dns_err:
|
|
9400
9379
|
writeStdout(dns_err)
|
|
9401
|
-
|
|
9380
|
+
return
|
|
9402
9381
|
gen_firewall = 'You probably have security software or a firewall on your machine or network that is preventing GAM from making Internet connections. Check your network configuration or try running GAM on a hotspot or home network to see if the problem exists only on your organization\'s network.'
|
|
9403
9382
|
try:
|
|
9404
9383
|
if host.startswith('http'):
|
|
@@ -9427,7 +9406,54 @@ def doCheckConnection():
|
|
|
9427
9406
|
writeStdout(f'{not_okay}\n Timed out trying to connect to host\n')
|
|
9428
9407
|
except Exception as e:
|
|
9429
9408
|
writeStdout(f'{not_okay}\n {str(e)}\n')
|
|
9430
|
-
|
|
9409
|
+
|
|
9410
|
+
try_count = 0
|
|
9411
|
+
httpObj = getHttpObj(timeout=30)
|
|
9412
|
+
httpObj.follow_redirects = False
|
|
9413
|
+
headers = {'user-agent': GAM_USER_AGENT}
|
|
9414
|
+
okay = createGreenText('OK')
|
|
9415
|
+
not_okay = createRedText('ERROR')
|
|
9416
|
+
success_count = 0
|
|
9417
|
+
initial_hosts = ['api.github.com',
|
|
9418
|
+
'raw.githubusercontent.com',
|
|
9419
|
+
'accounts.google.com',
|
|
9420
|
+
'oauth2.googleapis.com',
|
|
9421
|
+
'www.googleapis.com']
|
|
9422
|
+
for host in initial_hosts:
|
|
9423
|
+
check_host(host)
|
|
9424
|
+
api_hosts = ['apps-apis.google.com',
|
|
9425
|
+
'www.google.com']
|
|
9426
|
+
for host in api_hosts:
|
|
9427
|
+
check_host(host)
|
|
9428
|
+
# For v2 discovery APIs, GAM gets discovery file from <api>.googleapis.com so
|
|
9429
|
+
# add those domains.
|
|
9430
|
+
disc_hosts = []
|
|
9431
|
+
for api, config in API._INFO.items():
|
|
9432
|
+
if config.get('v2discovery') and not config.get('localdiscovery'):
|
|
9433
|
+
if mapped_api := config.get('mappedAPI'):
|
|
9434
|
+
api = mapped_api
|
|
9435
|
+
host = f'{api}.googleapis.com'
|
|
9436
|
+
if host not in disc_hosts:
|
|
9437
|
+
disc_hosts.append(host)
|
|
9438
|
+
for host in disc_hosts:
|
|
9439
|
+
check_host(host)
|
|
9440
|
+
checked_hosts = initial_hosts + api_hosts + disc_hosts
|
|
9441
|
+
# now we need to "build" each API and check it's base URL host
|
|
9442
|
+
# if we haven't already. This may not be any hosts at all but
|
|
9443
|
+
# to ensure we are checking all hosts GAM may use we should
|
|
9444
|
+
# keep this.
|
|
9445
|
+
for api in API._INFO:
|
|
9446
|
+
if api in [API.CONTACTS, API.EMAIL_AUDIT]:
|
|
9447
|
+
continue
|
|
9448
|
+
svc = getService(api, httpObj)
|
|
9449
|
+
base_url = svc._rootDesc.get('baseUrl')
|
|
9450
|
+
parsed_base_url = urlparse(base_url)
|
|
9451
|
+
base_host = parsed_base_url.netloc
|
|
9452
|
+
if base_host not in checked_hosts:
|
|
9453
|
+
writeStdout(f'Checking {base_host} for {api}\n')
|
|
9454
|
+
check_host(base_host)
|
|
9455
|
+
checked_hosts.append(base_host)
|
|
9456
|
+
if success_count == try_count:
|
|
9431
9457
|
writeStdout(createGreenText('All hosts passed!\n'))
|
|
9432
9458
|
else:
|
|
9433
9459
|
systemErrorExit(3, createYellowText('Some hosts failed to connect! Please follow the recommendations for those hosts to correct any issues and try again.'))
|
|
@@ -15778,27 +15804,13 @@ ANALYTIC_ENTITY_MAP = {
|
|
|
15778
15804
|
'pageSize': 50,
|
|
15779
15805
|
'maxPageSize': 200,
|
|
15780
15806
|
},
|
|
15781
|
-
Ent.ANALYTIC_UA_PROPERTY:
|
|
15782
|
-
{'titles': ['User', 'accountId', 'name', 'id', 'created', 'updated'],
|
|
15783
|
-
'JSONtitles': ['User', 'accountId', 'name', 'id', 'JSON'],
|
|
15784
|
-
'timeObjects': ['created', 'updated'],
|
|
15785
|
-
'items': 'items',
|
|
15786
|
-
'pageSize': 50,
|
|
15787
|
-
'maxPageSize': 200,
|
|
15788
|
-
},
|
|
15789
15807
|
}
|
|
15790
15808
|
|
|
15791
15809
|
def printShowAnalyticItems(users, entityType):
|
|
15792
15810
|
analyticEntityMap = ANALYTIC_ENTITY_MAP[entityType]
|
|
15793
15811
|
csvPF = CSVPrintFile(analyticEntityMap['titles'], 'sortall') if Act.csvFormat() else None
|
|
15794
15812
|
FJQC = FormatJSONQuoteChar(csvPF)
|
|
15795
|
-
|
|
15796
|
-
kwargs = {'pageSize': analyticEntityMap['pageSize']}
|
|
15797
|
-
api = API.ANALYTICS_ADMIN
|
|
15798
|
-
else:
|
|
15799
|
-
# kwargs = {'webPropertyId': '~all'}
|
|
15800
|
-
kwargs = {}
|
|
15801
|
-
api = API.ANALYTICS
|
|
15813
|
+
kwargs = {'pageSize': analyticEntityMap['pageSize']}
|
|
15802
15814
|
if entityType in {Ent.ANALYTIC_ACCOUNT, Ent.ANALYTIC_PROPERTY}:
|
|
15803
15815
|
kwargs['showDeleted'] = False
|
|
15804
15816
|
while Cmd.ArgumentsRemaining():
|
|
@@ -15811,16 +15823,12 @@ def printShowAnalyticItems(users, entityType):
|
|
|
15811
15823
|
kwargs['showDeleted'] = getBoolean()
|
|
15812
15824
|
elif entityType == Ent.ANALYTIC_PROPERTY and myarg == 'filter':
|
|
15813
15825
|
kwargs['filter'] = getString(Cmd.OB_STRING)
|
|
15814
|
-
elif entityType == Ent.ANALYTIC_UA_PROPERTY and myarg == 'accountid':
|
|
15815
|
-
kwargs['accountId'] = getString(Cmd.OB_STRING).replace('accounts/', '')
|
|
15816
15826
|
elif entityType == Ent.ANALYTIC_DATASTREAM and myarg == 'parent':
|
|
15817
15827
|
kwargs['parent'] = getString(Cmd.OB_STRING)
|
|
15818
15828
|
else:
|
|
15819
15829
|
FJQC.GetFormatJSONQuoteChar(myarg, True)
|
|
15820
15830
|
if entityType == Ent.ANALYTIC_PROPERTY and 'filter' not in kwargs:
|
|
15821
15831
|
missingArgumentExit('filter')
|
|
15822
|
-
if entityType == Ent.ANALYTIC_UA_PROPERTY and 'accountId' not in kwargs:
|
|
15823
|
-
missingArgumentExit('accountid')
|
|
15824
15832
|
if entityType == Ent.ANALYTIC_DATASTREAM and 'parent' not in kwargs:
|
|
15825
15833
|
missingArgumentExit('parent')
|
|
15826
15834
|
if csvPF and FJQC.formatJSON:
|
|
@@ -15828,7 +15836,7 @@ def printShowAnalyticItems(users, entityType):
|
|
|
15828
15836
|
i, count, users = getEntityArgument(users)
|
|
15829
15837
|
for user in users:
|
|
15830
15838
|
i += 1
|
|
15831
|
-
user, analytics = buildGAPIServiceObject(
|
|
15839
|
+
user, analytics = buildGAPIServiceObject(API.ANALYTICS_ADMIN, user, i, count)
|
|
15832
15840
|
if not analytics:
|
|
15833
15841
|
continue
|
|
15834
15842
|
if entityType == Ent.ANALYTIC_ACCOUNT:
|
|
@@ -15837,11 +15845,8 @@ def printShowAnalyticItems(users, entityType):
|
|
|
15837
15845
|
service = analytics.accountSummaries()
|
|
15838
15846
|
elif entityType == Ent.ANALYTIC_DATASTREAM:
|
|
15839
15847
|
service = analytics.properties().dataStreams()
|
|
15840
|
-
|
|
15848
|
+
else: # entityType == Ent.ANALYTIC_PROPERTY:
|
|
15841
15849
|
service = analytics.properties()
|
|
15842
|
-
else: #Ent.ANALYTIC_UA_PROPERTY:
|
|
15843
|
-
service = analytics.management().webproperties()
|
|
15844
|
-
# service = analytics.management().profiles()
|
|
15845
15850
|
if csvPF:
|
|
15846
15851
|
printGettingAllEntityItemsForWhom(entityType, user, i, count)
|
|
15847
15852
|
pageMessage = getPageMessageForWhom()
|
|
@@ -15882,10 +15887,7 @@ def printShowAnalyticItems(users, entityType):
|
|
|
15882
15887
|
if not FJQC.formatJSON:
|
|
15883
15888
|
csvPF.WriteRowTitles(row)
|
|
15884
15889
|
elif csvPF.CheckRowTitles(row):
|
|
15885
|
-
|
|
15886
|
-
row = {'User': user, 'name': item['name'], 'displayName': item['displayName']}
|
|
15887
|
-
else:
|
|
15888
|
-
row = {'User': user, 'accountId': item['accountId'], 'id': item['id'], 'name': item['name']}
|
|
15890
|
+
row = {'User': user, 'name': item['name'], 'displayName': item['displayName']}
|
|
15889
15891
|
for field in analyticEntityMap['JSONtitles'][2:-1]:
|
|
15890
15892
|
row[field] = item[field]
|
|
15891
15893
|
row['JSON'] = json.dumps(cleanJSON(item, timeObjects=analyticEntityMap['timeObjects']),
|
|
@@ -15923,17 +15925,6 @@ def printShowAnalyticAccountSummaries(users):
|
|
|
15923
15925
|
def printShowAnalyticProperties(users):
|
|
15924
15926
|
printShowAnalyticItems(users, Ent.ANALYTIC_PROPERTY)
|
|
15925
15927
|
|
|
15926
|
-
# gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
|
|
15927
|
-
# accountid [accounts/]<String>
|
|
15928
|
-
# [maxresults <Integer>]
|
|
15929
|
-
# [formatjson [quotechar <Character>]]
|
|
15930
|
-
# gam <UserTypeEntity> show analyticuaproperties
|
|
15931
|
-
# accountid [accounts/]<String>
|
|
15932
|
-
# [maxresults <Integer>]
|
|
15933
|
-
# [formatjson]
|
|
15934
|
-
def printShowAnalyticUAProperties(users):
|
|
15935
|
-
printShowAnalyticItems(users, Ent.ANALYTIC_UA_PROPERTY)
|
|
15936
|
-
|
|
15937
15928
|
# gam <UserTypeEntity> print analyticdatastreams [todrive <ToDriveAttribute>*]
|
|
15938
15929
|
# parent <String>
|
|
15939
15930
|
# [maxresults <Integer>]
|
|
@@ -34179,7 +34170,8 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
|
|
|
34179
34170
|
elif memberOptions[MEMBEROPTION_NODUPLICATES]:
|
|
34180
34171
|
groupMemberList = []
|
|
34181
34172
|
for member in groupMembers:
|
|
34182
|
-
|
|
34173
|
+
namespace = member['email'].find('@') == -1
|
|
34174
|
+
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
34183
34175
|
if ((member['type'] in typesSet and
|
|
34184
34176
|
checkMemberMatch(member, memberOptions) and
|
|
34185
34177
|
_checkMemberRoleIsSuspendedIsArchived(member, validRoles, memberOptions[MEMBEROPTION_ISSUSPENDED], memberOptions[MEMBEROPTION_ISARCHIVED]) and
|
|
@@ -34208,7 +34200,8 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
|
|
|
34208
34200
|
memberOptions, memberDisplayOptions, level+1, typesSet)
|
|
34209
34201
|
else:
|
|
34210
34202
|
for member in groupMembers:
|
|
34211
|
-
|
|
34203
|
+
namespace = member['email'].find('@') == -1
|
|
34204
|
+
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
34212
34205
|
if ((member['type'] in typesSet) and
|
|
34213
34206
|
checkMemberMatch(member, memberOptions) and
|
|
34214
34207
|
_checkMemberRoleIsSuspendedIsArchived(member, validRoles,
|
|
@@ -36307,7 +36300,8 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36307
36300
|
for member in groupMembers:
|
|
36308
36301
|
getCIGroupMemberRoleFixType(member)
|
|
36309
36302
|
memberName = member.get('preferredMemberKey', {}).get('id', '')
|
|
36310
|
-
|
|
36303
|
+
namespace = member.get('preferredMemberKey', {}).get('namespace', '')
|
|
36304
|
+
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
36311
36305
|
if (member['type'] in typesSet and
|
|
36312
36306
|
checkCIMemberMatch(member, memberOptions) and
|
|
36313
36307
|
_checkMemberRole(member, validRoles) and
|
|
@@ -36335,7 +36329,8 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36335
36329
|
for member in groupMembers:
|
|
36336
36330
|
getCIGroupMemberRoleFixType(member)
|
|
36337
36331
|
memberName = member.get('preferredMemberKey', {}).get('id', '')
|
|
36338
|
-
|
|
36332
|
+
namespace = member.get('preferredMemberKey', {}).get('namespace', '')
|
|
36333
|
+
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
36339
36334
|
if (member['type'] in typesSet and
|
|
36340
36335
|
checkCIMemberMatch(member, memberOptions) and
|
|
36341
36336
|
_checkMemberRole(member, validRoles) and
|
|
@@ -76686,7 +76681,6 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76686
76681
|
Cmd.ARG_ANALYTICACCOUNTSUMMARY: printShowAnalyticAccountSummaries,
|
|
76687
76682
|
Cmd.ARG_ANALYTICDATASTREAM: printShowAnalyticDatastreams,
|
|
76688
76683
|
Cmd.ARG_ANALYTICPROPERTY: printShowAnalyticProperties,
|
|
76689
|
-
Cmd.ARG_ANALYTICUAPROPERTY: printShowAnalyticUAProperties,
|
|
76690
76684
|
Cmd.ARG_ASP: printShowASPs,
|
|
76691
76685
|
Cmd.ARG_BACKUPCODE: printShowBackupCodes,
|
|
76692
76686
|
Cmd.ARG_CALENDAR: printShowCalendars,
|
|
@@ -76793,7 +76787,6 @@ USER_COMMANDS_WITH_OBJECTS = {
|
|
|
76793
76787
|
Cmd.ARG_ANALYTICACCOUNTSUMMARY: printShowAnalyticAccountSummaries,
|
|
76794
76788
|
Cmd.ARG_ANALYTICDATASTREAM: printShowAnalyticDatastreams,
|
|
76795
76789
|
Cmd.ARG_ANALYTICPROPERTY: printShowAnalyticProperties,
|
|
76796
|
-
Cmd.ARG_ANALYTICUAPROPERTY: printShowAnalyticUAProperties,
|
|
76797
76790
|
Cmd.ARG_ASP: printShowASPs,
|
|
76798
76791
|
Cmd.ARG_BACKUPCODE: printShowBackupCodes,
|
|
76799
76792
|
Cmd.ARG_CALENDAR: printShowCalendars,
|
|
@@ -77006,7 +76999,6 @@ USER_COMMANDS_OBJ_ALIASES = {
|
|
|
77006
76999
|
Cmd.ARG_ANALYTICACCOUNTSUMMARIES: Cmd.ARG_ANALYTICACCOUNTSUMMARY,
|
|
77007
77000
|
Cmd.ARG_ANALYTICDATASTREAMS: Cmd.ARG_ANALYTICDATASTREAM,
|
|
77008
77001
|
Cmd.ARG_ANALYTICPROPERTIES: Cmd.ARG_ANALYTICPROPERTY,
|
|
77009
|
-
Cmd.ARG_ANALYTICUAPROPERTIES: Cmd.ARG_ANALYTICUAPROPERTY,
|
|
77010
77002
|
Cmd.ARG_ASPS: Cmd.ARG_ASP,
|
|
77011
77003
|
Cmd.ARG_BACKUPCODES: Cmd.ARG_BACKUPCODE,
|
|
77012
77004
|
Cmd.ARG_CALENDARS: Cmd.ARG_CALENDAR,
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
# APIs
|
|
23
23
|
ACCESSCONTEXTMANAGER = 'accesscontextmanager'
|
|
24
24
|
ALERTCENTER = 'alertcenter'
|
|
25
|
-
ANALYTICS = 'analytics'
|
|
26
25
|
ANALYTICS_ADMIN = 'analyticsadmin'
|
|
27
26
|
CALENDAR = 'calendar'
|
|
28
27
|
CBCM = 'cbcm'
|
|
@@ -162,7 +161,6 @@ PROJECT_APIS = [
|
|
|
162
161
|
'accesscontextmanager.googleapis.com',
|
|
163
162
|
'admin.googleapis.com',
|
|
164
163
|
'alertcenter.googleapis.com',
|
|
165
|
-
'analytics.googleapis.com',
|
|
166
164
|
'analyticsadmin.googleapis.com',
|
|
167
165
|
# 'audit.googleapis.com',
|
|
168
166
|
'calendar-json.googleapis.com',
|
|
@@ -201,7 +199,6 @@ PROJECT_APIS = [
|
|
|
201
199
|
_INFO = {
|
|
202
200
|
ACCESSCONTEXTMANAGER: {'name': 'Access Context Manager API', 'version': 'v1', 'v2discovery': True},
|
|
203
201
|
ALERTCENTER: {'name': 'AlertCenter API', 'version': 'v1beta1', 'v2discovery': True},
|
|
204
|
-
ANALYTICS: {'name': 'Analytics API', 'version': 'v3', 'v2discovery': False},
|
|
205
202
|
ANALYTICS_ADMIN: {'name': 'Analytics Admin API', 'version': 'v1beta', 'v2discovery': True},
|
|
206
203
|
CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
|
|
207
204
|
CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
|
|
@@ -244,7 +241,7 @@ _INFO = {
|
|
|
244
241
|
EMAIL_AUDIT: {'name': 'Email Audit API', 'version': 'v1', 'v2discovery': False},
|
|
245
242
|
FORMS: {'name': 'Forms API', 'version': 'v1', 'v2discovery': True},
|
|
246
243
|
GMAIL: {'name': 'Gmail API', 'version': 'v1', 'v2discovery': True},
|
|
247
|
-
GROUPSMIGRATION: {'name': 'Groups Migration API', 'version': 'v1', 'v2discovery':
|
|
244
|
+
GROUPSMIGRATION: {'name': 'Groups Migration API', 'version': 'v1', 'v2discovery': True},
|
|
248
245
|
GROUPSSETTINGS: {'name': 'Groups Settings API', 'version': 'v1', 'v2discovery': True},
|
|
249
246
|
IAM: {'name': 'Identity and Access Management API', 'version': 'v1', 'v2discovery': True},
|
|
250
247
|
IAM_CREDENTIALS: {'name': 'Identity and Access Management Credentials API', 'version': 'v1', 'v2discovery': True},
|
|
@@ -532,10 +529,6 @@ _SVCACCT_SCOPES = [
|
|
|
532
529
|
'api': ALERTCENTER,
|
|
533
530
|
'subscopes': [],
|
|
534
531
|
'scope': 'https://www.googleapis.com/auth/apps.alerts'},
|
|
535
|
-
{'name': 'Analytics API - read only',
|
|
536
|
-
'api': ANALYTICS,
|
|
537
|
-
'subscopes': [],
|
|
538
|
-
'scope': 'https://www.googleapis.com/auth/analytics.readonly'},
|
|
539
532
|
{'name': 'Analytics Admin API - read only',
|
|
540
533
|
'api': ANALYTICS_ADMIN,
|
|
541
534
|
'subscopes': [],
|
|
@@ -423,8 +423,6 @@ class GamCLArgs():
|
|
|
423
423
|
ARG_ANALYTICDATASTREAMS = 'analyticdatastreams'
|
|
424
424
|
ARG_ANALYTICPROPERTY = 'analyticproperty'
|
|
425
425
|
ARG_ANALYTICPROPERTIES = 'analyticproperties'
|
|
426
|
-
ARG_ANALYTICUAPROPERTY = 'analyticuaproperty'
|
|
427
|
-
ARG_ANALYTICUAPROPERTIES = 'analyticuaproperties'
|
|
428
426
|
ARG_API = 'api'
|
|
429
427
|
ARG_APIS = 'apis'
|
|
430
428
|
ARG_APIPROJECT = 'apiproject'
|
|
@@ -61,7 +61,6 @@ class GamEntity():
|
|
|
61
61
|
ANALYTIC_ACCOUNT_SUMMARY = 'anas'
|
|
62
62
|
ANALYTIC_DATASTREAM = 'anad'
|
|
63
63
|
ANALYTIC_PROPERTY = 'anap'
|
|
64
|
-
ANALYTIC_UA_PROPERTY = 'anau'
|
|
65
64
|
API = 'api '
|
|
66
65
|
APP_ACCESS_SETTINGS = 'apps'
|
|
67
66
|
APP_ID = 'appi'
|
|
@@ -412,7 +411,6 @@ class GamEntity():
|
|
|
412
411
|
ANALYTIC_ACCOUNT_SUMMARY: ['Analytic Account Summaries', 'Analytic Account Summary'],
|
|
413
412
|
ANALYTIC_DATASTREAM: ['Analytic Datastreams', 'Analytic Datastream'],
|
|
414
413
|
ANALYTIC_PROPERTY: ['Analytic GA4 Properties', 'Analytic GA4 Property'],
|
|
415
|
-
ANALYTIC_UA_PROPERTY: ['Analytic UA Properties', 'Analytic UA Property'],
|
|
416
414
|
API: ['APIs', 'API'],
|
|
417
415
|
APP_ACCESS_SETTINGS: ['Application Access Settings', 'Application Access Settings'],
|
|
418
416
|
APP_ID: ['Application IDs', 'Application ID'],
|
|
@@ -17,11 +17,13 @@ classifiers =
|
|
|
17
17
|
Programming Language :: Python :: 3.10
|
|
18
18
|
Programming Language :: Python :: 3.11
|
|
19
19
|
Programming Language :: Python :: 3.12
|
|
20
|
+
Programming Language :: Python :: 3.13
|
|
20
21
|
License :: OSI Approved :: Apache License
|
|
21
22
|
|
|
22
23
|
[options]
|
|
23
24
|
packages = find:
|
|
24
|
-
python_requires = >= 3.
|
|
25
|
+
python_requires = >= 3.9
|
|
26
|
+
# The following files should be edited to match: pyproject.toml, requirements.txt
|
|
25
27
|
install_requires =
|
|
26
28
|
chardet >= 5.2.0
|
|
27
29
|
cryptography >= 44.0.2
|
|
@@ -32,7 +34,7 @@ install_requires =
|
|
|
32
34
|
google-auth-oauthlib >= 1.2.2
|
|
33
35
|
google-auth >= 2.39.0
|
|
34
36
|
httplib2 >= 0.22.0
|
|
35
|
-
lxml
|
|
37
|
+
lxml >= 5.4.0
|
|
36
38
|
passlib >= 1.7.4
|
|
37
39
|
pathvalidate >= 3.2.3
|
|
38
40
|
pyscard == 2.2.1
|
|
@@ -10,6 +10,21 @@ 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.06.12
|
|
14
|
+
|
|
15
|
+
Deleted commands to display Analytic UA properties; the API has been deprecated.
|
|
16
|
+
```
|
|
17
|
+
gam <UserTypeEntity> print|show analyticuaproperties
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 7.06.11
|
|
21
|
+
|
|
22
|
+
Improved `gam checkconn`.
|
|
23
|
+
|
|
24
|
+
Updated `gam print group-members` and `gam print cigroup-members` to recognize members
|
|
25
|
+
that are groups representing chat spaces. For now, these groups are not expanded when
|
|
26
|
+
`recursive` is specified.
|
|
27
|
+
|
|
13
28
|
### 7.06.10
|
|
14
29
|
|
|
15
30
|
Added the following license SKU.
|
|
@@ -251,7 +251,7 @@ writes the credentials into the file oauth2.txt.
|
|
|
251
251
|
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
|
252
252
|
admin@server:/Users/admin$ gam version
|
|
253
253
|
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
|
254
|
-
GAM 7.06.
|
|
254
|
+
GAM 7.06.12 - https://github.com/GAM-team/GAM - pyinstaller
|
|
255
255
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
256
256
|
Python 3.13.3 64-bit final
|
|
257
257
|
MacOS Sequoia 15.4.1 x86_64
|
|
@@ -989,7 +989,7 @@ writes the credentials into the file oauth2.txt.
|
|
|
989
989
|
C:\>del C:\GAMConfig\oauth2.txt
|
|
990
990
|
C:\>gam version
|
|
991
991
|
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
|
992
|
-
GAM 7.06.
|
|
992
|
+
GAM 7.06.12 - https://github.com/GAM-team/GAM - pythonsource
|
|
993
993
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
994
994
|
Python 3.13.3 64-bit final
|
|
995
995
|
Windows-10-10.0.17134 AMD64
|
|
@@ -6,14 +6,13 @@
|
|
|
6
6
|
- [Display Analytic Account Summaries](#display-analytic-account-summaries)
|
|
7
7
|
- [Display Analytic Properties](#display-analytic-properties)
|
|
8
8
|
- [Display Analytic Datastreams](#display-analytic-datastreams)
|
|
9
|
-
- [Display Analytic UA Properties](#display-analytic-ua-properties)
|
|
10
9
|
- [Examples](#examples)
|
|
11
10
|
|
|
12
11
|
## API documentation
|
|
13
12
|
* [Analytics Admin API](https://developers.google.com/analytics/devguides/config/admin/v1/rest)
|
|
14
13
|
|
|
15
14
|
## Notes
|
|
16
|
-
To use these commands you must add 'Analytics
|
|
15
|
+
To use these commands you must add 'Analytics Admin API' to your project and update your service account authorization.
|
|
17
16
|
```
|
|
18
17
|
gam update project
|
|
19
18
|
gam user user@domain.com update serviceaccount
|
|
@@ -142,37 +141,6 @@ When using the `formatjson` option, double quotes are used extensively in the da
|
|
|
142
141
|
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
|
143
142
|
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
|
144
143
|
|
|
145
|
-
## Display Analytic UA Properties
|
|
146
|
-
```
|
|
147
|
-
gam <UserTypeEntity> show analyticuaproperties
|
|
148
|
-
accountid [accounts/]<String>
|
|
149
|
-
[maxresults <Integer>]
|
|
150
|
-
[formatjson]
|
|
151
|
-
```
|
|
152
|
-
The required `accountid <String>` can be in the format: 'accounts/123' or '123'.
|
|
153
|
-
|
|
154
|
-
By default, GAM asks the API for 50 properties per page of results,
|
|
155
|
-
* `maxresults` - Maximum number of results per page; range is 1-200; the default is 50.
|
|
156
|
-
|
|
157
|
-
By default, Gam displays the information as an indented list of keys and values.
|
|
158
|
-
* `formatjson` - Display the fields in JSON format.
|
|
159
|
-
```
|
|
160
|
-
gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
|
|
161
|
-
accountid [accounts/]<String>
|
|
162
|
-
[maxresults <Integer>]
|
|
163
|
-
[formatjson [quotechar <Character>]]
|
|
164
|
-
```
|
|
165
|
-
The required `accountid <String>` can be in the format: 'accounts/123' or '123'.
|
|
166
|
-
|
|
167
|
-
By default, GAM asks the API for 50 properties per page of results,
|
|
168
|
-
* `maxresults` - Maximum number of results per page; range is 1-200; the default is 50.
|
|
169
|
-
|
|
170
|
-
By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
|
|
171
|
-
the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
|
|
172
|
-
When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
|
|
173
|
-
The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
|
|
174
|
-
`quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
|
|
175
|
-
|
|
176
144
|
|
|
177
145
|
## Examples
|
|
178
146
|
Get all analytic accounts
|
|
@@ -189,8 +157,3 @@ Get all analytic account properties (GA4)
|
|
|
189
157
|
```
|
|
190
158
|
gam redirect stdout - multiprocess redirect stderr stdout redirect csv ./GA4AnalyticAccountProperties.csv multiprocess csv AnalyticAccounts.csv gam user "~User" print analyticproperties filter "parent:~~name~~"
|
|
191
159
|
```
|
|
192
|
-
|
|
193
|
-
Get all analytic account properties (UA)
|
|
194
|
-
```
|
|
195
|
-
gam redirect stdout - multiprocess redirect stderr stdout redirect csv ./UAAnalyticAccountProperties.csv multiprocess csv AnalyticAccounts.csv gam user "~User" print analyticuaproperties accountid "~~name~~"
|
|
196
|
-
```
|
|
@@ -42,12 +42,12 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
|
|
|
42
42
|
|
|
43
43
|
## Set up a Chat Bot
|
|
44
44
|
|
|
45
|
-
* Run the command `gam setup chat`; it will point you to a URL to configure your Chat Bot
|
|
45
|
+
* Run the command `gam setup chat`; it will point you to a URL to configure your Chat Bot.
|
|
46
46
|
* Enter an App name and Description of your choosing.
|
|
47
47
|
* For the Avatar URL you can use `https://dummyimage.com/384x256/4d4d4d/0011ff.png&text=+GAM` or a public URL to an image of your own choosing.
|
|
48
48
|
* In Functionality, uncheck both "Receive 1:1 messages" and "Join spaces and group conversations"
|
|
49
|
-
* In Connection settings, choose "Cloud Pub/Sub" and enter
|
|
50
|
-
* In Visibility, uncheck "Make this Chat app available to specific people and groups in
|
|
49
|
+
* In Connection settings, choose "Cloud Pub/Sub" and enter `projects/<ProjectID>/topics/no-topic` for the topic name. Replace `<ProjectID>` with your GAM project ID. GAM doesn't yet listen to pub/sub so this option is not used.
|
|
50
|
+
* In Visibility, uncheck "Make this Chat app available to specific people and groups in Domain Workspace".
|
|
51
51
|
* Click Save.
|
|
52
52
|
|
|
53
53
|
## API documentation
|