gam7 7.6.5__tar.gz → 7.6.8__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.

Files changed (320) hide show
  1. gam7-7.6.8/.github/actions/decrypt.sh +19 -0
  2. {gam7-7.6.5 → gam7-7.6.8}/.github/workflows/build.yml +81 -75
  3. {gam7-7.6.5 → gam7-7.6.8}/PKG-INFO +2 -1
  4. {gam7-7.6.5 → gam7-7.6.8}/pyproject.toml +1 -0
  5. {gam7-7.6.5 → gam7-7.6.8}/src/GamUpdate.txt +21 -0
  6. {gam7-7.6.5 → gam7-7.6.8}/src/gam/__init__.py +12 -12
  7. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glmsgs.py +7 -3
  8. {gam7-7.6.5 → gam7-7.6.8}/src/gam-install.sh +12 -13
  9. {gam7-7.6.5 → gam7-7.6.8}/src/requirements.txt +1 -0
  10. {gam7-7.6.5 → gam7-7.6.8}/src/setup.cfg +1 -0
  11. {gam7-7.6.5 → gam7-7.6.8}/wiki/Authorization.md +5 -4
  12. {gam7-7.6.5 → gam7-7.6.8}/wiki/Downloads-Installs.md +15 -4
  13. {gam7-7.6.5 → gam7-7.6.8}/wiki/GamUpdates.md +21 -0
  14. {gam7-7.6.5 → gam7-7.6.8}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
  15. {gam7-7.6.5 → gam7-7.6.8}/wiki/Meta-Commands-and-File-Redirection.md +1 -1
  16. {gam7-7.6.5 → gam7-7.6.8}/wiki/Version-and-Help.md +6 -6
  17. gam7-7.6.5/.github/actions/creds.tar.xz.gpg +0 -0
  18. gam7-7.6.5/.github/actions/decrypt.sh +0 -38
  19. {gam7-7.6.5 → gam7-7.6.8}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  20. {gam7-7.6.5 → gam7-7.6.8}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  21. {gam7-7.6.5 → gam7-7.6.8}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  22. {gam7-7.6.5 → gam7-7.6.8}/.github/ISSUE_TEMPLATE.txt +0 -0
  23. {gam7-7.6.5 → gam7-7.6.8}/.github/actions/entitlements.plist +0 -0
  24. {gam7-7.6.5 → gam7-7.6.8}/.github/actions/package_exclusions.txt +0 -0
  25. {gam7-7.6.5 → gam7-7.6.8}/.github/stale.yml +0 -0
  26. {gam7-7.6.5 → gam7-7.6.8}/.github/workflows/codeql-analysis.yml +0 -0
  27. {gam7-7.6.5 → gam7-7.6.8}/.github/workflows/get-cacerts.yml +0 -0
  28. {gam7-7.6.5 → gam7-7.6.8}/.github/workflows/pushwiki.yml +0 -0
  29. {gam7-7.6.5 → gam7-7.6.8}/.github/workflows/pypi.yml +0 -0
  30. {gam7-7.6.5 → gam7-7.6.8}/.pre-commit-config.yaml +0 -0
  31. {gam7-7.6.5 → gam7-7.6.8}/LICENSE +0 -0
  32. {gam7-7.6.5 → gam7-7.6.8}/README.md +0 -0
  33. {gam7-7.6.5 → gam7-7.6.8}/src/.gitignore +0 -0
  34. {gam7-7.6.5 → gam7-7.6.8}/src/GamCommands.txt +0 -0
  35. {gam7-7.6.5 → gam7-7.6.8}/src/LICENSE +0 -0
  36. {gam7-7.6.5 → gam7-7.6.8}/src/cacerts.pem +0 -0
  37. {gam7-7.6.5 → gam7-7.6.8}/src/callgam.py +0 -0
  38. {gam7-7.6.5 → gam7-7.6.8}/src/gam/__main__.py +0 -0
  39. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/__init__.py +0 -0
  40. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/auth.py +0 -0
  41. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/client.py +0 -0
  42. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/core.py +0 -0
  43. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/data.py +0 -0
  44. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/http.py +0 -0
  45. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/http_core.py +0 -0
  46. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/http_interface.py +0 -0
  47. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/mock_http.py +0 -0
  48. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/mock_http_core.py +0 -0
  49. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/mock_service.py +0 -0
  50. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/service.py +0 -0
  51. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/token_store.py +0 -0
  52. {gam7-7.6.5 → gam7-7.6.8}/src/gam/atom/url.py +0 -0
  53. {gam7-7.6.5 → gam7-7.6.8}/src/gam/cacerts.pem +0 -0
  54. {gam7-7.6.5 → gam7-7.6.8}/src/gam/cbcm-v1.1beta1.json +0 -0
  55. {gam7-7.6.5 → gam7-7.6.8}/src/gam/contactdelegation-v1.json +0 -0
  56. {gam7-7.6.5 → gam7-7.6.8}/src/gam/datastudio-v1.json +0 -0
  57. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/__init__.py +0 -0
  58. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glaction.py +0 -0
  59. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glapi.py +0 -0
  60. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glcfg.py +0 -0
  61. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glclargs.py +0 -0
  62. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glentity.py +0 -0
  63. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glgapi.py +0 -0
  64. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glgdata.py +0 -0
  65. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glglobals.py +0 -0
  66. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glindent.py +0 -0
  67. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glskus.py +0 -0
  68. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/gluprop.py +0 -0
  69. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/glverlibs.py +0 -0
  70. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gamlib/yubikey.py +0 -0
  71. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/__init__.py +0 -0
  72. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/alt/__init__.py +0 -0
  73. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/alt/app_engine.py +0 -0
  74. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/alt/appengine.py +0 -0
  75. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/apps/__init__.py +0 -0
  76. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/apps/audit/__init__.py +0 -0
  77. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/apps/audit/service.py +0 -0
  78. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  79. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/apps/contacts/service.py +0 -0
  80. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/apps/service.py +0 -0
  81. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/service.py +0 -0
  82. {gam7-7.6.5 → gam7-7.6.8}/src/gam/gdata/urlfetch.py +0 -0
  83. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/__init__.py +0 -0
  84. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/_auth.py +0 -0
  85. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/_helpers.py +0 -0
  86. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/channel.py +0 -0
  87. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/discovery.py +0 -0
  88. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
  89. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
  90. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
  91. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
  92. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/errors.py +0 -0
  93. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/http.py +0 -0
  94. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/mimeparse.py +0 -0
  95. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/model.py +0 -0
  96. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/schema.py +0 -0
  97. {gam7-7.6.5 → gam7-7.6.8}/src/gam/googleapiclient/version.py +0 -0
  98. {gam7-7.6.5 → gam7-7.6.8}/src/gam/iso8601/__init__.py +0 -0
  99. {gam7-7.6.5 → gam7-7.6.8}/src/gam/iso8601/iso8601.py +0 -0
  100. {gam7-7.6.5 → gam7-7.6.8}/src/gam/meet-v2beta.json +0 -0
  101. {gam7-7.6.5 → gam7-7.6.8}/src/gam/serviceaccountlookup-v1.json +0 -0
  102. {gam7-7.6.5 → gam7-7.6.8}/src/gam/six.py +0 -0
  103. {gam7-7.6.5 → gam7-7.6.8}/src/gam-setup.bat +0 -0
  104. {gam7-7.6.5 → gam7-7.6.8}/src/gam.exe.manifest +0 -0
  105. {gam7-7.6.5 → gam7-7.6.8}/src/gam.py +0 -0
  106. {gam7-7.6.5 → gam7-7.6.8}/src/gam.spec +0 -0
  107. {gam7-7.6.5 → gam7-7.6.8}/src/gam.wxs +0 -0
  108. {gam7-7.6.5 → gam7-7.6.8}/src/license.rtf +0 -0
  109. {gam7-7.6.5 → gam7-7.6.8}/src/requirements-dev.txt +0 -0
  110. {gam7-7.6.5 → gam7-7.6.8}/src/setup.py +0 -0
  111. {gam7-7.6.5 → gam7-7.6.8}/src/tools/a_atleast_b.py +0 -0
  112. {gam7-7.6.5 → gam7-7.6.8}/src/tools/gen-wix-xml-filelist.py +0 -0
  113. {gam7-7.6.5 → gam7-7.6.8}/src/tools/mkGamRef.py +0 -0
  114. {gam7-7.6.5 → gam7-7.6.8}/src/tools/openssl.props +0 -0
  115. {gam7-7.6.5 → gam7-7.6.8}/src/version_info.txt.in +0 -0
  116. {gam7-7.6.5 → gam7-7.6.8}/wiki/00scratch.md +0 -0
  117. {gam7-7.6.5 → gam7-7.6.8}/wiki/Addresses.md +0 -0
  118. {gam7-7.6.5 → gam7-7.6.8}/wiki/Administrators.md +0 -0
  119. {gam7-7.6.5 → gam7-7.6.8}/wiki/Alert-Center.md +0 -0
  120. {gam7-7.6.5 → gam7-7.6.8}/wiki/Aliases.md +0 -0
  121. {gam7-7.6.5 → gam7-7.6.8}/wiki/BNF-Syntax.md +0 -0
  122. {gam7-7.6.5 → gam7-7.6.8}/wiki/Basic-Items.md +0 -0
  123. {gam7-7.6.5 → gam7-7.6.8}/wiki/Bulk-Processing.md +0 -0
  124. {gam7-7.6.5 → gam7-7.6.8}/wiki/CSV-Input-Filtering.md +0 -0
  125. {gam7-7.6.5 → gam7-7.6.8}/wiki/CSV-Output-Filtering.md +0 -0
  126. {gam7-7.6.5 → gam7-7.6.8}/wiki/CSV-Special-Characters.md +0 -0
  127. {gam7-7.6.5 → gam7-7.6.8}/wiki/Calendars-Access.md +0 -0
  128. {gam7-7.6.5 → gam7-7.6.8}/wiki/Calendars-Events.md +0 -0
  129. {gam7-7.6.5 → gam7-7.6.8}/wiki/Calendars.md +0 -0
  130. {gam7-7.6.5 → gam7-7.6.8}/wiki/Chat-Bot.md +0 -0
  131. {gam7-7.6.5 → gam7-7.6.8}/wiki/Chrome-AUE-Counts.md +0 -0
  132. {gam7-7.6.5 → gam7-7.6.8}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  133. {gam7-7.6.5 → gam7-7.6.8}/wiki/Chrome-Installed-Apps.md +0 -0
  134. {gam7-7.6.5 → gam7-7.6.8}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  135. {gam7-7.6.5 → gam7-7.6.8}/wiki/Chrome-Policies.md +0 -0
  136. {gam7-7.6.5 → gam7-7.6.8}/wiki/Chrome-Printers.md +0 -0
  137. {gam7-7.6.5 → gam7-7.6.8}/wiki/Chrome-Profile-Management.md +0 -0
  138. {gam7-7.6.5 → gam7-7.6.8}/wiki/Chrome-Version-Counts.md +0 -0
  139. {gam7-7.6.5 → gam7-7.6.8}/wiki/Chrome-Version-History.md +0 -0
  140. {gam7-7.6.5 → gam7-7.6.8}/wiki/ChromeOS-Devices.md +0 -0
  141. {gam7-7.6.5 → gam7-7.6.8}/wiki/Classroom-Courses.md +0 -0
  142. {gam7-7.6.5 → gam7-7.6.8}/wiki/Classroom-Guardians.md +0 -0
  143. {gam7-7.6.5 → gam7-7.6.8}/wiki/Classroom-Invitations.md +0 -0
  144. {gam7-7.6.5 → gam7-7.6.8}/wiki/Classroom-Membership.md +0 -0
  145. {gam7-7.6.5 → gam7-7.6.8}/wiki/Cloud-Channel.md +0 -0
  146. {gam7-7.6.5 → gam7-7.6.8}/wiki/Cloud-Identity-Devices.md +0 -0
  147. {gam7-7.6.5 → gam7-7.6.8}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  148. {gam7-7.6.5 → gam7-7.6.8}/wiki/Cloud-Identity-Groups.md +0 -0
  149. {gam7-7.6.5 → gam7-7.6.8}/wiki/Cloud-Identity-Policies.md +0 -0
  150. {gam7-7.6.5 → gam7-7.6.8}/wiki/Cloud-Storage.md +0 -0
  151. {gam7-7.6.5 → gam7-7.6.8}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  152. {gam7-7.6.5 → gam7-7.6.8}/wiki/Collections-of-Items.md +0 -0
  153. {gam7-7.6.5 → gam7-7.6.8}/wiki/Collections-of-Users.md +0 -0
  154. {gam7-7.6.5 → gam7-7.6.8}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
  155. {gam7-7.6.5 → gam7-7.6.8}/wiki/Command-Line-Parsing.md +0 -0
  156. {gam7-7.6.5 → gam7-7.6.8}/wiki/Command-Logging-Progress.md +0 -0
  157. {gam7-7.6.5 → gam7-7.6.8}/wiki/Context-Aware-Access-Levels.md +0 -0
  158. {gam7-7.6.5 → gam7-7.6.8}/wiki/Customer.md +0 -0
  159. {gam7-7.6.5 → gam7-7.6.8}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  160. {gam7-7.6.5 → gam7-7.6.8}/wiki/Domain-SharedContacts-GAL.md +0 -0
  161. {gam7-7.6.5 → gam7-7.6.8}/wiki/Domains-Verification.md +0 -0
  162. {gam7-7.6.5 → gam7-7.6.8}/wiki/Domains.md +0 -0
  163. {gam7-7.6.5 → gam7-7.6.8}/wiki/Drive-File-Selection.md +0 -0
  164. {gam7-7.6.5 → gam7-7.6.8}/wiki/Drive-Items.md +0 -0
  165. {gam7-7.6.5 → gam7-7.6.8}/wiki/Drive-REST-API-v3.md +0 -0
  166. {gam7-7.6.5 → gam7-7.6.8}/wiki/Email-Audit-Monitor.md +0 -0
  167. {gam7-7.6.5 → gam7-7.6.8}/wiki/Find-File-Owner.md +0 -0
  168. {gam7-7.6.5 → gam7-7.6.8}/wiki/GAM-Public-Chat-Room.md +0 -0
  169. {gam7-7.6.5 → gam7-7.6.8}/wiki/GAM-Return-Codes.md +0 -0
  170. {gam7-7.6.5 → gam7-7.6.8}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  171. {gam7-7.6.5 → gam7-7.6.8}/wiki/GAM7-on-Android-Devices.md +0 -0
  172. {gam7-7.6.5 → gam7-7.6.8}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  173. {gam7-7.6.5 → gam7-7.6.8}/wiki/Google-Data-Transfers.md +0 -0
  174. {gam7-7.6.5 → gam7-7.6.8}/wiki/Google-Network-Addresses.md +0 -0
  175. {gam7-7.6.5 → gam7-7.6.8}/wiki/Groups-Membership.md +0 -0
  176. {gam7-7.6.5 → gam7-7.6.8}/wiki/Groups.md +0 -0
  177. {gam7-7.6.5 → gam7-7.6.8}/wiki/HTTPS-Proxy.md +0 -0
  178. {gam7-7.6.5 → gam7-7.6.8}/wiki/Home.md +0 -0
  179. {gam7-7.6.5 → gam7-7.6.8}/wiki/How-to-Install-GAM7.md +0 -0
  180. {gam7-7.6.5 → gam7-7.6.8}/wiki/How-to-Uninstall-GAM7.md +0 -0
  181. {gam7-7.6.5 → gam7-7.6.8}/wiki/How-to-Update-GAM7.md +0 -0
  182. {gam7-7.6.5 → gam7-7.6.8}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  183. {gam7-7.6.5 → gam7-7.6.8}/wiki/Inbound-SSO.md +0 -0
  184. {gam7-7.6.5 → gam7-7.6.8}/wiki/Install-GAM-as-Python-Library.md +0 -0
  185. {gam7-7.6.5 → gam7-7.6.8}/wiki/Licenses.md +0 -0
  186. {gam7-7.6.5 → gam7-7.6.8}/wiki/List-Items.md +0 -0
  187. {gam7-7.6.5 → gam7-7.6.8}/wiki/List.md +0 -0
  188. {gam7-7.6.5 → gam7-7.6.8}/wiki/Mobile-Devices.md +0 -0
  189. {gam7-7.6.5 → gam7-7.6.8}/wiki/Organizational-Units.md +0 -0
  190. {gam7-7.6.5 → gam7-7.6.8}/wiki/Other-Resources.md +0 -0
  191. {gam7-7.6.5 → gam7-7.6.8}/wiki/Permission-Matches.md +0 -0
  192. {gam7-7.6.5 → gam7-7.6.8}/wiki/Python-Regular-Expressions.md +0 -0
  193. {gam7-7.6.5 → gam7-7.6.8}/wiki/README.md +0 -0
  194. {gam7-7.6.5 → gam7-7.6.8}/wiki/Rclone.md +0 -0
  195. {gam7-7.6.5 → gam7-7.6.8}/wiki/Reports.md +0 -0
  196. {gam7-7.6.5 → gam7-7.6.8}/wiki/Reseller.md +0 -0
  197. {gam7-7.6.5 → gam7-7.6.8}/wiki/Resources.md +0 -0
  198. {gam7-7.6.5 → gam7-7.6.8}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  199. {gam7-7.6.5 → gam7-7.6.8}/wiki/SSL-Root-CA-Certificates.md +0 -0
  200. {gam7-7.6.5 → gam7-7.6.8}/wiki/Schemas.md +0 -0
  201. {gam7-7.6.5 → gam7-7.6.8}/wiki/Scripts.md +0 -0
  202. {gam7-7.6.5 → gam7-7.6.8}/wiki/Send-Email.md +0 -0
  203. {gam7-7.6.5 → gam7-7.6.8}/wiki/Shared-Drives.md +0 -0
  204. {gam7-7.6.5 → gam7-7.6.8}/wiki/Sites.md +0 -0
  205. {gam7-7.6.5 → gam7-7.6.8}/wiki/Tag-Replace.md +0 -0
  206. {gam7-7.6.5 → gam7-7.6.8}/wiki/Todrive.md +0 -0
  207. {gam7-7.6.5 → gam7-7.6.8}/wiki/Unmanaged-Accounts.md +0 -0
  208. {gam7-7.6.5 → gam7-7.6.8}/wiki/Upgrade-Benefits.md +0 -0
  209. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Analytics-Admin.md +0 -0
  210. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Application-Specific-Passwords.md +0 -0
  211. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Backup-Verification-Codes.md +0 -0
  212. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Calendars-Access.md +0 -0
  213. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Calendars-Events.md +0 -0
  214. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Calendars.md +0 -0
  215. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Chat.md +0 -0
  216. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Classification-Labels.md +0 -0
  217. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Classroom-Profile.md +0 -0
  218. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Contacts-Delegates.md +0 -0
  219. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Contacts.md +0 -0
  220. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Deprovision.md +0 -0
  221. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Activity-Settings.md +0 -0
  222. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Cleanup.md +0 -0
  223. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Comments.md +0 -0
  224. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Copy-Move.md +0 -0
  225. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Files-Display.md +0 -0
  226. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Files-Manage.md +0 -0
  227. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Orphans.md +0 -0
  228. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Ownership.md +0 -0
  229. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Permissions.md +0 -0
  230. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Query.md +0 -0
  231. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Revisions.md +0 -0
  232. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Shortcuts.md +0 -0
  233. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Drive-Transfer.md +0 -0
  234. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Forms.md +0 -0
  235. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Gmail-CSE.md +0 -0
  236. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Gmail-Delegates.md +0 -0
  237. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Gmail-Filters.md +0 -0
  238. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Gmail-Forwarding.md +0 -0
  239. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Gmail-Labels.md +0 -0
  240. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  241. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Gmail-Profile.md +0 -0
  242. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Gmail-S-MIME.md +0 -0
  243. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  244. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Gmail-Settings.md +0 -0
  245. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Group-Membership.md +0 -0
  246. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Keep-Notes.md +0 -0
  247. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Looker-Studio.md +0 -0
  248. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Meet.md +0 -0
  249. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-People-Contacts-Profiles.md +0 -0
  250. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Photo.md +0 -0
  251. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Profile-Photo.md +0 -0
  252. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Profile-Sharing.md +0 -0
  253. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Shared-Drives.md +0 -0
  254. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  255. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Spreadsheets.md +0 -0
  256. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Tasks.md +0 -0
  257. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-Tokens.md +0 -0
  258. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users-YouTube.md +0 -0
  259. {gam7-7.6.5 → gam7-7.6.8}/wiki/Users.md +0 -0
  260. {gam7-7.6.5 → gam7-7.6.8}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  261. {gam7-7.6.5 → gam7-7.6.8}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  262. {gam7-7.6.5 → gam7-7.6.8}/wiki/Vault-Takeout.md +0 -0
  263. {gam7-7.6.5 → gam7-7.6.8}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  264. {gam7-7.6.5 → gam7-7.6.8}/wiki/_Sidebar.md +0 -0
  265. {gam7-7.6.5 → gam7-7.6.8}/wiki/gam.cfg.md +0 -0
  266. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-AdminSettingsExamples.md +0 -0
  267. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Android-Installation.md +0 -0
  268. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-BulkOperations.md +0 -0
  269. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-CalendarExamples.md +0 -0
  270. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Chat-Bot.md +0 -0
  271. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Chrome-Browser-Management.md +0 -0
  272. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Chrome-OS-Installation.md +0 -0
  273. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Chrome-Policy-Settings.md +0 -0
  274. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Cloud-Identity-Groups.md +0 -0
  275. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
  276. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Command-Reference-Calendars.md +0 -0
  277. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Command-Reference-Definitions.md +0 -0
  278. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Command-Reference-Drive.md +0 -0
  279. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Command-Reference-Email.md +0 -0
  280. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
  281. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Command-Reference-Groups.md +0 -0
  282. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Command-Reference-Users.md +0 -0
  283. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Context-Aware-Access-Levels.md +0 -0
  284. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  285. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-CreatingClientSecretsFile.md +0 -0
  286. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Custom-Schemas.md +0 -0
  287. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Data-Transfers.md +0 -0
  288. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-DomainVerification.md +0 -0
  289. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-ExamplesAccountAuditing.md +0 -0
  290. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-ExamplesCSV.md +0 -0
  291. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-ExamplesEmailSettings.md +0 -0
  292. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-ExamplesOrganizations.md +0 -0
  293. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-GAM-Discussion-Group.md +0 -0
  294. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  295. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-GAM-options-files.md +0 -0
  296. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
  297. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-GAM3CSVListings.md +0 -0
  298. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-GAM3DirectoryCommands.md +0 -0
  299. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-GAM3GroupSettings.md +0 -0
  300. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-GAM7-FAQ.md +0 -0
  301. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
  302. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-GoogleDriveManagement.md +0 -0
  303. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
  304. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Home.md +0 -0
  305. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  306. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Inbound-SSO-Settings.md +0 -0
  307. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-LicenseExamples.md +0 -0
  308. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Managing-Admins.md +0 -0
  309. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
  310. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Managing-Devices.md +0 -0
  311. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Managing-Google-Classroom.md +0 -0
  312. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-OAuthKeyManagement.md +0 -0
  313. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Printers.md +0 -0
  314. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-ResellerCommands.md +0 -0
  315. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
  316. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-SecurityExamples.md +0 -0
  317. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-UnmanagedUsersExamples.md +0 -0
  318. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Use-a-Yubikey.md +0 -0
  319. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  320. {gam7-7.6.5 → gam7-7.6.8}/wiki/l-_Footer.md +0 -0
@@ -0,0 +1,19 @@
1
+ #!/bin/sh
2
+ credspath="$1"
3
+ if [ ! -d "$credspath" ]; then
4
+ echo "creating ${credspath}"
5
+ mkdir -p "$credspath"
6
+ fi
7
+ credsfile="${credspath}/oauth2.txt"
8
+ echo "$oa2" > "$credsfile"
9
+ echo "File size:"
10
+ wc -c "$credsfile"
11
+ echo "File type:"
12
+ file "$credsfile"
13
+ echo "Validation:"
14
+ jq -e . "$credsfile" > /dev/null
15
+ if [ $? -eq 0 ]; then
16
+ echo "Valid JSON"
17
+ else
18
+ echo "Invalid JSON"
19
+ fi
@@ -39,76 +39,69 @@ jobs:
39
39
  - os: ubuntu-22.04
40
40
  jid: 1
41
41
  goal: build
42
- arch: x86_64
43
- openssl_archs: linux-x86_64
42
+ name: Build Intel Ubuntu Jammy
44
43
  - os: ubuntu-24.04
45
44
  jid: 2
46
45
  goal: build
47
- arch: x86_64
48
- openssl_archs: linux-x86_64
46
+ name: Build Intel Ubuntu Noble
49
47
  - os: ubuntu-24.04-arm
50
48
  jid: 3
51
49
  goal: build
52
- arch: aarch64
53
- openssl_archs: linux-aarch64
50
+ name: Build Arm Ubuntu Noble
54
51
  - os: ubuntu-22.04-arm
55
52
  jid: 4
56
53
  goal: build
57
- arch: aarch64
58
- openssl_archs: linux-aarch64
54
+ name: Build Arm Ubuntu Jammy
59
55
  - os: ubuntu-22.04
60
56
  jid: 5
61
57
  goal: build
62
- arch: x86_64
63
- openssl_archs: linux-x86_64
64
58
  staticx: yes
59
+ name: Build Intel StaticX Legacy
65
60
  - os: ubuntu-22.04-arm
66
61
  jid: 6
67
62
  goal: build
68
- arch: aarch64
69
- openssl_archs: linux-aarch64
70
63
  staticx: yes
64
+ name: Build Arm StaticX Legacy
71
65
  - os: macos-13
72
66
  jid: 7
73
67
  goal: build
74
- arch: x86_64
75
- openssl_archs: darwin64-x86_64
68
+ name: Build Intel MacOS
76
69
  - os: macos-14
77
70
  jid: 8
78
71
  goal: build
79
- arch: aarch64
80
- openssl_archs: darwin64-arm64
72
+ name: Build Arm MacOS 14
81
73
  - os: macos-15
82
74
  jid: 9
83
75
  goal: build
84
- arch: aarch64
85
- openssl_archs: darwin64-arm64
76
+ name: Build Arm MacOS 15
86
77
  - os: windows-2022
87
78
  jid: 10
88
79
  goal: build
89
- arch: Win64
90
- openssl_archs: VC-WIN64A
91
- #- os: windows-11-arm
92
- # jid: 14
93
- # goal: build
94
- # arch: arm64
95
- # openssl_archs: VC-WIN64-ARM
96
- # continue-on-error: true
80
+ name: Build Intel Windows
81
+ - os: windows-11-arm
82
+ jid: 11
83
+ goal: build
84
+ name: Build Arm Windows
97
85
  - os: ubuntu-24.04
98
86
  goal: test
99
87
  python: "3.10"
100
- jid: 11
101
- arch: x86_64
88
+ jid: 12
89
+ name: Test Python 3.10
102
90
  - os: ubuntu-24.04
103
91
  goal: test
104
92
  python: "3.11"
105
- jid: 12
106
- arch: x86_64
93
+ jid: 13
94
+ name: Test Python 3.11
107
95
  - os: ubuntu-24.04
108
96
  goal: test
109
97
  python: "3.12"
110
- jid: 13
111
- arch: x86_64
98
+ jid: 14
99
+ name: Test Python 3.12
100
+ - os: ubuntu-24.04
101
+ goal: test
102
+ python: "3.14-dev"
103
+ jid: 15
104
+ name: Test Python 3.14-dev
112
105
 
113
106
  steps:
114
107
 
@@ -131,7 +124,7 @@ jobs:
131
124
  with:
132
125
  path: |
133
126
  cache.tar.xz
134
- key: gam-${{ matrix.jid }}-20250408-01
127
+ key: gam-${{ matrix.jid }}-20250422
135
128
 
136
129
  - name: Untar Cache archive
137
130
  if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit == 'true'
@@ -149,12 +142,21 @@ jobs:
149
142
 
150
143
  - name: common variables for all runs
151
144
  env:
152
- arch: ${{ matrix.arch }}
153
145
  JID: ${{ matrix.jid }}
154
146
  ACTIONS_CACHE: ${{ steps.cache-python-ssl.outputs.cache-hit }}
155
147
  ACTIONS_GOAL: ${{ matrix.goal }}
156
148
  run: |
157
- echo "arch=${arch}" >> $GITHUB_ENV
149
+ case $RUNNER_ARCH in
150
+ X64)
151
+ echo "arch=x86_64" >> $GITHUB_ENV
152
+ ;;
153
+ ARM64)
154
+ echo "arch=arm64" >> $GITHUB_ENV
155
+ ;;
156
+ *)
157
+ echo "arch=${RUNNER_ARCH}" >> $GITHUB_ENV
158
+ ;;
159
+ esac
158
160
  echo "JID=${JID}" >> $GITHUB_ENV
159
161
  echo "ACTIONS_CACHE=${ACTIONS_CACHE}" >> $GITHUB_ENV
160
162
  echo "ACTIONS_GOAL=${ACTIONS_GOAL}" >> $GITHUB_ENV
@@ -168,7 +170,7 @@ jobs:
168
170
  echo "curl_retry=${curl_retry}" >> $GITHUB_ENV
169
171
  # GAMCFGDIR should be recreated on every run
170
172
  GAMCFGDIR="${RUNNER_TEMP}/.gam"
171
- if [ "$arch" == "Win64" ]; then
173
+ if [ "$RUNNER_OS" == "Windows" ]; then
172
174
  GAMCFGDIR=$(cygpath -u "$GAMCFGDIR")
173
175
  fi
174
176
  echo "GAMCFGDIR=${GAMCFGDIR}" >> $GITHUB_ENV
@@ -227,7 +229,6 @@ jobs:
227
229
  - name: Set Env Variables for build
228
230
  if: matrix.goal == 'build'
229
231
  env:
230
- openssl_archs: ${{ matrix.openssl_archs }}
231
232
  staticx: ${{ matrix.staticx }}
232
233
  run: |
233
234
  echo "We are running on ${RUNNER_OS}"
@@ -251,18 +252,15 @@ jobs:
251
252
  PERL="c:\strawberry\perl\bin\perl.exe"
252
253
  if [[ "$RUNNER_ARCH" == "ARM64" ]]; then
253
254
  PYEXTERNALS_PATH="arm64"
254
- GAM_ARCHIVE_ARCH="arm64"
255
255
  WIX_ARCH="arm64"
256
256
  CHOC_OPS=""
257
257
  elif [[ "$RUNNER_ARCH" == "X64" ]]; then
258
258
  PYEXTERNALS_PATH="amd64"
259
- GAM_ARCHIVE_ARCH="x86_64"
260
259
  WIX_ARCH="x64"
261
260
  CHOC_OPS=""
262
261
  fi
263
262
  LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PYTHON_SOURCE_PATH}/PCbuild/${PYEXTERNALS_PATH}"
264
263
  echo "PYTHON=${PYTHON_SOURCE_PATH}/PCbuild/${PYEXTERNALS_PATH}/python.exe" >> $GITHUB_ENV
265
- echo "GAM_ARCHIVE_ARCH=${GAM_ARCHIVE_ARCH}" >> $GITHUB_ENV
266
264
  echo "WIX_ARCH=${WIX_ARCH}" >> $GITHUB_ENV
267
265
  fi
268
266
  echo "We'll run make with: ${MAKEOPT}"
@@ -272,7 +270,6 @@ jobs:
272
270
  echo "MAKEOPT=${MAKEOPT}" >> $GITHUB_ENV
273
271
  echo "PERL=${PERL}" >> $GITHUB_ENV
274
272
  echo "PYEXTERNALS_PATH=${PYEXTERNALS_PATH}" >> $GITHUB_ENV
275
- echo "openssl_archs=${openssl_archs}" >> $GITHUB_ENV
276
273
 
277
274
  - name: Get latest stable OpenSSL source
278
275
  if: matrix.goal == 'build' && steps.cache-python-ssl.outputs.cache-hit != 'true'
@@ -300,7 +297,7 @@ jobs:
300
297
  export CFLAGS=-DNO_INTERLOCKEDOR64
301
298
  fi
302
299
  # --libdir=lib is needed so Python can find OpenSSL libraries
303
- "${PERL}" ./Configure "${openssl_arch}" --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" $OPENSSL_CONFIG_OPTS
300
+ "${PERL}" ./Configure --libdir=lib --prefix="${OPENSSL_INSTALL_PATH}" $OPENSSL_CONFIG_OPTS
304
301
 
305
302
  - name: Rename GNU link on Windows
306
303
  if: matrix.goal == 'build' && runner.os == 'Windows' && steps.cache-python-ssl.outputs.cache-hit != 'true'
@@ -323,11 +320,10 @@ jobs:
323
320
  run: |
324
321
  cd "${OPENSSL_SOURCE_PATH}"
325
322
  # install_sw saves us ages processing man pages :-)
326
- # $MAKE install_sw
327
- $MAKE install
328
- #if [[ "${RUNNER_OS}" != "Windows" ]]; then
329
- echo "LDFLAGS=-L${OPENSSL_INSTALL_PATH}/lib" >> $GITHUB_ENV
330
- #fi
323
+ $MAKE install_sw
324
+ if [[ "${RUNNER_OS}" != "Windows" ]]; then
325
+ echo "LDFLAGS=-L${OPENSSL_INSTALL_PATH}/lib" >> $GITHUB_ENV
326
+ fi
331
327
  echo "CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1" >> $GITHUB_ENV
332
328
  case $RUNNER_ARCH in
333
329
  X64)
@@ -447,31 +443,36 @@ jobs:
447
443
  "${PYTHON}" -V
448
444
  "${PYTHON}" -c "import ssl; print(f'Using {ssl.OPENSSL_VERSION}')"
449
445
 
450
- - name: Windows ARM Install rust and cargo
451
- if: matrix.goal == 'build' && runner.os == 'Windows' && runner.arch == 'ARM64' && steps.cache-python-ssl.outputs.cache-hit != 'true'
452
- run: |
453
- choco install rust
454
-
455
446
  - name: Upgrade pip, wheel, etc
456
447
  run: |
457
448
  curl $curl_retry -O https://bootstrap.pypa.io/get-pip.py
458
- "${PYTHON}" get-pip.py
459
- "${PYTHON}" -m pip install --upgrade pip
460
- "${PYTHON}" -m pip install --upgrade wheel
461
- "${PYTHON}" -m pip install --upgrade setuptools
462
-
449
+ "$PYTHON" get-pip.py
450
+ "$PYTHON" -m pip install --upgrade pip
451
+ "$PYTHON" -m pip install --upgrade wheel
452
+ "$PYTHON" -m pip install --upgrade setuptools
453
+
454
+ - name: Custom wheels for Win arm64
455
+ if: runner.os == 'Windows' && runner.arch == 'ARM64'
456
+ run: |
457
+ latest_lxml_whl=$(curl https://api.github.com/repos/GAM-team/lxml-wheel/releases/latest -s | jq -r .assets.[0].browser_download_url)
458
+ echo "Downloading ${latest_lxml_whl}..."
459
+ curl -O -L "$latest_lxml_whl"
460
+ "$PYTHON" -m pip install lxml*.whl
461
+ latest_crypt_whl=$(curl https://api.github.com/repos/jay0lee/cryptography/releases/latest -s | jq -r .assets.[0].browser_download_url)
462
+ echo "Downloading ${latest_crypt_whl}..."
463
+ curl -O -L "$latest_crypt_whl"
464
+ "$PYTHON" -m pip install cryptography*.whl
465
+
463
466
  - name: Install pip requirements
464
467
  run: |
465
- # rust cargo needs this to compile
466
- export OPENSSL_DIR="$OPENSSL_INSTALL_PATH"
467
468
  echo "before anything..."
468
- "${PYTHON}" -m pip list
469
- "${PYTHON}" -m pip install --upgrade -r requirements.txt
469
+ "$PYTHON" -m pip list
470
+ "$PYTHON" -m pip install --upgrade -r requirements.txt
470
471
  echo "after requirements..."
471
- "${PYTHON}" -m pip list
472
- "${PYTHON}" -m pip install --force-reinstall --no-deps --upgrade cryptography
472
+ "$PYTHON" -m pip list
473
+ #"$PYTHON" -m pip install --force-reinstall --no-deps --upgrade cryptography
473
474
  echo "after everything..."
474
- "${PYTHON}" -m pip list
475
+ "$PYTHON" -m pip list
475
476
 
476
477
  - name: Install PyInstaller
477
478
  if: matrix.goal == 'build'
@@ -595,14 +596,12 @@ jobs:
595
596
  echo "GAM Version ${GAMVERSION}"
596
597
  echo "GAMVERSION=${GAMVERSION}" >> $GITHUB_ENV
597
598
 
598
- - name: Configure service account auth
599
+ - name: Configure user and service account auth
599
600
  id: configserviceaccount
600
601
  env:
601
- PASSCODE: ${{ secrets.PASSCODE }}
602
+ oa2: ${{ secrets[format('GAM_GHA_{0}', matrix.jid)] }}
602
603
  run: |
603
- source ../.github/actions/decrypt.sh ../.github/actions/creds.tar.xz.gpg creds.tar.xz "${GAMCFGDIR}"
604
- mv -v "${GAMCFGDIR}/oauth2.txt-gam-gha-${JID}" "${GAMCFGDIR}/oauth2.txt"
605
- rm -v $GAMCFGDIR/oauth2.txt-gam*
604
+ ../.github/actions/decrypt.sh "${GAMCFGDIR}"
606
605
  $gam create signjwtserviceaccount
607
606
 
608
607
  - name: Upload gam.exe Windows for signing
@@ -650,22 +649,29 @@ jobs:
650
649
  else
651
650
  libver="glibc$(ldd --version | awk '/ldd/{print $NF}')"
652
651
  fi
653
- GAM_ARCHIVE="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-linux-$(arch)-${libver}.tar.xz"
652
+ GAM_ARCHIVE="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-linux-${arch}-${libver}.tar.xz"
654
653
  fi
655
654
  echo "GAM Archive ${GAM_ARCHIVE}"
656
655
  tar -C "${gampath}/.." --create --verbose --exclude-from "${GITHUB_WORKSPACE}/.github/actions/package_exclusions.txt" --file $GAM_ARCHIVE --xz gam7
657
656
 
658
- - name: Windows package
657
+ - name: Install Wix on Win ARM64
658
+ if: runner.os == 'Windows' && runner.arch == 'ARM64'
659
+ run: |
660
+ choco install wixtoolset
661
+
662
+ - name: Windows package zip
659
663
  if: runner.os == 'Windows' && matrix.goal != 'test'
660
664
  run: |
661
665
  echo "started in $(pwd)"
662
666
  cd "${gampath}/.."
663
667
  echo "moved to $(pwd)"
664
- GAM_ARCHIVE="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-windows-${GAM_ARCHIVE_ARCH}.zip"
668
+ GAM_ARCHIVE="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-windows-${arch}.zip"
665
669
  /c/Program\ Files/7-Zip/7z.exe a -tzip "$GAM_ARCHIVE" gam7 "-xr@${GITHUB_WORKSPACE}/.github/actions/package_exclusions.txt" -bb3
666
- cd ../..
667
- echo "moved to $(pwd)"
668
- export MSI_FILENAME="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-windows-${GAM_ARCHIVE_ARCH}.msi"
670
+
671
+ - name: Windows package MSI
672
+ if: runner.os == 'Windows' && matrix.goal != 'test'
673
+ run: |
674
+ export MSI_FILENAME="${GITHUB_WORKSPACE}/gam-${GAMVERSION}-windows-${arch}.msi"
669
675
  # auto-generate a lib.wxs based on the files PyInstaller created for the lib/ directory
670
676
  /c/Program\ Files\ \(x86\)/WiX\ Toolset\ v3.14/bin/heat.exe dir "${gampath}/lib" -ke -srd -cg Lib -gg -dr lib -directoryid lib -out lib.wxs
671
677
  $PYTHON tools/gen-wix-xml-filelist.py lib.wxs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.6.5
3
+ Version: 7.6.8
4
4
  Summary: CLI tool to manage Google Workspace
5
5
  Project-URL: Homepage, https://github.com/GAM-team/GAM
6
6
  Project-URL: Issues, https://github.com/GAM-team/GAM/issues
@@ -30,6 +30,7 @@ Requires-Dist: httplib2>=0.17.0
30
30
  Requires-Dist: lxml
31
31
  Requires-Dist: passlib>=1.7.2
32
32
  Requires-Dist: pathvalidate
33
+ Requires-Dist: pyscard==2.2.1
33
34
  Requires-Dist: python-dateutil
34
35
  Provides-Extra: yubikey
35
36
  Requires-Dist: yubikey-manager>=5.0; extra == 'yubikey'
@@ -20,6 +20,7 @@ dependencies = [
20
20
  "lxml",
21
21
  "passlib>=1.7.2",
22
22
  "pathvalidate",
23
+ "pyscard==2.2.1",
23
24
  "python-dateutil",
24
25
  ]
25
26
  description = "CLI tool to manage Google Workspace"
@@ -1,3 +1,24 @@
1
+ 7.06.08
2
+
3
+ Fixed problem where Yubikeys caused a trap.
4
+
5
+ 7.06.07
6
+
7
+ Updated private key rotation progress messages in `gam create|use|update project`
8
+ and `gam upload sakey`.
9
+
10
+ Updated `gam use project` to display the following error message when the specifed project
11
+ already has a service account.
12
+ ```
13
+ Re-run the command specify a new service account name with: saname <ServiceAccountName>'
14
+ ```
15
+
16
+ 7.06.06
17
+
18
+ Native support for Windows 11 Arm-based devices.
19
+
20
+ Renamed some MacOS and Linux binary installer files to align on terminology. Everything is "arm64" now, no "aarch64".
21
+
1
22
  7.06.05
2
23
 
3
24
  Updated code in `gam delete|update chromepolicy` to handle the `policyTargetKey[additionalTargetKeys]`
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
25
25
  """
26
26
 
27
27
  __author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
28
- __version__ = '7.06.05'
28
+ __version__ = '7.06.08'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -11384,25 +11384,26 @@ def _waitForSvcAcctCompletion(i):
11384
11384
  sys.stdout.write(Msg.WAITING_FOR_ITEM_CREATION_TO_COMPLETE_SLEEPING.format(Ent.Singular(Ent.SVCACCT), sleep_time))
11385
11385
  time.sleep(sleep_time)
11386
11386
 
11387
- def _grantRotateRights(iam, projectId, service_account, email, account_type='serviceAccount'):
11387
+ def _grantRotateRights(iam, projectId, service_account, account_type='serviceAccount'):
11388
11388
  body = {'policy': {'bindings': [{'role': 'roles/iam.serviceAccountKeyAdmin',
11389
- 'members': [f'{account_type}:{email}']}]}}
11389
+ 'members': [f'{account_type}:{service_account}']}]}}
11390
11390
  maxRetries = 10
11391
- printEntityMessage([Ent.PROJECT, projectId, Ent.SVCACCT, email],
11392
- Msg.HAS_RIGHTS_TO_ROTATE_OWN_PRIVATE_KEY.format(email, service_account))
11391
+ kvList = [Ent.PROJECT, projectId, Ent.SVCACCT, service_account]
11392
+ printEntityMessage(kvList, Msg.GRANTING_RIGHTS_TO_ROTATE_ITS_OWN_PRIVATE_KEY.format('Granting'))
11393
11393
  for retry in range(1, maxRetries+1):
11394
11394
  try:
11395
11395
  callGAPI(iam.projects().serviceAccounts(), 'setIamPolicy',
11396
11396
  throwReasons=[GAPI.INVALID_ARGUMENT],
11397
11397
  resource=f'projects/{projectId}/serviceAccounts/{service_account}', body=body)
11398
+ printEntityMessage(kvList, Msg.GRANTING_RIGHTS_TO_ROTATE_ITS_OWN_PRIVATE_KEY.format('Granted'))
11398
11399
  return True
11399
11400
  except GAPI.invalidArgument as e:
11400
- entityActionFailedWarning([Ent.PROJECT, projectId, Ent.SVCACCT, service_account], str(e))
11401
+ entityActionFailedWarning(kvList, str(e))
11401
11402
  if 'does not exist' not in str(e) or retry == maxRetries:
11402
11403
  return False
11403
11404
  _waitForSvcAcctCompletion(retry)
11404
11405
  except Exception as e:
11405
- entityActionFailedWarning([Ent.PROJECT, projectId, Ent.SVCACCT, service_account], str(e))
11406
+ entityActionFailedWarning(kvList, str(e))
11406
11407
  return False
11407
11408
 
11408
11409
  def _createOauth2serviceJSON(httpObj, projectInfo, svcAcctInfo, create_key=True):
@@ -11420,6 +11421,7 @@ def _createOauth2serviceJSON(httpObj, projectInfo, svcAcctInfo, create_key=True)
11420
11421
  return False
11421
11422
  except GAPI.alreadyExists as e:
11422
11423
  entityActionFailedWarning([Ent.PROJECT, projectInfo['projectId'], Ent.SVCACCT, svcAcctInfo['name']], str(e))
11424
+ writeStderr(Msg.RERUN_THE_COMMAND_AND_SPECIFY_A_NEW_SANAME)
11423
11425
  return False
11424
11426
  GM.Globals[GM.SVCACCT_SCOPES_DEFINED] = False
11425
11427
  if create_key and not doProcessSvcAcctKeys(mode='retainexisting', iam=iam,
@@ -11428,7 +11430,7 @@ def _createOauth2serviceJSON(httpObj, projectInfo, svcAcctInfo, create_key=True)
11428
11430
  clientId=service_account['uniqueId']):
11429
11431
  return False
11430
11432
  sa_email = service_account['name'].rsplit('/', 1)[-1]
11431
- return _grantRotateRights(iam, projectInfo['projectId'], sa_email, sa_email)
11433
+ return _grantRotateRights(iam, projectInfo['projectId'], sa_email)
11432
11434
 
11433
11435
  def _createClientSecretsOauth2service(httpObj, login_hint, appInfo, projectInfo, svcAcctInfo, create_key=True):
11434
11436
  def _checkClientAndSecret(csHttpObj, client_id, client_secret):
@@ -11921,9 +11923,7 @@ def doUpdateProject():
11921
11923
  continue
11922
11924
  iam = getAPIService(API.IAM, httpObj)
11923
11925
  _getSvcAcctData() # needed to read in GM.OAUTH2SERVICE_JSON_DATA
11924
- _grantRotateRights(iam, projectId,
11925
- GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['client_email'],
11926
- GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['client_email'])
11926
+ _grantRotateRights(iam, projectId, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['client_email'])
11927
11927
  Ind.Decrement()
11928
11928
 
11929
11929
  # gam delete project [[admin] <EmailAddress>] [<ProjectIDEntity>]
@@ -12786,7 +12786,7 @@ def doUploadSvcAcctKeys():
12786
12786
  iam = getAPIService(API.IAM, httpObj)
12787
12787
  if doProcessSvcAcctKeys(mode='upload', iam=iam):
12788
12788
  sa_email = GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['client_email']
12789
- _grantRotateRights(iam, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['project_id'], sa_email, sa_email)
12789
+ _grantRotateRights(iam, GM.Globals[GM.OAUTH2SERVICE_JSON_DATA]['project_id'], sa_email)
12790
12790
  sys.stdout.write(Msg.YOUR_GAM_PROJECT_IS_CREATED_AND_READY_TO_USE)
12791
12791
 
12792
12792
  # gam delete sakeys <ServiceAccountKeyList>
@@ -72,7 +72,7 @@ Please go to:
72
72
  24. Paste it at the "Enter your Client Secret: " prompt in your terminal
73
73
  25. Press return/enter in your terminal
74
74
  26. Switch back to the browser
75
- 27. Click "CANCEL"
75
+ 27. Click "OK"
76
76
  28. These steps are complete
77
77
  '''
78
78
  ENTER_YOUR_CLIENT_ID = '\nEnter your Client ID: '
@@ -287,6 +287,7 @@ GAM_OUT_OF_MEMORY = 'GAM has run out of memory. If this is a large Google Worksp
287
287
  GENERATING_NEW_PRIVATE_KEY = 'Generating new private key'
288
288
  GETTING = 'Getting'
289
289
  GETTING_ALL = 'Getting all'
290
+ GRANTING_RIGHTS_TO_ROTATE_ITS_OWN_PRIVATE_KEY = '{0} rights to rotate its own private key'
290
291
  GOOGLE_DELEGATION_ERROR = 'Google delegation error, delegator and delegate both exist and are valid for delegation'
291
292
  GOT = 'Got'
292
293
  GROUP_MAPS_TO_MULTIPLE_OUS = 'File: {0}, Group: {1} references multiple OUs: {2}'
@@ -294,13 +295,12 @@ GROUP_MAPS_TO_OU_INVALID_ROW = 'File: {0}, Invalid row, must contain non-blank <
294
295
  GUARDIAN_INVITATION_STATUS_NOT_PENDING = 'Guardian invitation status is not PENDING'
295
296
  HAS_CHILD_ORGS = 'Has child {0}'
296
297
  HAS_INVALID_FORMAT = '{0}: {1}, Has invalid format'
297
- HAS_RIGHTS_TO_ROTATE_OWN_PRIVATE_KEY = 'Giving account {0} rights to rotate {1} private key'
298
298
  HEADER_NOT_FOUND_IN_CSV_HEADERS = 'Header "{0}" not found in CSV headers of "{1}".'
299
299
  HELP_SYNTAX = 'Help: Syntax in file {0}\n'
300
300
  HELP_WIKI = 'Help: Documentation is at {0}\n'
301
301
  IGNORED = 'Ignored'
302
302
  INSTRUCTIONS_CLIENT_SECRETS_JSON = 'Please run\n\ngam create|use project\ngam oauth create\n\nto create and authorize a Client account.\n'
303
- INSTRUCTIONS_OAUTH2SERVICE_JSON = 'Please run\n\ngam create|use project\ngam user <user> check serviceaccount\n\nto create and authorize a Service account.\n'
303
+ INSTRUCTIONS_OAUTH2SERVICE_JSON = 'Please run\n\ngam create|use project\ngam user <user> update serviceaccount\n\nto create and authorize a Service account.\n'
304
304
  INSUFFICIENT_PERMISSIONS_TO_PERFORM_TASK = 'Insufficient permissions to perform this task'
305
305
  INTER_BATCH_WAIT_INCREASED = 'inter_batch_wait increased to {0:.2f}'
306
306
  INVALID = 'Invalid'
@@ -468,6 +468,10 @@ REFUSING_TO_DEPROVISION_DEVICES = 'Refusing to deprovision {0} devices because a
468
468
  REPLY_TO_CUSTOM_REQUIRES_EMAIL_ADDRESS = 'replyto REPLY_TO_CUSTOM requires customReplyTo <EmailAddress>'
469
469
  REQUEST_COMPLETED_NO_FILES = 'Request completed but no results/files were returned, try requesting again'
470
470
  REQUEST_NOT_COMPLETE = 'Request needs to be completed before downloading, current status is: {0}'
471
+ RERUN_THE_COMMAND_AND_SPECIFY_A_NEW_SANAME = """
472
+ Re-run the command specify a new service account name with: saname <ServiceAccountName>
473
+ See: https://github.com/GAM-team/GAM/wiki/Authorization#advanced-use
474
+ """
471
475
  RESOURCE_CAPACITY_FLOOR_REQUIRED = 'Options "capacity <Number>" (<Number> > 0) and "floor <String>" required'
472
476
  RESOURCE_FLOOR_REQUIRED = 'Option "floor <String>" required'
473
477
  RESULTS_TOO_LARGE_FOR_GOOGLE_SPREADSHEET = 'Results are too large for Google Spreadsheets. Uploading as a regular CSV file.'
@@ -8,7 +8,7 @@ GAM installation script.
8
8
  OPTIONS:
9
9
  -h show help.
10
10
  -d Directory where gam folder will be installed. Default is \$HOME/bin/
11
- -a Architecture to install (i386, x86_64, x86_64_legacy, arm, arm64). Default is to detect your arch with "uname -m".
11
+ -a Architecture to install (x86_64, arm64). Default is to detect your arch with "uname -m".
12
12
  -o OS we are running (linux, macos). Default is to detect your OS with "uname -s".
13
13
  -b OS version. Default is to detect on MacOS and Linux.
14
14
  -l Just upgrade GAM to latest version. Skips project creation and auth.
@@ -194,7 +194,7 @@ fi
194
194
  case $gamos in
195
195
  [lL]inux)
196
196
  gamos="linux"
197
- download_urls=$(echo -e "$download_urls" | grep "\-linux-")
197
+ download_urls=$(echo -e "$download_urls" | grep -e "-linux-")
198
198
  if [ "$osversion" == "" ]; then
199
199
  this_glibc_ver=$(ldd --version | awk '/ldd/{print $NF}')
200
200
  else
@@ -203,7 +203,7 @@ case $gamos in
203
203
  echo "This Linux distribution uses glibc $this_glibc_ver"
204
204
  case $gamarch in
205
205
  x86_64)
206
- download_urls=$(echo -e "$download_urls" | grep "\-x86_64-")
206
+ download_urls=$(echo -e "$download_urls" | grep -e "-x86_64-")
207
207
  gam_x86_64_glibc_vers=$(echo -e "$download_urls" | \
208
208
  grep --only-matching 'glibc[0-9\.]*\.tar\.xz$' \
209
209
  | cut -c 6-9 )
@@ -218,7 +218,7 @@ case $gamos in
218
218
  download_url=$(echo -e "$download_urls" | grep "$useglibc")
219
219
  ;;
220
220
  arm|arm64|aarch64)
221
- download_urls=$(echo -e "$download_urls" | grep "\-aarch64-")
221
+ download_urls=$(echo -e "$download_urls" | grep -e "-arm64-\|-aarch64-")
222
222
  gam_arm64_glibc_vers=$(echo -e "$download_urls" | \
223
223
  grep --only-matching 'glibc[0-9\.]*\.tar\.xz$' | \
224
224
  cut -c 6-9)
@@ -243,13 +243,13 @@ case $gamos in
243
243
  # override osversion only if it wasn't set by cli arguments
244
244
  osversion=${osversion:-${currentversion}}
245
245
  # override osversion only if it wasn't set by cli arguments
246
- download_urls=$(echo -e "$download_urls" | grep "\-macos")
246
+ download_urls=$(echo -e "$download_urls" | grep -e "-macos")
247
247
  case $gamarch in
248
248
  x86_64)
249
- archgrep="\-x86_64"
249
+ archgrep="-x86_64"
250
250
  ;;
251
251
  arm|arm64|aarch64)
252
- archgrep="\-aarch64"
252
+ archgrep="-arm64\|-aarch64"
253
253
  ;;
254
254
  *)
255
255
  echo_red "ERROR: this installer currently only supports x86_64 and arm64 MacOS. Looks like you're running on ${gamarch}. Exiting."
@@ -257,13 +257,13 @@ case $gamos in
257
257
  ;;
258
258
  esac
259
259
  gam_macos_urls=$(echo -e "$download_urls" | \
260
- grep "$archgrep")
260
+ grep -e $archgrep)
261
261
  versionless_urls=$(echo -e "$gam_macos_urls" | \
262
- grep "\-macos-")
262
+ grep -e "-macos-")
263
263
  if [ "$versionless_urls" == "" ]; then
264
264
  # versions after 7.00.38 include MacOS version info
265
265
  gam_macos_vers=$(echo -e "$gam_macos_urls" | \
266
- grep --only-matching '\-macos[0-9\.]*' | \
266
+ grep --only-matching -e '-macos[0-9\.]*' | \
267
267
  cut -c 7-10)
268
268
  for gam_mac_ver in $gam_macos_vers; do
269
269
  if version_gt $currentversion $gam_mac_ver; then
@@ -281,13 +281,12 @@ case $gamos in
281
281
  case $gamarch in
282
282
  x86_64)
283
283
  minimum_version=13
284
- download_url=$(echo -e "$download_urls" | grep "\-x86_64")
285
284
  ;;
286
285
  arm|arm64|aarch64)
287
- download_url=$(echo -e "$download_urls" | grep "\-aarch64")
288
286
  minimum_version=14
289
287
  ;;
290
288
  esac
289
+ download_url=$(echo -e "$download_urls" | grep -e $archgrep)
291
290
  if version_gt "$osversion" "$minimum_version"; then
292
291
  echo_green "You are running MacOS ${osversion}, good. Downloading GAM from ${download_url}."
293
292
  else
@@ -304,7 +303,7 @@ case $gamos in
304
303
  gamos="windows"
305
304
  echo "You are running Windows"
306
305
  download_url=$(echo -e "$download_urls" | \
307
- grep "\-windows-" | \
306
+ grep -e "-windows-" | \
308
307
  grep ".zip")
309
308
  ;;
310
309
  *)
@@ -10,5 +10,6 @@ httplib2>=0.22.0
10
10
  lxml
11
11
  passlib>=1.7.4
12
12
  pathvalidate
13
+ pyscard==2.2.1
13
14
  python-dateutil
14
15
  yubikey-manager[yubikey]>=5.6.1
@@ -35,6 +35,7 @@ install_requires =
35
35
  lxml
36
36
  passlib >= 1.7.4
37
37
  pathvalidate
38
+ pyscard==2.2.1
38
39
  python-dateutil
39
40
  yubikey-manager >= 5.0
40
41
 
@@ -283,7 +283,7 @@ You can skip these steps if you know that untrusted third-party apps are allowed
283
283
  * `<ServiceAccountDisplayName>` - `<ProjectName>`
284
284
  * `<ServiceAccountDescription>` - `<ServiceAccountDisplayName>`
285
285
 
286
- ### Basic
286
+ ### Basic Create
287
287
  Create a project with default values for the project and service account.
288
288
  ```
289
289
  gam create project [<EmailAddress>] [<ProjectID>]
@@ -291,7 +291,7 @@ gam create project [<EmailAddress>] [<ProjectID>]
291
291
  * `<EmailAddress>` - Google Workspace admin/GCP project manager; if omitted, you will be prompted for the address
292
292
  * `<ProjectID>` - A new Google project ID; if omitted, a default value will be used
293
293
 
294
- ### Advanced
294
+ ### Advanced Create
295
295
  Create a project with user-specified values for the project and service account.
296
296
  ```
297
297
  gam create project [admin <EmailAddress>] [project <ProjectID>]
@@ -326,7 +326,7 @@ Use an existing project to create and download two files: `client_secrets.json`
326
326
  * `<ServiceAccountDisplayName>` - `<ProjectName>`
327
327
  * `<ServiceAccountDescription>` - `<ServiceAccountDisplayName>`
328
328
 
329
- ### Basic
329
+ ### Basic Use
330
330
  Use an existing uninitialized/uncredentialed project and configure it to be a GAM project; this typically used when
331
331
  the GCP administrators have created a basic project because project creation is not available for most users.
332
332
 
@@ -338,12 +338,13 @@ gam use project [<EmailAddress>] [project <ProjectID>]
338
338
  * `<EmailAddress>` - Google Workspace admin/GCP project manager; if omitted, you will be prompted for the address
339
339
  * `<ProjectID>` - An existing Google project ID; if omitted, you will be prompted for the ID
340
340
 
341
- ### Advanced
341
+ ### Advanced Use
342
342
  Use an existing project with user-specified values for the service account. If the project is already
343
343
  a GAM project you must use `saname <ServiceAccountName>` as the existing service account information
344
344
  can not be re-downloaded.
345
345
  ```
346
346
  gam use project [admin <EmailAddress>] [project <ProjectID>]
347
+ [appname <String>] [supportemail <EmailAddress>]
347
348
  [saname <ServiceAccountName>] [sadisplayname <ServiceAccountDisplayName>]
348
349
  [sadescription <ServiceAccountDescription>]
349
350
  [(algorithm KEY_ALG_RSA_1024|KEY_ALG_RSA_2048)|