gam7 7.25.0__tar.gz → 7.26.0__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 (304) hide show
  1. {gam7-7.25.0 → gam7-7.26.0}/.github/workflows/build.yml +4 -4
  2. {gam7-7.25.0 → gam7-7.26.0}/PKG-INFO +2 -2
  3. {gam7-7.25.0 → gam7-7.26.0}/pyproject.toml +1 -1
  4. {gam7-7.25.0 → gam7-7.26.0}/src/GamUpdate.txt +13 -0
  5. {gam7-7.25.0 → gam7-7.26.0}/src/gam/__init__.py +41 -11
  6. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glcfg.py +4 -0
  7. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glglobals.py +3 -0
  8. gam7-7.26.0/wiki/Cloud-Identity-Policies.md +137 -0
  9. {gam7-7.25.0 → gam7-7.26.0}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +12 -6
  10. {gam7-7.25.0 → gam7-7.26.0}/wiki/GamUpdates.md +28 -0
  11. {gam7-7.25.0 → gam7-7.26.0}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +4 -4
  12. {gam7-7.25.0 → gam7-7.26.0}/wiki/Todrive.md +2 -2
  13. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Chat.md +4 -4
  14. {gam7-7.25.0 → gam7-7.26.0}/wiki/Version-and-Help.md +10 -10
  15. {gam7-7.25.0 → gam7-7.26.0}/wiki/gam.cfg.md +5 -0
  16. gam7-7.25.0/wiki/Cloud-Identity-Policies.md +0 -416
  17. {gam7-7.25.0 → gam7-7.26.0}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  18. {gam7-7.25.0 → gam7-7.26.0}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  19. {gam7-7.25.0 → gam7-7.26.0}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  20. {gam7-7.25.0 → gam7-7.26.0}/.github/ISSUE_TEMPLATE.txt +0 -0
  21. {gam7-7.25.0 → gam7-7.26.0}/.github/actions/decrypt.sh +0 -0
  22. {gam7-7.25.0 → gam7-7.26.0}/.github/actions/entitlements.plist +0 -0
  23. {gam7-7.25.0 → gam7-7.26.0}/.github/actions/package_exclusions.txt +0 -0
  24. {gam7-7.25.0 → gam7-7.26.0}/.github/stale.yml +0 -0
  25. {gam7-7.25.0 → gam7-7.26.0}/.github/workflows/codeql-analysis.yml +0 -0
  26. {gam7-7.25.0 → gam7-7.26.0}/.github/workflows/get-cacerts.yml +0 -0
  27. {gam7-7.25.0 → gam7-7.26.0}/.github/workflows/pushwiki.yml +0 -0
  28. {gam7-7.25.0 → gam7-7.26.0}/.github/workflows/pypi.yml +0 -0
  29. {gam7-7.25.0 → gam7-7.26.0}/LICENSE +0 -0
  30. {gam7-7.25.0 → gam7-7.26.0}/README.md +0 -0
  31. {gam7-7.25.0 → gam7-7.26.0}/src/.gitignore +0 -0
  32. {gam7-7.25.0 → gam7-7.26.0}/src/GamCommands.txt +0 -0
  33. {gam7-7.25.0 → gam7-7.26.0}/src/LICENSE +0 -0
  34. {gam7-7.25.0 → gam7-7.26.0}/src/README.md +0 -0
  35. {gam7-7.25.0 → gam7-7.26.0}/src/callgam.py +0 -0
  36. {gam7-7.25.0 → gam7-7.26.0}/src/gam/__main__.py +0 -0
  37. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/__init__.py +0 -0
  38. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/auth.py +0 -0
  39. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/client.py +0 -0
  40. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/core.py +0 -0
  41. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/data.py +0 -0
  42. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/http.py +0 -0
  43. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/http_core.py +0 -0
  44. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/http_interface.py +0 -0
  45. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/mock_http.py +0 -0
  46. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/mock_http_core.py +0 -0
  47. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/mock_service.py +0 -0
  48. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/service.py +0 -0
  49. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/token_store.py +0 -0
  50. {gam7-7.25.0 → gam7-7.26.0}/src/gam/atom/url.py +0 -0
  51. {gam7-7.25.0 → gam7-7.26.0}/src/gam/cacerts.pem +0 -0
  52. {gam7-7.25.0 → gam7-7.26.0}/src/gam/cbcm-v1.1beta1.json +0 -0
  53. {gam7-7.25.0 → gam7-7.26.0}/src/gam/contactdelegation-v1.json +0 -0
  54. {gam7-7.25.0 → gam7-7.26.0}/src/gam/datastudio-v1.json +0 -0
  55. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/__init__.py +0 -0
  56. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glaction.py +0 -0
  57. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glapi.py +0 -0
  58. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glclargs.py +0 -0
  59. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glentity.py +0 -0
  60. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glgapi.py +0 -0
  61. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glgdata.py +0 -0
  62. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glindent.py +0 -0
  63. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glmsgs.py +0 -0
  64. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glskus.py +0 -0
  65. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/gluprop.py +0 -0
  66. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/glverlibs.py +0 -0
  67. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gamlib/yubikey.py +0 -0
  68. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/__init__.py +0 -0
  69. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/alt/__init__.py +0 -0
  70. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/alt/app_engine.py +0 -0
  71. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/alt/appengine.py +0 -0
  72. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/apps/__init__.py +0 -0
  73. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/apps/audit/__init__.py +0 -0
  74. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/apps/audit/service.py +0 -0
  75. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  76. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/apps/contacts/service.py +0 -0
  77. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/apps/service.py +0 -0
  78. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/service.py +0 -0
  79. {gam7-7.25.0 → gam7-7.26.0}/src/gam/gdata/urlfetch.py +0 -0
  80. {gam7-7.25.0 → gam7-7.26.0}/src/gam/meet-v2beta.json +0 -0
  81. {gam7-7.25.0 → gam7-7.26.0}/src/gam/serviceaccountlookup-v1.json +0 -0
  82. {gam7-7.25.0 → gam7-7.26.0}/src/gam-install.sh +0 -0
  83. {gam7-7.25.0 → gam7-7.26.0}/src/gam-setup.bat +0 -0
  84. {gam7-7.25.0 → gam7-7.26.0}/src/gam.exe.manifest +0 -0
  85. {gam7-7.25.0 → gam7-7.26.0}/src/gam.py +0 -0
  86. {gam7-7.25.0 → gam7-7.26.0}/src/gam.spec +0 -0
  87. {gam7-7.25.0 → gam7-7.26.0}/src/gam.wxs +0 -0
  88. {gam7-7.25.0 → gam7-7.26.0}/src/license.rtf +0 -0
  89. {gam7-7.25.0 → gam7-7.26.0}/src/tools/a_atleast_b.py +0 -0
  90. {gam7-7.25.0 → gam7-7.26.0}/src/tools/gen-wix-xml-filelist.py +0 -0
  91. {gam7-7.25.0 → gam7-7.26.0}/src/tools/hooks/hook-googleapiclient.model.py +0 -0
  92. {gam7-7.25.0 → gam7-7.26.0}/src/tools/hooks/hook-httplib2.py +0 -0
  93. {gam7-7.25.0 → gam7-7.26.0}/src/tools/mkGamRef.py +0 -0
  94. {gam7-7.25.0 → gam7-7.26.0}/src/tools/openssl.props +0 -0
  95. {gam7-7.25.0 → gam7-7.26.0}/src/tools/ssd.mjs +0 -0
  96. {gam7-7.25.0 → gam7-7.26.0}/src/version_info.txt.in +0 -0
  97. {gam7-7.25.0 → gam7-7.26.0}/wiki/00scratch.md +0 -0
  98. {gam7-7.25.0 → gam7-7.26.0}/wiki/Addresses.md +0 -0
  99. {gam7-7.25.0 → gam7-7.26.0}/wiki/Administrators.md +0 -0
  100. {gam7-7.25.0 → gam7-7.26.0}/wiki/Alert-Center.md +0 -0
  101. {gam7-7.25.0 → gam7-7.26.0}/wiki/Aliases.md +0 -0
  102. {gam7-7.25.0 → gam7-7.26.0}/wiki/Authorization.md +0 -0
  103. {gam7-7.25.0 → gam7-7.26.0}/wiki/BNF-Syntax.md +0 -0
  104. {gam7-7.25.0 → gam7-7.26.0}/wiki/Basic-Items.md +0 -0
  105. {gam7-7.25.0 → gam7-7.26.0}/wiki/Bulk-Processing.md +0 -0
  106. {gam7-7.25.0 → gam7-7.26.0}/wiki/Business-Account-Management.md +0 -0
  107. {gam7-7.25.0 → gam7-7.26.0}/wiki/CSV-Input-Filtering.md +0 -0
  108. {gam7-7.25.0 → gam7-7.26.0}/wiki/CSV-Output-Filtering.md +0 -0
  109. {gam7-7.25.0 → gam7-7.26.0}/wiki/CSV-Special-Characters.md +0 -0
  110. {gam7-7.25.0 → gam7-7.26.0}/wiki/Calendars-Access.md +0 -0
  111. {gam7-7.25.0 → gam7-7.26.0}/wiki/Calendars-Events.md +0 -0
  112. {gam7-7.25.0 → gam7-7.26.0}/wiki/Calendars.md +0 -0
  113. {gam7-7.25.0 → gam7-7.26.0}/wiki/Chat-Bot-Setup-Use.md +0 -0
  114. {gam7-7.25.0 → gam7-7.26.0}/wiki/Chrome-AUE-Counts.md +0 -0
  115. {gam7-7.25.0 → gam7-7.26.0}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  116. {gam7-7.25.0 → gam7-7.26.0}/wiki/Chrome-Installed-Apps.md +0 -0
  117. {gam7-7.25.0 → gam7-7.26.0}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  118. {gam7-7.25.0 → gam7-7.26.0}/wiki/Chrome-Policies.md +0 -0
  119. {gam7-7.25.0 → gam7-7.26.0}/wiki/Chrome-Printers.md +0 -0
  120. {gam7-7.25.0 → gam7-7.26.0}/wiki/Chrome-Profile-Management.md +0 -0
  121. {gam7-7.25.0 → gam7-7.26.0}/wiki/Chrome-Version-Counts.md +0 -0
  122. {gam7-7.25.0 → gam7-7.26.0}/wiki/Chrome-Version-History.md +0 -0
  123. {gam7-7.25.0 → gam7-7.26.0}/wiki/ChromeOS-Devices.md +0 -0
  124. {gam7-7.25.0 → gam7-7.26.0}/wiki/Classroom-Courses.md +0 -0
  125. {gam7-7.25.0 → gam7-7.26.0}/wiki/Classroom-Guardians.md +0 -0
  126. {gam7-7.25.0 → gam7-7.26.0}/wiki/Classroom-Invitations.md +0 -0
  127. {gam7-7.25.0 → gam7-7.26.0}/wiki/Classroom-Membership.md +0 -0
  128. {gam7-7.25.0 → gam7-7.26.0}/wiki/Classroom-StudentGroups.md +0 -0
  129. {gam7-7.25.0 → gam7-7.26.0}/wiki/Cloud-Channel.md +0 -0
  130. {gam7-7.25.0 → gam7-7.26.0}/wiki/Cloud-Identity-Devices.md +0 -0
  131. {gam7-7.25.0 → gam7-7.26.0}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  132. {gam7-7.25.0 → gam7-7.26.0}/wiki/Cloud-Identity-Groups.md +0 -0
  133. {gam7-7.25.0 → gam7-7.26.0}/wiki/Cloud-Storage.md +0 -0
  134. {gam7-7.25.0 → gam7-7.26.0}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  135. {gam7-7.25.0 → gam7-7.26.0}/wiki/Collections-of-Items.md +0 -0
  136. {gam7-7.25.0 → gam7-7.26.0}/wiki/Collections-of-Users.md +0 -0
  137. {gam7-7.25.0 → gam7-7.26.0}/wiki/Command-Line-Parsing.md +0 -0
  138. {gam7-7.25.0 → gam7-7.26.0}/wiki/Command-Logging-Progress.md +0 -0
  139. {gam7-7.25.0 → gam7-7.26.0}/wiki/Context-Aware-Access-Levels.md +0 -0
  140. {gam7-7.25.0 → gam7-7.26.0}/wiki/Customer.md +0 -0
  141. {gam7-7.25.0 → gam7-7.26.0}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  142. {gam7-7.25.0 → gam7-7.26.0}/wiki/Domain-SharedContacts.md +0 -0
  143. {gam7-7.25.0 → gam7-7.26.0}/wiki/Domains-Verification.md +0 -0
  144. {gam7-7.25.0 → gam7-7.26.0}/wiki/Domains.md +0 -0
  145. {gam7-7.25.0 → gam7-7.26.0}/wiki/Downloads-Installs.md +0 -0
  146. {gam7-7.25.0 → gam7-7.26.0}/wiki/Drive-File-Selection.md +0 -0
  147. {gam7-7.25.0 → gam7-7.26.0}/wiki/Drive-Items.md +0 -0
  148. {gam7-7.25.0 → gam7-7.26.0}/wiki/Drive-REST-API-v3.md +0 -0
  149. {gam7-7.25.0 → gam7-7.26.0}/wiki/Email-Audit-Monitor.md +0 -0
  150. {gam7-7.25.0 → gam7-7.26.0}/wiki/Find-File-Owner.md +0 -0
  151. {gam7-7.25.0 → gam7-7.26.0}/wiki/GAM-Public-Chat-Room.md +0 -0
  152. {gam7-7.25.0 → gam7-7.26.0}/wiki/GAM-Release-Process.md +0 -0
  153. {gam7-7.25.0 → gam7-7.26.0}/wiki/GAM-Return-Codes.md +0 -0
  154. {gam7-7.25.0 → gam7-7.26.0}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  155. {gam7-7.25.0 → gam7-7.26.0}/wiki/GAM7-FAQ.md +0 -0
  156. {gam7-7.25.0 → gam7-7.26.0}/wiki/GAM7-on-Android-Devices.md +0 -0
  157. {gam7-7.25.0 → gam7-7.26.0}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  158. {gam7-7.25.0 → gam7-7.26.0}/wiki/Global-Address-List.md +0 -0
  159. {gam7-7.25.0 → gam7-7.26.0}/wiki/Google-Data-Transfers.md +0 -0
  160. {gam7-7.25.0 → gam7-7.26.0}/wiki/Google-Network-Addresses.md +0 -0
  161. {gam7-7.25.0 → gam7-7.26.0}/wiki/Groups-Membership.md +0 -0
  162. {gam7-7.25.0 → gam7-7.26.0}/wiki/Groups.md +0 -0
  163. {gam7-7.25.0 → gam7-7.26.0}/wiki/HTTPS-Proxy.md +0 -0
  164. {gam7-7.25.0 → gam7-7.26.0}/wiki/Home.md +0 -0
  165. {gam7-7.25.0 → gam7-7.26.0}/wiki/How-to-Install-GAM7.md +0 -0
  166. {gam7-7.25.0 → gam7-7.26.0}/wiki/How-to-Uninstall-GAM7.md +0 -0
  167. {gam7-7.25.0 → gam7-7.26.0}/wiki/How-to-Update-GAM7.md +0 -0
  168. {gam7-7.25.0 → gam7-7.26.0}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  169. {gam7-7.25.0 → gam7-7.26.0}/wiki/Inbound-SSO.md +0 -0
  170. {gam7-7.25.0 → gam7-7.26.0}/wiki/Install-GAM-as-Python-Library.md +0 -0
  171. {gam7-7.25.0 → gam7-7.26.0}/wiki/Licenses.md +0 -0
  172. {gam7-7.25.0 → gam7-7.26.0}/wiki/List-Items.md +0 -0
  173. {gam7-7.25.0 → gam7-7.26.0}/wiki/List.md +0 -0
  174. {gam7-7.25.0 → gam7-7.26.0}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
  175. {gam7-7.25.0 → gam7-7.26.0}/wiki/Mobile-Devices.md +0 -0
  176. {gam7-7.25.0 → gam7-7.26.0}/wiki/Organizational-Units.md +0 -0
  177. {gam7-7.25.0 → gam7-7.26.0}/wiki/Other-Resources.md +0 -0
  178. {gam7-7.25.0 → gam7-7.26.0}/wiki/Permission-Matches.md +0 -0
  179. {gam7-7.25.0 → gam7-7.26.0}/wiki/Python-Regular-Expressions.md +0 -0
  180. {gam7-7.25.0 → gam7-7.26.0}/wiki/README.md +0 -0
  181. {gam7-7.25.0 → gam7-7.26.0}/wiki/Rclone.md +0 -0
  182. {gam7-7.25.0 → gam7-7.26.0}/wiki/Reports.md +0 -0
  183. {gam7-7.25.0 → gam7-7.26.0}/wiki/Reseller.md +0 -0
  184. {gam7-7.25.0 → gam7-7.26.0}/wiki/Resources.md +0 -0
  185. {gam7-7.25.0 → gam7-7.26.0}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  186. {gam7-7.25.0 → gam7-7.26.0}/wiki/SSL-Root-CA-Certificates.md +0 -0
  187. {gam7-7.25.0 → gam7-7.26.0}/wiki/Schemas.md +0 -0
  188. {gam7-7.25.0 → gam7-7.26.0}/wiki/Scripts.md +0 -0
  189. {gam7-7.25.0 → gam7-7.26.0}/wiki/Send-Email.md +0 -0
  190. {gam7-7.25.0 → gam7-7.26.0}/wiki/Shared-Drives.md +0 -0
  191. {gam7-7.25.0 → gam7-7.26.0}/wiki/Sites.md +0 -0
  192. {gam7-7.25.0 → gam7-7.26.0}/wiki/Tag-Replace.md +0 -0
  193. {gam7-7.25.0 → gam7-7.26.0}/wiki/Unmanaged-Accounts.md +0 -0
  194. {gam7-7.25.0 → gam7-7.26.0}/wiki/Upgrade-Benefits.md +0 -0
  195. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Analytics-Admin.md +0 -0
  196. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Application-Specific-Passwords.md +0 -0
  197. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Backup-Verification-Codes.md +0 -0
  198. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Calendars-Access.md +0 -0
  199. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Calendars-Events.md +0 -0
  200. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Calendars.md +0 -0
  201. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Classification-Labels.md +0 -0
  202. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Classroom-Profile.md +0 -0
  203. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Contacts-Delegates.md +0 -0
  204. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Contacts.md +0 -0
  205. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Deprovision.md +0 -0
  206. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Activity-Settings.md +0 -0
  207. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Cleanup.md +0 -0
  208. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Comments.md +0 -0
  209. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Copy-Move.md +0 -0
  210. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Files-Display.md +0 -0
  211. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Files-Manage.md +0 -0
  212. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Orphans.md +0 -0
  213. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Ownership.md +0 -0
  214. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Permissions.md +0 -0
  215. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Query.md +0 -0
  216. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Revisions.md +0 -0
  217. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Shortcuts.md +0 -0
  218. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Drive-Transfer.md +0 -0
  219. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Forms.md +0 -0
  220. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Gmail-CSE.md +0 -0
  221. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Gmail-Delegates.md +0 -0
  222. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Gmail-Filters.md +0 -0
  223. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Gmail-Forwarding.md +0 -0
  224. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Gmail-Labels.md +0 -0
  225. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  226. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Gmail-Profile.md +0 -0
  227. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Gmail-S-MIME.md +0 -0
  228. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  229. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Gmail-Settings.md +0 -0
  230. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Group-Membership.md +0 -0
  231. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Keep-Notes.md +0 -0
  232. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Looker-Studio.md +0 -0
  233. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Meet.md +0 -0
  234. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-People-Contacts-Profiles.md +0 -0
  235. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Photo.md +0 -0
  236. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Profile-Photo.md +0 -0
  237. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Profile-Sharing.md +0 -0
  238. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Shared-Drives.md +0 -0
  239. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  240. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Spreadsheets.md +0 -0
  241. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Tag-Manager.md +0 -0
  242. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Tasks.md +0 -0
  243. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Tokens.md +0 -0
  244. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-Web-Resources-and-Sites.md +0 -0
  245. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users-YouTube.md +0 -0
  246. {gam7-7.25.0 → gam7-7.26.0}/wiki/Users.md +0 -0
  247. {gam7-7.25.0 → gam7-7.26.0}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  248. {gam7-7.25.0 → gam7-7.26.0}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  249. {gam7-7.25.0 → gam7-7.26.0}/wiki/Using-GAM7-with-keyless-authentication-Workload-Identity-Federation.md +0 -0
  250. {gam7-7.25.0 → gam7-7.26.0}/wiki/Vault-Takeout.md +0 -0
  251. {gam7-7.25.0 → gam7-7.26.0}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  252. {gam7-7.25.0 → gam7-7.26.0}/wiki/_Sidebar.md +0 -0
  253. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-AdminSettingsExamples.md +0 -0
  254. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Android-Installation.md +0 -0
  255. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-BulkOperations.md +0 -0
  256. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-CalendarExamples.md +0 -0
  257. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Chat-Bot.md +0 -0
  258. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Chrome-Browser-Management.md +0 -0
  259. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Chrome-OS-Installation.md +0 -0
  260. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Chrome-Policy-Settings.md +0 -0
  261. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Cloud-Identity-Groups.md +0 -0
  262. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Command-Reference-Calendar-Resources.md +0 -0
  263. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Command-Reference-Calendars.md +0 -0
  264. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Command-Reference-Definitions.md +0 -0
  265. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Command-Reference-Drive.md +0 -0
  266. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Command-Reference-Email.md +0 -0
  267. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Command-Reference-Group-Attributes.md +0 -0
  268. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Command-Reference-Groups.md +0 -0
  269. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Command-Reference-Users.md +0 -0
  270. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Context-Aware-Access-Levels.md +0 -0
  271. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  272. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-CreatingClientSecretsFile.md +0 -0
  273. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Custom-Schemas.md +0 -0
  274. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Data-Transfers.md +0 -0
  275. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-DomainVerification.md +0 -0
  276. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-ExamplesAccountAuditing.md +0 -0
  277. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-ExamplesCSV.md +0 -0
  278. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-ExamplesEmailSettings.md +0 -0
  279. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-ExamplesOrganizations.md +0 -0
  280. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-GAM-Discussion-Group.md +0 -0
  281. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  282. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-GAM-options-files.md +0 -0
  283. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-GAM-with--minimal-GCP-rights.md +0 -0
  284. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-GAM3CSVListings.md +0 -0
  285. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-GAM3DirectoryCommands.md +0 -0
  286. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-GAM3GroupSettings.md +0 -0
  287. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Google-Vault---Takeout-Commands.md +0 -0
  288. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-GoogleDriveManagement.md +0 -0
  289. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Grouping-18-or-Older-Users.md +0 -0
  290. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Home.md +0 -0
  291. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  292. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Inbound-SSO-Settings.md +0 -0
  293. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-LicenseExamples.md +0 -0
  294. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Managing-Admins.md +0 -0
  295. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Managing-CloudPrint-Printers.md +0 -0
  296. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Managing-Devices.md +0 -0
  297. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Managing-Google-Classroom.md +0 -0
  298. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-OAuthKeyManagement.md +0 -0
  299. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Printers.md +0 -0
  300. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-ResellerCommands.md +0 -0
  301. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-SecurityExamples.md +0 -0
  302. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-UnmanagedUsersExamples.md +0 -0
  303. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  304. {gam7-7.25.0 → gam7-7.26.0}/wiki/legacy/l-_Footer.md +0 -0
@@ -126,16 +126,16 @@ jobs:
126
126
  name: Test Python 3.12
127
127
  - os: ubuntu-24.04
128
128
  goal: test
129
- python: "3.14-dev"
129
+ python: "3.15-dev"
130
130
  freethreaded: false
131
131
  jid: 17
132
- name: Test Python 3.14-dev
132
+ name: Test Python 3.15-dev
133
133
  - os: ubuntu-24.04
134
134
  goal: test
135
- python: "3.14-dev"
135
+ python: "3.14"
136
136
  freethreaded: true
137
137
  jid: 18
138
- name: Test Python 3.14-dev freethread
138
+ name: Test Python 3.14 freethread
139
139
 
140
140
  steps:
141
141
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.25.0
3
+ Version: 7.26.0
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
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
- Requires-Python: >=3.9
20
+ Requires-Python: >=3.10
21
21
  Requires-Dist: arrow>=1.3.0
22
22
  Requires-Dist: chardet>=5.2.0
23
23
  Requires-Dist: cryptography>=44.0.2
@@ -27,7 +27,7 @@ dependencies = [
27
27
  ]
28
28
  description = "CLI tool to manage Google Workspace"
29
29
  readme = "README.md"
30
- requires-python = ">=3.9"
30
+ requires-python = ">=3.10"
31
31
  classifiers = [
32
32
  "Programming Language :: Python :: 3",
33
33
  "Programming Language :: Python :: 3 :: Only",
@@ -1,3 +1,16 @@
1
+ 7.26.00
2
+
3
+ Added `debug_redaction` Boolean variable to `gam.cfg`. When True, the default,
4
+ sensitive data like access/refresh tokens, client secret and authorization codes
5
+ are redacted from debug output. This allows you to post debug output without
6
+ compromising your account information. Even with debug redaction,
7
+ anything shared publicly should be double-checked for sensitive content.
8
+
9
+ 7.25.01
10
+
11
+ Fixed bug in `gam config timezone <String>` to handle timezone abbreviations correctly;
12
+ they were incorrectly shifted to lowercase.
13
+
1
14
  7.25.00
2
15
 
3
16
  Removed a capabilty added in 7.24.00 that allowed reading command data from Google Docs and Sheets
@@ -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.25.00'
28
+ __version__ = '7.26.00'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -49,7 +49,7 @@ from email.policy import SMTP as policySMTP
49
49
  import hashlib
50
50
  from html.entities import name2codepoint
51
51
  from html.parser import HTMLParser
52
- import http.client as http_client
52
+ import http.client
53
53
  import importlib
54
54
  from importlib.metadata import version as lib_version
55
55
  import io
@@ -375,6 +375,37 @@ YUBIKEY_VALUE_ERROR_RC = 85
375
375
  YUBIKEY_MULTIPLE_CONNECTED_RC = 86
376
376
  YUBIKEY_NOT_FOUND_RC = 87
377
377
 
378
+ DEBUG_REDACTION_PATTERNS = [
379
+ # Positional patterns that redact sensitive credentials based on their location
380
+ (r'(Bearer\s+)\S+', r'\1*****'), # access tokens and JWTs in auth header
381
+ (r'([?&]refresh_token=)[^&]*', r'\1*****'), # refresh token URL parameter
382
+ (r'([?&]client_secret=)[^&]*', r'\1*****'), # client secret URL parameter
383
+ (r'([?&]key=)[^&]*', r'\1*****'), # API key URL parameter
384
+ (r'([?&]code=)[^&]*', r'\1*****'), # auth code URL parameter
385
+
386
+ # Pattern match patterns that redact sensitive credentials based on known credential pattern
387
+ (r'ya29.[0-9A-Za-z-_]+', '*****'), # Access token
388
+ (r'1%2F%2F[0-9A-Za-z-_]{100}|1%2F%2F[0-9A-Za-z-_]{64}|1%2F%2F[0-9A-Za-z-_]{43}', '*****'), # Refresh token
389
+ (r'4/[0-9A-Za-z-_]+', '*****'), # Auth code
390
+ (r'GOCSPX-[0-9a-zA-Z-_]{28}', '*****'), # Client secret
391
+ (r'AIza[0-9A-Za-z-_]{35}', '*****'), # API key
392
+ (r'eyJ[a-zA-Z0-9\-_]+\.eyJ[a-zA-Z0-9\-_]+\.[a-zA-Z0-9\-_]*', '*****'), # JWT
393
+ ]
394
+
395
+ def redactable_debug_print(*args):
396
+ processed_args = []
397
+ for arg in args:
398
+ if arg.startswith('b\''):
399
+ sbytes = arg[2:-1]
400
+ sbytes = bytes(sbytes, 'utf-8')
401
+ arg = sbytes.decode()
402
+ arg = arg.replace('\\r\\n', "\n ")
403
+ if GC.Values[GC.DEBUG_REDACTION]:
404
+ for pattern, replace in DEBUG_REDACTION_PATTERNS:
405
+ arg = re.sub(pattern, replace, arg)
406
+ processed_args.append(arg)
407
+ print(*processed_args)
408
+
378
409
  # Multiprocessing lock
379
410
  mplock = None
380
411
 
@@ -3716,12 +3747,12 @@ def SetGlobalVariables():
3716
3747
  return stringlist
3717
3748
 
3718
3749
  def _getCfgTimezone(sectionName, itemName):
3719
- value = _stripStringQuotes(GM.Globals[GM.PARSER].get(sectionName, itemName).lower())
3720
- if value in {'utc', 'z'}:
3750
+ value = _stripStringQuotes(GM.Globals[GM.PARSER].get(sectionName, itemName))
3751
+ if value.lower() in {'utc', 'z'}:
3721
3752
  GM.Globals[GM.CONVERT_TO_LOCAL_TIME] = False
3722
3753
  return arrow.now('utc').tzinfo
3723
3754
  GM.Globals[GM.CONVERT_TO_LOCAL_TIME] = True
3724
- if value == 'local':
3755
+ if value.lower() == 'local':
3725
3756
  return arrow.now(value).tzinfo
3726
3757
  try:
3727
3758
  return arrow.now(value).tzinfo
@@ -4124,6 +4155,8 @@ def SetGlobalVariables():
4124
4155
  GM.Globals[GM.OAUTH2_TXT_LOCK] = f'{GC.Values[GC.OAUTH2_TXT]}.lock'
4125
4156
  # Override httplib2 settings
4126
4157
  httplib2.debuglevel = GC.Values[GC.DEBUG_LEVEL]
4158
+ # Use our own print function for http.client so we can redact and cleanup
4159
+ http.client.print = redactable_debug_print
4127
4160
  # Reset global variables if required
4128
4161
  if prevExtraArgsTxt != GC.Values[GC.EXTRA_ARGS]:
4129
4162
  GM.Globals[GM.EXTRA_ARGS_LIST] = [('prettyPrint', GC.Values[GC.DEBUG_LEVEL] > 0)]
@@ -4775,7 +4808,7 @@ def getService(api, httpObj):
4775
4808
  waitOnFailure(n, triesLimit, INVALID_JSON_RC, str(e))
4776
4809
  continue
4777
4810
  systemErrorExit(INVALID_JSON_RC, str(e))
4778
- except (http_client.ResponseNotReady, OSError, googleapiclient.errors.HttpError) as e:
4811
+ except (http.client.ResponseNotReady, OSError, googleapiclient.errors.HttpError) as e:
4779
4812
  errMsg = f'Connection error: {str(e) or repr(e)}'
4780
4813
  if n != triesLimit:
4781
4814
  waitOnFailure(n, triesLimit, SOCKET_ERROR_RC, errMsg)
@@ -4810,7 +4843,6 @@ def defaultSvcAcctScopes():
4810
4843
  saScopes[scope['api']].append(scope['scope'])
4811
4844
  else:
4812
4845
  saScopes[scope['api']].extend(scope['scope'])
4813
- saScopes[API.DRIVEACTIVITY].append(API.DRIVE_SCOPE)
4814
4846
  saScopes[API.DRIVE2] = saScopes[API.DRIVE3]
4815
4847
  return saScopes
4816
4848
 
@@ -5089,7 +5121,7 @@ def callGData(service, function,
5089
5121
  e = e.args[0]
5090
5122
  handleOAuthTokenError(e, GDATA.SERVICE_NOT_APPLICABLE in throwErrors)
5091
5123
  raise GDATA.ERROR_CODE_EXCEPTION_MAP[GDATA.SERVICE_NOT_APPLICABLE](str(e))
5092
- except (http_client.ResponseNotReady, OSError) as e:
5124
+ except (http.client.ResponseNotReady, OSError) as e:
5093
5125
  errMsg = f'Connection error: {str(e) or repr(e)}'
5094
5126
  if n != triesLimit:
5095
5127
  waitOnFailure(n, triesLimit, SOCKET_ERROR_RC, errMsg)
@@ -5399,7 +5431,7 @@ def callGAPI(service, function,
5399
5431
  e = e.args[0]
5400
5432
  handleOAuthTokenError(e, GAPI.SERVICE_NOT_AVAILABLE in throwReasons)
5401
5433
  raise GAPI.REASON_EXCEPTION_MAP[GAPI.SERVICE_NOT_AVAILABLE](str(e))
5402
- except (http_client.ResponseNotReady, OSError) as e:
5434
+ except (http.client.ResponseNotReady, OSError) as e:
5403
5435
  errMsg = f'Connection error: {str(e) or repr(e)}'
5404
5436
  if n != triesLimit:
5405
5437
  waitOnFailure(n, triesLimit, SOCKET_ERROR_RC, errMsg)
@@ -12351,8 +12383,6 @@ def checkServiceAccount(users):
12351
12383
  saScopes[scope['api']].append(scope['roscope'])
12352
12384
  checkScopesSet.add(scope['roscope'])
12353
12385
  i += 1
12354
- if API.DRIVEACTIVITY in saScopes and API.DRIVE3 in saScopes:
12355
- saScopes[API.DRIVEACTIVITY].append(API.DRIVE_SCOPE)
12356
12386
  if API.DRIVE3 in saScopes:
12357
12387
  saScopes[API.DRIVE2] = saScopes[API.DRIVE3]
12358
12388
  GM.Globals[GM.OAUTH2SERVICE_JSON_DATA][API.OAUTH2SA_SCOPES] = saScopes
@@ -149,6 +149,8 @@ CSV_OUTPUT_USERS_AUDIT = 'csv_output_users_audit'
149
149
  CUSTOMER_ID = 'customer_id'
150
150
  # If debug_level > 0: extra_args['prettyPrint'] = True, httplib2.debuglevel = gam_debug_level, appsObj.debug = True
151
151
  DEBUG_LEVEL = 'debug_level'
152
+ # redact sensitive credentials from debug output
153
+ DEBUG_REDACTION = 'debug_redaction'
152
154
  # Developer Preview API Key
153
155
  DEVELOPER_PREVIEW_API_KEY = 'developer_preview_api_key'
154
156
  # When retrieving lists of ChromeOS devices from API, how many should be retrieved in each chunk
@@ -378,6 +380,7 @@ Defaults = {
378
380
  CSV_OUTPUT_USERS_AUDIT: FALSE,
379
381
  CUSTOMER_ID: MY_CUSTOMER,
380
382
  DEBUG_LEVEL: '0',
383
+ DEBUG_REDACTION: TRUE,
381
384
  DEVELOPER_PREVIEW_API_KEY: '',
382
385
  DEVICE_MAX_RESULTS: '200',
383
386
  DOMAIN: '',
@@ -547,6 +550,7 @@ VAR_INFO = {
547
550
  CSV_OUTPUT_USERS_AUDIT: {VAR_TYPE: TYPE_BOOLEAN},
548
551
  CUSTOMER_ID: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'CUSTOMER_ID', VAR_LIMITS: (0, None)},
549
552
  DEBUG_LEVEL: {VAR_TYPE: TYPE_INTEGER, VAR_SIGFILE: 'debug.gam', VAR_LIMITS: (0, None), VAR_SFFT: ('0', '4')},
553
+ DEBUG_REDACTION: {VAR_TYPE: TYPE_BOOLEAN},
550
554
  DEVELOPER_PREVIEW_API_KEY: {VAR_TYPE: TYPE_STRING, VAR_LIMITS: (0, None)},
551
555
  DEVICE_MAX_RESULTS: {VAR_TYPE: TYPE_INTEGER, VAR_LIMITS: (1, 200)},
552
556
  DOMAIN: {VAR_TYPE: TYPE_STRING, VAR_ENVVAR: 'GA_DOMAIN', VAR_LIMITS: (0, None)},
@@ -107,6 +107,8 @@ CURRENT_SVCACCT_USER = 'csa'
107
107
  DATETIME_NOW = 'dtno'
108
108
  # If debug_level > 0: extra_args['prettyPrint'] = True, httplib2.debuglevel = gam_debug_level, appsObj.debug = True
109
109
  DEBUG_LEVEL = 'dbgl'
110
+ # Whether debug output should redact sensitive credentials
111
+ DEBUG_REDACTION = 'dbrd'
110
112
  # Decoded ID token
111
113
  DECODED_ID_TOKEN = 'didt'
112
114
  # Index of start of <UserTypeEntity> in command line
@@ -263,6 +265,7 @@ Globals = {
263
265
  CURRENT_SVCACCT_USER: None,
264
266
  DATETIME_NOW: None,
265
267
  DEBUG_LEVEL: 0,
268
+ DEBUG_REDACTION: True,
266
269
  DECODED_ID_TOKEN: None,
267
270
  ENTITY_CL_DELAY_START: 1,
268
271
  ENTITY_CL_START: 1,
@@ -0,0 +1,137 @@
1
+ # Cloud Identity Policies
2
+ - [API documentation](#api-documentation)
3
+ - [Notes](#notes)
4
+ - [Python Regular Expressions](Python-Regular-Expressions) Match function
5
+ - [Definitions](#definitions)
6
+ - [Policies](#policies)
7
+ - [Display Cloud Identity Policies](#display-cloud-identity-policies)
8
+
9
+ ## API documentation
10
+ * [Policy API](https://cloud.google.com/identity/docs/reference/rest/v1/policies)
11
+ * [Policy Settings](https://cloud.google.com/identity/docs/concepts/supported-policy-api-settings)
12
+
13
+ ## Notes
14
+ To use these commands you must update your client access authentication.
15
+ You'll enter 20r to turn on the Cloud Identity Policy scope; then continue
16
+ with authentication.
17
+ ```
18
+ gam oauth delete
19
+ gam oauth create
20
+ ...
21
+ [R] 20) Cloud Identity - Policy (supports readonly)
22
+ ```
23
+ You must enable access to policies in the GCP cloud console.
24
+
25
+ * Login at console.cloud.google.com
26
+ * In the upper left click the three lines to the left of Google Cloud and select IAM & Admin
27
+ * Under IAM & Admin select IAM
28
+ * Click in the box to the right of Google Cloud
29
+ * Click the three dots at the right and select IAM/Permissions
30
+ * Now you should be at "Permissions for organization ..."
31
+ * Click on Grant Access
32
+ * Enter the GAM project creator address in Principals
33
+ * Click in the Select a role box
34
+ * Type orgpolicy.policyAdmin in the Filter box
35
+ * Click Organization Policy Administrator
36
+ * Click Save
37
+
38
+ ## Definitions
39
+ ```
40
+ <CIPolicyName> ::= policies/<String>|settings/<String>|<String>
41
+ <CIPolicyNameList> ::= "<CIPolicyName>(,<CIPolicyName>)*"
42
+ <CIPolicyNameEntity> ::=
43
+ <CIPolicyNameList> | <FileSelector> | <CSVFileSelector>
44
+
45
+ <RegularExpression> ::= <String>
46
+ See: https://docs.python.org/3/library/re.html
47
+ <REMatchPattern> ::= <RegularExpression>
48
+ <RESearchPattern> ::= <RegularExpression>
49
+ <RESubstitution> ::= <String>>
50
+ ```
51
+
52
+ ## Policies
53
+ These are the supported policies GAM can show today.
54
+
55
+ See: https://cloud.google.com/identity/docs/concepts/supported-policy-api-settings
56
+
57
+ ## Display Cloud Identity Policies
58
+ Display selected policies.
59
+ ```
60
+ gam info policies <CIPolicyEntity>
61
+ [nowarnings] [noappnames]
62
+ [formatjson]
63
+ ```
64
+
65
+ Select policies::
66
+ * `polices/<String>` - A policy name, `policies/ahv4hg7qc24kvaghb7zihwf4riid4`
67
+ * `settings/<String>` - A policy setting type, `settings/workspace_marketplace.apps_allowlist`
68
+ * `<String>` - A policy setting type, `workspace_marketplace.apps_allowlist`
69
+
70
+ By default, policy warnings are displayed, use the 'nowarnings` option to suppress their display.
71
+
72
+ By default, additional API calls are made for `settings/workspace_marketplace.apps_allowlist`
73
+ to get the application name for the application ID. Use option `noappnames` to suppress these calls.
74
+
75
+ By default, Gam displays the information as an indented list of keys and values.
76
+ * `formatjson` - Display the fields in JSON format.
77
+
78
+ Display all or filtered policies.
79
+ ```
80
+ gam show policies
81
+ [filter <String>] [nowarnings] [noappnames]
82
+ [group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
83
+ [formatjson]
84
+ ```
85
+ By default, all policies are displayed.
86
+ * `filter <String>` - Display filtered policies, See https://cloud.google.com/identity/docs/reference/rest/v1beta1/policies/list
87
+ * `group <REMatchPattern>` - Only display policies whose group email address matches the `<REMatchPattern>`
88
+ * `ou|org|orgunit <REMatchPattern>` - Only display policies whose OU path matches the `<REMatchPattern>`
89
+
90
+ By default, policy warnings are displayed, use the `nowarnings` option to suppress their display.
91
+
92
+ By default, additional API calls are made for `settings/workspace_marketplace.apps_allowlist`
93
+ to get the application name for the application ID. Use option `noappnames` to suppress these calls.
94
+
95
+ By default, Gam displays the information as an indented list of keys and values.
96
+ * `formatjson` - Display the fields in JSON format.
97
+
98
+ ```
99
+ gam print policies [todrive <ToDriveAttribute>*]
100
+ [filter <String>] [nowarnings] [noappnames]
101
+ [group <REMatchPattern>] [ou|org|orgunit <REMatchPattern>]
102
+ [formatjson [quotechar <Character>]]
103
+ ```
104
+ By default, all policies are displayed:
105
+ * `filter <String>` - Display filtered policies, See https://cloud.google.com/identity/docs/reference/rest/v1beta1/policies/list
106
+ * `group <REMatchPattern>` - Only display policies whose group email address matches the `<REMatchPattern>`
107
+ * `ou|org|orgunit <REMatchPattern>` - Only display policies whose OU path matches the `<REMatchPattern>`
108
+
109
+ By default, policy warnings are displayed, use the `nowarnings` option to suppress their display.
110
+
111
+ By default, additional API calls are made for `settings/workspace_marketplace.apps_allowlist`
112
+ to get the application name for the application ID. Use option `noappnames` to suppress these calls.
113
+
114
+ By default, Gam displays the information as columns of fields; the following option causes the output to be in JSON format,
115
+ * `formatjson` - Display the fields in JSON format.
116
+
117
+ By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
118
+ the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
119
+ When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
120
+ The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
121
+ `quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
122
+
123
+ ### Examples
124
+ Print all service status policies.
125
+ ```
126
+ gam redirect csv ./ServiceStatusPolicies.csv print policies filter "setting.type.matches('.*service_status')"
127
+ ```
128
+
129
+ Print all polices that apply directly to the OU "/Staff".
130
+ ```
131
+ gam redirect csv ./StaffPolicies.csv print policies ou "^/Staff$"
132
+ ```
133
+
134
+ Print all polices that apply to the OU "/Staff" and its sub-OUs.
135
+ ```
136
+ gam redirect csv ./StaffPolicies.csv print policies ou "^/Staff"
137
+ ```
@@ -83,14 +83,20 @@ gam csv gsheet you@exmaple.com <DriveFileIDEntity> "Sheet 1" gam create user fir
83
83
 
84
84
  ## Limited Service Account Access
85
85
  If you want to disable a user's service account access to Drive and Sheets but still allow reading command data from Google Docs and Sheets,
86
- issue the following command and make these settings:
86
+ issue the following commands. The admin specified in `gam oauth create` can read command data from Docs and Sheets to which it has access.
87
87
  ```
88
- gam user user@domain.com update serviceaccount
88
+ gam config commanddata_clientaccess true save
89
+ gam oauth create
90
+ Enable the following and proceed to authorization.
89
91
 
90
- [ ] 20) Drive API (supports readonly)
91
- [*] 21) Drive API - read command data
92
- [ ] 42) Sheets API (supports readonly)
93
- [*] 43) Sheets API - read command data
92
+ [*] 42) Drive API - commanddata_clientaccess
93
+ [*] 54) Sheets API - commanddata_clientaccess
94
+ ```
95
+ In these options, the `<EmailAddress> is not used, but for clarity you may want to specify the
96
+ email address of the admin specified in `gam oauth create`.
97
+ ```
98
+ gdoc <EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>)
99
+ gsheet <EmailAddress> <DriveFileIDEntity>|<DriveFileNameEntity>|(<SharedDriveEntity> <SharedDriveFileNameEntity>) <SheetEntity>
94
100
  ```
95
101
 
96
102
  ## Read data from a Google Cloud Storage File
@@ -10,6 +10,34 @@ 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.25.01
14
+
15
+ Fixed bug in `gam config timezone <String>` to handle timezone abbreviations correctly;
16
+ they were incorrectly shifted to lowercase.
17
+
18
+ ### 7.25.00
19
+
20
+ Removed a capabilty added in 7.24.00 that allowed reading command data from Google Docs and Sheets
21
+ when a user's service account access to Drive and Sheets had been disabled. Jay was concerned
22
+ that this change could be exploited to give access to all user's files.
23
+
24
+ This capability has been replaced by issuing the following commands. The admin specified in `gam oauth create`
25
+ can read command data from Docs and Sheets to which it has access.
26
+ ```
27
+ gam config commanddata_clientaccess true save
28
+ gam oauth create
29
+ Enable the following and proceed to authorization.
30
+
31
+ [*] 42) Drive API - commanddata_clientaccess
32
+ [*] 54) Sheets API - commanddata_clientaccess
33
+ ```
34
+
35
+ * See: https://github.com/GAM-team/GAM/wiki/Command-Data-From-Google-Docs-Sheets-Storage#limited-service-account-access
36
+
37
+ Fixed in bug in `gam report` that caused a trap with either of the `thismonth` or `previousmonths` options were used.
38
+
39
+ Upgraded to Python 3.14.0.
40
+
13
41
  ### 7.24.01
14
42
 
15
43
  Updated GAM to handle the following error that occurs when GAM tries to authenticate
@@ -252,9 +252,9 @@ 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.24.01 - https://github.com/GAM-team/GAM - pyinstaller
255
+ GAM 7.25.01 - https://github.com/GAM-team/GAM - pyinstaller
256
256
  GAM Team <google-apps-manager@googlegroups.com>
257
- Python 3.13.7 64-bit final
257
+ Python 3.14.0 64-bit final
258
258
  macOS Tahoe 26.0.1 x86_64
259
259
  Path: /Users/admin/bin/gam7
260
260
  Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
@@ -990,9 +990,9 @@ 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.24.01 - https://github.com/GAM-team/GAM - pythonsource
993
+ GAM 7.25.01 - https://github.com/GAM-team/GAM - pythonsource
994
994
  GAM Team <google-apps-manager@googlegroups.com>
995
- Python 3.13.7 64-bit final
995
+ Python 3.14.0 64-bit final
996
996
  Windows-10-10.0.17134 AMD64
997
997
  Path: C:\GAM7
998
998
  Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
@@ -336,10 +336,10 @@ issue the following command and make these settings:
336
336
  gam user user@domain.com update serviceaccount
337
337
 
338
338
  [ ] 20) Drive API (supports readonly)
339
- [*] 22) Drive API - write todrive data
339
+ [*] 22) Drive API - write todrive data - has access to all Drive
340
340
  [*] 31) Gmail API - Send Messages - including todrive
341
341
  [ ] 42) Sheets API (supports readonly)
342
- [*] 44) Sheets API - write todrive data
342
+ [*] 44) Sheets API - write todrive data - has access to all Sheets
343
343
  ```
344
344
 
345
345
  ## No Service Account Access
@@ -327,7 +327,7 @@ gam <UserTypeEntity> show chatspaces
327
327
  By default, chat spaces of all types are displayed.
328
328
  * `types <ChatSpaceTypeList>` - Display specific types of spaces.
329
329
 
330
- When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this fieldf,
330
+ When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this field,
331
331
  add `showaccesssettings` to the command. This requires an additional Chat API call per chat space of type `SPACE`
332
332
  to get the `accessSettings` field.
333
333
 
@@ -343,7 +343,7 @@ gam <UserTypeEntity> print chatspaces [todrive <ToDriveAttribute>*]
343
343
  By default, chat spaces of all types are displayed.
344
344
  * `types <ChatSpaceTypeList>` - Display specific types of spaces.
345
345
 
346
- When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this fieldf,
346
+ When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this field,
347
347
  add `showaccesssettings` to the command. This requires an additional Chat API call per chat space of type `SPACE`
348
348
  to get the `accessSettings` field.
349
349
 
@@ -401,7 +401,7 @@ By default, all chat spaces of type SPACE are displayed.
401
401
  * `query <String> [querytime<String> <Time>]` - Display selected chat spaces
402
402
  * See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
403
403
 
404
- When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this fieldf,
404
+ When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this field,
405
405
  add `showaccesssettings` to the command. This requires an additional Chat API call per chat space of type `SPACE`
406
406
  to get the `accessSettings` field.
407
407
 
@@ -419,7 +419,7 @@ By default, all chat spaces of type SPACE are displayed.
419
419
  * `query <String> [querytime<String> <Time>]` - Display selected chat spaces
420
420
  * See: https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search
421
421
 
422
- When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this fieldf,
422
+ When listing Chat Spaces, the Chat API does not return the `accessSettings` field; if you need to see this field,
423
423
  add `showaccesssettings` to the command. This requires an additional Chat API call per chat space of type `SPACE`
424
424
  to get the `accessSettings` field.
425
425
 
@@ -3,9 +3,9 @@
3
3
  Print the current version of Gam with details
4
4
  ```
5
5
  gam version
6
- GAM 7.24.01 - https://github.com/GAM-team/GAM - pyinstaller
6
+ GAM 7.25.01 - https://github.com/GAM-team/GAM - pyinstaller
7
7
  GAM Team <google-apps-manager@googlegroups.com>
8
- Python 3.13.7 64-bit final
8
+ Python 3.14.0 64-bit final
9
9
  macOS Tahoe 26.0.1 x86_64
10
10
  Path: /Users/Admin/bin/gam7
11
11
  Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
@@ -15,9 +15,9 @@ 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.24.01 - https://github.com/GAM-team/GAM - pyinstaller
18
+ GAM 7.25.01 - https://github.com/GAM-team/GAM - pyinstaller
19
19
  GAM Team <google-apps-manager@googlegroups.com>
20
- Python 3.13.7 64-bit final
20
+ Python 3.14.0 64-bit final
21
21
  macOS Tahoe 26.0.1 x86_64
22
22
  Path: /Users/Admin/bin/gam7
23
23
  Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
@@ -27,9 +27,9 @@ 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.24.01 - https://github.com/GAM-team/GAM - pyinstaller
30
+ GAM 7.25.01 - https://github.com/GAM-team/GAM - pyinstaller
31
31
  GAM Team <google-apps-manager@googlegroups.com>
32
- Python 3.13.7 64-bit final
32
+ Python 3.14.0 64-bit final
33
33
  macOS Tahoe 26.0.1 x86_64
34
34
  Path: /Users/Admin/bin/gam7
35
35
  Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
@@ -68,7 +68,7 @@ MacOS High Sierra 10.13.6 x86_64
68
68
  Path: /Users/Admin/bin/gam7
69
69
  Version Check:
70
70
  Current: 5.35.08
71
- Latest: 7.22.00
71
+ Latest: 7.25.01
72
72
  echo $?
73
73
  1
74
74
  ```
@@ -76,7 +76,7 @@ echo $?
76
76
  Print the current version number without details
77
77
  ```
78
78
  gam version simple
79
- 7.22.00
79
+ 7.25.01
80
80
  ```
81
81
  In Linux/MacOS you can do:
82
82
  ```
@@ -86,9 +86,9 @@ echo $VER
86
86
  Print the current version of Gam and address of this Wiki
87
87
  ```
88
88
  gam help
89
- GAM 7.22.00 - https://github.com/GAM-team/GAM
89
+ GAM 7.25.01 - https://github.com/GAM-team/GAM
90
90
  GAM Team <google-apps-manager@googlegroups.com>
91
- Python 3.13.7 64-bit final
91
+ Python 3.14.0 64-bit final
92
92
  macOS Tahoe 26.0.1 x86_64
93
93
  Path: /Users/Admin/bin/gam7
94
94
  Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, customer_id: my_customer, domain: domain.com
@@ -140,6 +140,11 @@ cmdlog_max_kilo_bytes
140
140
  Maximum kilobytes per log file
141
141
  Default: 1000
142
142
  Range: 100 - 10000
143
+ commanddata_clientaccess
144
+ Enable/disable use of client access rather than service account access for the
145
+ admin specified in `gam oauth create` when reading command data from Docs and Sheets
146
+ to which it has access.
147
+ Default: False
143
148
  config_dir
144
149
  GAM config directory containing client_secrets.json, oauth2.txt, oauth2service.json
145
150
  and extra_args.txt