gam7 7.6.12__tar.gz → 7.6.14__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.12 → gam7-7.6.14}/PKG-INFO +1 -1
- {gam7-7.6.12 → gam7-7.6.14}/src/GamCommands.txt +9 -4
- {gam7-7.6.12 → gam7-7.6.14}/src/GamUpdate.txt +13 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/__init__.py +139 -77
- gam7-7.6.14/wiki/Administrators.md +1451 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/GamUpdates.md +5 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Copy-Move.md +13 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Files-Display.md +6 -1
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +1 -1
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Version-and-Help.md +6 -6
- gam7-7.6.12/wiki/Administrators.md +0 -907
- {gam7-7.6.12 → gam7-7.6.14}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/actions/decrypt.sh +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/actions/entitlements.plist +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/stale.yml +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/workflows/build.yml +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.github/workflows/pypi.yml +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/.pre-commit-config.yaml +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/LICENSE +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/README.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/pyproject.toml +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/.gitignore +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/LICENSE +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/cacerts.pem +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/callgam.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/__main__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/__init__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/auth.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/client.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/core.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/data.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/http.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/http_core.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/service.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/token_store.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/atom/url.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/cacerts.pem +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glapi.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/service.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam/six.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam-install.sh +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam-setup.bat +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam.exe.manifest +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam.spec +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/gam.wxs +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/license.rtf +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/requirements-dev.txt +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/requirements.txt +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/setup.cfg +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/setup.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/tools/mkGamRef.py +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/tools/openssl.props +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/src/version_info.txt.in +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/00scratch.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Addresses.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Alert-Center.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Aliases.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Authorization.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Basic-Items.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Calendars-Access.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Calendars-Events.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Calendars.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Chat-Bot.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Customer.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Domain-SharedContacts-GAL.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Domains-Verification.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Domains.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Drive-Items.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Groups-Membership.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Groups.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Home.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Licenses.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/List-Items.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/List.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Organizational-Units.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Other-Resources.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Permission-Matches.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/README.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Rclone.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Reports.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Reseller.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Resources.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Schemas.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Scripts.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Send-Email.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Shared-Drives.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Sites.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Tag-Replace.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Todrive.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Calendars.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Chat.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Contacts.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Permissions.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Forms.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Meet.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Photo.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Tasks.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-Tokens.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users-YouTube.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Users.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/_Sidebar.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/gam.cfg.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-AdminSettingsExamples.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Android-Installation.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-BulkOperations.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-CalendarExamples.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Chat-Bot.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Command-Reference-Drive.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Command-Reference-Email.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Command-Reference-Groups.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Command-Reference-Users.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Custom-Schemas.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Data-Transfers.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-DomainVerification.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-ExamplesCSV.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-ExamplesOrganizations.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-GAM-options-files.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-GAM3CSVListings.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-GAM3GroupSettings.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-GAM7-FAQ.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-GoogleDriveManagement.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Home.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-LicenseExamples.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Managing-Admins.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Managing-Devices.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-OAuthKeyManagement.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Printers.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-ResellerCommands.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-SecurityExamples.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Use-a-Yubikey.md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.6.12 → gam7-7.6.14}/wiki/l-_Footer.md +0 -0
|
@@ -1461,16 +1461,21 @@ gam <UserTypeEntity> update serviceaccount (scope|scopes <APIScopeURLList>)*
|
|
|
1461
1461
|
gam print privileges [todrive <ToDriveAttribute>*]
|
|
1462
1462
|
gam show privileges
|
|
1463
1463
|
|
|
1464
|
+
<Privilege> ::= <String>
|
|
1465
|
+
<PrivilegeList> ::= "<Privilege>(,<Privilege)*"
|
|
1464
1466
|
<RoleAssignmentID> ::= <String>
|
|
1465
1467
|
<RoleItem> ::= id:<String>|uid:<string>|<String>
|
|
1466
1468
|
|
|
1467
|
-
gam create adminrole <String>
|
|
1468
|
-
|
|
1469
|
+
gam create adminrole <String> [description <String>]
|
|
1470
|
+
privileges all|all_ou|<PrivilegesList>|(select <FileSelector>|<CSVFileSelector>)
|
|
1471
|
+
gam update adminrole <RoleItem> [name <String>] [description <String>]
|
|
1472
|
+
[privileges all|all_ou|<PrivilegesList>|(select <FileSelector>|<CSVFileSelector>)]
|
|
1469
1473
|
gam delete adminrole <RoleItem>
|
|
1470
1474
|
gam info adminrole <RoleItem> [privileges]
|
|
1471
1475
|
gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
|
1472
|
-
[privileges] [oneitemperrow]
|
|
1473
|
-
gam show adminroles|roles
|
|
1476
|
+
[role <RoleItem>] [privileges] [oneitemperrow]
|
|
1477
|
+
gam show adminroles|roles
|
|
1478
|
+
[role <RoleItem>] [privileges]
|
|
1474
1479
|
|
|
1475
1480
|
gam create|add admin <EmailAddress>|<UniqueID> <RoleItem> customer|(org_unit <OrgUnitItem>)
|
|
1476
1481
|
[condition securitygroup|nonsecuritygroup]
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
7.06.14
|
|
2
|
+
|
|
3
|
+
Updated `gam create|update adminrole` to allow specifying a collection of privileges
|
|
4
|
+
with `privileges select <FileSelector>|<CSVFileSelector>` which makes copying roles much simpler.
|
|
5
|
+
|
|
6
|
+
Updated option `role <RoleItem>` to `gam print|show adminroles` to allow display of information
|
|
7
|
+
for a specific role.
|
|
8
|
+
|
|
9
|
+
7.06.13
|
|
10
|
+
|
|
11
|
+
Updated `gam print group-members ... recursive` and `gam print cigroup-members ... recursive`
|
|
12
|
+
to expand groups representing chat spaces.
|
|
13
|
+
|
|
1
14
|
7.06.12
|
|
2
15
|
|
|
3
16
|
Deleted commands to display Analytic UA properties; the API has been deprecated.
|
|
@@ -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.14'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -5981,7 +5981,7 @@ def getCIGroupMemberRoleFixType(member):
|
|
|
5981
5981
|
else:
|
|
5982
5982
|
member['type'] = Ent.TYPE_OTHER
|
|
5983
5983
|
roles = {}
|
|
5984
|
-
memberRoles = member.get('roles', [{'name': Ent.
|
|
5984
|
+
memberRoles = member.get('roles', [{'name': Ent.ROLE_MEMBER}])
|
|
5985
5985
|
for role in memberRoles:
|
|
5986
5986
|
roles[role['name']] = role
|
|
5987
5987
|
for a_role in [Ent.ROLE_OWNER, Ent.ROLE_MANAGER, Ent.ROLE_MEMBER]:
|
|
@@ -6019,7 +6019,7 @@ def getCIGroupTransitiveMemberRoleFixType(groupName, tmember):
|
|
|
6019
6019
|
trole['name'] = Ent.ROLE_MANAGER
|
|
6020
6020
|
memberRoles.append(trole)
|
|
6021
6021
|
else:
|
|
6022
|
-
memberRoles = [{'name': Ent.
|
|
6022
|
+
memberRoles = [{'name': Ent.ROLE_MEMBER}]
|
|
6023
6023
|
roles = {}
|
|
6024
6024
|
for role in memberRoles:
|
|
6025
6025
|
roles[role['name']] = role
|
|
@@ -16497,8 +16497,10 @@ def getRoleId():
|
|
|
16497
16497
|
invalidChoiceExit(role, GM.Globals[GM.MAP_ROLE_NAME_TO_ID], True)
|
|
16498
16498
|
return (role, roleId)
|
|
16499
16499
|
|
|
16500
|
-
# gam create adminrole <String>
|
|
16501
|
-
#
|
|
16500
|
+
# gam create adminrole <String> [description <String>]
|
|
16501
|
+
# privileges all|all_ou|<PrivilegesList>|(select <FileSelector>|<CSVFileSelector>)
|
|
16502
|
+
# gam update adminrole <RoleItem> [name <String>] [description <String>]
|
|
16503
|
+
# [privileges all|all_ou|<PrivilegesList>|(select <FileSelector>|<CSVFileSelector>)]
|
|
16502
16504
|
def doCreateUpdateAdminRoles():
|
|
16503
16505
|
def expandChildPrivileges(privilege):
|
|
16504
16506
|
for childPrivilege in privilege.get('childPrivileges', []):
|
|
@@ -16529,8 +16531,12 @@ def doCreateUpdateAdminRoles():
|
|
|
16529
16531
|
elif privs == 'ALL_OU':
|
|
16530
16532
|
body['rolePrivileges'] = [{'privilegeName': p, 'serviceId': v} for p, v in ouPrivileges.items()]
|
|
16531
16533
|
else:
|
|
16534
|
+
if privs == 'SELECT':
|
|
16535
|
+
privsList = [p.upper() for p in getEntityList(Cmd.OB_PRIVILEGE_LIST)]
|
|
16536
|
+
else:
|
|
16537
|
+
privsList = privs.replace(',', ' ').split()
|
|
16532
16538
|
body.setdefault('rolePrivileges', [])
|
|
16533
|
-
for p in
|
|
16539
|
+
for p in privsList:
|
|
16534
16540
|
if p in allPrivileges:
|
|
16535
16541
|
body['rolePrivileges'].append({'privilegeName': p, 'serviceId': allPrivileges[p]})
|
|
16536
16542
|
elif p in ouPrivileges:
|
|
@@ -16540,6 +16546,8 @@ def doCreateUpdateAdminRoles():
|
|
|
16540
16546
|
elif ':' in p:
|
|
16541
16547
|
priv, serv = p.split(':')
|
|
16542
16548
|
body['rolePrivileges'].append({'privilegeName': priv, 'serviceId': serv.lower()})
|
|
16549
|
+
elif p == 'SUPPORT':
|
|
16550
|
+
pass
|
|
16543
16551
|
else:
|
|
16544
16552
|
invalidChoiceExit(p, list(allPrivileges.keys())+list(ouPrivileges.keys())+list(childPrivileges.keys()), True)
|
|
16545
16553
|
elif myarg == 'description':
|
|
@@ -16557,12 +16565,12 @@ def doCreateUpdateAdminRoles():
|
|
|
16557
16565
|
customer=GC.Values[GC.CUSTOMER_ID], body=body, fields='roleId,roleName')
|
|
16558
16566
|
else:
|
|
16559
16567
|
result = callGAPI(cd.roles(), 'patch',
|
|
16560
|
-
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND, GAPI.FORBIDDEN]+[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION],
|
|
16568
|
+
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND, GAPI.FORBIDDEN]+[GAPI.NOT_FOUND, GAPI.FAILED_PRECONDITION, GAPI.CONFLICT],
|
|
16561
16569
|
customer=GC.Values[GC.CUSTOMER_ID], roleId=roleId, body=body, fields='roleId,roleName')
|
|
16562
16570
|
entityActionPerformed([Ent.ADMIN_ROLE, f"{result['roleName']}({result['roleId']})"])
|
|
16563
16571
|
except GAPI.duplicate as e:
|
|
16564
16572
|
entityActionFailedWarning([Ent.ADMIN_ROLE, f"{body['roleName']}"], str(e))
|
|
16565
|
-
except (GAPI.notFound, GAPI.forbidden, GAPI.failedPrecondition) as e:
|
|
16573
|
+
except (GAPI.notFound, GAPI.forbidden, GAPI.failedPrecondition, GAPI.conflict) as e:
|
|
16566
16574
|
entityActionFailedWarning([Ent.ADMIN_ROLE, roleId], str(e))
|
|
16567
16575
|
except (GAPI.badRequest, GAPI.customerNotFound):
|
|
16568
16576
|
accessErrorExit(cd)
|
|
@@ -16605,61 +16613,53 @@ def _showAdminRole(role, i=0, count=0):
|
|
|
16605
16613
|
Ind.Decrement()
|
|
16606
16614
|
|
|
16607
16615
|
# gam info adminrole <RoleItem> [privileges]
|
|
16608
|
-
def doInfoAdminRole():
|
|
16609
|
-
cd = buildGAPIObject(API.DIRECTORY)
|
|
16610
|
-
fieldsList = PRINT_ADMIN_ROLES_FIELDS[:]
|
|
16611
|
-
_, roleId = getRoleId()
|
|
16612
|
-
while Cmd.ArgumentsRemaining():
|
|
16613
|
-
myarg = getArgument()
|
|
16614
|
-
if myarg == 'privileges':
|
|
16615
|
-
fieldsList.append('rolePrivileges')
|
|
16616
|
-
else:
|
|
16617
|
-
unknownArgumentExit()
|
|
16618
|
-
fields = getFieldsFromFieldsList(fieldsList)
|
|
16619
|
-
try:
|
|
16620
|
-
role = callGAPI(cd.roles(), 'get',
|
|
16621
|
-
throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.FAILED_PRECONDITION,
|
|
16622
|
-
GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND],
|
|
16623
|
-
customer=GC.Values[GC.CUSTOMER_ID], roleId=roleId, fields=fields)
|
|
16624
|
-
role.setdefault('isSuperAdminRole', False)
|
|
16625
|
-
role.setdefault('isSystemRole', False)
|
|
16626
|
-
_showAdminRole(role)
|
|
16627
|
-
except (GAPI.notFound, GAPI.forbidden, GAPI.failedPrecondition) as e:
|
|
16628
|
-
entityActionFailedWarning([Ent.ADMIN_ROLE, roleId], str(e))
|
|
16629
|
-
except (GAPI.badRequest, GAPI.customerNotFound):
|
|
16630
|
-
accessErrorExit(cd)
|
|
16631
|
-
|
|
16632
16616
|
# gam print adminroles|roles [todrive <ToDriveAttribute>*]
|
|
16633
|
-
# [privileges] [oneitemperrow]
|
|
16634
|
-
# gam show adminroles|roles
|
|
16635
|
-
|
|
16617
|
+
# [role <RoleItem>] [privileges] [oneitemperrow]
|
|
16618
|
+
# gam show adminroles|roles
|
|
16619
|
+
# [role <RoleItem>] [privileges]
|
|
16620
|
+
def doInfoPrintShowAdminRoles():
|
|
16636
16621
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
16637
16622
|
fieldsList = PRINT_ADMIN_ROLES_FIELDS[:]
|
|
16638
16623
|
csvPF = CSVPrintFile(fieldsList, PRINT_ADMIN_ROLES_FIELDS) if Act.csvFormat() else None
|
|
16639
16624
|
oneItemPerRow = False
|
|
16625
|
+
if Act.Get() != Act.INFO:
|
|
16626
|
+
roleId = None
|
|
16627
|
+
else:
|
|
16628
|
+
_, roleId = getRoleId()
|
|
16640
16629
|
while Cmd.ArgumentsRemaining():
|
|
16641
16630
|
myarg = getArgument()
|
|
16642
16631
|
if csvPF and myarg == 'todrive':
|
|
16643
16632
|
csvPF.GetTodriveParameters()
|
|
16633
|
+
elif roleId is None and myarg == 'role':
|
|
16634
|
+
_, roleId = getRoleId()
|
|
16644
16635
|
elif myarg == 'privileges':
|
|
16645
16636
|
fieldsList.append('rolePrivileges')
|
|
16646
16637
|
elif myarg == 'oneitemperrow':
|
|
16647
16638
|
oneItemPerRow = True
|
|
16648
16639
|
else:
|
|
16649
16640
|
unknownArgumentExit()
|
|
16650
|
-
if csvPF:
|
|
16641
|
+
if csvPF and 'rolePrivileges' in fieldsList:
|
|
16651
16642
|
if not oneItemPerRow:
|
|
16652
16643
|
csvPF.AddTitles(['rolePrivileges'])
|
|
16653
16644
|
else:
|
|
16654
16645
|
csvPF.AddTitles(['privilegeName', 'serviceId'])
|
|
16655
|
-
fields = getItemFieldsFromFieldsList('items', fieldsList)
|
|
16656
|
-
printGettingAllAccountEntities(Ent.ADMIN_ROLE)
|
|
16657
16646
|
try:
|
|
16658
|
-
|
|
16659
|
-
|
|
16660
|
-
|
|
16661
|
-
|
|
16662
|
-
|
|
16647
|
+
if roleId is None:
|
|
16648
|
+
fields = getItemFieldsFromFieldsList('items', fieldsList)
|
|
16649
|
+
printGettingAllAccountEntities(Ent.ADMIN_ROLE)
|
|
16650
|
+
roles = callGAPIpages(cd.roles(), 'list', 'items',
|
|
16651
|
+
pageMessage=getPageMessage(),
|
|
16652
|
+
throwReasons=[GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND, GAPI.FORBIDDEN],
|
|
16653
|
+
customer=GC.Values[GC.CUSTOMER_ID], fields=fields)
|
|
16654
|
+
else:
|
|
16655
|
+
fields = getFieldsFromFieldsList(fieldsList)
|
|
16656
|
+
roles = [callGAPI(cd.roles(), 'get',
|
|
16657
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.FORBIDDEN, GAPI.FAILED_PRECONDITION,
|
|
16658
|
+
GAPI.BAD_REQUEST, GAPI.CUSTOMER_NOT_FOUND],
|
|
16659
|
+
customer=GC.Values[GC.CUSTOMER_ID], roleId=roleId, fields=fields)]
|
|
16660
|
+
except (GAPI.notFound, GAPI.forbidden, GAPI.failedPrecondition) as e:
|
|
16661
|
+
entityActionFailedWarning([Ent.ADMIN_ROLE, roleId], str(e))
|
|
16662
|
+
except (GAPI.badRequest, GAPI.customerNotFound):
|
|
16663
16663
|
accessErrorExit(cd)
|
|
16664
16664
|
for role in roles:
|
|
16665
16665
|
role.setdefault('isSuperAdminRole', False)
|
|
@@ -26478,6 +26478,64 @@ def _getChatMemberEmail(cd, member):
|
|
|
26478
26478
|
_, memberUid = member['groupMember']['name'].split('/')
|
|
26479
26479
|
member['groupMember']['email'], _ = convertUIDtoEmailAddressWithType(f'uid:{memberUid}', cd, None, emailTypes=['group'])
|
|
26480
26480
|
|
|
26481
|
+
def _getChatSpaceMembers(cd, chatSpace, ciGroupName):
|
|
26482
|
+
if chatSpace.startswith('space/'):
|
|
26483
|
+
_, chatSpace = chatSpace.split('/', 1)
|
|
26484
|
+
chatSpace = 'spaces/'+chatSpace
|
|
26485
|
+
kwargsUAA = {'useAdminAccess': True, 'filter': 'member.type != "BOT"'}
|
|
26486
|
+
user, chat, kvList = buildChatServiceObject(API.CHAT_MEMBERSHIPS_ADMIN, _getAdminEmail(), 0, 0, [Ent.CHAT_SPACE, chatSpace], True)
|
|
26487
|
+
memberList = []
|
|
26488
|
+
if not chat:
|
|
26489
|
+
return memberList
|
|
26490
|
+
fields = getItemFieldsFromFieldsList('memberships', [])
|
|
26491
|
+
qfilter = f'{Ent.Singular(Ent.CHAT_SPACE)}: {chatSpace}, {kwargsUAA["filter"]}'
|
|
26492
|
+
try:
|
|
26493
|
+
members = callGAPIpages(chat.spaces().members(), 'list', 'memberships',
|
|
26494
|
+
pageMessage=_getChatPageMessage(Ent.CHAT_MEMBER, user, 0, 0, qfilter),
|
|
26495
|
+
throwReasons=[GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
|
26496
|
+
retryReasons=GAPI.SERVICE_NOT_AVAILABLE_RETRY_REASONS,
|
|
26497
|
+
parent=chatSpace, fields=fields, pageSize=CHAT_PAGE_SIZE, **kwargsUAA)
|
|
26498
|
+
for member in members:
|
|
26499
|
+
_getChatMemberEmail(cd, member)
|
|
26500
|
+
gmember = {}
|
|
26501
|
+
if 'member' in member:
|
|
26502
|
+
if member['member']['type'] == 'HUMAN':
|
|
26503
|
+
_, memberUid = member['member']['name'].split('/')
|
|
26504
|
+
gmember['type'] = Ent.TYPE_USER
|
|
26505
|
+
email, _ = convertUIDtoEmailAddressWithType(f'uid:{memberUid}', cd, None, emailTypes=['user'])
|
|
26506
|
+
role = Ent.ROLE_MANAGER if member['role'] == 'ROLE_MANAGER' else Ent.ROLE_MEMBER
|
|
26507
|
+
if not ciGroupName:
|
|
26508
|
+
gmember['id'] = memberUid
|
|
26509
|
+
gmember['email'] = email
|
|
26510
|
+
gmember['role'] = role
|
|
26511
|
+
gmember['status'] = member['state']
|
|
26512
|
+
else:
|
|
26513
|
+
gmember['name'] = f'{ciGroupName}/memberships/{memberUid}'
|
|
26514
|
+
gmember['preferredMemberKey'] = {'id': email}
|
|
26515
|
+
gmember['roles'] = [{'name': role}]
|
|
26516
|
+
gmember['createTime'] = member['createTime']
|
|
26517
|
+
memberList.append(gmember)
|
|
26518
|
+
elif 'groupMember' in member:
|
|
26519
|
+
_, memberUid = member['groupMember']['name'].split('/')
|
|
26520
|
+
gmember['type'] = Ent.TYPE_GROUP
|
|
26521
|
+
role = Ent.ROLE_MANAGER if member['role'] == 'ROLE_MANAGER' else Ent.ROLE_MEMBER
|
|
26522
|
+
email, _ = convertUIDtoEmailAddressWithType(f'uid:{memberUid}', cd, None, emailTypes=['group'])
|
|
26523
|
+
if not ciGroupName:
|
|
26524
|
+
gmember['id'] = memberUid
|
|
26525
|
+
gmember['email'] = email
|
|
26526
|
+
gmember['role'] = role
|
|
26527
|
+
gmember['status'] = member['state']
|
|
26528
|
+
else:
|
|
26529
|
+
gmember['name'] = f'{ciGroupName}/memberships/{memberUid}'
|
|
26530
|
+
gmember['preferredMemberKey'] = {'id': email}
|
|
26531
|
+
gmember['roles'] = [{'name': role}]
|
|
26532
|
+
gmember['createTime'] = member['createTime']
|
|
26533
|
+
memberList.append(gmember)
|
|
26534
|
+
return memberList
|
|
26535
|
+
except (GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
26536
|
+
exitIfChatNotConfigured(chat, kvList, str(e), 0, 0)
|
|
26537
|
+
return memberList
|
|
26538
|
+
|
|
26481
26539
|
def normalizeUserMember(user, userList):
|
|
26482
26540
|
userList.append(normalizeEmailAddressOrUID(user))
|
|
26483
26541
|
|
|
@@ -34138,15 +34196,18 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
|
|
|
34138
34196
|
|
|
34139
34197
|
printGettingAllEntityItemsForWhom(memberRoles if memberRoles else Ent.ROLE_MANAGER_MEMBER_OWNER, groupEmail, i, count)
|
|
34140
34198
|
validRoles, listRoles, listFields = _getRoleVerification(memberRoles, 'nextPageToken,members(email,id,role,status,type,delivery_settings)')
|
|
34141
|
-
|
|
34142
|
-
|
|
34143
|
-
|
|
34144
|
-
|
|
34145
|
-
|
|
34146
|
-
|
|
34147
|
-
|
|
34148
|
-
|
|
34149
|
-
|
|
34199
|
+
if not groupEmail.startswith('space/'):
|
|
34200
|
+
try:
|
|
34201
|
+
groupMembers = callGAPIpages(cd.members(), 'list', 'members',
|
|
34202
|
+
pageMessage=getPageMessageForWhom(),
|
|
34203
|
+
throwReasons=GAPI.MEMBERS_THROW_REASONS, retryReasons=GAPI.MEMBERS_RETRY_REASONS,
|
|
34204
|
+
includeDerivedMembership=memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP],
|
|
34205
|
+
groupKey=groupEmail, roles=listRoles, fields=listFields, maxResults=GC.Values[GC.MEMBER_MAX_RESULTS])
|
|
34206
|
+
except (GAPI.groupNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis, GAPI.invalid, GAPI.forbidden, GAPI.serviceNotAvailable):
|
|
34207
|
+
entityUnknownWarning(Ent.GROUP, groupEmail, i, count)
|
|
34208
|
+
return
|
|
34209
|
+
else:
|
|
34210
|
+
groupMembers = _getChatSpaceMembers(cd, groupEmail, '')
|
|
34150
34211
|
checkCategory = memberDisplayOptions['showCategory']
|
|
34151
34212
|
if not memberOptions[MEMBEROPTION_RECURSIVE]:
|
|
34152
34213
|
if memberOptions[MEMBEROPTION_NODUPLICATES]:
|
|
@@ -34170,8 +34231,7 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
|
|
|
34170
34231
|
elif memberOptions[MEMBEROPTION_NODUPLICATES]:
|
|
34171
34232
|
groupMemberList = []
|
|
34172
34233
|
for member in groupMembers:
|
|
34173
|
-
|
|
34174
|
-
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
34234
|
+
if member['type'] != Ent.TYPE_GROUP:
|
|
34175
34235
|
if ((member['type'] in typesSet and
|
|
34176
34236
|
checkMemberMatch(member, memberOptions) and
|
|
34177
34237
|
_checkMemberRoleIsSuspendedIsArchived(member, validRoles, memberOptions[MEMBEROPTION_ISSUSPENDED], memberOptions[MEMBEROPTION_ISARCHIVED]) and
|
|
@@ -34200,8 +34260,7 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
|
|
|
34200
34260
|
memberOptions, memberDisplayOptions, level+1, typesSet)
|
|
34201
34261
|
else:
|
|
34202
34262
|
for member in groupMembers:
|
|
34203
|
-
|
|
34204
|
-
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
34263
|
+
if member['type'] != Ent.TYPE_GROUP:
|
|
34205
34264
|
if ((member['type'] in typesSet) and
|
|
34206
34265
|
checkMemberMatch(member, memberOptions) and
|
|
34207
34266
|
_checkMemberRoleIsSuspendedIsArchived(member, validRoles,
|
|
@@ -36253,7 +36312,7 @@ def getCIGroupTransitiveMembers(ci, groupName, membersList, i, count):
|
|
|
36253
36312
|
return True
|
|
36254
36313
|
|
|
36255
36314
|
def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, count,
|
|
36256
|
-
memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs):
|
|
36315
|
+
memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs, cd):
|
|
36257
36316
|
nameToPrint = groupEmail if groupEmail else groupName
|
|
36258
36317
|
printGettingAllEntityItemsForWhom(memberRoles if memberRoles else Ent.ROLE_MANAGER_MEMBER_OWNER, nameToPrint, i, count)
|
|
36259
36318
|
validRoles = _getCIRoleVerification(memberRoles)
|
|
@@ -36266,16 +36325,21 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36266
36325
|
if member['type'] in typesSet and checkCIMemberMatch(member, memberOptions):
|
|
36267
36326
|
membersList.append(member)
|
|
36268
36327
|
return
|
|
36269
|
-
|
|
36270
|
-
|
|
36271
|
-
|
|
36272
|
-
|
|
36273
|
-
|
|
36274
|
-
|
|
36275
|
-
|
|
36276
|
-
|
|
36277
|
-
|
|
36278
|
-
|
|
36328
|
+
if not groupEmail.startswith('space/'):
|
|
36329
|
+
try:
|
|
36330
|
+
groupMembers = callGAPIpages(ci.groups().memberships(), 'list', 'memberships',
|
|
36331
|
+
pageMessage=getPageMessageForWhom(),
|
|
36332
|
+
throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
|
36333
|
+
parent=groupName, **kwargs)
|
|
36334
|
+
except (GAPI.resourceNotFound, GAPI.domainNotFound, GAPI.domainCannotUseApis,
|
|
36335
|
+
GAPI.forbidden, GAPI.badRequest, GAPI.invalid, GAPI.invalidArgument, GAPI.systemError,
|
|
36336
|
+
GAPI.permissionDenied, GAPI.serviceNotAvailable):
|
|
36337
|
+
entityUnknownWarning(Ent.CLOUD_IDENTITY_GROUP, nameToPrint, i, count)
|
|
36338
|
+
return
|
|
36339
|
+
else:
|
|
36340
|
+
if cd is None:
|
|
36341
|
+
cd = buildGAPIObject(API.DIRECTORY)
|
|
36342
|
+
groupMembers = _getChatSpaceMembers(cd, groupEmail, groupName)
|
|
36279
36343
|
checkCategory = memberDisplayOptions['showCategory']
|
|
36280
36344
|
if not memberOptions[MEMBEROPTION_RECURSIVE]:
|
|
36281
36345
|
if memberOptions[MEMBEROPTION_NODUPLICATES]:
|
|
@@ -36300,8 +36364,7 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36300
36364
|
for member in groupMembers:
|
|
36301
36365
|
getCIGroupMemberRoleFixType(member)
|
|
36302
36366
|
memberName = member.get('preferredMemberKey', {}).get('id', '')
|
|
36303
|
-
|
|
36304
|
-
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
36367
|
+
if member['type'] != Ent.TYPE_GROUP:
|
|
36305
36368
|
if (member['type'] in typesSet and
|
|
36306
36369
|
checkCIMemberMatch(member, memberOptions) and
|
|
36307
36370
|
_checkMemberRole(member, validRoles) and
|
|
@@ -36324,13 +36387,12 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36324
36387
|
groupMemberList.append((f'groups/{gname}', memberName))
|
|
36325
36388
|
for member in groupMemberList:
|
|
36326
36389
|
getCIGroupMembers(ci, member[0], memberRoles, membersList, membersSet, i, count,
|
|
36327
|
-
memberOptions, memberDisplayOptions, level+1, typesSet, member[1], kwargs)
|
|
36390
|
+
memberOptions, memberDisplayOptions, level+1, typesSet, member[1], kwargs, cd)
|
|
36328
36391
|
else:
|
|
36329
36392
|
for member in groupMembers:
|
|
36330
36393
|
getCIGroupMemberRoleFixType(member)
|
|
36331
36394
|
memberName = member.get('preferredMemberKey', {}).get('id', '')
|
|
36332
|
-
|
|
36333
|
-
if member['type'] != Ent.TYPE_GROUP or namespace:
|
|
36395
|
+
if member['type'] != Ent.TYPE_GROUP:
|
|
36334
36396
|
if (member['type'] in typesSet and
|
|
36335
36397
|
checkCIMemberMatch(member, memberOptions) and
|
|
36336
36398
|
_checkMemberRole(member, validRoles) and
|
|
@@ -36347,7 +36409,7 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
|
|
|
36347
36409
|
membersList.append(member)
|
|
36348
36410
|
_, gname = member['name'].rsplit('/', 1)
|
|
36349
36411
|
getCIGroupMembers(ci, f'groups/{gname}', memberRoles, membersList, membersSet, i, count,
|
|
36350
|
-
memberOptions, memberDisplayOptions, level+1, typesSet, memberName, kwargs)
|
|
36412
|
+
memberOptions, memberDisplayOptions, level+1, typesSet, memberName, kwargs, cd)
|
|
36351
36413
|
|
|
36352
36414
|
CIGROUPMEMBERS_FIELDS_CHOICE_MAP = {
|
|
36353
36415
|
'createtime': 'createTime',
|
|
@@ -36511,7 +36573,7 @@ def doPrintCIGroupMembers():
|
|
|
36511
36573
|
membersList = []
|
|
36512
36574
|
membersSet = set()
|
|
36513
36575
|
getCIGroupMembers(ci, groupEntity['name'], getRoles, membersList, membersSet, i, count,
|
|
36514
|
-
memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs)
|
|
36576
|
+
memberOptions, memberDisplayOptions, level, typesSet, groupEmail, kwargs, None)
|
|
36515
36577
|
if showOwnedBy and not checkCIGroupShowOwnedBy(showOwnedBy, membersList):
|
|
36516
36578
|
continue
|
|
36517
36579
|
for member in membersList:
|
|
@@ -75551,7 +75613,7 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
75551
75613
|
),
|
|
75552
75614
|
'info':
|
|
75553
75615
|
(Act.INFO,
|
|
75554
|
-
{Cmd.ARG_ADMINROLE:
|
|
75616
|
+
{Cmd.ARG_ADMINROLE: doInfoPrintShowAdminRoles,
|
|
75555
75617
|
Cmd.ARG_ALERT: doInfoAlert,
|
|
75556
75618
|
Cmd.ARG_ALIAS: doInfoAliases,
|
|
75557
75619
|
Cmd.ARG_BUILDING: doInfoBuilding,
|
|
@@ -75626,7 +75688,7 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
75626
75688
|
'print':
|
|
75627
75689
|
(Act.PRINT,
|
|
75628
75690
|
{Cmd.ARG_ADDRESSES: doPrintAddresses,
|
|
75629
|
-
Cmd.ARG_ADMINROLE:
|
|
75691
|
+
Cmd.ARG_ADMINROLE: doInfoPrintShowAdminRoles,
|
|
75630
75692
|
Cmd.ARG_ADMIN: doPrintShowAdmins,
|
|
75631
75693
|
Cmd.ARG_ALERT: doPrintShowAlerts,
|
|
75632
75694
|
Cmd.ARG_ALERTFEEDBACK: doPrintShowAlertFeedback,
|
|
@@ -75759,7 +75821,7 @@ MAIN_COMMANDS_WITH_OBJECTS = {
|
|
|
75759
75821
|
),
|
|
75760
75822
|
'show':
|
|
75761
75823
|
(Act.SHOW,
|
|
75762
|
-
{Cmd.ARG_ADMINROLE:
|
|
75824
|
+
{Cmd.ARG_ADMINROLE: doInfoPrintShowAdminRoles,
|
|
75763
75825
|
Cmd.ARG_ADMIN: doPrintShowAdmins,
|
|
75764
75826
|
Cmd.ARG_ALERT: doPrintShowAlerts,
|
|
75765
75827
|
Cmd.ARG_ALERTFEEDBACK: doPrintShowAlertFeedback,
|