gam7 7.19.1__tar.gz → 7.19.2__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.19.1 → gam7-7.19.2}/.github/workflows/build.yml +78 -53
- {gam7-7.19.1 → gam7-7.19.2}/PKG-INFO +1 -1
- {gam7-7.19.1 → gam7-7.19.2}/src/GamUpdate.txt +7 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/__init__.py +10 -10
- gam7-7.19.2/src/tools/ssd.mjs +125 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/GamUpdates.md +7 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Licenses.md +22 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Vault-Takeout.md +10 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Version-and-Help.md +6 -6
- {gam7-7.19.1 → gam7-7.19.2}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/ISSUE_TEMPLATE.txt +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/actions/decrypt.sh +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/actions/entitlements.plist +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/actions/package_exclusions.txt +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/stale.yml +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/workflows/codeql-analysis.yml +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/workflows/get-cacerts.yml +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/workflows/pushwiki.yml +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.github/workflows/pypi.yml +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/.pre-commit-config.yaml +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/LICENSE +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/README.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/pyproject.toml +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/.gitignore +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/GamCommands.txt +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/LICENSE +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/README.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/cacerts.pem +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/callgam.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/__main__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/__init__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/auth.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/client.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/core.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/data.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/http.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/http_core.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/http_interface.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/mock_http.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/mock_http_core.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/mock_service.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/service.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/token_store.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/atom/url.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/cacerts.pem +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/cbcm-v1.1beta1.json +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/contactdelegation-v1.json +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/datastudio-v1.json +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/__init__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glaction.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glapi.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glcfg.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glclargs.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glentity.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glgapi.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glgdata.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glglobals.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glindent.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glmsgs.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glskus.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/gluprop.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/glverlibs.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gamlib/yubikey.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/__init__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/alt/__init__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/alt/app_engine.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/alt/appengine.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/apps/__init__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/apps/audit/__init__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/apps/audit/service.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/apps/contacts/__init__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/apps/contacts/service.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/apps/service.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/service.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/gdata/urlfetch.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/__init__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/_auth.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/_helpers.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/channel.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/discovery.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/errors.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/http.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/mimeparse.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/model.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/schema.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/googleapiclient/version.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/iso8601/__init__.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/iso8601/iso8601.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/meet-v2beta.json +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/serviceaccountlookup-v1.json +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam/six.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam-install.sh +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam-setup.bat +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam.exe.manifest +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam.spec +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/gam.wxs +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/license.rtf +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/requirements-dev.txt +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/tools/a_atleast_b.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/tools/gen-wix-xml-filelist.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/tools/mkGamRef.py +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/tools/openssl.props +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/src/version_info.txt.in +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/00scratch.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Addresses.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Administrators.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Alert-Center.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Aliases.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Authorization.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/BNF-Syntax.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Basic-Items.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Bulk-Processing.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Business-Account-Management.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/CSV-Input-Filtering.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/CSV-Output-Filtering.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/CSV-Special-Characters.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Calendars-Access.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Calendars-Events.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Calendars.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Chat-Bot-Setup-Use.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Chrome-AUE-Counts.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Chrome-Installed-Apps.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Chrome-Policies.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Chrome-Printers.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Chrome-Profile-Management.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Chrome-Version-Counts.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Chrome-Version-History.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/ChromeOS-Devices.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Classroom-Courses.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Classroom-Guardians.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Classroom-Invitations.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Classroom-Membership.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Cloud-Channel.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Cloud-Identity-Devices.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Cloud-Identity-Groups.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Cloud-Identity-Policies.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Cloud-Storage.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Collections-of-Items.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Collections-of-Users.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Command-Line-Parsing.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Command-Logging-Progress.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Context-Aware-Access-Levels.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Customer.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Domain-People-Contacts-Profiles.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Domain-SharedContacts.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Domains-Verification.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Domains.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Downloads-Installs.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Drive-File-Selection.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Drive-Items.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Drive-REST-API-v3.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Email-Audit-Monitor.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Find-File-Owner.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/GAM-Public-Chat-Room.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/GAM-Return-Codes.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/GAM7-on-Android-Devices.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Global-Address-List.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Google-Data-Transfers.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Google-Network-Addresses.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Groups-Membership.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Groups.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/HTTPS-Proxy.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Home.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/How-to-Install-GAM7.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/How-to-Uninstall-GAM7.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/How-to-Update-GAM7.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Inbound-SSO.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Install-GAM-as-Python-Library.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/List-Items.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/List.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Mobile-Devices.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Organizational-Units.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Other-Resources.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Permission-Matches.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Python-Regular-Expressions.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/README.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Rclone.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Reports.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Reseller.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Resources.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/SSL-Root-CA-Certificates.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Schemas.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Scripts.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Send-Email.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Shared-Drives.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Sites.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Tag-Replace.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Todrive.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Unmanaged-Accounts.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Upgrade-Benefits.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Analytics-Admin.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Application-Specific-Passwords.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Backup-Verification-Codes.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Calendars-Access.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Calendars-Events.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Calendars.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Chat.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Classification-Labels.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Classroom-Profile.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Contacts-Delegates.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Contacts.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Deprovision.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Activity-Settings.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Cleanup.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Comments.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Copy-Move.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Files-Display.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Files-Manage.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Orphans.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Ownership.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Permissions.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Query.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Revisions.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Shortcuts.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Drive-Transfer.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Forms.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Gmail-CSE.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Gmail-Delegates.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Gmail-Filters.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Gmail-Forwarding.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Gmail-Labels.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Gmail-Messages-Threads.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Gmail-Profile.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Gmail-S-MIME.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Gmail-Settings.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Group-Membership.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Keep-Notes.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Looker-Studio.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Meet.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-People-Contacts-Profiles.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Photo.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Profile-Photo.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Profile-Sharing.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Shared-Drives.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Signout-Turnoff2SV.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Spreadsheets.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Tag-Manager.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Tasks.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Tokens.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-Web-Resources-and-Sites.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users-YouTube.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Users.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/_Sidebar.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/gam.cfg.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-AdminSettingsExamples.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Android-Installation.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-BulkOperations.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-CalendarExamples.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Chat-Bot.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Chrome-Browser-Management.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Chrome-OS-Installation.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Chrome-Policy-Settings.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Cloud-Identity-Groups.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Command-Reference-Calendars.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Command-Reference-Definitions.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Command-Reference-Drive.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Command-Reference-Email.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Command-Reference-Groups.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Command-Reference-Users.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Context-Aware-Access-Levels.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-CreatingClientSecretsFile.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Custom-Schemas.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Data-Transfers.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-DomainVerification.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-ExamplesAccountAuditing.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-ExamplesCSV.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-ExamplesEmailSettings.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-ExamplesOrganizations.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-GAM-Discussion-Group.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-GAM-options-files.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-GAM3CSVListings.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-GAM3DirectoryCommands.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-GAM3GroupSettings.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-GAM7-FAQ.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-GoogleDriveManagement.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Home.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Inbound-SSO-Settings.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-LicenseExamples.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Managing-Admins.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Managing-Devices.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Managing-Google-Classroom.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-OAuthKeyManagement.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Printers.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-ResellerCommands.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-SecurityExamples.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-UnmanagedUsersExamples.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Use-a-Yubikey.md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
- {gam7-7.19.1 → gam7-7.19.2}/wiki/l-_Footer.md +0 -0
|
@@ -30,6 +30,7 @@ env:
|
|
|
30
30
|
PYTHON_SOURCE_PATH: ${{ github.workspace }}/src/cpython
|
|
31
31
|
CRYPTOGRAPHY_BUILD_OPENSSL_NO_LEGACY: 1
|
|
32
32
|
CRYPTOGRAPHY_OPENSSL_NO_LEGACY: 1
|
|
33
|
+
WINDOWS_CODESIGN_CERT_HASH: 590dc5bb10dfb31dbff38c0e2f9c35ef0f6d0e9e
|
|
33
34
|
|
|
34
35
|
jobs:
|
|
35
36
|
build:
|
|
@@ -76,7 +77,7 @@ jobs:
|
|
|
76
77
|
jid: 9
|
|
77
78
|
goal: build
|
|
78
79
|
name: Build Arm MacOS 15
|
|
79
|
-
- os: windows-
|
|
80
|
+
- os: windows-2025
|
|
80
81
|
jid: 10
|
|
81
82
|
goal: build
|
|
82
83
|
name: Build Intel Windows
|
|
@@ -593,6 +594,72 @@ jobs:
|
|
|
593
594
|
echo "GAM Version ${GAMVERSION}"
|
|
594
595
|
echo "GAMVERSION=${GAMVERSION}" >> $GITHUB_ENV
|
|
595
596
|
|
|
597
|
+
- name: Install WinAppDriver
|
|
598
|
+
if: runner.os == 'Windows'
|
|
599
|
+
run: |
|
|
600
|
+
choco install -y winappdriver
|
|
601
|
+
|
|
602
|
+
- name: Enabled dev mode for WinAppDriver
|
|
603
|
+
if: runner.os == 'Windows'
|
|
604
|
+
shell: cmd
|
|
605
|
+
run : |
|
|
606
|
+
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
|
|
607
|
+
|
|
608
|
+
- name: Install appium and totp tools
|
|
609
|
+
if: runner.os == 'Windows'
|
|
610
|
+
run: |
|
|
611
|
+
echo "Installing appium..."
|
|
612
|
+
npm install -g appium
|
|
613
|
+
echo "Installing totp-generator..."
|
|
614
|
+
npm install "totp-generator"
|
|
615
|
+
echo "Installing wdio..."
|
|
616
|
+
npm install @wdio/cli
|
|
617
|
+
echo "Installing appium win driver..."
|
|
618
|
+
appium driver install windows
|
|
619
|
+
|
|
620
|
+
- name: Install Certum MSI
|
|
621
|
+
if: runner.os == 'Windows'
|
|
622
|
+
shell: pwsh
|
|
623
|
+
run: |
|
|
624
|
+
$url = "https://files.certum.eu/software/SimplySignDesktop/Windows/9.3.2.67/SimplySignDesktop-9.3.2.67-64-bit-en.msi"
|
|
625
|
+
$file = "SimplySignDesktop-9.3.2.67-64-bit-en.msi"
|
|
626
|
+
Invoke-WebRequest $url -OutFile $file
|
|
627
|
+
$log = "install.log"
|
|
628
|
+
$procMain = Start-Process "msiexec" "/i `"$file`" /qn /l*! `"$log`"" -NoNewWindow -PassThru
|
|
629
|
+
$procLog = Start-Process "powershell" "Get-Content -Path `"$log`" -Wait" -NoNewWindow -PassThru
|
|
630
|
+
$procMain.WaitForExit()
|
|
631
|
+
$procLog.Kill()
|
|
632
|
+
|
|
633
|
+
- name: Login to Certum
|
|
634
|
+
if: runner.os == 'Windows'
|
|
635
|
+
shell: pwsh
|
|
636
|
+
env:
|
|
637
|
+
TOTP_SECRET: ${{ secrets.TOTP_SECRET }}
|
|
638
|
+
run: |
|
|
639
|
+
# disable win private firewall that interferes with appium server
|
|
640
|
+
Set-NetFirewallProfile -Profile Private -Enabled False
|
|
641
|
+
$appiumCmd = Get-Command appium
|
|
642
|
+
$appiumPath = $appiumCmd.Path
|
|
643
|
+
Start-Process -Filepath "powershell.exe" -ArgumentList "-File", $appiumPath, "--address", "127.0.0.1", "--log-level", "error"
|
|
644
|
+
Start-Sleep -Seconds 10
|
|
645
|
+
write-host "appium started"
|
|
646
|
+
write-host "running SimplySignDesktop login..."
|
|
647
|
+
node tools/ssd.mjs --log-level warn
|
|
648
|
+
write-host "sleeping during login..."
|
|
649
|
+
Start-Sleep 10
|
|
650
|
+
|
|
651
|
+
- name: Sign gam.exe
|
|
652
|
+
if: runner.os == 'Windows'
|
|
653
|
+
shell: pwsh
|
|
654
|
+
run: |
|
|
655
|
+
write-Host "Signing ${env:gam}...."
|
|
656
|
+
# Always explicitely use x64 version os signtool.exe, arm64 version apparently can't
|
|
657
|
+
# see Certum certs since SimplySignDesktop is x64-only today.
|
|
658
|
+
Start-Process -Wait -NoNewWindow -ErrorAction Continue -FilePath 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe' -ArgumentList "sign", "/sha1", "590dc5bb10dfb31dbff38c0e2f9c35ef0f6d0e9e", "/tr", "http://time.certum.pl", "/td", "SHA256", "/fd", "SHA256", "/v", "$env:gam"
|
|
659
|
+
write-Host "Verifying signature of ${env:gam}...."
|
|
660
|
+
# verify signature. If we failed to sign we should fail to verify and die.
|
|
661
|
+
& 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe' verify /pa /v "$env:gam"
|
|
662
|
+
|
|
596
663
|
- name: Configure user and service account auth
|
|
597
664
|
id: configserviceaccount
|
|
598
665
|
env:
|
|
@@ -601,34 +668,6 @@ jobs:
|
|
|
601
668
|
../.github/actions/decrypt.sh "${GAMCFGDIR}"
|
|
602
669
|
$gam create signjwtserviceaccount
|
|
603
670
|
|
|
604
|
-
- name: Upload gam.exe Windows for signing
|
|
605
|
-
if: runner.os == 'Windows' && matrix.goal != 'test'
|
|
606
|
-
run: |
|
|
607
|
-
export folder_number=$(date +%s)
|
|
608
|
-
export folder_id=$($gam user gam-win-signer@pdl.jaylee.us add drivefile drivefilename "UPLOADING_FOR_SIGN ${folder_number}" parentid "1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp" mimetype gfolder returnidonly)
|
|
609
|
-
$gam user gam-win-signer@pdl.jaylee.us add drivefile localfile "$gam" parentid "$folder_id"
|
|
610
|
-
$gam user gam-win-signer@pdl.jaylee.us update drivefile "$folder_id" newfilename "READYTOSIGN ${folder_number}"
|
|
611
|
-
export signed_folder="SIGNED ${folder_number}"
|
|
612
|
-
zero_results="gam-win-signer@pdl.jaylee.us,0"
|
|
613
|
-
while true; do
|
|
614
|
-
result_counts=$($gam user gam-win-signer@pdl.jaylee.us print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" countsonly)
|
|
615
|
-
echo "$result_counts"
|
|
616
|
-
if [[ ! "$result_counts" =~ "$zero_results" ]]; then
|
|
617
|
-
echo "looks like we have results"
|
|
618
|
-
break
|
|
619
|
-
fi
|
|
620
|
-
echo "no results, sleeping 10..."
|
|
621
|
-
sleep 10
|
|
622
|
-
done
|
|
623
|
-
# download signed gam.exe
|
|
624
|
-
$gam user gam-win-signer@pdl.jaylee.us print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us print filelist query "'~~id~~' in parents and name = 'gam.exe'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us get drivefile ~id targetfolder "$gampath" targetname "signed-gam.exe" overwrite true acknowledgeabuse true
|
|
625
|
-
# delete signed folder on drive
|
|
626
|
-
$gam user gam-win-signer@pdl.jaylee.us print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us trash drivefile "~id"
|
|
627
|
-
# remove unsigned gam.exe and rename signed-gam.exe
|
|
628
|
-
rm -v -f "${gampath}/gam.exe"
|
|
629
|
-
mv -v -f "${gampath}/signed-gam.exe" "${gampath}/gam.exe"
|
|
630
|
-
#"/c/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/signtool.exe" verify /v /pa "$gam"
|
|
631
|
-
|
|
632
671
|
- name: Attest gam executable was generated from this Action
|
|
633
672
|
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # 2.4.0
|
|
634
673
|
if: matrix.goal == 'build'
|
|
@@ -681,31 +720,17 @@ jobs:
|
|
|
681
720
|
rm -v -f *.wixobj
|
|
682
721
|
echo "MSI_FILENAME=${MSI_FILENAME}" >> $GITHUB_ENV
|
|
683
722
|
|
|
684
|
-
- name:
|
|
685
|
-
if: runner.os == 'Windows'
|
|
723
|
+
- name: Sign GAM MSI
|
|
724
|
+
if: runner.os == 'Windows'
|
|
725
|
+
shell: pwsh
|
|
686
726
|
run: |
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
while true; do
|
|
695
|
-
result_counts=$($gam user gam-win-signer@pdl.jaylee.us print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" countsonly)
|
|
696
|
-
echo "$result_counts"
|
|
697
|
-
if [[ ! "$result_counts" =~ "$zero_results" ]]; then
|
|
698
|
-
echo "looks like we have results"
|
|
699
|
-
break
|
|
700
|
-
fi
|
|
701
|
-
echo "no results, sleeping 10..."
|
|
702
|
-
sleep 10
|
|
703
|
-
done
|
|
704
|
-
# download signed package
|
|
705
|
-
$gam user gam-win-signer@pdl.jaylee.us print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us print filelist query "'~~id~~' in parents and name contains '.msi'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us get drivefile ~id targetfolder "$GITHUB_WORKSPACE" targetname "$MSI_FILENAME" overwrite true acknowledgeabuse true
|
|
706
|
-
# delete signed folder on drive
|
|
707
|
-
$gam user gam-win-signer@pdl.jaylee.us print filelist query "name = '${signed_folder}' and '1Xz3hYq4Mfa_r6D8EcBZHLDtHDFurYSvp' in parents and mimeType = 'application/vnd.google-apps.folder'" id | $gam csv - gam user gam-win-signer@pdl.jaylee.us trash drivefile "~id"
|
|
708
|
-
#"/c/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64/signtool.exe" verify /v /pa "$MSI_FILENAME"
|
|
727
|
+
write-Host "Signing ${env:MSI_FILENAME}...."
|
|
728
|
+
# Always explicitely use x64 version os signtool.exe, arm64 version apparently can't
|
|
729
|
+
# see Certum certs since SimplySignDesktop is x64-only today.
|
|
730
|
+
Start-Process -Wait -NoNewWindow -ErrorAction Continue -FilePath 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe' -ArgumentList "sign", "/sha1", "590dc5bb10dfb31dbff38c0e2f9c35ef0f6d0e9e", "/tr", "http://time.certum.pl", "/td", "SHA256", "/fd", "SHA256", "/v", "$env:MSI_FILENAME"
|
|
731
|
+
write-Host "Verifying signature of ${env:MSI_FILENAME}...."
|
|
732
|
+
# verify signature. If we failed to sign we should fail to verify and die.
|
|
733
|
+
& 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe' verify /pa /v "$env:MSI_FILENAME"
|
|
709
734
|
|
|
710
735
|
- name: Attest that gam package files were generated from this Action
|
|
711
736
|
uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # 2.4.0
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
7.19.02
|
|
2
|
+
|
|
3
|
+
Update `gam info user <UserItem>` to eliminate 5 second delay when getting license info.
|
|
4
|
+
|
|
5
|
+
Additional information:
|
|
6
|
+
* See: https://github.com/GAM-team/GAM/wiki/Licenses#info-user-performance
|
|
7
|
+
|
|
1
8
|
7.19.01
|
|
2
9
|
|
|
3
10
|
Updated `gam <UserTypeEntity> print|show signature` to handle the following error
|
|
@@ -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.19.
|
|
28
|
+
__version__ = '7.19.02'
|
|
29
29
|
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
|
|
30
30
|
|
|
31
31
|
#pylint: disable=wrong-import-position
|
|
@@ -32228,9 +32228,9 @@ def doUpdateMobileDevices():
|
|
|
32228
32228
|
[Msg.ACTION_APPLIED, body['action']], i, count)
|
|
32229
32229
|
except GAPI.internalError:
|
|
32230
32230
|
entityActionFailedWarning([Ent.MOBILE_DEVICE, resourceId], Msg.DOES_NOT_EXIST, i, count)
|
|
32231
|
-
except (GAPI.resourceIdNotFound, GAPI.badRequest, GAPI.resourceNotFound) as e:
|
|
32231
|
+
except (GAPI.resourceIdNotFound, GAPI.badRequest, GAPI.resourceNotFound, GAPI.forbidden) as e:
|
|
32232
32232
|
entityActionFailedWarning([Ent.MOBILE_DEVICE, resourceId], str(e), i, count)
|
|
32233
|
-
except
|
|
32233
|
+
except GAPI.permissionDenied as e:
|
|
32234
32234
|
ClientAPIAccessDeniedExit(str(e))
|
|
32235
32235
|
|
|
32236
32236
|
# gam delete mobile|mobiles <MobileDeviceEntity>
|
|
@@ -44907,6 +44907,12 @@ def waitForMailbox(entityList):
|
|
|
44907
44907
|
Ind.Decrement()
|
|
44908
44908
|
|
|
44909
44909
|
def getUserLicenses(lic, user, skus):
|
|
44910
|
+
reasons_to_quit = [
|
|
44911
|
+
GAPI.ACCESS_NOT_CONFIGURED, # license API not turned on
|
|
44912
|
+
GAPI.PERMISSION_DENIED, # Admin doesn't have rights to license assignments
|
|
44913
|
+
GAPI.NOT_FOUND # API call succeeded, user does not have this license
|
|
44914
|
+
]
|
|
44915
|
+
|
|
44910
44916
|
def _callbackGetLicense(request_id, response, exception):
|
|
44911
44917
|
if exception is None:
|
|
44912
44918
|
if response and 'skuId' in response:
|
|
@@ -44914,18 +44920,12 @@ def getUserLicenses(lic, user, skus):
|
|
|
44914
44920
|
del sku_calls[request_id]
|
|
44915
44921
|
else:
|
|
44916
44922
|
_, reason, _ = checkGAPIError(exception, softErrors=True)
|
|
44917
|
-
reasons_to_quit = [
|
|
44918
|
-
GAPI.ACCESS_NOT_CONFIGURED, # license API not turned on
|
|
44919
|
-
GAPI.PERMISSION_DENIED, # Admin doesn't have rights to license assignments
|
|
44920
|
-
GAPI.NOT_FOUND # API call succeeded, user does not have this license
|
|
44921
|
-
]
|
|
44922
44923
|
if reason in reasons_to_quit:
|
|
44923
44924
|
del sku_calls[request_id]
|
|
44924
44925
|
|
|
44925
44926
|
licenses = []
|
|
44926
44927
|
svcargs = dict([('userId', user['primaryEmail']), ('productId', None), ('skuId', None), ('fields', 'skuId')]+GM.Globals[GM.EXTRA_ARGS_LIST])
|
|
44927
44928
|
method = getattr(lic.licenseAssignments(), 'get')
|
|
44928
|
-
dbatch = lic.new_batch_http_request(callback=_callbackGetLicense)
|
|
44929
44929
|
sku_calls = {}
|
|
44930
44930
|
for sku in skus:
|
|
44931
44931
|
svcparms = svcargs.copy()
|
|
@@ -44944,7 +44944,7 @@ def getUserLicenses(lic, user, skus):
|
|
|
44944
44944
|
if try_count >= 5:
|
|
44945
44945
|
# give up and return what we have
|
|
44946
44946
|
return licenses
|
|
44947
|
-
|
|
44947
|
+
time.sleep(5)
|
|
44948
44948
|
return licenses
|
|
44949
44949
|
|
|
44950
44950
|
USER_NAME_PROPERTY_PRINT_ORDER = [
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// Node.js script that implements an Appium client which will launch
|
|
2
|
+
// Simply Sign Desktop app and log a user in. Once logged in it should
|
|
3
|
+
// be possible to use tools like signtool.exe to sign Windows EXE/MSI files
|
|
4
|
+
// with the Certum certificate.
|
|
5
|
+
|
|
6
|
+
import { Key, remote } from 'webdriverio';
|
|
7
|
+
import { exec } from 'child_process';
|
|
8
|
+
import { TOTP } from 'totp-generator';
|
|
9
|
+
|
|
10
|
+
async function screenshot(driver, filename) {
|
|
11
|
+
// uncomment to save .png screenshots
|
|
12
|
+
//await driver.saveScreenshot(filename);
|
|
13
|
+
return
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function sleep(ms) {
|
|
17
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async function executeCommand(command) {
|
|
21
|
+
try {
|
|
22
|
+
let { stdout, stderr } = await exec(command);
|
|
23
|
+
return stdout;
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.error(`Error executing command: ${command}`);
|
|
26
|
+
console.error(`Error details: ${error}`);
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async function runSSD() {
|
|
32
|
+
const opts = {
|
|
33
|
+
port: 4723,
|
|
34
|
+
logLevel: "silent",
|
|
35
|
+
capabilities: {
|
|
36
|
+
platformName: "Windows",
|
|
37
|
+
"appium:app": "C:\\Program Files\\Certum\\SimplySign Desktop\\SimplySignDesktop.exe",
|
|
38
|
+
"appium:automationName": "Windows",
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
let driver;
|
|
43
|
+
try {
|
|
44
|
+
driver = await remote(opts);
|
|
45
|
+
|
|
46
|
+
// Github Actions Win ARM64 is stuck on a OOB screen that steals focus
|
|
47
|
+
// These enter / escapes should dismiss it.
|
|
48
|
+
const runner_arch = process.env.RUNNER_ARCH;
|
|
49
|
+
if ( runner_arch === "ARM64" ) {
|
|
50
|
+
console.log('Running on ARM64...');
|
|
51
|
+
await sleep(3000); // Pause execution for 3 seconds
|
|
52
|
+
await screenshot(driver, 'oob1.png');
|
|
53
|
+
await driver.sendKeys([Key.Enter]);
|
|
54
|
+
await sleep(3000); // Pause execution for 3 seconds
|
|
55
|
+
await screenshot(driver, 'oob2.png');
|
|
56
|
+
await driver.sendKeys([Key.Enter]);
|
|
57
|
+
await sleep(3000); // Pause execution for 3 seconds
|
|
58
|
+
await screenshot(driver, 'oob3.png');
|
|
59
|
+
await driver.sendKeys([Key.Escape]);
|
|
60
|
+
await screenshot(driver, 'oob6.png');
|
|
61
|
+
} else {
|
|
62
|
+
console.log('NOT running on ARM64');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Execute SSD again to open login dialog
|
|
66
|
+
exec('"C:\\Program Files\\Certum\\SimplySign Desktop\\SimplySignDesktop.exe"', (error, stdout, stderr) => {
|
|
67
|
+
if (error) {
|
|
68
|
+
console.error(`exec error: ${error}`);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
await sleep(3000);
|
|
73
|
+
|
|
74
|
+
// Login
|
|
75
|
+
const windows = await driver.getWindowHandles();
|
|
76
|
+
const login_window = windows[0]
|
|
77
|
+
await driver.switchWindow(login_window);
|
|
78
|
+
await screenshot(driver, 'login01.png');
|
|
79
|
+
const id_value = 'jay0lee@gmail.com';
|
|
80
|
+
const id_arr = [...id_value];
|
|
81
|
+
await driver.sendKeys(id_arr);
|
|
82
|
+
await screenshot(driver, 'login02.png');
|
|
83
|
+
await driver.sendKeys([Key.Tab]);
|
|
84
|
+
// We wait until the last possible second to generate
|
|
85
|
+
// our TOTP to ensure it's still valid.
|
|
86
|
+
const token_value = TOTP.generate(process.env.TOTP_SECRET, {algorithm: 'SHA-256'}).otp;
|
|
87
|
+
const token_arr = [...token_value];
|
|
88
|
+
await driver.sendKeys(token_arr);
|
|
89
|
+
await screenshot(driver, 'login03.png');
|
|
90
|
+
await driver.sendKeys([Key.Enter]);
|
|
91
|
+
|
|
92
|
+
// TODO: it's expected that on successful login the window
|
|
93
|
+
// will close and these screenshots will error out. Figure
|
|
94
|
+
// out how to handle that gracefully.
|
|
95
|
+
await screenshot(driver, 'login04.png');
|
|
96
|
+
await sleep(500);
|
|
97
|
+
await screenshot(driver, 'login05.png');
|
|
98
|
+
await sleep(500);
|
|
99
|
+
await screenshot(driver, 'login06.png');
|
|
100
|
+
await sleep(500);
|
|
101
|
+
await screenshot(driver, 'login07.png');
|
|
102
|
+
await sleep(500);
|
|
103
|
+
await screenshot(driver, 'login08.png');
|
|
104
|
+
await sleep(500);
|
|
105
|
+
await screenshot(driver, 'login09.png');
|
|
106
|
+
await sleep(500);
|
|
107
|
+
await screenshot(driver, 'login10.png');
|
|
108
|
+
await sleep(500);
|
|
109
|
+
await screenshot(driver, 'login11.png');
|
|
110
|
+
await sleep(500);
|
|
111
|
+
await screenshot(driver, 'login12.png');
|
|
112
|
+
|
|
113
|
+
} catch (error) {
|
|
114
|
+
console.error("Error during Appium run:", error.name);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// INTENTIONAL Keep driver open so tray icon for Certum doesn't close
|
|
118
|
+
// finally {
|
|
119
|
+
// if (driver) {
|
|
120
|
+
// await driver.deleteSession(); // Close the Appium session
|
|
121
|
+
// }
|
|
122
|
+
//}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
runSSD();
|
|
@@ -10,6 +10,13 @@ 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.19.02
|
|
14
|
+
|
|
15
|
+
Update `gam info user <UserItem>` to eliminate 5 second delay when getting license info.
|
|
16
|
+
|
|
17
|
+
Additional information:
|
|
18
|
+
* See: https://github.com/GAM-team/GAM/wiki/Licenses#info-user-performance
|
|
19
|
+
|
|
13
20
|
### 7.19.01
|
|
14
21
|
|
|
15
22
|
Updated `gam <UserTypeEntity> print|show signature` to handle the following error
|
|
@@ -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.19.
|
|
255
|
+
GAM 7.19.02 - https://github.com/GAM-team/GAM - pyinstaller
|
|
256
256
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
257
257
|
Python 3.13.7 64-bit final
|
|
258
258
|
MacOS Sequoia 15.6.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.19.
|
|
993
|
+
GAM 7.19.02 - https://github.com/GAM-team/GAM - pythonsource
|
|
994
994
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
995
995
|
Python 3.13.7 64-bit final
|
|
996
996
|
Windows-10-10.0.17134 AMD64
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
- [License Products and SKUs](#license-products-and-skus)
|
|
4
4
|
- [Definitions](#definitions)
|
|
5
5
|
- [Notes](#Notes)
|
|
6
|
+
- [Info User Performance](#info-user-performance)
|
|
6
7
|
- [Display license counts](#display-license-counts)
|
|
7
8
|
- [Display licenses](#display-licenses)
|
|
8
9
|
- [Add licenses](#add-licenses)
|
|
@@ -233,6 +234,27 @@ nv:<String>:<String>
|
|
|
233
234
|
```
|
|
234
235
|
The first `<String>` is a Product and the second `<String>` is a SKU.
|
|
235
236
|
|
|
237
|
+
## Info User Performance
|
|
238
|
+
|
|
239
|
+
In GAM versions prior 7.18.05, when you did `gam info user`, GAM would make one attempt to get the user's licenses.
|
|
240
|
+
If something went wrong, you might not get the complete list.
|
|
241
|
+
|
|
242
|
+
The License Manager API doesn't have a call that returns the list of licenses that a user has; you have to ask:
|
|
243
|
+
```
|
|
244
|
+
Does user have license SKU 1?
|
|
245
|
+
Does user have license SKU 2?
|
|
246
|
+
Does user have license SKU 3?
|
|
247
|
+
...
|
|
248
|
+
Does user have license SKU 73?
|
|
249
|
+
```
|
|
250
|
+
If you do a couple of info user commands back to back, you start to run into quota issues.
|
|
251
|
+
|
|
252
|
+
You can help yourself in the following way: generate a list of all of the SKUs that exist in your workspace.
|
|
253
|
+
|
|
254
|
+
Then do (example, use actual list): gam config license_skus 1010020028,1010070001, ... save
|
|
255
|
+
Now, rather that asking 73 questions per user, GAM will only ask about the license SKUs in the list.
|
|
256
|
+
It is much less likely that quota issues will occur,
|
|
257
|
+
|
|
236
258
|
## Display license counts
|
|
237
259
|
```
|
|
238
260
|
gam show licenses
|
|
@@ -39,6 +39,16 @@
|
|
|
39
39
|
[Collections of Items](Collections-of-Items)
|
|
40
40
|
```
|
|
41
41
|
<AttendeeStatus> ::= accepted|declined|needsaction|tentative
|
|
42
|
+
<Date> ::=
|
|
43
|
+
<Year>-<Month>-<Day> |
|
|
44
|
+
(+|-)<Number>(d|w|y) |
|
|
45
|
+
never|
|
|
46
|
+
today
|
|
47
|
+
<Time> ::=
|
|
48
|
+
<Year>-<Month>-<Day>(<Space>|T)<Hour>:<Minute>:<Second>[.<MilliSeconds>](Z|(+|-(<Hour>:<Minute>))) |
|
|
49
|
+
(+|-)<Number>(m|h|d|w|y) |
|
|
50
|
+
never|
|
|
51
|
+
now|today
|
|
42
52
|
<EmailItem> ::= <EmailAddress>|<UniqueID>|<String>
|
|
43
53
|
<EmailItemList> ::= "<EmailItem>(,<EmailItem>)*"
|
|
44
54
|
<EmailAddressList> ::= "<EmailAddess>(,<EmailAddress>)*"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Print the current version of Gam with details
|
|
4
4
|
```
|
|
5
5
|
gam version
|
|
6
|
-
GAM 7.19.
|
|
6
|
+
GAM 7.19.02 - https://github.com/GAM-team/GAM - pyinstaller
|
|
7
7
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
8
8
|
Python 3.13.7 64-bit final
|
|
9
9
|
MacOS Sequoia 15.6.1 x86_64
|
|
@@ -15,7 +15,7 @@ Time: 2023-06-02T21:10:00-07:00
|
|
|
15
15
|
Print the current version of Gam with details and time offset information
|
|
16
16
|
```
|
|
17
17
|
gam version timeoffset
|
|
18
|
-
GAM 7.19.
|
|
18
|
+
GAM 7.19.02 - https://github.com/GAM-team/GAM - pyinstaller
|
|
19
19
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
20
20
|
Python 3.13.7 64-bit final
|
|
21
21
|
MacOS Sequoia 15.6.1 x86_64
|
|
@@ -27,7 +27,7 @@ Your system time differs from www.googleapis.com by less than 1 second
|
|
|
27
27
|
Print the current version of Gam with extended details and SSL information
|
|
28
28
|
```
|
|
29
29
|
gam version extended
|
|
30
|
-
GAM 7.19.
|
|
30
|
+
GAM 7.19.02 - https://github.com/GAM-team/GAM - pyinstaller
|
|
31
31
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
32
32
|
Python 3.13.7 64-bit final
|
|
33
33
|
MacOS Sequoia 15.6.1 x86_64
|
|
@@ -64,7 +64,7 @@ MacOS High Sierra 10.13.6 x86_64
|
|
|
64
64
|
Path: /Users/Admin/bin/gam7
|
|
65
65
|
Version Check:
|
|
66
66
|
Current: 5.35.08
|
|
67
|
-
Latest: 7.19.
|
|
67
|
+
Latest: 7.19.02
|
|
68
68
|
echo $?
|
|
69
69
|
1
|
|
70
70
|
```
|
|
@@ -72,7 +72,7 @@ echo $?
|
|
|
72
72
|
Print the current version number without details
|
|
73
73
|
```
|
|
74
74
|
gam version simple
|
|
75
|
-
7.19.
|
|
75
|
+
7.19.02
|
|
76
76
|
```
|
|
77
77
|
In Linux/MacOS you can do:
|
|
78
78
|
```
|
|
@@ -82,7 +82,7 @@ echo $VER
|
|
|
82
82
|
Print the current version of Gam and address of this Wiki
|
|
83
83
|
```
|
|
84
84
|
gam help
|
|
85
|
-
GAM 7.19.
|
|
85
|
+
GAM 7.19.02 - https://github.com/GAM-team/GAM
|
|
86
86
|
GAM Team <google-apps-manager@googlegroups.com>
|
|
87
87
|
Python 3.13.7 64-bit final
|
|
88
88
|
MacOS Sequoia 15.6.1 x86_64
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|