gam7 7.9.4__tar.gz → 7.9.6__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.
- {gam7-7.9.4 → gam7-7.9.6}/PKG-INFO +1 -1
- {gam7-7.9.4 → gam7-7.9.6}/src/GamCommands.txt +8 -8
- {gam7-7.9.4 → gam7-7.9.6}/src/GamUpdate.txt +11 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/__init__.py +133 -74
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Chrome-Policies.md +146 -238
- {gam7-7.9.4 → gam7-7.9.6}/wiki/GamUpdates.md +14 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +4 -4
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Version-and-Help.md +10 -10
- {gam7-7.9.4 → gam7-7.9.6}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/actions/decrypt.sh +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/actions/entitlements.plist +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/stale.yml +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/workflows/build.yml +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.github/workflows/pypi.yml +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/.pre-commit-config.yaml +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/LICENSE +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/README.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/pyproject.toml +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/.gitignore +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/LICENSE +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/cacerts.pem +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/callgam.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/__main__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/__init__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/auth.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/client.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/core.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/data.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/http.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/http_core.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/service.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/token_store.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/atom/url.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/cacerts.pem +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glapi.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/service.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam/six.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam-install.sh +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam-setup.bat +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam.exe.manifest +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam.spec +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/gam.wxs +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/license.rtf +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/requirements-dev.txt +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/requirements.txt +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/setup.cfg +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/setup.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/tools/mkGamRef.py +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/tools/openssl.props +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/src/version_info.txt.in +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/00scratch.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Addresses.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Administrators.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Alert-Center.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Aliases.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Authorization.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Basic-Items.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Calendars-Access.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Calendars-Events.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Calendars.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Chat-Bot.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Customer.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Domain-SharedContacts.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Domains-Verification.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Domains.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Drive-Items.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Groups-Membership.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Groups.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Home.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Licenses.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/List-Items.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/List.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Organizational-Units.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Other-Resources.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Permission-Matches.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/README.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Rclone.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Reports.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Reseller.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Resources.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Schemas.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Scripts.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Send-Email.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Shared-Drives.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Sites.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Tag-Replace.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Todrive.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Calendars.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Chat.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Contacts.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Files-Display.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Permissions.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Forms.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Meet.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Photo.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Tasks.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-Tokens.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users-YouTube.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Users.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/_Sidebar.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/gam.cfg.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-AdminSettingsExamples.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Android-Installation.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-BulkOperations.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-CalendarExamples.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Chat-Bot.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Command-Reference-Drive.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Command-Reference-Email.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Command-Reference-Groups.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Command-Reference-Users.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Custom-Schemas.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Data-Transfers.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-DomainVerification.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-ExamplesCSV.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-ExamplesOrganizations.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-GAM-options-files.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-GAM3CSVListings.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-GAM3GroupSettings.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-GAM7-FAQ.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-GoogleDriveManagement.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Home.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-LicenseExamples.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Managing-Admins.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Managing-Devices.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-OAuthKeyManagement.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Printers.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-ResellerCommands.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-SecurityExamples.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Use-a-Yubikey.md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.9.4 → gam7-7.9.6}/wiki/l-_Footer.md +0 -0
|
@@ -5031,18 +5031,18 @@ gam <UserTypeEntity> delete permissions <SharedDriveEntityAdmin> <DriveFilePermi
|
|
|
5031
5031
|
|
|
5032
5032
|
In these commands, the Google administrator named in oauth2.txt is used.
|
|
5033
5033
|
|
|
5034
|
-
gam copy
|
|
5034
|
+
gam copy shareddriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
|
5035
5035
|
[adminaccess|asadmin]
|
|
5036
5036
|
[showpermissionsmessages [<Boolean>]]
|
|
5037
5037
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
|
5038
5038
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
|
5039
|
-
gam sync
|
|
5039
|
+
gam sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
|
5040
5040
|
[adminaccess|asadmin]
|
|
5041
5041
|
[showpermissionsmessages [<Boolean>]]
|
|
5042
5042
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
|
5043
5043
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
|
5044
5044
|
|
|
5045
|
-
gam print
|
|
5045
|
+
gam print shareddriveacls [todrive <ToDriveAttribute>*]
|
|
5046
5046
|
[teamdriveadminquery|query <QueryTeamDrive>]
|
|
5047
5047
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
|
5048
5048
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
|
@@ -5050,7 +5050,7 @@ gam print teamdriveacls [todrive <ToDriveAttribute>*]
|
|
|
5050
5050
|
[oneitemperrow] [<DrivePermissionsFieldName>*|(fields <DrivePermissionsFieldNameList>)]
|
|
5051
5051
|
(addcsvdata <FieldName> <String>)*
|
|
5052
5052
|
[formatjson [quotechar <Character>]]
|
|
5053
|
-
gam show
|
|
5053
|
+
gam show shareddriveacls
|
|
5054
5054
|
[teamdriveadminquery|query <QueryTeamDrive>]
|
|
5055
5055
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
|
5056
5056
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
|
@@ -5060,18 +5060,18 @@ gam show teamdriveacls
|
|
|
5060
5060
|
|
|
5061
5061
|
In these commands, you specify an administrator and then indicate that you want domain administrator access with the adminaccess option.
|
|
5062
5062
|
|
|
5063
|
-
gam <UserTypeEntity> copy
|
|
5063
|
+
gam <UserTypeEntity> copy shareddriveacls <SharedDriveEntity> to <SharedDriveEntity>
|
|
5064
5064
|
[adminaccess|asadmin]
|
|
5065
5065
|
[showpermissionsmessages [<Boolean>]]
|
|
5066
5066
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
|
5067
5067
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
|
5068
|
-
gam <UserTypeEntity> sync
|
|
5068
|
+
gam <UserTypeEntity> sync shareddriveacls <SharedDriveEntity> with <SharedDriveEntity>
|
|
5069
5069
|
[adminaccess|asadmin]
|
|
5070
5070
|
[showpermissionsmessages [<Boolean>]]
|
|
5071
5071
|
[excludepermissionsfromdomains|includepermissionsfromdomains <DomainNameList>]
|
|
5072
5072
|
(mappermissionsdomain <DomainName> <DomainName>)*
|
|
5073
5073
|
|
|
5074
|
-
gam <UserTypeEntity> print
|
|
5074
|
+
gam <UserTypeEntity> print shareddriveacls [todrive <ToDriveAttribute>*]
|
|
5075
5075
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
|
5076
5076
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
|
5077
5077
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
|
@@ -5080,7 +5080,7 @@ gam <UserTypeEntity> print teamdriveacls [todrive <ToDriveAttribute>*]
|
|
|
5080
5080
|
[shownopermissionsdrives false|true|only]
|
|
5081
5081
|
(addcsvdata <FieldName> <String>)*
|
|
5082
5082
|
[formatjson [quotechar <Character>]]
|
|
5083
|
-
gam <UserTypeEntity> show
|
|
5083
|
+
gam <UserTypeEntity> show shareddriveacls
|
|
5084
5084
|
[adminaccess|asadmin] [teamdriveadminquery|query <QueryTeamDrive>]
|
|
5085
5085
|
[matchname <REMatchPattern>] [orgunit|org|ou <OrgUnitPath>]
|
|
5086
5086
|
[user|group <EmailAddress> [checkgroups]] (role|roles <SharedDriveACLRoleList>)*
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
7.09.06
|
|
2
|
+
|
|
3
|
+
Upddated `gam print|show shareddrives', `gam print|show shareddriveacls', `gam print shareddriveorganizers`
|
|
4
|
+
to display the Shared Drives in ascending name order; the API returns them in an unidentifiable order.
|
|
5
|
+
|
|
6
|
+
7.09.05
|
|
7
|
+
|
|
8
|
+
Improved output of `gam info|show chromeschemas [std]` to more accurately display the schemas.
|
|
9
|
+
|
|
10
|
+
Fixed bugs in `gam update chromepolicy` that caused invalid error messaages.
|
|
11
|
+
|
|
1
12
|
7.09.04
|
|
2
13
|
|
|
3
14
|
Fixed bug in `gam whatis <EmailItem>` where the check for an invitable user always failed.
|
|
@@ -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.09.
|
|
28
|
+
__version__ = '7.09.06'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -12353,7 +12353,8 @@ def checkServiceAccount(users):
|
|
|
12353
12353
|
Ind.Increment()
|
|
12354
12354
|
try:
|
|
12355
12355
|
key = callGAPI(iam.projects().serviceAccounts().keys(), 'get',
|
|
12356
|
-
throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID, GAPI.NOT_FOUND,
|
|
12356
|
+
throwReasons=[GAPI.BAD_REQUEST, GAPI.INVALID, GAPI.NOT_FOUND,
|
|
12357
|
+
GAPI.PERMISSION_DENIED, GAPI.SERVICE_NOT_AVAILABLE],
|
|
12357
12358
|
name=name, fields='validAfterTime')
|
|
12358
12359
|
key_created, _ = iso8601.parse_date(key['validAfterTime'])
|
|
12359
12360
|
key_age = todaysTime()-key_created
|
|
@@ -12366,6 +12367,10 @@ def checkServiceAccount(users):
|
|
|
12366
12367
|
Ent.SVCACCT, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['client_email']],
|
|
12367
12368
|
str(e))
|
|
12368
12369
|
printPassFail(Msg.SERVICE_ACCOUNT_PRIVATE_KEY_AGE.format('UNKNOWN'), testWarn)
|
|
12370
|
+
except GAPI.serviceNotAvailable as e:
|
|
12371
|
+
entityActionFailedExit([Ent.PROJECT, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['project_id'],
|
|
12372
|
+
Ent.SVCACCT, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['client_email']],
|
|
12373
|
+
str(e))
|
|
12369
12374
|
else:
|
|
12370
12375
|
printPassFail(Msg.SERVICE_ACCOUNT_SKIPPING_KEY_AGE_CHECK.format(key_type), testPass)
|
|
12371
12376
|
Ind.Decrement()
|
|
@@ -28111,27 +28116,21 @@ def commonprefix(m):
|
|
|
28111
28116
|
return s1[:i]
|
|
28112
28117
|
return s1
|
|
28113
28118
|
|
|
28114
|
-
|
|
28119
|
+
SCHEMA_TYPE_MESSAGE_MAP = {
|
|
28120
|
+
'NullableDuration': {'type': 'TYPE_INT64', 'namedType': 'duration'},
|
|
28121
|
+
'NullableLong': {'type': 'TYPE_INT64', 'namedType': 'value'},
|
|
28122
|
+
'SystemTimezone': {'type': 'TYPE_STRING', 'namedType': 'value'}
|
|
28123
|
+
}
|
|
28124
|
+
|
|
28125
|
+
def simplifyChromeSchemaUpdate(schema):
|
|
28115
28126
|
schema_name = schema['name'].split('/')[-1]
|
|
28116
|
-
schema_dict = {'name': schema_name,
|
|
28117
|
-
'description': schema.get('policyDescription', ''),
|
|
28118
|
-
'settings': {}
|
|
28119
|
-
}
|
|
28120
|
-
fieldDescriptions = schema['fieldDescriptions']
|
|
28121
|
-
savedSettingName = ''
|
|
28122
|
-
savedTypeName = ''
|
|
28127
|
+
schema_dict = {'name': schema_name, 'settings': {}}
|
|
28123
28128
|
for mtype in schema['definition']['messageType']:
|
|
28124
|
-
|
|
28129
|
+
if mtype['name'] in SCHEMA_TYPE_MESSAGE_MAP:
|
|
28130
|
+
continue
|
|
28125
28131
|
for setting in mtype['field']:
|
|
28126
28132
|
setting_name = setting['name']
|
|
28127
|
-
setting_dict = {'name': setting_name,
|
|
28128
|
-
'constraints': None,
|
|
28129
|
-
'descriptions': [],
|
|
28130
|
-
'type': setting['type'],
|
|
28131
|
-
}
|
|
28132
|
-
if mtype['name'] == savedTypeName and numSettings == 1:
|
|
28133
|
-
setting_dict['name'] = savedSettingName
|
|
28134
|
-
savedTypeName = ''
|
|
28133
|
+
setting_dict = {'name': setting_name, 'type': setting['type'], 'namedType': ''}
|
|
28135
28134
|
if setting_dict['type'] == 'TYPE_STRING' and setting.get('label') == 'LABEL_REPEATED':
|
|
28136
28135
|
setting_dict['type'] = 'TYPE_LIST'
|
|
28137
28136
|
if setting_dict['type'] == 'TYPE_ENUM':
|
|
@@ -28142,29 +28141,83 @@ def simplifyChromeSchema(schema):
|
|
|
28142
28141
|
setting_dict['enum_prefix'] = commonprefix(setting_dict['enums'])
|
|
28143
28142
|
prefix_len = len(setting_dict['enum_prefix'])
|
|
28144
28143
|
setting_dict['enums'] = [enum[prefix_len:] for enum in setting_dict['enums'] if not enum.endswith('UNSPECIFIED')]
|
|
28145
|
-
|
|
28146
|
-
|
|
28144
|
+
elif setting_dict['type'] == 'TYPE_MESSAGE':
|
|
28145
|
+
type_name = setting['typeName']
|
|
28146
|
+
if type_name not in SCHEMA_TYPE_MESSAGE_MAP:
|
|
28147
|
+
continue
|
|
28148
|
+
setting_dict['type'] = SCHEMA_TYPE_MESSAGE_MAP[type_name]['type']
|
|
28149
|
+
setting_dict['namedType'] = SCHEMA_TYPE_MESSAGE_MAP[type_name]['namedType']
|
|
28150
|
+
schema_dict['settings'][setting_name.lower()] = setting_dict
|
|
28151
|
+
return(schema_name, schema_dict)
|
|
28152
|
+
|
|
28153
|
+
def simplifyChromeSchemaDisplay(schema):
|
|
28154
|
+
schema_name = schema['name'].split('/')[-1]
|
|
28155
|
+
schema_dict = {'name': schema_name, 'description': schema.get('policyDescription', '')}
|
|
28156
|
+
fieldDescriptions = schema['fieldDescriptions']
|
|
28157
|
+
enumDict = {}
|
|
28158
|
+
for enumType in schema['definition'].get('enumType', []):
|
|
28159
|
+
enumEntry = {}
|
|
28160
|
+
enumEntry['enums'] = [enum['name'] for enum in enumType['value']]
|
|
28161
|
+
enumEntry['enum_prefix'] = commonprefix(enumEntry['enums'])
|
|
28162
|
+
enumEntry['enum_prefix_len'] = prefix_len = len(enumEntry['enum_prefix'])
|
|
28163
|
+
enumEntry['enums'] = [enum[prefix_len:] for enum in enumEntry['enums'] if not enum.endswith('UNSPECIFIED')]
|
|
28164
|
+
enumDict[enumType['name']] = enumEntry.copy()
|
|
28165
|
+
mesgDict = {}
|
|
28166
|
+
mesgPops = set()
|
|
28167
|
+
for mesgType in schema['definition']['messageType']:
|
|
28168
|
+
mtypeEntry = {'field': {}, 'subfield': False}
|
|
28169
|
+
for mfield in mesgType['field']:
|
|
28170
|
+
mfield.pop('number')
|
|
28171
|
+
mtypeEntry['field'][mfield.pop('name')] = mfield
|
|
28172
|
+
mesgDict[mesgType['name']] = mtypeEntry.copy()
|
|
28173
|
+
for _, mtypeEntry in mesgDict.items():
|
|
28174
|
+
for mfieldName, mfield in mtypeEntry['field'].items():
|
|
28175
|
+
mfield['descriptions'] = []
|
|
28176
|
+
if mfield['type'] == 'TYPE_STRING' and mfield.get('label') == 'LABEL_REPEATED':
|
|
28177
|
+
mfield['type'] = 'TYPE_LIST'
|
|
28178
|
+
if mfield['type'] == 'TYPE_ENUM':
|
|
28179
|
+
mfield['subtype'] = enumDict[mfield['typeName']]
|
|
28180
|
+
for an_enum in schema['definition']['enumType']:
|
|
28181
|
+
if an_enum['name'] == mfield['typeName']:
|
|
28182
|
+
mfield['descriptions'] = ['']*len(mfield['subtype']['enums'])
|
|
28183
|
+
for i, an in enumerate(mfield['subtype']['enums']):
|
|
28147
28184
|
for fdesc in fieldDescriptions:
|
|
28148
|
-
if fdesc.get('field') ==
|
|
28185
|
+
if fdesc.get('field') == mfieldName:
|
|
28149
28186
|
for d in fdesc.get('knownValueDescriptions', []):
|
|
28150
|
-
if d['value'][
|
|
28151
|
-
|
|
28187
|
+
if d['value'][mfield['subtype']['enum_prefix_len']:] == an:
|
|
28188
|
+
mfield['descriptions'][i] = d.get('description', '')
|
|
28152
28189
|
break
|
|
28153
28190
|
break
|
|
28154
28191
|
break
|
|
28155
|
-
elif
|
|
28156
|
-
|
|
28157
|
-
|
|
28192
|
+
elif mfield['type'] == 'TYPE_MESSAGE':
|
|
28193
|
+
subfield = mfield['typeName']
|
|
28194
|
+
if subfield not in SCHEMA_TYPE_MESSAGE_MAP:
|
|
28195
|
+
mesgDict[subfield]['subfield'] = True
|
|
28196
|
+
mfield['subtype'] = mesgDict[subfield]
|
|
28197
|
+
else:
|
|
28198
|
+
mfield['type'] = SCHEMA_TYPE_MESSAGE_MAP[subfield]['type']
|
|
28199
|
+
mesgPops.add(subfield)
|
|
28158
28200
|
continue
|
|
28159
28201
|
else:
|
|
28160
|
-
|
|
28161
|
-
|
|
28162
|
-
if fdesc['field'] == setting_name:
|
|
28202
|
+
for fdesc in fieldDescriptions:
|
|
28203
|
+
if fdesc['field'] == mfieldName:
|
|
28163
28204
|
if 'knownValueDescriptions' in fdesc:
|
|
28164
|
-
|
|
28205
|
+
if isinstance(fdesc['knownValueDescriptions'], list):
|
|
28206
|
+
for kvd in fdesc['knownValueDescriptions']:
|
|
28207
|
+
if isinstance(kvd, dict):
|
|
28208
|
+
if 'description' in kvd:
|
|
28209
|
+
mfield['descriptions'].append(f"{kvd['value']}: {kvd['description']}")
|
|
28210
|
+
else:
|
|
28211
|
+
mfield['descriptions'].append(f"{kvd['value']}")
|
|
28212
|
+
else:
|
|
28213
|
+
mfield['descriptions'].extend(kvd)
|
|
28214
|
+
else:
|
|
28215
|
+
mfield['descriptions'].append(kvd)
|
|
28165
28216
|
elif 'description' in fdesc:
|
|
28166
|
-
|
|
28167
|
-
|
|
28217
|
+
mfield['descriptions'].append(fdesc['description'])
|
|
28218
|
+
for pfield in mesgPops:
|
|
28219
|
+
mesgDict.pop(pfield)
|
|
28220
|
+
schema_dict['settings'] = mesgDict
|
|
28168
28221
|
return(schema_name, schema_dict)
|
|
28169
28222
|
|
|
28170
28223
|
def _getPolicyOrgUnitTarget(cd, cp, myarg, groupEmail):
|
|
@@ -28507,7 +28560,7 @@ def doUpdateChromePolicy():
|
|
|
28507
28560
|
elif myarg == 'convertcrnl':
|
|
28508
28561
|
convertCRsNLs = True
|
|
28509
28562
|
else:
|
|
28510
|
-
schemaName, schema =
|
|
28563
|
+
schemaName, schema = simplifyChromeSchemaUpdate(_getChromePolicySchema(cp, Cmd.Previous(), '*'))
|
|
28511
28564
|
body['requests'].append({'policyValue': {'policySchema': schemaName, 'value': {}},
|
|
28512
28565
|
'updateMask': ''})
|
|
28513
28566
|
schemaNameList.append(schemaName)
|
|
@@ -28593,8 +28646,9 @@ def doUpdateChromePolicy():
|
|
|
28593
28646
|
if field not in schema['settings']:
|
|
28594
28647
|
Cmd.Backup()
|
|
28595
28648
|
missingChoiceExit(schema['settings'])
|
|
28596
|
-
|
|
28597
|
-
|
|
28649
|
+
field_settings = schema['settings'][field]
|
|
28650
|
+
casedField = field_settings['name']
|
|
28651
|
+
vtype = field_settings['type']
|
|
28598
28652
|
value = getString(Cmd.OB_STRING, minLen=0 if vtype in {'TYPE_STRING', 'TYPE_LIST'} else 1)
|
|
28599
28653
|
if vtype in ['TYPE_INT64', 'TYPE_INT32', 'TYPE_UINT64']:
|
|
28600
28654
|
if not value.isnumeric():
|
|
@@ -28611,8 +28665,8 @@ def doUpdateChromePolicy():
|
|
|
28611
28665
|
invalidChoiceExit(value, TRUE_FALSE, True)
|
|
28612
28666
|
elif vtype == 'TYPE_ENUM':
|
|
28613
28667
|
value = value.upper()
|
|
28614
|
-
prefix =
|
|
28615
|
-
enum_values =
|
|
28668
|
+
prefix = field_settings['enum_prefix']
|
|
28669
|
+
enum_values = field_settings['enums']
|
|
28616
28670
|
if value in enum_values:
|
|
28617
28671
|
value = f'{prefix}{value}'
|
|
28618
28672
|
elif value.replace(prefix, '') in enum_values:
|
|
@@ -28639,7 +28693,10 @@ def doUpdateChromePolicy():
|
|
|
28639
28693
|
elif value and not CHROME_TARGET_VERSION_PATTERN.match(value):
|
|
28640
28694
|
Cmd.Backup()
|
|
28641
28695
|
invalidArgumentExit(Msg.CHROME_TARGET_VERSION_FORMAT)
|
|
28642
|
-
|
|
28696
|
+
if field_settings['namedType']:
|
|
28697
|
+
body['requests'][-1]['policyValue']['value'][casedField] = {field_settings['namedType']: value}
|
|
28698
|
+
else:
|
|
28699
|
+
body['requests'][-1]['policyValue']['value'][casedField] = value
|
|
28643
28700
|
body['requests'][-1]['updateMask'] += f'{casedField},'
|
|
28644
28701
|
checkPolicyArgs(targetResource, printer_id, app_id)
|
|
28645
28702
|
count = len(body['requests'])
|
|
@@ -28940,7 +28997,9 @@ def _showChromePolicySchema(schema, FJQC, i=0, count=0):
|
|
|
28940
28997
|
return
|
|
28941
28998
|
printEntity([Ent.CHROME_POLICY_SCHEMA, schema['name']], i, count)
|
|
28942
28999
|
Ind.Increment()
|
|
28943
|
-
showJSON(None, schema,
|
|
29000
|
+
showJSON(None, schema,
|
|
29001
|
+
dictObjectsKey={'messageType': 'name', 'field': 'name',
|
|
29002
|
+
'fieldDescriptions': 'field', 'knownValueDescriptions': 'value'})
|
|
28944
29003
|
Ind.Decrement()
|
|
28945
29004
|
|
|
28946
29005
|
CHROME_POLICY_SCHEMA_FIELDS_CHOICE_MAP = {
|
|
@@ -29074,31 +29133,35 @@ def doPrintShowChromePolicySchemas():
|
|
|
29074
29133
|
csvPF.writeCSVfile('Chrome Policy Schemas')
|
|
29075
29134
|
|
|
29076
29135
|
def _showChromePolicySchemaStd(schema):
|
|
29077
|
-
|
|
29078
|
-
|
|
29079
|
-
|
|
29080
|
-
|
|
29081
|
-
|
|
29136
|
+
def _printEntry(mtypeName, mtypeEntry):
|
|
29137
|
+
vtype = mtypeEntry['type']
|
|
29138
|
+
if vtype != 'TYPE_MESSAGE':
|
|
29139
|
+
printKeyValueList([f'{mtypeName}', f'{vtype}'])
|
|
29140
|
+
else:
|
|
29141
|
+
printKeyValueList([f'{mtypeName}'])
|
|
29082
29142
|
Ind.Increment()
|
|
29083
29143
|
if vtype == 'TYPE_ENUM':
|
|
29084
|
-
enums =
|
|
29085
|
-
descriptions =
|
|
29086
|
-
for i in range(len(
|
|
29144
|
+
enums = mtypeEntry['subtype']['enums']
|
|
29145
|
+
descriptions = mtypeEntry['descriptions']
|
|
29146
|
+
for i in range(len(enums)):
|
|
29087
29147
|
printKeyValueList([f'{enums[i]}', f'{descriptions[i]}'])
|
|
29088
|
-
elif vtype == '
|
|
29089
|
-
|
|
29090
|
-
|
|
29091
|
-
if
|
|
29092
|
-
|
|
29093
|
-
|
|
29094
|
-
|
|
29095
|
-
|
|
29096
|
-
printKeyValueList([f'{pvi[0]}'])
|
|
29097
|
-
else:
|
|
29098
|
-
description = val.get('descriptions')
|
|
29099
|
-
if len(description) > 0:
|
|
29100
|
-
printKeyValueList([f'{description[0]}'])
|
|
29148
|
+
elif vtype == 'TYPE_MESSAGE':
|
|
29149
|
+
for mfieldName, mfield in mtypeEntry['subtype']['field'].items():
|
|
29150
|
+
# managedBookmarks is recursive
|
|
29151
|
+
if mtypeName != 'entries':
|
|
29152
|
+
_printEntry(mfieldName, mfield)
|
|
29153
|
+
else:
|
|
29154
|
+
for description in mtypeEntry.get('descriptions', []):
|
|
29155
|
+
printKeyValueList([description])
|
|
29101
29156
|
Ind.Decrement()
|
|
29157
|
+
|
|
29158
|
+
printKeyValueList([f'{schema.get("name")}', f'{schema.get("description")}'])
|
|
29159
|
+
Ind.Increment()
|
|
29160
|
+
for _, mtypeEntry in schema['settings'].items():
|
|
29161
|
+
if mtypeEntry['subfield']:
|
|
29162
|
+
continue
|
|
29163
|
+
for mfieldName, mfield in mtypeEntry['field'].items():
|
|
29164
|
+
_printEntry(mfieldName, mfield)
|
|
29102
29165
|
Ind.Decrement()
|
|
29103
29166
|
|
|
29104
29167
|
# gam info chromeschema std <SchemaName>
|
|
@@ -29109,7 +29172,7 @@ def doInfoChromePolicySchemasStd(cp):
|
|
|
29109
29172
|
schema = callGAPI(cp.customers().policySchemas(), 'get',
|
|
29110
29173
|
throwReasons=[GAPI.NOT_FOUND, GAPI.BAD_REQUEST, GAPI.FORBIDDEN],
|
|
29111
29174
|
name=name)
|
|
29112
|
-
_, schema_dict =
|
|
29175
|
+
_, schema_dict = simplifyChromeSchemaDisplay(schema)
|
|
29113
29176
|
_showChromePolicySchemaStd(schema_dict)
|
|
29114
29177
|
except GAPI.notFound:
|
|
29115
29178
|
entityUnknownWarning(Ent.CHROME_POLICY_SCHEMA, name)
|
|
@@ -29131,7 +29194,7 @@ def doShowChromePolicySchemasStd(cp):
|
|
|
29131
29194
|
parent=parent, filter=sfilter)
|
|
29132
29195
|
schemas = {}
|
|
29133
29196
|
for schema in result:
|
|
29134
|
-
schema_name, schema_dict =
|
|
29197
|
+
schema_name, schema_dict = simplifyChromeSchemaDisplay(schema)
|
|
29135
29198
|
schemas[schema_name.lower()] = schema_dict
|
|
29136
29199
|
for _, schema in sorted(iter(schemas.items())):
|
|
29137
29200
|
_showChromePolicySchemaStd(schema)
|
|
@@ -65712,13 +65775,13 @@ def printShowSharedDrives(users, useDomainAdminAccess=False):
|
|
|
65712
65775
|
entityPerformActionNumItems([Ent.USER, user], jcount, Ent.SHAREDDRIVE, i, count)
|
|
65713
65776
|
Ind.Increment()
|
|
65714
65777
|
j = 0
|
|
65715
|
-
for shareddrive in matchedFeed:
|
|
65778
|
+
for shareddrive in sorted(matchedFeed, key=lambda k: k['name']):
|
|
65716
65779
|
j += 1
|
|
65717
65780
|
shareddrive = stripNonShowFields(shareddrive)
|
|
65718
65781
|
_showSharedDrive(user, shareddrive, j, jcount, FJQC)
|
|
65719
65782
|
Ind.Decrement()
|
|
65720
65783
|
else:
|
|
65721
|
-
for shareddrive in matchedFeed:
|
|
65784
|
+
for shareddrive in sorted(matchedFeed, key=lambda k: k['name']):
|
|
65722
65785
|
shareddrive = stripNonShowFields(shareddrive)
|
|
65723
65786
|
if FJQC.formatJSON:
|
|
65724
65787
|
row = {'User': user, 'id': shareddrive['id'], 'name': shareddrive['name']}
|
|
@@ -66093,7 +66156,7 @@ def printShowSharedDriveACLs(users, useDomainAdminAccess=False):
|
|
|
66093
66156
|
entityPerformActionNumItems([Ent.USER, user], jcount, Ent.SHAREDDRIVE, i, count)
|
|
66094
66157
|
Ind.Increment()
|
|
66095
66158
|
j = 0
|
|
66096
|
-
for shareddrive in matchFeed:
|
|
66159
|
+
for shareddrive in sorted(matchFeed, key=lambda k: k['name']):
|
|
66097
66160
|
j += 1
|
|
66098
66161
|
if not FJQC.formatJSON:
|
|
66099
66162
|
_showDriveFilePermissions(Ent.SHAREDDRIVE, f'{shareddrive["name"]} ({shareddrive["id"]}) - {shareddrive["createdTime"]}',
|
|
@@ -66107,7 +66170,7 @@ def printShowSharedDriveACLs(users, useDomainAdminAccess=False):
|
|
|
66107
66170
|
Ind.Decrement()
|
|
66108
66171
|
elif matchFeed:
|
|
66109
66172
|
if oneItemPerRow:
|
|
66110
|
-
for shareddrive in matchFeed:
|
|
66173
|
+
for shareddrive in sorted(matchFeed, key=lambda k: k['name']):
|
|
66111
66174
|
baserow = {'User': user, 'id': shareddrive['id'], 'name': shareddrive['name'], 'createdTime': shareddrive['createdTime']}
|
|
66112
66175
|
if addCSVData:
|
|
66113
66176
|
baserow.update(addCSVData)
|
|
@@ -66128,7 +66191,7 @@ def printShowSharedDriveACLs(users, useDomainAdminAccess=False):
|
|
|
66128
66191
|
baserow['JSON'] = json.dumps({})
|
|
66129
66192
|
csvPF.WriteRowNoFilter(baserow)
|
|
66130
66193
|
else:
|
|
66131
|
-
for shareddrive in matchFeed:
|
|
66194
|
+
for shareddrive in sorted(matchFeed, key=lambda k: k['name']):
|
|
66132
66195
|
baserow = {'User': user, 'id': shareddrive['id'], 'name': shareddrive['name'], 'createdTime': shareddrive['createdTime']}
|
|
66133
66196
|
if addCSVData:
|
|
66134
66197
|
baserow.update(addCSVData)
|
|
@@ -66178,11 +66241,7 @@ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
|
|
|
66178
66241
|
showNoOrganizerDrives = SHOW_NO_PERMISSIONS_DRIVES_CHOICE_MAP['false']
|
|
66179
66242
|
fieldsList = ['role', 'type', 'emailAddress']
|
|
66180
66243
|
cd = entityList = orgUnitId = query = matchPattern = None
|
|
66181
|
-
domainList = set()
|
|
66182
|
-
if GC.Values[GC.DOMAIN]:
|
|
66183
|
-
domainList.add(GC.Values[GC.DOMAIN])
|
|
66184
|
-
else:
|
|
66185
|
-
domainList.add(GM.Globals[GM.DECODED_ID_TOKEN].get('hd', 'UNKNOWN').lower())
|
|
66244
|
+
domainList = set([(GC.Values[GC.DOMAIN] if GC.Values[GC.DOMAIN] else _getValueFromOAuth('hd'))])
|
|
66186
66245
|
oneOrganizer = True
|
|
66187
66246
|
while Cmd.ArgumentsRemaining():
|
|
66188
66247
|
myarg = getArgument()
|
|
@@ -66333,7 +66392,7 @@ def printSharedDriveOrganizers(users, useDomainAdminAccess=False):
|
|
|
66333
66392
|
pass
|
|
66334
66393
|
if len(matchFeed) == 0:
|
|
66335
66394
|
setSysExitRC(NO_ENTITIES_FOUND_RC)
|
|
66336
|
-
for shareddrive in matchFeed:
|
|
66395
|
+
for shareddrive in sorted(matchFeed, key=lambda k: k['name']):
|
|
66337
66396
|
row = {'id': shareddrive['id'], 'name': shareddrive['name'],
|
|
66338
66397
|
'organizers': delimiter.join(shareddrive['organizers']),
|
|
66339
66398
|
'createdTime': shareddrive['createdTime']}
|