gam7 7.27.3__tar.gz → 7.27.5__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.27.3 → gam7-7.27.5}/.github/workflows/build.yml +22 -15
- {gam7-7.27.3 → gam7-7.27.5}/PKG-INFO +1 -1
- {gam7-7.27.3 → gam7-7.27.5}/src/GamCommands.txt +21 -12
- {gam7-7.27.3 → gam7-7.27.5}/src/GamUpdate.txt +15 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/__init__.py +114 -43
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glapi.py +0 -6
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glmsgs.py +2 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Classroom-Courses.md +4 -1
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Cloud-Identity-Groups.md +1 -10
- {gam7-7.27.3 → gam7-7.27.5}/wiki/GamUpdates.md +36 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Reports.md +4 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Chat.md +24 -25
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Gmail-Delegates.md +69 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users.md +17 -20
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Version-and-Help.md +6 -6
- {gam7-7.27.3 → gam7-7.27.5}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/actions/decrypt.sh +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/actions/entitlements.plist +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/stale.yml +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/.github/workflows/pypi.yml +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/LICENSE +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/README.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/pyproject.toml +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/.gitignore +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/LICENSE +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/README.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/callgam.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/__main__.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/__init__.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/auth.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/client.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/core.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/data.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/http.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/http_core.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/service.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/token_store.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/atom/url.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/cacerts.pem +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/service.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam-install.sh +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam-setup.bat +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam.exe.manifest +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam.spec +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/gam.wxs +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/license.rtf +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/tools/hooks/hook-googleapiclient.model.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/tools/hooks/hook-httplib2.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/tools/mkGamRef.py +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/tools/openssl.props +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/tools/ssd.mjs +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/src/version_info.txt.in +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/00scratch.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Addresses.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Administrators.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Alert-Center.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Aliases.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Authorization.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Basic-Items.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Business-Account-Management.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Calendars-Access.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Calendars-Events.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Calendars.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Chat-Bot-Setup-Use.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Classroom-StudentGroups.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Customer.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Domain-SharedContacts.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Domains-Verification.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Domains.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Drive-Items.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/GAM-Release-Process.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/GAM7-FAQ.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Global-Address-List.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Groups-Membership.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Groups.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Home.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Licenses.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/List-Items.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/List.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Organizational-Units.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Other-Resources.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Permission-Matches.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/README.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Rclone.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Reseller.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Resources.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Schemas.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Scripts.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Send-Email.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Shared-Drives.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Sites.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Tag-Replace.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Todrive.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Calendars.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Contacts.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Files-Display.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Permissions.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Forms.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Meet.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Photo.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Tag-Manager.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Tasks.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Tokens.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-Web-Resources-and-Sites.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Users-YouTube.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Using-GAM7-with-keyless-authentication-Workload-Identity-Federation.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Vault-Takeout.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/_Sidebar.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/gam.cfg.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-AdminSettingsExamples.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Android-Installation.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-BulkOperations.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-CalendarExamples.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Chat-Bot.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Command-Reference-Drive.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Command-Reference-Email.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Command-Reference-Groups.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Command-Reference-Users.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Custom-Schemas.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Data-Transfers.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-DomainVerification.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-ExamplesCSV.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-ExamplesOrganizations.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-GAM-options-files.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-GAM3CSVListings.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-GAM3GroupSettings.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-GoogleDriveManagement.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Home.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-LicenseExamples.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Managing-Admins.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Managing-Devices.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-OAuthKeyManagement.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Printers.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-ResellerCommands.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-SecurityExamples.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.27.3 → gam7-7.27.5}/wiki/legacy/l-_Footer.md +0 -0
|
@@ -479,24 +479,16 @@ jobs:
|
|
|
479
479
|
"${PYTHON}" -V
|
|
480
480
|
"${PYTHON}" -c "import ssl; print(f'Using {ssl.OPENSSL_VERSION}')"
|
|
481
481
|
|
|
482
|
-
- name: Upgrade pip, wheel, etc
|
|
483
|
-
run: |
|
|
484
|
-
curl $curl_retry -O https://bootstrap.pypa.io/get-pip.py
|
|
485
|
-
"$PYTHON" get-pip.py
|
|
486
|
-
"$PYTHON" -m pip install --upgrade pip
|
|
487
|
-
"$PYTHON" -m pip install --upgrade wheel
|
|
488
|
-
"$PYTHON" -m pip install --upgrade setuptools
|
|
489
|
-
"$PYTHON" -m pip install --upgrade importlib-metadata
|
|
490
|
-
"$PYTHON" -m pip install --upgrade setuptools-scm
|
|
491
|
-
"$PYTHON" -m pip list
|
|
492
|
-
|
|
493
482
|
- name: Create and use Python venv
|
|
494
483
|
run: |
|
|
495
484
|
cd "$GITHUB_WORKSPACE"
|
|
485
|
+
curl -o get-pip.py https://bootstrap.pypa.io/get-pip.py
|
|
486
|
+
"$PYTHON" get-pip.py
|
|
496
487
|
"$PYTHON" -m venv venv
|
|
497
488
|
if [[ "$RUNNER_OS" == "Windows" ]]; then
|
|
498
|
-
#
|
|
499
|
-
|
|
489
|
+
# pyscard seems to build outside venv but not in it.
|
|
490
|
+
# build it so it's cached.
|
|
491
|
+
"$PYTHON" -m pip install --upgrade pyscard
|
|
500
492
|
export PYTHON="${GITHUB_WORKSPACE}/venv/scripts/python.exe"
|
|
501
493
|
else
|
|
502
494
|
export PYTHON="${GITHUB_WORKSPACE}/venv/bin/python3"
|
|
@@ -507,6 +499,18 @@ jobs:
|
|
|
507
499
|
echo "gam=${gam}" >> $GITHUB_ENV
|
|
508
500
|
fi
|
|
509
501
|
|
|
502
|
+
- name: Upgrade pip, wheel, etc
|
|
503
|
+
run: |
|
|
504
|
+
curl $curl_retry -O https://bootstrap.pypa.io/get-pip.py
|
|
505
|
+
"$PYTHON" get-pip.py
|
|
506
|
+
"$PYTHON" -m pip install --upgrade pip
|
|
507
|
+
"$PYTHON" -m pip install --upgrade wheel
|
|
508
|
+
"$PYTHON" -m pip install --upgrade setuptools
|
|
509
|
+
"$PYTHON" -m pip install --upgrade importlib-metadata
|
|
510
|
+
"$PYTHON" -m pip install --upgrade setuptools-scm
|
|
511
|
+
"$PYTHON" -m pip install --upgrade packaging
|
|
512
|
+
"$PYTHON" -m pip list
|
|
513
|
+
|
|
510
514
|
- name: Install pip requirements
|
|
511
515
|
run: |
|
|
512
516
|
echo "before anything..."
|
|
@@ -515,7 +519,10 @@ jobs:
|
|
|
515
519
|
"$PYTHON" -m pip cache info
|
|
516
520
|
echo "--list--"
|
|
517
521
|
"$PYTHON" -m pip cache list
|
|
518
|
-
"
|
|
522
|
+
echo "--pip debug verbose--"
|
|
523
|
+
"$PYTHON" -m pip debug --verbose
|
|
524
|
+
echo "--------"
|
|
525
|
+
"$PYTHON" -m pip install -vvv --upgrade ..[yubikey]
|
|
519
526
|
echo "after everything..."
|
|
520
527
|
"$PYTHON" -m pip list
|
|
521
528
|
|
|
@@ -987,7 +994,7 @@ jobs:
|
|
|
987
994
|
$gam report usageparameters customer
|
|
988
995
|
$gam report usage customer parameters gmail:num_emails_sent,accounts:num_1day_logins
|
|
989
996
|
$gam report customer todrive tdnobrowser
|
|
990
|
-
#$gam report users fields accounts:is_less_secure_apps_access_allowed,gmail:last_imap_time,gmail:last_pop_time filters "accounts:last_login_time>
|
|
997
|
+
#$gam report users fields accounts:is_less_secure_apps_access_allowed,gmail:last_imap_time,gmail:last_pop_time filters "accounts:last_login_time>2025-01-01T00:00:00.000Z" todrive tdnobrowser
|
|
991
998
|
$gam report users todrive tdnobrowser
|
|
992
999
|
$gam report admin start -3d todrive tdnobrowser
|
|
993
1000
|
$gam print devices nopersonaldevices nodeviceusers filter "serial:$JID$JID$JID$JID-" | $gam csv - gam delete device id ~name
|
|
@@ -3279,6 +3279,7 @@ gam print courses [todrive <ToDriveAttribute>*]
|
|
|
3279
3279
|
[show all|students|teachers] [countsonly]
|
|
3280
3280
|
[timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
|
3281
3281
|
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>]
|
|
3282
|
+
(addcsvdata <FieldName> <String>)*
|
|
3282
3283
|
[formatjson [quotechar <Character>]]
|
|
3283
3284
|
[showitemcountonly]
|
|
3284
3285
|
|
|
@@ -5776,10 +5777,9 @@ gam create|add user <EmailAddress> [ignorenullpassword] <UserAttribute>*
|
|
|
5776
5777
|
[[notify <EmailAddressList>] [notifyrecoveryemail]
|
|
5777
5778
|
[subject <String>]
|
|
5778
5779
|
[notifypassword <String>]
|
|
5779
|
-
[from <EmailAaddress>]
|
|
5780
|
-
[mailbox <EmailAaddress>]
|
|
5780
|
+
[from <EmailAaddress>] [mailbox <EmailAaddress>]
|
|
5781
5781
|
[replyto <EmailAaddress>]
|
|
5782
|
-
[<NotifyMessageContent>]
|
|
5782
|
+
[<NotifyMessageContent>] [html [<Boolean>]]
|
|
5783
5783
|
(replace <Tag> <UserReplacement>)*
|
|
5784
5784
|
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
|
5785
5785
|
]
|
|
@@ -5802,10 +5802,9 @@ gam update user <UserItem> [ignorenullpassword] <UserAttribute>*
|
|
|
5802
5802
|
[[notify <EmailAddressList>] [notifyrecoveryemail]
|
|
5803
5803
|
[subject <String>]
|
|
5804
5804
|
[notifypassword <String>]
|
|
5805
|
-
[from <EmailAaddress>]
|
|
5806
|
-
[mailbox <EmailAddress>]
|
|
5805
|
+
[from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
5807
5806
|
[replyto <EmailAddress>]
|
|
5808
|
-
[<NotifyMessageContent>]
|
|
5807
|
+
[<NotifyMessageContent>] [html [<Boolean>]]
|
|
5809
5808
|
(replace <Tag> <UserReplacement>)*
|
|
5810
5809
|
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
|
5811
5810
|
]
|
|
@@ -5840,10 +5839,9 @@ gam update users <UserTypeEntity> [ignorenullpassword] <UserAttribute>*
|
|
|
5840
5839
|
[[notify <EmailAddressList>] [notifyrecoveryemail]
|
|
5841
5840
|
[subject <String>]
|
|
5842
5841
|
[notifypassword <String>]
|
|
5843
|
-
[from <EmailAddress>]
|
|
5844
|
-
[mailbox <EmailAddress>]
|
|
5842
|
+
[from <EmailAddress>] [mailbox <EmailAddress>]
|
|
5845
5843
|
[replyto <EmailAaddress>]
|
|
5846
|
-
[<NotifyMessageContent>]
|
|
5844
|
+
[<NotifyMessageContent>] [html [<Boolean>]]
|
|
5847
5845
|
(replace <Tag> <UserReplacement>)*
|
|
5848
5846
|
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
|
5849
5847
|
]
|
|
@@ -5877,10 +5875,9 @@ gam <UserTypeEntity> update users [ignorenullpassword] <UserAttribute>*
|
|
|
5877
5875
|
[[notify <EmailAddressList>] [notifyrecoveryemail]
|
|
5878
5876
|
[subject <String>]
|
|
5879
5877
|
[notifypassword <String>]
|
|
5880
|
-
[from <EmailAaddress>]
|
|
5881
|
-
[mailbox <EmailAddress>]
|
|
5878
|
+
[from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
5882
5879
|
[replyto <EmailAddress>]
|
|
5883
|
-
[<NotifyMessageContent>]
|
|
5880
|
+
[<NotifyMessageContent>] [html [<Boolean>]]
|
|
5884
5881
|
(replace <Tag> <UserReplacement>)*
|
|
5885
5882
|
(replaceregex <RESearchPattern> <RESubstitution> <Tag> <UserReplacement>)*
|
|
5886
5883
|
]
|
|
@@ -7579,7 +7576,19 @@ gam <UserTypeEntity> deprovision|deprov [popimap] [signout] [turnoff2sv]
|
|
|
7579
7576
|
# Users - Gmail - Delegates
|
|
7580
7577
|
|
|
7581
7578
|
gam <UserTypeEntity> delegate to [convertalias] <UserEntity>
|
|
7579
|
+
[notify [<Boolean>]
|
|
7580
|
+
[subject <String>]
|
|
7581
|
+
[from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
7582
|
+
[replyto <EmailAaddress>]
|
|
7583
|
+
[<NotifyMessageContent>] [html [<Boolean>]]
|
|
7584
|
+
]
|
|
7582
7585
|
gam <UserTypeEntity> create|add delegate|delegates [convertalias] <UserEntity>
|
|
7586
|
+
[notify [<Boolean>]
|
|
7587
|
+
[subject <String>]
|
|
7588
|
+
[from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
7589
|
+
[replyto <EmailAaddress>]
|
|
7590
|
+
[<NotifyMessageContent>] [html [<Boolean>]]
|
|
7591
|
+
]
|
|
7583
7592
|
gam <UserTypeEntity> delete delegate|delegates [convertalias] <UserEntity>
|
|
7584
7593
|
gam <UserTypeEntity> update delegate|delegates [convertalias] [<UserEntity>]
|
|
7585
7594
|
gam <UserTypeEntity> show delegates|delegate [shownames] [csv]
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
7.27.05
|
|
2
|
+
|
|
3
|
+
Added option `addcsvdata <FieldName> <String>` to `gam print courses`
|
|
4
|
+
that adds additional columns of data to the CSV file output.
|
|
5
|
+
|
|
6
|
+
The following scope is no longer necessary: `Cloud Identity API - Groups Beta (Enables group locking/unlocking)`
|
|
7
|
+
as this scope `Cloud Identity API - Groups` now provides group locking/unlocking.
|
|
8
|
+
|
|
9
|
+
7.27.04
|
|
10
|
+
|
|
11
|
+
Added options to `gam <UserTypeEntity> create delegate` that support
|
|
12
|
+
sending email notifications when a user adds a delegate.
|
|
13
|
+
|
|
14
|
+
* See: https://github.com/GAM-team/GAM/wiki/Users-Gmail-Delegates#delegation-notification
|
|
15
|
+
|
|
1
16
|
7.27.03
|
|
2
17
|
|
|
3
18
|
Updated `gam <UserTypeEntity> create|update|sync chatmember` role specification to `role member|manager|owner`.
|
|
@@ -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.27.
|
|
28
|
+
__version__ = '7.27.05'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -35921,7 +35921,7 @@ def doPrintShowGroupTree():
|
|
|
35921
35921
|
# gam create cigroup <EmailAddress>
|
|
35922
35922
|
# [copyfrom <GroupItem>] <GroupAttribute>
|
|
35923
35923
|
# [makeowner] [alias|aliases <CIGroupAliasList>]
|
|
35924
|
-
# [security|makesecuritygroup]
|
|
35924
|
+
# [security|makesecuritygroup] [locked]
|
|
35925
35925
|
# [dynamic <QueryDynamicGroup>]
|
|
35926
35926
|
def doCreateCIGroup():
|
|
35927
35927
|
doCreateGroup(ciGroupsAPI=True)
|
|
@@ -36105,7 +36105,6 @@ def doUpdateCIGroups():
|
|
|
36105
36105
|
|
|
36106
36106
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
36107
36107
|
ci = buildGAPIObject(API.CLOUDIDENTITY_GROUPS)
|
|
36108
|
-
cib = None
|
|
36109
36108
|
entityType = Ent.CLOUD_IDENTITY_GROUP
|
|
36110
36109
|
csvPF = None
|
|
36111
36110
|
getBeforeUpdate = preview = False
|
|
@@ -36214,7 +36213,6 @@ def doUpdateCIGroups():
|
|
|
36214
36213
|
_, name, _ = convertGroupEmailToCloudID(ci, group, i, count)
|
|
36215
36214
|
if not name:
|
|
36216
36215
|
continue
|
|
36217
|
-
cipl = ci
|
|
36218
36216
|
twoUpdates = False
|
|
36219
36217
|
if 'labels' in ci_body or lockGroup is not None:
|
|
36220
36218
|
try:
|
|
@@ -36243,20 +36241,16 @@ def doUpdateCIGroups():
|
|
|
36243
36241
|
else:
|
|
36244
36242
|
if CIGROUP_LOCKED_LABEL in ci_body['labels']:
|
|
36245
36243
|
ci_body['labels'].pop(CIGROUP_LOCKED_LABEL)
|
|
36246
|
-
if CIGROUP_LOCKED_LABEL in ci_body['labels']:
|
|
36247
|
-
if cib is None:
|
|
36248
|
-
cib = buildGAPIObject(API.CLOUDIDENTITY_GROUPS_BETA)
|
|
36249
|
-
cipl = cib
|
|
36250
36244
|
if ci_body:
|
|
36251
36245
|
try:
|
|
36252
36246
|
if twoUpdates:
|
|
36253
36247
|
ci_body['labels'].pop(CIGROUP_LOCKED_LABEL)
|
|
36254
|
-
callGAPI(
|
|
36248
|
+
callGAPI(ci.groups(), 'patch',
|
|
36255
36249
|
throwReasons=GAPI.CIGROUP_UPDATE_THROW_REASONS,
|
|
36256
36250
|
retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
|
36257
36251
|
name=name, body=ci_body, updateMask=','.join(list(ci_body.keys())))
|
|
36258
36252
|
ci_body['labels'][CIGROUP_LOCKED_LABEL] = ''
|
|
36259
|
-
callGAPI(
|
|
36253
|
+
callGAPI(ci.groups(), 'patch',
|
|
36260
36254
|
throwReasons=GAPI.CIGROUP_UPDATE_THROW_REASONS,
|
|
36261
36255
|
retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
|
36262
36256
|
name=name, body=ci_body, updateMask=','.join(list(ci_body.keys())))
|
|
@@ -37240,20 +37234,17 @@ def doPrintCIGroups():
|
|
|
37240
37234
|
else:
|
|
37241
37235
|
getFullFieldsList = list(CIGROUP_FULL_FIELDS)
|
|
37242
37236
|
getFullFields = ','.join(getFullFieldsList)#
|
|
37243
|
-
cipl = ci
|
|
37244
37237
|
if query:
|
|
37245
37238
|
method = 'search'
|
|
37246
37239
|
if 'parent' not in query:
|
|
37247
37240
|
query += f" && parent == '{parent}'"
|
|
37248
37241
|
kwargs = {'query': query}
|
|
37249
|
-
if CIGROUP_LOCKED_LABEL in query:
|
|
37250
|
-
cipl = buildGAPIObject(API.CLOUDIDENTITY_GROUPS_BETA)
|
|
37251
37242
|
else:
|
|
37252
37243
|
method = 'list'
|
|
37253
37244
|
kwargs = {'parent': parent}
|
|
37254
37245
|
printGettingAllAccountEntities(Ent.CLOUD_IDENTITY_GROUP, query)
|
|
37255
37246
|
try:
|
|
37256
|
-
entityList = callGAPIpages(
|
|
37247
|
+
entityList = callGAPIpages(ci.groups(), method, 'groups',
|
|
37257
37248
|
pageMessage=getPageMessage(showFirstLastItems=True), messageAttribute=['groupKey', 'id'],
|
|
37258
37249
|
throwReasons=GAPI.CIGROUP_LIST_THROW_REASONS, retryReasons=GAPI.CIGROUP_RETRY_REASONS,
|
|
37259
37250
|
view='FULL', fields=fieldsnp, pageSize=pageSize, **kwargs)
|
|
@@ -44236,6 +44227,28 @@ USER_JSON_SKIP_FIELDS = ['agreedToTerms', 'aliases', 'creationTime', 'customerId
|
|
|
44236
44227
|
|
|
44237
44228
|
ALLOW_EMPTY_CUSTOM_TYPE = 'allowEmptyCustomType'
|
|
44238
44229
|
|
|
44230
|
+
def getNotifyArguments(myarg, notify, userNotification):
|
|
44231
|
+
if myarg == 'notify':
|
|
44232
|
+
if userNotification:
|
|
44233
|
+
notify['recipients'].extend(getNormalizedEmailAddressEntity(shlexSplit=True, noLower=True))
|
|
44234
|
+
else: #delegateNotificatiomn
|
|
44235
|
+
notify['notify'] = getBoolean()
|
|
44236
|
+
elif myarg == 'subject':
|
|
44237
|
+
notify['subject'] = getString(Cmd.OB_STRING)
|
|
44238
|
+
elif myarg in SORF_MSG_FILE_ARGUMENTS:
|
|
44239
|
+
notify['message'], notify['charset'], notify['html'] = getStringOrFile(myarg)
|
|
44240
|
+
elif myarg == 'html':
|
|
44241
|
+
notify['html'] = getBoolean()
|
|
44242
|
+
elif myarg == 'from':
|
|
44243
|
+
notify['from'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44244
|
+
elif myarg == 'mailbox':
|
|
44245
|
+
notify['mailbox'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44246
|
+
elif myarg == 'replyto':
|
|
44247
|
+
notify['replyto'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44248
|
+
else:
|
|
44249
|
+
return False
|
|
44250
|
+
return True
|
|
44251
|
+
|
|
44239
44252
|
def getUserAttributes(cd, updateCmd, noUid=False):
|
|
44240
44253
|
def getKeywordAttribute(keywords, attrdict, **opts):
|
|
44241
44254
|
if Cmd.ArgumentsRemaining():
|
|
@@ -44351,22 +44364,10 @@ def getUserAttributes(cd, updateCmd, noUid=False):
|
|
|
44351
44364
|
resolveConflictAccount = True
|
|
44352
44365
|
while Cmd.ArgumentsRemaining():
|
|
44353
44366
|
myarg = getArgument()
|
|
44354
|
-
if myarg
|
|
44355
|
-
|
|
44367
|
+
if getNotifyArguments(myarg, notify, True):
|
|
44368
|
+
pass
|
|
44356
44369
|
elif myarg == 'notifyrecoveryemail':
|
|
44357
44370
|
parameters['notifyRecoveryEmail'] = True
|
|
44358
|
-
elif myarg == 'subject':
|
|
44359
|
-
notify['subject'] = getString(Cmd.OB_STRING)
|
|
44360
|
-
elif myarg in SORF_MSG_FILE_ARGUMENTS:
|
|
44361
|
-
notify['message'], notify['charset'], notify['html'] = getStringOrFile(myarg)
|
|
44362
|
-
elif myarg == 'html':
|
|
44363
|
-
notify['html'] = getBoolean()
|
|
44364
|
-
elif myarg == 'from':
|
|
44365
|
-
notify['from'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44366
|
-
elif myarg == 'replyto':
|
|
44367
|
-
notify['replyto'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44368
|
-
elif myarg == 'mailbox':
|
|
44369
|
-
notify['mailbox'] = getString(Cmd.OB_EMAIL_ADDRESS)
|
|
44370
44371
|
elif PwdOpts.ProcessArgument(myarg, notify, notFoundBody):
|
|
44371
44372
|
pass
|
|
44372
44373
|
elif _getTagReplacement(myarg, tagReplacements, True):
|
|
@@ -44772,12 +44773,12 @@ def createUserAddAliases(cd, user, aliasList, i, count):
|
|
|
44772
44773
|
# [license <SKUID> [product|productid <ProductID>]]
|
|
44773
44774
|
# [[notify <EmailAddressList>] [notifyrecoveryemail]
|
|
44774
44775
|
# [subject <String>]
|
|
44775
|
-
# [
|
|
44776
|
-
# [from <EmailAaddress>]
|
|
44776
|
+
# [from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
44777
44777
|
# [replyto <EmailAaddress>]
|
|
44778
|
-
# [<
|
|
44779
|
-
#
|
|
44780
|
-
#
|
|
44778
|
+
# [notifypassword <String>]
|
|
44779
|
+
# [<NotifyMessageContent>] [html [<Boolean>]]
|
|
44780
|
+
# (replace <Tag> <UserReplacement>)*
|
|
44781
|
+
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
|
44781
44782
|
# [logpassword <FileName>] [ignorenullpassword]
|
|
44782
44783
|
# [addnumericsuffixonduplicate <Number>]
|
|
44783
44784
|
def doCreateUser():
|
|
@@ -44876,12 +44877,12 @@ def verifyUserPrimaryEmail(cd, user, createIfNotFound, i, count):
|
|
|
44876
44877
|
# [alias|aliases <EmailAddressList>]
|
|
44877
44878
|
# [[notify <EmailAddressList>] [notifyrecoveryemail]
|
|
44878
44879
|
# [subject <String>]
|
|
44879
|
-
# [
|
|
44880
|
-
# [from <EmailAaddress>]
|
|
44880
|
+
# [from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
44881
44881
|
# [replyto <EmailAaddress>]
|
|
44882
|
-
# [<NotifyMessageContent>
|
|
44882
|
+
# [<NotifyMessageContent> [html [<Boolean>]]
|
|
44883
44883
|
# (replace <Tag> <UserReplacement>)*
|
|
44884
44884
|
# (replaceregex <REMatchPattern> <RESubstitution> <Tag> <UserReplacement>)*]
|
|
44885
|
+
# [notifypassword <String>]]
|
|
44885
44886
|
# [notifyonupdate [<Boolean>]]
|
|
44886
44887
|
# [logpassword <FileName>] [ignorenullpassword]
|
|
44887
44888
|
def updateUsers(entityList):
|
|
@@ -49156,6 +49157,7 @@ def _getCoursesInfo(croom, courseSelectionParameters, courseShowProperties, getO
|
|
|
49156
49157
|
# [show none|all|students|teachers] [countsonly]
|
|
49157
49158
|
# [fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>]
|
|
49158
49159
|
# [timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
|
49160
|
+
# (addcsvdata <FieldName> <String>)*
|
|
49159
49161
|
# [showitemcountonly] [formatjson [quotechar <Character>]]
|
|
49160
49162
|
def doPrintCourses():
|
|
49161
49163
|
def _saveParticipants(course, participants, role, rtitles):
|
|
@@ -49199,6 +49201,7 @@ def doPrintCourses():
|
|
|
49199
49201
|
delimiter = GC.Values[GC.CSV_OUTPUT_FIELD_DELIMITER]
|
|
49200
49202
|
showItemCountOnly = False
|
|
49201
49203
|
useOwnerAccess = GC.Values[GC.USE_COURSE_OWNER_ACCESS]
|
|
49204
|
+
addCSVData = {}
|
|
49202
49205
|
while Cmd.ArgumentsRemaining():
|
|
49203
49206
|
myarg = getArgument()
|
|
49204
49207
|
if myarg == 'todrive':
|
|
@@ -49213,6 +49216,9 @@ def doPrintCourses():
|
|
|
49213
49216
|
pass
|
|
49214
49217
|
elif myarg == 'showitemcountonly':
|
|
49215
49218
|
showItemCountOnly = True
|
|
49219
|
+
elif myarg == 'addcsvdata':
|
|
49220
|
+
k = getString(Cmd.OB_STRING)
|
|
49221
|
+
addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
|
|
49216
49222
|
else:
|
|
49217
49223
|
FJQC.GetFormatJSONQuoteChar(myarg, True)
|
|
49218
49224
|
applyCourseItemFilter = _setApplyCourseItemFilter(courseItemFilter, None)
|
|
@@ -49224,6 +49230,11 @@ def doPrintCourses():
|
|
|
49224
49230
|
if showItemCountOnly:
|
|
49225
49231
|
writeStdout('0\n')
|
|
49226
49232
|
return
|
|
49233
|
+
if addCSVData:
|
|
49234
|
+
csvPF.AddTitles(sorted(addCSVData.keys()))
|
|
49235
|
+
if FJQC.formatJSON:
|
|
49236
|
+
csvPF.AddJSONTitles(sorted(addCSVData.keys()))
|
|
49237
|
+
csvPF.MoveJSONTitlesToEnd(['JSON'])
|
|
49227
49238
|
if courseShowProperties['aliases']:
|
|
49228
49239
|
if FJQC.formatJSON:
|
|
49229
49240
|
csvPF.AddJSONTitles('JSON-aliases')
|
|
@@ -49281,11 +49292,15 @@ def doPrintCourses():
|
|
|
49281
49292
|
if courseShowProperties['members'] != 'teachers':
|
|
49282
49293
|
_saveParticipants(course, students, 'students', stitles)
|
|
49283
49294
|
row = flattenJSON(course, timeObjects=COURSE_TIME_OBJECTS, noLenObjects=COURSE_NOLEN_OBJECTS)
|
|
49295
|
+
if addCSVData:
|
|
49296
|
+
row.update(addCSVData)
|
|
49284
49297
|
if not FJQC.formatJSON:
|
|
49285
49298
|
csvPF.WriteRowTitles(row)
|
|
49286
49299
|
elif csvPF.CheckRowTitles(row):
|
|
49287
49300
|
row = {'id': courseId, 'JSON': json.dumps(cleanJSON(course, timeObjects=COURSE_TIME_OBJECTS),
|
|
49288
49301
|
ensure_ascii=False, sort_keys=True)}
|
|
49302
|
+
if addCSVData:
|
|
49303
|
+
row.update(addCSVData)
|
|
49289
49304
|
if courseShowProperties['aliases']:
|
|
49290
49305
|
row['JSON-aliases'] = json.dumps(list(aliases))
|
|
49291
49306
|
if courseShowProperties['members'] != 'none':
|
|
@@ -73923,14 +73938,58 @@ def printShowMessages(users):
|
|
|
73923
73938
|
def printShowThreads(users):
|
|
73924
73939
|
printShowMessagesThreads(users, Ent.THREAD)
|
|
73925
73940
|
|
|
73941
|
+
def sendCreateDelegateNotification(user, delegate, basenotify, i=0, count=0, msgFrom=None):
|
|
73942
|
+
# Substitute for #user#, #delegate#
|
|
73943
|
+
def _substituteForPattern(field, pattern, value):
|
|
73944
|
+
if field.find('#') == -1:
|
|
73945
|
+
return field
|
|
73946
|
+
return field.replace(pattern, value)
|
|
73947
|
+
|
|
73948
|
+
def _makeSubstitutions(field):
|
|
73949
|
+
notify[field] = _substituteForPattern(notify[field], '#user#', user)
|
|
73950
|
+
notify[field] = _substituteForPattern(notify[field], '#delegate#', delegate)
|
|
73951
|
+
|
|
73952
|
+
notify = basenotify.copy()
|
|
73953
|
+
if not notify['subject']:
|
|
73954
|
+
notify['subject'] = Msg.CREATE_DELEGATE_NOTIFY_SUBJECT
|
|
73955
|
+
_makeSubstitutions('subject')
|
|
73956
|
+
if not notify['message']:
|
|
73957
|
+
notify['message'] = Msg.CREATE_DELEGATE_NOTIFY_MESSAGE
|
|
73958
|
+
elif notify['html']:
|
|
73959
|
+
notify['message'] = notify['message'].replace('\r', '').replace('\\n', '<br/>')
|
|
73960
|
+
else:
|
|
73961
|
+
notify['message'] = notify['message'].replace('\r', '').replace('\\n', '\n')
|
|
73962
|
+
_makeSubstitutions('message')
|
|
73963
|
+
if 'from' in notify:
|
|
73964
|
+
msgFrom = notify['from']
|
|
73965
|
+
msgReplyTo = notify.get('replyto', None)
|
|
73966
|
+
mailBox = notify.get('mailbox', None)
|
|
73967
|
+
send_email(notify['subject'], notify['message'], delegate, i, count,
|
|
73968
|
+
msgFrom=msgFrom, msgReplyTo=msgReplyTo, html=notify['html'], charset=notify['charset'], mailBox=mailBox)
|
|
73969
|
+
|
|
73926
73970
|
# gam <UserTypeEntity> create delegate|delegates [convertalias] <UserEntity>
|
|
73971
|
+
# [notify [<Boolean>]
|
|
73972
|
+
# [subject <String>]
|
|
73973
|
+
# [from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
73974
|
+
# [replyto <EmailAaddress>]
|
|
73975
|
+
# [<NotifyMessageContent>] [html [<Boolean>]]
|
|
73976
|
+
# ]
|
|
73927
73977
|
# gam <UserTypeEntity> delete delegate|delegates [convertalias] <UserEntity>
|
|
73928
73978
|
def processDelegates(users):
|
|
73929
73979
|
cd = buildGAPIObject(API.DIRECTORY)
|
|
73930
|
-
|
|
73980
|
+
createCmd = Act.Get() != Act.DELETE
|
|
73931
73981
|
aliasAllowed = not checkArgumentPresent(['convertalias'])
|
|
73932
73982
|
delegateEntity = getUserObjectEntity(Cmd.OB_USER_ENTITY, Ent.DELEGATE)
|
|
73933
|
-
|
|
73983
|
+
notify = {'notify': False, 'subject': '', 'message': '', 'html': False, 'charset': UTF8}
|
|
73984
|
+
if createCmd:
|
|
73985
|
+
while Cmd.ArgumentsRemaining():
|
|
73986
|
+
myarg = getArgument()
|
|
73987
|
+
if getNotifyArguments(myarg, notify, False):
|
|
73988
|
+
pass
|
|
73989
|
+
else:
|
|
73990
|
+
unknownArgumentExit()
|
|
73991
|
+
else:
|
|
73992
|
+
checkForExtraneousArguments()
|
|
73934
73993
|
i, count, users = getEntityArgument(users)
|
|
73935
73994
|
for user in users:
|
|
73936
73995
|
i += 1
|
|
@@ -73942,25 +74001,37 @@ def processDelegates(users):
|
|
|
73942
74001
|
for delegate in delegates:
|
|
73943
74002
|
j += 1
|
|
73944
74003
|
delegateEmail = convertUIDtoEmailAddress(delegate, cd=cd, emailTypes=['user', 'group'], aliasAllowed=aliasAllowed)
|
|
74004
|
+
kvList = [Ent.USER, user, Ent.DELEGATE, delegateEmail]
|
|
73945
74005
|
try:
|
|
73946
|
-
if
|
|
73947
|
-
callGAPI(gmail.users().settings().delegates(),
|
|
74006
|
+
if createCmd:
|
|
74007
|
+
callGAPI(gmail.users().settings().delegates(), 'create',
|
|
73948
74008
|
throwReasons=GAPI.GMAIL_THROW_REASONS+[GAPI.ALREADY_EXISTS, GAPI.FAILED_PRECONDITION, GAPI.INVALID,
|
|
73949
74009
|
GAPI.NOT_FOUND, GAPI.INVALID_ARGUMENT, GAPI.PERMISSION_DENIED],
|
|
73950
74010
|
userId='me', body={'delegateEmail': delegateEmail})
|
|
74011
|
+
entityActionPerformed(kvList, j, jcount)
|
|
74012
|
+
if notify['notify']:
|
|
74013
|
+
Ind.Increment()
|
|
74014
|
+
sendCreateDelegateNotification(user, delegateEmail, notify, j, jcount)
|
|
74015
|
+
Ind.Decrement()
|
|
73951
74016
|
else:
|
|
73952
|
-
callGAPI(gmail.users().settings().delegates(),
|
|
74017
|
+
callGAPI(gmail.users().settings().delegates(), 'delete',
|
|
73953
74018
|
throwReasons=GAPI.GMAIL_THROW_REASONS+[GAPI.NOT_FOUND, GAPI.INVALID_INPUT, GAPI.PERMISSION_DENIED],
|
|
73954
74019
|
userId='me', delegateEmail=delegateEmail)
|
|
73955
|
-
|
|
74020
|
+
entityActionPerformed(kvList, j, jcount)
|
|
73956
74021
|
except (GAPI.alreadyExists, GAPI.failedPrecondition, GAPI.invalid,
|
|
73957
74022
|
GAPI.notFound, GAPI.invalidArgument, GAPI.permissionDenied) as e:
|
|
73958
|
-
entityActionFailedWarning(
|
|
74023
|
+
entityActionFailedWarning(kvList, str(e), j, jcount)
|
|
73959
74024
|
except GAPI.serviceNotAvailable:
|
|
73960
74025
|
userGmailServiceNotEnabledWarning(user, i, count)
|
|
73961
74026
|
Ind.Decrement()
|
|
73962
74027
|
|
|
73963
74028
|
# gam <UserTypeEntity> delegate to [convertalias] <UserEntity>
|
|
74029
|
+
# [notify [<Boolean>]
|
|
74030
|
+
# [subject <String>]
|
|
74031
|
+
# [from <EmailAaddress>] [mailbox <EmailAddress>]
|
|
74032
|
+
# [replyto <EmailAaddress>]
|
|
74033
|
+
# [<NotifyMessageContent>] [html [<Boolean>]]
|
|
74034
|
+
# ]
|
|
73964
74035
|
def delegateTo(users):
|
|
73965
74036
|
checkArgumentPresent('to', required=True)
|
|
73966
74037
|
processDelegates(users)
|
|
@@ -46,7 +46,6 @@ CLASSROOM = 'classroom'
|
|
|
46
46
|
CLOUDCHANNEL = 'cloudchannel'
|
|
47
47
|
CLOUDIDENTITY_DEVICES = 'cloudidentitydevices'
|
|
48
48
|
CLOUDIDENTITY_GROUPS = 'cloudidentitygroups'
|
|
49
|
-
CLOUDIDENTITY_GROUPS_BETA = 'cloudidentitygroupsbeta'
|
|
50
49
|
CLOUDIDENTITY_INBOUND_SSO = 'cloudidentityinboundsso'
|
|
51
50
|
CLOUDIDENTITY_ORGUNITS = 'cloudidentityorgunits'
|
|
52
51
|
CLOUDIDENTITY_ORGUNITS_BETA = 'cloudidentityorgunitsbeta'
|
|
@@ -242,7 +241,6 @@ _INFO = {
|
|
|
242
241
|
CLOUDCHANNEL: {'name': 'Cloud Channel API', 'version': 'v1', 'v2discovery': True},
|
|
243
242
|
CLOUDIDENTITY_DEVICES: {'name': 'Cloud Identity API - Devices', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
244
243
|
CLOUDIDENTITY_GROUPS: {'name': 'Cloud Identity API - Groups', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
245
|
-
CLOUDIDENTITY_GROUPS_BETA: {'name': 'Cloud Identity API - Groups Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
246
244
|
CLOUDIDENTITY_INBOUND_SSO: {'name': 'Cloud Identity API - Inbound SSO Settings', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
247
245
|
CLOUDIDENTITY_ORGUNITS: {'name': 'Cloud Identity API - OrgUnits', 'version': 'v1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
248
246
|
CLOUDIDENTITY_ORGUNITS_BETA: {'name': 'Cloud Identity API - OrgUnits Beta', 'version': 'v1beta1', 'v2discovery': True, 'mappedAPI': 'cloudidentity'},
|
|
@@ -387,10 +385,6 @@ _CLIENT_SCOPES = [
|
|
|
387
385
|
'api': CLOUDIDENTITY_GROUPS,
|
|
388
386
|
'subscopes': READONLY,
|
|
389
387
|
'scope': 'https://www.googleapis.com/auth/cloud-identity.groups'},
|
|
390
|
-
{'name': 'Cloud Identity API - Groups Beta (Enables group locking/unlocking)',
|
|
391
|
-
'api': CLOUDIDENTITY_GROUPS_BETA,
|
|
392
|
-
'subscopes': [],
|
|
393
|
-
'scope': 'https://www.googleapis.com/auth/cloud-identity.groups'},
|
|
394
388
|
{'name': 'Cloud Identity API - Inbound SSO Settings',
|
|
395
389
|
'api': CLOUDIDENTITY_INBOUND_SSO,
|
|
396
390
|
'subscopes': READONLY,
|
|
@@ -224,6 +224,8 @@ COUNT_N_EXCEEDS_MAX_TO_PROCESS_M = 'Count {0} exceeds maximum to {1} {2}'
|
|
|
224
224
|
CORRUPT_FILE = 'Corrupt file'
|
|
225
225
|
COULD_NOT_FIND_ANY_YUBIKEY = 'Could not find any YubiKey\n'
|
|
226
226
|
COULD_NOT_FIND_YUBIKEY_WITH_SERIAL = 'Could not find YubiKey with serial number {0}\n'
|
|
227
|
+
CREATE_DELEGATE_NOTIFY_MESSAGE = '#user# has granted you #delegate# access to read, delete and send mail on their behalf.'
|
|
228
|
+
CREATE_DELEGATE_NOTIFY_SUBJECT = '#user# mail delegation to #delegate#'
|
|
227
229
|
CREATE_USER_NOTIFY_MESSAGE = 'Hello #givenname# #familyname#,\n\nYou have a new account at #domain#\nAccount details:\nUsername: #user#\nPassword: #password#\nStart using your new account by signing in at\nhttps://www.google.com/accounts/AccountChooser?Email=#user#&continue=https://workspace.google.com/dashboard\n'
|
|
228
230
|
CREATE_USER_NOTIFY_SUBJECT = 'Welcome to #domain#'
|
|
229
231
|
CSV_DATA_ALREADY_SAVED = 'CSV data already saved'
|
|
@@ -441,8 +441,10 @@ gam print courses [todrive <ToDriveAttribute>*]
|
|
|
441
441
|
[owneremail] [owneremailmatchpattern <REMatchPattern>]
|
|
442
442
|
[alias|aliases|aliasesincolumns [delimiter <Character>]]
|
|
443
443
|
[show all|students|teachers] [countsonly]
|
|
444
|
-
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>] [formatjson [quotechar <Character>]]
|
|
445
444
|
[timefilter creationtime|updatetime] [start|starttime <Date>|<Time>] [end|endtime <Date>|<Time>]
|
|
445
|
+
[fields <CourseFieldNameList>] [skipfields <CourseFieldNameList>] [formatjson [quotechar <Character>]]
|
|
446
|
+
(addcsvdata <FieldName> <String>)*
|
|
447
|
+
[formatjson [quotechar <Character>]]
|
|
446
448
|
```
|
|
447
449
|
By default, the `print courses` command displays information about all courses.
|
|
448
450
|
|
|
@@ -477,6 +479,7 @@ By default, all basic course fields are displayed; use the following options to
|
|
|
477
479
|
* `countsonly` - Eliminates the student/teacher profile information and outputs only the student/teacher counts.
|
|
478
480
|
* `fields <CourseFieldNameList>` - Select specific basic fields to display.
|
|
479
481
|
* `skipfields <CourseFieldNameList>` - Select specific basic fields to eliminate from display; typically used with `coursematerialsets`.
|
|
482
|
+
* `addcsvdata <FieldName> <String>` - Add additional columns of data from the command line to the output
|
|
480
483
|
|
|
481
484
|
By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
|
|
482
485
|
* `formatjson` - Display the fields in JSON format.
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
## API documentation
|
|
13
13
|
* [Cloud Identity Groups Overview](https://cloud.google.com/identity/docs/groups)
|
|
14
|
-
* [Create and Manage Groups
|
|
14
|
+
* [Create and Manage Groups using API](https://support.google.com/a/answer/10427204)
|
|
15
15
|
* [Cloud Identity Groups API - Groups](https://cloud.google.com/identity/docs/reference/rest/v1/groups)
|
|
16
16
|
* [Restrict Group Membership](https://support.google.com/a/answer/11192679)
|
|
17
17
|
* [Lock Groups Beta](https://workspaceupdates.googleblog.com/2024/12/locked-groups-open-beta.html)
|
|
@@ -26,15 +26,6 @@
|
|
|
26
26
|
|
|
27
27
|
## Notes
|
|
28
28
|
|
|
29
|
-
In version 7.02.01 options `locked` and `unlocked` wre added to `gam update cigroups` that allow locking groups.
|
|
30
|
-
|
|
31
|
-
* See: https://workspaceupdates.googleblog.com/2024/12/locked-groups-open-beta.html
|
|
32
|
-
|
|
33
|
-
You'll have to do a `gam oauth create` and enable the following scope to use these options:
|
|
34
|
-
```
|
|
35
|
-
[*] 22) Cloud Identity Groups API Beta (Enables group locking/unlocking)
|
|
36
|
-
```
|
|
37
|
-
|
|
38
29
|
In the Admin Directory API a group has the following characteristics:
|
|
39
30
|
* `id` - The unique ID of a group
|
|
40
31
|
* `email` - The group's email address
|
|
@@ -10,6 +10,42 @@ 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.27.05
|
|
14
|
+
|
|
15
|
+
Added option `addcsvdata <FieldName> <String>` to `gam print courses`
|
|
16
|
+
that adds additional columns of data to the CSV file output.
|
|
17
|
+
|
|
18
|
+
The following scope is no longer necessary: `Cloud Identity API - Groups Beta (Enables group locking/unlocking)`
|
|
19
|
+
as this scope `Cloud Identity API - Groups` now provides group locking/unlocking.
|
|
20
|
+
|
|
21
|
+
### 7.27.04
|
|
22
|
+
|
|
23
|
+
Added options to `gam <UserTypeEntity> create delegate` that support
|
|
24
|
+
sending email notifications when a user adds a delegate.
|
|
25
|
+
|
|
26
|
+
* See: https://github.com/GAM-team/GAM/wiki/Users-Gmail-Delegates#delegation-notification
|
|
27
|
+
|
|
28
|
+
### 7.27.03
|
|
29
|
+
|
|
30
|
+
Updated `gam <UserTypeEntity> create|update|sync chatmember` role specification to `role member|manager|owner`.
|
|
31
|
+
This is the mapping between the Chat UI and Chat API; GAM uses the Chat UI role names.
|
|
32
|
+
```
|
|
33
|
+
UI: Member, API: ROLE_MEMBER
|
|
34
|
+
UI: Manager, API: ROLE_ASSISTANT_MANAGER
|
|
35
|
+
UI: Owner, API: ROLE_MANAGER
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Updated `gam <UserTypeEntity> update chatspace` options for permission settings.
|
|
39
|
+
```
|
|
40
|
+
[managemembersandgroups owners|managers|members]
|
|
41
|
+
[modifyspacedetails owners|managers|members]
|
|
42
|
+
[togglehistory owners|managers|members]
|
|
43
|
+
[useatmentionall owners|managers|members]
|
|
44
|
+
[manageapps owners|managers|members]
|
|
45
|
+
[managewebhooks owners|managers|members]
|
|
46
|
+
[replymessages owners|managers|members]
|
|
47
|
+
```
|
|
48
|
+
|
|
13
49
|
### 7.27.02
|
|
14
50
|
|
|
15
51
|
Added option `clearattachments <String>` to `gam [<UserTypeMessage>] update chatmessage`
|
|
@@ -252,7 +252,7 @@ writes the credentials into the file oauth2.txt.
|
|
|
252
252
|
admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
|
|
253
253
|
admin@server:/Users/admin$ gam version
|
|
254
254
|
WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
|
|
255
|
-
GAM 7.27.
|
|
255
|
+
GAM 7.27.05 - https://github.com/GAM-team/GAM - pyinstaller
|
|
256
256
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
257
257
|
Python 3.14.0 64-bit final
|
|
258
258
|
macOS Tahoe 26.0.1 x86_64
|
|
@@ -990,7 +990,7 @@ writes the credentials into the file oauth2.txt.
|
|
|
990
990
|
C:\>del C:\GAMConfig\oauth2.txt
|
|
991
991
|
C:\>gam version
|
|
992
992
|
WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
|
|
993
|
-
GAM 7.27.
|
|
993
|
+
GAM 7.27.05 - https://github.com/GAM-team/GAM - pythonsource
|
|
994
994
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
995
995
|
Python 3.14.0 64-bit final
|
|
996
996
|
Windows-10-10.0.17134 AMD64
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
- [User reports](#user-reports)
|
|
13
13
|
|
|
14
14
|
## API documentation
|
|
15
|
+
Changes starting 2025-10-29.
|
|
16
|
+
|
|
17
|
+
* [Reports API - Admin log event changes]https://support.google.com/a/answer/16601511
|
|
18
|
+
|
|
15
19
|
These pages show event/parameter names; scroll down in the left column to: Reports.
|
|
16
20
|
|
|
17
21
|
* [Reports API - Activities](https://developers.google.com/admin-sdk/reports/v1/reference/activities)
|