gam7 7.23.7__tar.gz → 7.24.1__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 (303) hide show
  1. {gam7-7.23.7 → gam7-7.24.1}/PKG-INFO +1 -1
  2. {gam7-7.23.7 → gam7-7.24.1}/src/GamUpdate.txt +21 -0
  3. {gam7-7.23.7 → gam7-7.24.1}/src/gam/__init__.py +23 -21
  4. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glapi.py +21 -4
  5. {gam7-7.23.7 → gam7-7.24.1}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +14 -0
  6. {gam7-7.23.7 → gam7-7.24.1}/wiki/GamUpdates.md +18 -0
  7. {gam7-7.23.7 → gam7-7.24.1}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
  8. {gam7-7.23.7 → gam7-7.24.1}/wiki/Todrive.md +8 -8
  9. {gam7-7.23.7 → gam7-7.24.1}/wiki/Vault-Takeout.md +3 -3
  10. {gam7-7.23.7 → gam7-7.24.1}/wiki/Version-and-Help.md +3 -3
  11. {gam7-7.23.7 → gam7-7.24.1}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  12. {gam7-7.23.7 → gam7-7.24.1}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  13. {gam7-7.23.7 → gam7-7.24.1}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  14. {gam7-7.23.7 → gam7-7.24.1}/.github/ISSUE_TEMPLATE.txt +0 -0
  15. {gam7-7.23.7 → gam7-7.24.1}/.github/actions/decrypt.sh +0 -0
  16. {gam7-7.23.7 → gam7-7.24.1}/.github/actions/entitlements.plist +0 -0
  17. {gam7-7.23.7 → gam7-7.24.1}/.github/actions/package_exclusions.txt +0 -0
  18. {gam7-7.23.7 → gam7-7.24.1}/.github/stale.yml +0 -0
  19. {gam7-7.23.7 → gam7-7.24.1}/.github/workflows/build.yml +0 -0
  20. {gam7-7.23.7 → gam7-7.24.1}/.github/workflows/codeql-analysis.yml +0 -0
  21. {gam7-7.23.7 → gam7-7.24.1}/.github/workflows/get-cacerts.yml +0 -0
  22. {gam7-7.23.7 → gam7-7.24.1}/.github/workflows/pushwiki.yml +0 -0
  23. {gam7-7.23.7 → gam7-7.24.1}/.github/workflows/pypi.yml +0 -0
  24. {gam7-7.23.7 → gam7-7.24.1}/LICENSE +0 -0
  25. {gam7-7.23.7 → gam7-7.24.1}/README.md +0 -0
  26. {gam7-7.23.7 → gam7-7.24.1}/pyproject.toml +0 -0
  27. {gam7-7.23.7 → gam7-7.24.1}/src/.gitignore +0 -0
  28. {gam7-7.23.7 → gam7-7.24.1}/src/GamCommands.txt +0 -0
  29. {gam7-7.23.7 → gam7-7.24.1}/src/LICENSE +0 -0
  30. {gam7-7.23.7 → gam7-7.24.1}/src/README.md +0 -0
  31. {gam7-7.23.7 → gam7-7.24.1}/src/callgam.py +0 -0
  32. {gam7-7.23.7 → gam7-7.24.1}/src/gam/__main__.py +0 -0
  33. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/__init__.py +0 -0
  34. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/auth.py +0 -0
  35. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/client.py +0 -0
  36. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/core.py +0 -0
  37. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/data.py +0 -0
  38. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/http.py +0 -0
  39. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/http_core.py +0 -0
  40. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/http_interface.py +0 -0
  41. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/mock_http.py +0 -0
  42. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/mock_http_core.py +0 -0
  43. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/mock_service.py +0 -0
  44. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/service.py +0 -0
  45. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/token_store.py +0 -0
  46. {gam7-7.23.7 → gam7-7.24.1}/src/gam/atom/url.py +0 -0
  47. {gam7-7.23.7 → gam7-7.24.1}/src/gam/cacerts.pem +0 -0
  48. {gam7-7.23.7 → gam7-7.24.1}/src/gam/cbcm-v1.1beta1.json +0 -0
  49. {gam7-7.23.7 → gam7-7.24.1}/src/gam/contactdelegation-v1.json +0 -0
  50. {gam7-7.23.7 → gam7-7.24.1}/src/gam/datastudio-v1.json +0 -0
  51. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/__init__.py +0 -0
  52. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glaction.py +0 -0
  53. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glcfg.py +0 -0
  54. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glclargs.py +0 -0
  55. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glentity.py +0 -0
  56. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glgapi.py +0 -0
  57. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glgdata.py +0 -0
  58. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glglobals.py +0 -0
  59. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glindent.py +0 -0
  60. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glmsgs.py +0 -0
  61. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glskus.py +0 -0
  62. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/gluprop.py +0 -0
  63. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/glverlibs.py +0 -0
  64. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gamlib/yubikey.py +0 -0
  65. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/__init__.py +0 -0
  66. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/alt/__init__.py +0 -0
  67. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/alt/app_engine.py +0 -0
  68. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/alt/appengine.py +0 -0
  69. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/__init__.py +0 -0
  70. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/audit/__init__.py +0 -0
  71. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/audit/service.py +0 -0
  72. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  73. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/contacts/service.py +0 -0
  74. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/apps/service.py +0 -0
  75. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/service.py +0 -0
  76. {gam7-7.23.7 → gam7-7.24.1}/src/gam/gdata/urlfetch.py +0 -0
  77. {gam7-7.23.7 → gam7-7.24.1}/src/gam/meet-v2beta.json +0 -0
  78. {gam7-7.23.7 → gam7-7.24.1}/src/gam/serviceaccountlookup-v1.json +0 -0
  79. {gam7-7.23.7 → gam7-7.24.1}/src/gam-install.sh +0 -0
  80. {gam7-7.23.7 → gam7-7.24.1}/src/gam-setup.bat +0 -0
  81. {gam7-7.23.7 → gam7-7.24.1}/src/gam.exe.manifest +0 -0
  82. {gam7-7.23.7 → gam7-7.24.1}/src/gam.py +0 -0
  83. {gam7-7.23.7 → gam7-7.24.1}/src/gam.spec +0 -0
  84. {gam7-7.23.7 → gam7-7.24.1}/src/gam.wxs +0 -0
  85. {gam7-7.23.7 → gam7-7.24.1}/src/license.rtf +0 -0
  86. {gam7-7.23.7 → gam7-7.24.1}/src/tools/a_atleast_b.py +0 -0
  87. {gam7-7.23.7 → gam7-7.24.1}/src/tools/gen-wix-xml-filelist.py +0 -0
  88. {gam7-7.23.7 → gam7-7.24.1}/src/tools/hooks/hook-googleapiclient.model.py +0 -0
  89. {gam7-7.23.7 → gam7-7.24.1}/src/tools/hooks/hook-httplib2.py +0 -0
  90. {gam7-7.23.7 → gam7-7.24.1}/src/tools/mkGamRef.py +0 -0
  91. {gam7-7.23.7 → gam7-7.24.1}/src/tools/openssl.props +0 -0
  92. {gam7-7.23.7 → gam7-7.24.1}/src/tools/ssd.mjs +0 -0
  93. {gam7-7.23.7 → gam7-7.24.1}/src/version_info.txt.in +0 -0
  94. {gam7-7.23.7 → gam7-7.24.1}/wiki/00scratch.md +0 -0
  95. {gam7-7.23.7 → gam7-7.24.1}/wiki/Addresses.md +0 -0
  96. {gam7-7.23.7 → gam7-7.24.1}/wiki/Administrators.md +0 -0
  97. {gam7-7.23.7 → gam7-7.24.1}/wiki/Alert-Center.md +0 -0
  98. {gam7-7.23.7 → gam7-7.24.1}/wiki/Aliases.md +0 -0
  99. {gam7-7.23.7 → gam7-7.24.1}/wiki/Authorization.md +0 -0
  100. {gam7-7.23.7 → gam7-7.24.1}/wiki/BNF-Syntax.md +0 -0
  101. {gam7-7.23.7 → gam7-7.24.1}/wiki/Basic-Items.md +0 -0
  102. {gam7-7.23.7 → gam7-7.24.1}/wiki/Bulk-Processing.md +0 -0
  103. {gam7-7.23.7 → gam7-7.24.1}/wiki/Business-Account-Management.md +0 -0
  104. {gam7-7.23.7 → gam7-7.24.1}/wiki/CSV-Input-Filtering.md +0 -0
  105. {gam7-7.23.7 → gam7-7.24.1}/wiki/CSV-Output-Filtering.md +0 -0
  106. {gam7-7.23.7 → gam7-7.24.1}/wiki/CSV-Special-Characters.md +0 -0
  107. {gam7-7.23.7 → gam7-7.24.1}/wiki/Calendars-Access.md +0 -0
  108. {gam7-7.23.7 → gam7-7.24.1}/wiki/Calendars-Events.md +0 -0
  109. {gam7-7.23.7 → gam7-7.24.1}/wiki/Calendars.md +0 -0
  110. {gam7-7.23.7 → gam7-7.24.1}/wiki/Chat-Bot-Setup-Use.md +0 -0
  111. {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-AUE-Counts.md +0 -0
  112. {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  113. {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Installed-Apps.md +0 -0
  114. {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  115. {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Policies.md +0 -0
  116. {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Printers.md +0 -0
  117. {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Profile-Management.md +0 -0
  118. {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Version-Counts.md +0 -0
  119. {gam7-7.23.7 → gam7-7.24.1}/wiki/Chrome-Version-History.md +0 -0
  120. {gam7-7.23.7 → gam7-7.24.1}/wiki/ChromeOS-Devices.md +0 -0
  121. {gam7-7.23.7 → gam7-7.24.1}/wiki/Classroom-Courses.md +0 -0
  122. {gam7-7.23.7 → gam7-7.24.1}/wiki/Classroom-Guardians.md +0 -0
  123. {gam7-7.23.7 → gam7-7.24.1}/wiki/Classroom-Invitations.md +0 -0
  124. {gam7-7.23.7 → gam7-7.24.1}/wiki/Classroom-Membership.md +0 -0
  125. {gam7-7.23.7 → gam7-7.24.1}/wiki/Classroom-StudentGroups.md +0 -0
  126. {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Channel.md +0 -0
  127. {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Identity-Devices.md +0 -0
  128. {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  129. {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Identity-Groups.md +0 -0
  130. {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Identity-Policies.md +0 -0
  131. {gam7-7.23.7 → gam7-7.24.1}/wiki/Cloud-Storage.md +0 -0
  132. {gam7-7.23.7 → gam7-7.24.1}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  133. {gam7-7.23.7 → gam7-7.24.1}/wiki/Collections-of-Items.md +0 -0
  134. {gam7-7.23.7 → gam7-7.24.1}/wiki/Collections-of-Users.md +0 -0
  135. {gam7-7.23.7 → gam7-7.24.1}/wiki/Command-Line-Parsing.md +0 -0
  136. {gam7-7.23.7 → gam7-7.24.1}/wiki/Command-Logging-Progress.md +0 -0
  137. {gam7-7.23.7 → gam7-7.24.1}/wiki/Context-Aware-Access-Levels.md +0 -0
  138. {gam7-7.23.7 → gam7-7.24.1}/wiki/Customer.md +0 -0
  139. {gam7-7.23.7 → gam7-7.24.1}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  140. {gam7-7.23.7 → gam7-7.24.1}/wiki/Domain-SharedContacts.md +0 -0
  141. {gam7-7.23.7 → gam7-7.24.1}/wiki/Domains-Verification.md +0 -0
  142. {gam7-7.23.7 → gam7-7.24.1}/wiki/Domains.md +0 -0
  143. {gam7-7.23.7 → gam7-7.24.1}/wiki/Downloads-Installs.md +0 -0
  144. {gam7-7.23.7 → gam7-7.24.1}/wiki/Drive-File-Selection.md +0 -0
  145. {gam7-7.23.7 → gam7-7.24.1}/wiki/Drive-Items.md +0 -0
  146. {gam7-7.23.7 → gam7-7.24.1}/wiki/Drive-REST-API-v3.md +0 -0
  147. {gam7-7.23.7 → gam7-7.24.1}/wiki/Email-Audit-Monitor.md +0 -0
  148. {gam7-7.23.7 → gam7-7.24.1}/wiki/Find-File-Owner.md +0 -0
  149. {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM-Public-Chat-Room.md +0 -0
  150. {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM-Release-Process.md +0 -0
  151. {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM-Return-Codes.md +0 -0
  152. {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  153. {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM7-FAQ.md +0 -0
  154. {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM7-on-Android-Devices.md +0 -0
  155. {gam7-7.23.7 → gam7-7.24.1}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  156. {gam7-7.23.7 → gam7-7.24.1}/wiki/Global-Address-List.md +0 -0
  157. {gam7-7.23.7 → gam7-7.24.1}/wiki/Google-Data-Transfers.md +0 -0
  158. {gam7-7.23.7 → gam7-7.24.1}/wiki/Google-Network-Addresses.md +0 -0
  159. {gam7-7.23.7 → gam7-7.24.1}/wiki/Groups-Membership.md +0 -0
  160. {gam7-7.23.7 → gam7-7.24.1}/wiki/Groups.md +0 -0
  161. {gam7-7.23.7 → gam7-7.24.1}/wiki/HTTPS-Proxy.md +0 -0
  162. {gam7-7.23.7 → gam7-7.24.1}/wiki/Home.md +0 -0
  163. {gam7-7.23.7 → gam7-7.24.1}/wiki/How-to-Install-GAM7.md +0 -0
  164. {gam7-7.23.7 → gam7-7.24.1}/wiki/How-to-Uninstall-GAM7.md +0 -0
  165. {gam7-7.23.7 → gam7-7.24.1}/wiki/How-to-Update-GAM7.md +0 -0
  166. {gam7-7.23.7 → gam7-7.24.1}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  167. {gam7-7.23.7 → gam7-7.24.1}/wiki/Inbound-SSO.md +0 -0
  168. {gam7-7.23.7 → gam7-7.24.1}/wiki/Install-GAM-as-Python-Library.md +0 -0
  169. {gam7-7.23.7 → gam7-7.24.1}/wiki/Licenses.md +0 -0
  170. {gam7-7.23.7 → gam7-7.24.1}/wiki/List-Items.md +0 -0
  171. {gam7-7.23.7 → gam7-7.24.1}/wiki/List.md +0 -0
  172. {gam7-7.23.7 → gam7-7.24.1}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
  173. {gam7-7.23.7 → gam7-7.24.1}/wiki/Mobile-Devices.md +0 -0
  174. {gam7-7.23.7 → gam7-7.24.1}/wiki/Organizational-Units.md +0 -0
  175. {gam7-7.23.7 → gam7-7.24.1}/wiki/Other-Resources.md +0 -0
  176. {gam7-7.23.7 → gam7-7.24.1}/wiki/Permission-Matches.md +0 -0
  177. {gam7-7.23.7 → gam7-7.24.1}/wiki/Python-Regular-Expressions.md +0 -0
  178. {gam7-7.23.7 → gam7-7.24.1}/wiki/README.md +0 -0
  179. {gam7-7.23.7 → gam7-7.24.1}/wiki/Rclone.md +0 -0
  180. {gam7-7.23.7 → gam7-7.24.1}/wiki/Reports.md +0 -0
  181. {gam7-7.23.7 → gam7-7.24.1}/wiki/Reseller.md +0 -0
  182. {gam7-7.23.7 → gam7-7.24.1}/wiki/Resources.md +0 -0
  183. {gam7-7.23.7 → gam7-7.24.1}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  184. {gam7-7.23.7 → gam7-7.24.1}/wiki/SSL-Root-CA-Certificates.md +0 -0
  185. {gam7-7.23.7 → gam7-7.24.1}/wiki/Schemas.md +0 -0
  186. {gam7-7.23.7 → gam7-7.24.1}/wiki/Scripts.md +0 -0
  187. {gam7-7.23.7 → gam7-7.24.1}/wiki/Send-Email.md +0 -0
  188. {gam7-7.23.7 → gam7-7.24.1}/wiki/Shared-Drives.md +0 -0
  189. {gam7-7.23.7 → gam7-7.24.1}/wiki/Sites.md +0 -0
  190. {gam7-7.23.7 → gam7-7.24.1}/wiki/Tag-Replace.md +0 -0
  191. {gam7-7.23.7 → gam7-7.24.1}/wiki/Unmanaged-Accounts.md +0 -0
  192. {gam7-7.23.7 → gam7-7.24.1}/wiki/Upgrade-Benefits.md +0 -0
  193. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Analytics-Admin.md +0 -0
  194. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Application-Specific-Passwords.md +0 -0
  195. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Backup-Verification-Codes.md +0 -0
  196. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Calendars-Access.md +0 -0
  197. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Calendars-Events.md +0 -0
  198. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Calendars.md +0 -0
  199. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Chat.md +0 -0
  200. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Classification-Labels.md +0 -0
  201. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Classroom-Profile.md +0 -0
  202. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Contacts-Delegates.md +0 -0
  203. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Contacts.md +0 -0
  204. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Deprovision.md +0 -0
  205. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Activity-Settings.md +0 -0
  206. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Cleanup.md +0 -0
  207. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Comments.md +0 -0
  208. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Copy-Move.md +0 -0
  209. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Files-Display.md +0 -0
  210. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Files-Manage.md +0 -0
  211. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Orphans.md +0 -0
  212. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Ownership.md +0 -0
  213. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Permissions.md +0 -0
  214. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Query.md +0 -0
  215. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Revisions.md +0 -0
  216. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Shortcuts.md +0 -0
  217. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Drive-Transfer.md +0 -0
  218. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Forms.md +0 -0
  219. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-CSE.md +0 -0
  220. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Delegates.md +0 -0
  221. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Filters.md +0 -0
  222. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Forwarding.md +0 -0
  223. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Labels.md +0 -0
  224. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  225. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Profile.md +0 -0
  226. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-S-MIME.md +0 -0
  227. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  228. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Gmail-Settings.md +0 -0
  229. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Group-Membership.md +0 -0
  230. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Keep-Notes.md +0 -0
  231. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Looker-Studio.md +0 -0
  232. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Meet.md +0 -0
  233. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-People-Contacts-Profiles.md +0 -0
  234. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Photo.md +0 -0
  235. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Profile-Photo.md +0 -0
  236. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Profile-Sharing.md +0 -0
  237. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Shared-Drives.md +0 -0
  238. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  239. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Spreadsheets.md +0 -0
  240. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Tag-Manager.md +0 -0
  241. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Tasks.md +0 -0
  242. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Tokens.md +0 -0
  243. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-Web-Resources-and-Sites.md +0 -0
  244. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users-YouTube.md +0 -0
  245. {gam7-7.23.7 → gam7-7.24.1}/wiki/Users.md +0 -0
  246. {gam7-7.23.7 → gam7-7.24.1}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  247. {gam7-7.23.7 → gam7-7.24.1}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  248. {gam7-7.23.7 → gam7-7.24.1}/wiki/Using-GAM7-with-keyless-authentication-Workload-Identity-Federation.md +0 -0
  249. {gam7-7.23.7 → gam7-7.24.1}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  250. {gam7-7.23.7 → gam7-7.24.1}/wiki/_Sidebar.md +0 -0
  251. {gam7-7.23.7 → gam7-7.24.1}/wiki/gam.cfg.md +0 -0
  252. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-AdminSettingsExamples.md +0 -0
  253. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Android-Installation.md +0 -0
  254. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-BulkOperations.md +0 -0
  255. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-CalendarExamples.md +0 -0
  256. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Chat-Bot.md +0 -0
  257. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Chrome-Browser-Management.md +0 -0
  258. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Chrome-OS-Installation.md +0 -0
  259. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Chrome-Policy-Settings.md +0 -0
  260. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Cloud-Identity-Groups.md +0 -0
  261. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Calendar-Resources.md +0 -0
  262. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Calendars.md +0 -0
  263. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Definitions.md +0 -0
  264. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Drive.md +0 -0
  265. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Email.md +0 -0
  266. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Group-Attributes.md +0 -0
  267. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Groups.md +0 -0
  268. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Command-Reference-Users.md +0 -0
  269. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Context-Aware-Access-Levels.md +0 -0
  270. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  271. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-CreatingClientSecretsFile.md +0 -0
  272. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Custom-Schemas.md +0 -0
  273. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Data-Transfers.md +0 -0
  274. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-DomainVerification.md +0 -0
  275. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-ExamplesAccountAuditing.md +0 -0
  276. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-ExamplesCSV.md +0 -0
  277. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-ExamplesEmailSettings.md +0 -0
  278. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-ExamplesOrganizations.md +0 -0
  279. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM-Discussion-Group.md +0 -0
  280. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  281. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM-options-files.md +0 -0
  282. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM-with--minimal-GCP-rights.md +0 -0
  283. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM3CSVListings.md +0 -0
  284. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM3DirectoryCommands.md +0 -0
  285. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GAM3GroupSettings.md +0 -0
  286. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Google-Vault---Takeout-Commands.md +0 -0
  287. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-GoogleDriveManagement.md +0 -0
  288. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Grouping-18-or-Older-Users.md +0 -0
  289. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Home.md +0 -0
  290. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  291. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Inbound-SSO-Settings.md +0 -0
  292. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-LicenseExamples.md +0 -0
  293. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Managing-Admins.md +0 -0
  294. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Managing-CloudPrint-Printers.md +0 -0
  295. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Managing-Devices.md +0 -0
  296. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Managing-Google-Classroom.md +0 -0
  297. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-OAuthKeyManagement.md +0 -0
  298. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Printers.md +0 -0
  299. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-ResellerCommands.md +0 -0
  300. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-SecurityExamples.md +0 -0
  301. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-UnmanagedUsersExamples.md +0 -0
  302. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  303. {gam7-7.23.7 → gam7-7.24.1}/wiki/legacy/l-_Footer.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.23.7
3
+ Version: 7.24.1
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
@@ -1,3 +1,24 @@
1
+ 7.24.01
2
+
3
+ Updated GAM to handle the following error that occurs when GAM tries to authenticate
4
+ as a user that has been disabled by Google.
5
+ ```
6
+ ERROR: Authentication Token Error - invalid_account: Forbidden
7
+ ```
8
+
9
+ 7.24.00
10
+
11
+ 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,
12
+ issue the following command and make these settings:
13
+ ```
14
+ gam user user@domain.com update serviceaccount
15
+
16
+ [ ] 20) Drive API (supports readonly)
17
+ [*] 21) Drive API - read command data
18
+ [ ] 42) Sheets API (supports readonly)
19
+ [*] 43) Sheets API - read command data
20
+ ```
21
+
1
22
  7.23.07
2
23
 
3
24
  Fixed bug in `gam print|show admins` where all admin assignments were not displayed when
@@ -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.23.07'
28
+ __version__ = '7.24.01'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -3049,9 +3049,10 @@ def getGDocData(gformat):
3049
3049
  mimeType = GDOC_FORMAT_MIME_TYPES[gformat]
3050
3050
  user = getEmailAddress()
3051
3051
  fileIdEntity = getDriveFileEntity(queryShortcutsOK=False)
3052
- user, drive, jcount = _validateUserGetFileIDs(user, 0, 0, fileIdEntity)
3052
+ _, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVECD, API.DRIVE3), user)
3053
3053
  if not drive:
3054
3054
  sys.exit(GM.Globals[GM.SYSEXITRC])
3055
+ _, _, jcount = _validateUserGetFileIDs(user, 0, 0, fileIdEntity, drive=drive)
3055
3056
  if jcount == 0:
3056
3057
  getGDocSheetDataFailedExit([Ent.USER, user], Msg.NO_ENTITIES_FOUND.format(Ent.Singular(Ent.DRIVE_FILE)))
3057
3058
  if jcount > 1:
@@ -3105,14 +3106,15 @@ def getGSheetData():
3105
3106
  user = getEmailAddress()
3106
3107
  fileIdEntity = getDriveFileEntity(queryShortcutsOK=False)
3107
3108
  sheetEntity = getSheetEntity(False)
3108
- user, drive, jcount = _validateUserGetFileIDs(user, 0, 0, fileIdEntity)
3109
+ user, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVECD, API.DRIVE3), user)
3109
3110
  if not drive:
3110
3111
  sys.exit(GM.Globals[GM.SYSEXITRC])
3112
+ _, _, jcount = _validateUserGetFileIDs(user, 0, 0, fileIdEntity, drive=drive)
3111
3113
  if jcount == 0:
3112
3114
  getGDocSheetDataFailedExit([Ent.USER, user], Msg.NO_ENTITIES_FOUND.format(Ent.Singular(Ent.DRIVE_FILE)))
3113
3115
  if jcount > 1:
3114
3116
  getGDocSheetDataFailedExit([Ent.USER, user], Msg.MULTIPLE_ENTITIES_FOUND.format(Ent.Plural(Ent.DRIVE_FILE), jcount, ','.join(fileIdEntity['list'])))
3115
- _, sheet = buildGAPIServiceObject(API.SHEETS, user)
3117
+ _, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSCD, API.SHEETS), user)
3116
3118
  if not sheet:
3117
3119
  sys.exit(GM.Globals[GM.SYSEXITRC])
3118
3120
  fileId = fileIdEntity['list'][0]
@@ -4801,8 +4803,6 @@ def defaultSvcAcctScopes():
4801
4803
  saScopes[scope['api']].extend(scope['scope'])
4802
4804
  saScopes[API.DRIVEACTIVITY].append(API.DRIVE_SCOPE)
4803
4805
  saScopes[API.DRIVE2] = saScopes[API.DRIVE3]
4804
- saScopes[API.DRIVETD] = saScopes[API.DRIVE3]
4805
- saScopes[API.SHEETSTD] = saScopes[API.SHEETS]
4806
4806
  return saScopes
4807
4807
 
4808
4808
  def _getSvcAcctData():
@@ -5609,6 +5609,12 @@ def getSaUser(user):
5609
5609
  GM.Globals[GM.CURRENT_CLIENT_API_SCOPES] = currentClientAPIScopes
5610
5610
  return userEmail
5611
5611
 
5612
+ def chooseSaAPI(api1, api2):
5613
+ _getSvcAcctData()
5614
+ if api1 in GM.Globals[GM.SVCACCT_SCOPES]:
5615
+ return api1
5616
+ return api2
5617
+
5612
5618
  def buildGAPIServiceObject(api, user, i=0, count=0, displayError=True):
5613
5619
  userEmail = getSaUser(user)
5614
5620
  httpObj = getHttpObj(cache=GM.Globals[GM.CACHE_DIR])
@@ -8030,7 +8036,7 @@ class CSVPrintFile():
8030
8036
 
8031
8037
  def getDriveObject():
8032
8038
  if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
8033
- _, drive = buildGAPIServiceObject(API.DRIVETD, self.todrive['user'])
8039
+ _, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVETD, API.DRIVE3), self.todrive['user'])
8034
8040
  if not drive:
8035
8041
  invalidTodriveUserExit(Ent.USER, Msg.NOT_FOUND)
8036
8042
  else:
@@ -8183,7 +8189,7 @@ class CSVPrintFile():
8183
8189
  if result['mimeType'] != MIMETYPE_GA_SPREADSHEET:
8184
8190
  invalidTodriveFileIdExit([], f'{Msg.NOT_A} {Ent.Singular(Ent.SPREADSHEET)}', tdfileidLocation)
8185
8191
  if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
8186
- _, sheet = buildGAPIServiceObject(API.SHEETSTD, self.todrive['user'])
8192
+ _, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSTD, API.SHEETS), self.todrive['user'])
8187
8193
  if sheet is None:
8188
8194
  invalidTodriveUserExit(Ent.USER, Msg.NOT_FOUND)
8189
8195
  else:
@@ -8696,7 +8702,7 @@ class CSVPrintFile():
8696
8702
  sheetTitle += tdtime.strftime(self.todrive['sheettimeformat'])
8697
8703
  action = Act.Get()
8698
8704
  if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
8699
- user, drive = buildGAPIServiceObject(API.DRIVETD, self.todrive['user'])
8705
+ user, drive = buildGAPIServiceObject(chooseSaAPI(API.DRIVETD, API.DRIVE3), self.todrive['user'])
8700
8706
  if not drive:
8701
8707
  closeFile(csvFile)
8702
8708
  return
@@ -8729,7 +8735,7 @@ class CSVPrintFile():
8729
8735
  if result['mimeType'] != MIMETYPE_GA_SPREADSHEET:
8730
8736
  todriveCSVErrorExit(entityValueList, f'{Msg.NOT_A} {Ent.Singular(Ent.SPREADSHEET)}')
8731
8737
  if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
8732
- _, sheet = buildGAPIServiceObject(API.SHEETSTD, user)
8738
+ _, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSTD, API.SHEETS), user)
8733
8739
  if sheet is None:
8734
8740
  return
8735
8741
  else:
@@ -8877,7 +8883,7 @@ class CSVPrintFile():
8877
8883
  (self.todrive['sheetEntity'] or self.todrive['locale'] or self.todrive['timeZone'] or
8878
8884
  self.todrive['sheettitle'] or self.todrive['cellwrap'] or self.todrive['cellnumberformat'])):
8879
8885
  if not GC.Values[GC.TODRIVE_CLIENTACCESS]:
8880
- _, sheet = buildGAPIServiceObject(API.SHEETSTD, user)
8886
+ _, sheet = buildGAPIServiceObject(chooseSaAPI(API.SHEETSTD, API.SHEETS), user)
8881
8887
  if sheet is None:
8882
8888
  return
8883
8889
  else:
@@ -16263,7 +16269,7 @@ def _showCustomerLicenseInfo(customerInfo, FJQC):
16263
16269
  while True:
16264
16270
  try:
16265
16271
  result = callGAPI(rep.customerUsageReports(), 'get',
16266
- throwReasons=[GAPI.INVALID, GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
16272
+ throwReasons=[GAPI.INVALID, GAPI.FAILED_PRECONDITION, GAPI.FORBIDDEN, GAPI.PERMISSION_DENIED],
16267
16273
  date=tryDate, customerId=customerInfo['id'],
16268
16274
  fields='warnings,usageReports', parameters=parameters)
16269
16275
  usageReports = numUsersAvailable(result)
@@ -16276,7 +16282,7 @@ def _showCustomerLicenseInfo(customerInfo, FJQC):
16276
16282
  if fullData == 0:
16277
16283
  continue
16278
16284
  break
16279
- except GAPI.invalid as e:
16285
+ except (GAPI.invalid, GAPI.failedPrecondition) as e:
16280
16286
  tryDate = _adjustTryDate(str(e), 0, -1, tryDate)
16281
16287
  if not tryDate:
16282
16288
  return
@@ -17052,10 +17058,7 @@ def doPrintShowAdmins():
17052
17058
  if assignedTo not in assignedToIdEmailMap:
17053
17059
  emailTypes = ALL_ASSIGNEE_TYPES if admin.get('assigneeType', '') != 'group' else ['group']
17054
17060
  assigneeEmail, assigneeType = convertUIDtoEmailAddressWithType(f'uid:{assignedTo}', cd, sal, emailTypes=emailTypes)
17055
- if assigneeType in ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP:
17056
- assignedToField = ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP[assigneeType]
17057
- else:
17058
- assignedToField = 'assignedToUnknown'
17061
+ assignedToField = ADMIN_ASSIGNEE_TYPE_TO_ASSIGNEDTO_FIELD_MAP.get(assigneeType, 'assignedToUnknown')
17059
17062
  if assignedToField == 'assignedToUnknown':
17060
17063
  assigneeEmail = True
17061
17064
  assignedToIdEmailMap[assignedTo] = {'assignedToField': assignedToField, 'assigneeEmail': assigneeEmail}
@@ -17084,6 +17087,7 @@ def doPrintShowAdmins():
17084
17087
  typesSet = set()
17085
17088
  kwargs = {}
17086
17089
  rolePrivileges = {}
17090
+ allGroupRoles = ','.join(sorted(ALL_GROUP_ROLES))
17087
17091
  fieldsList = PRINT_ADMIN_FIELDS+['assigneeType']
17088
17092
  assignedToIdEmailMap = {}
17089
17093
  while Cmd.ArgumentsRemaining():
@@ -17098,7 +17102,6 @@ def doPrintShowAdmins():
17098
17102
  pass
17099
17103
  elif myarg == 'recursive':
17100
17104
  recursive = True
17101
- allGroupRoles = ','.join(sorted(ALL_GROUP_ROLES))
17102
17105
  memberOptions = initMemberOptions()
17103
17106
  memberOptions[MEMBEROPTION_INCLUDEDERIVEDMEMBERSHIP] = True
17104
17107
  memberOptions[MEMBEROPTION_DISPLAYMATCH] = False
@@ -17136,7 +17139,7 @@ def doPrintShowAdmins():
17136
17139
  return
17137
17140
  except GAPI.notFound as e:
17138
17141
  entityActionFailedExit([Ent.ADMIN_ROLE, kwargs['roleId']], str(e))
17139
- except (GAPI.forbidden, GAPI.serviceNotAvailable) as e:
17142
+ except GAPI.serviceNotAvailable as e:
17140
17143
  entityActionFailedExit([Ent.ADMINISTRATOR, userKey], str(e))
17141
17144
  except (GAPI.badRequest, GAPI.customerNotFound):
17142
17145
  accessErrorExit(cd)
@@ -17164,7 +17167,6 @@ def doPrintShowAdmins():
17164
17167
  groupMembers[assignedTo] = membersList[:]
17165
17168
  if not _setNamesFromIds(admin, _getPrivileges(admin)):
17166
17169
  continue
17167
- expandedAdmins.append(admin)
17168
17170
  if not groupMembers[assignedTo]:
17169
17171
  expandedAdmins.append(admin)
17170
17172
  continue
@@ -17203,7 +17205,7 @@ def doPrintShowAdmins():
17203
17205
  else:
17204
17206
  for admin in expandedAdmins:
17205
17207
  admin.pop('assigneeType', None)
17206
- admin.pop('assignedToField')
17208
+ admin.pop('assignedToField', None)
17207
17209
  if not oneItemPerRow or 'rolePrivileges' not in admin:
17208
17210
  csvPF.WriteRowTitles(flattenJSON(admin))
17209
17211
  else:
@@ -60,6 +60,7 @@ DIRECTORY = 'directory'
60
60
  DOCS = 'docs'
61
61
  DRIVE2 = 'drive2'
62
62
  DRIVE3 = 'drive3'
63
+ DRIVECD = 'drivecd'
63
64
  DRIVETD = 'drivetd'
64
65
  DRIVEACTIVITY = 'driveactivity'
65
66
  DRIVELABELS = 'drivelabels'
@@ -91,6 +92,7 @@ SERVICEACCOUNTLOOKUP = 'serviceaccountlookup'
91
92
  SERVICEMANAGEMENT = 'servicemanagement'
92
93
  SERVICEUSAGE = 'serviceusage'
93
94
  SHEETS = 'sheets'
95
+ SHEETSCD = 'sheetscd'
94
96
  SHEETSTD = 'sheetstd'
95
97
  SITEVERIFICATION = 'siteVerification'
96
98
  STORAGE = 'storage'
@@ -156,6 +158,7 @@ OAUTH2_TOKEN_ERRORS = [
156
158
  'access_denied: Account restricted',
157
159
  'internal_failure: Backend Error',
158
160
  'internal_failure: None',
161
+ 'invalid_account: Forbidden',
159
162
  'invalid_grant',
160
163
  'invalid_grant: Bad Request',
161
164
  'invalid_grant: Invalid email or User ID',
@@ -253,7 +256,8 @@ _INFO = {
253
256
  DOCS: {'name': 'Docs API', 'version': 'v1', 'v2discovery': True},
254
257
  DRIVE2: {'name': 'Drive API v2', 'version': 'v2', 'v2discovery': False, 'mappedAPI': 'drive'},
255
258
  DRIVE3: {'name': 'Drive API v3', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
256
- DRIVETD: {'name': 'Drive API v3 - todrive', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
259
+ DRIVECD: {'name': 'Drive API v3 - read command data', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
260
+ DRIVETD: {'name': 'Drive API v3 - write todrive data', 'version': 'v3', 'v2discovery': False, 'mappedAPI': 'drive'},
257
261
  DRIVEACTIVITY: {'name': 'Drive Activity API v2', 'version': 'v2', 'v2discovery': True},
258
262
  DRIVELABELS_ADMIN: {'name': 'Drive Labels API - Admin', 'version': 'v2', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
259
263
  DRIVELABELS_USER: {'name': 'Drive Labels API - User', 'version': 'v2', 'v2discovery': True, 'mappedAPI': DRIVELABELS},
@@ -283,7 +287,8 @@ _INFO = {
283
287
  SERVICEMANAGEMENT: {'name': 'Service Management API', 'version': 'v1', 'v2discovery': True},
284
288
  SERVICEUSAGE: {'name': 'Service Usage API', 'version': 'v1', 'v2discovery': True},
285
289
  SHEETS: {'name': 'Sheets API', 'version': 'v4', 'v2discovery': True},
286
- SHEETSTD: {'name': 'Sheets API - todrive', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
290
+ SHEETSCD: {'name': 'Sheets API - read command data', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
291
+ SHEETSTD: {'name': 'Sheets API - write todrive data', 'version': 'v4', 'v2discovery': True, 'mappedAPI': SHEETS},
287
292
  SITEVERIFICATION: {'name': 'Site Verification API', 'version': 'v1', 'v2discovery': True},
288
293
  STORAGE: {'name': 'Cloud Storage API', 'version': 'v1', 'v2discovery': True},
289
294
  STORAGEREAD: {'name': 'Cloud Storage API - Read', 'version': 'v1', 'v2discovery': True, 'mappedAPI': STORAGE},
@@ -750,9 +755,15 @@ _SVCACCT_SCOPES = [
750
755
  ]
751
756
 
752
757
  _SVCACCT_SPECIAL_SCOPES = [
753
- {'name': 'Drive API - todrive',
758
+ {'name': 'Drive API - read command data',
759
+ 'api': DRIVECD,
760
+ 'subscopes': [],
761
+ 'offByDefault': True,
762
+ 'scope': DRIVE_SCOPE+'.readonly'},
763
+ {'name': 'Drive API - write todrive data',
754
764
  'api': DRIVETD,
755
765
  'subscopes': [],
766
+ 'offByDefault': True,
756
767
  'scope': DRIVE_SCOPE},
757
768
  {'name': 'Gmail API - Full Access - read only',
758
769
  'api': GMAIL,
@@ -764,8 +775,14 @@ _SVCACCT_SPECIAL_SCOPES = [
764
775
  'subscopes': [],
765
776
  'offByDefault': True,
766
777
  'scope': GMAIL_SEND_SCOPE},
767
- {'name': 'Sheets API - todrive',
778
+ {'name': 'Sheets API - read command data',
779
+ 'api': SHEETSCD,
780
+ 'offByDefault': True,
781
+ 'subscopes': [],
782
+ 'scope': 'https://www.googleapis.com/auth/spreadsheets.readonly'},
783
+ {'name': 'Sheets API - write todrive data',
768
784
  'api': SHEETSTD,
785
+ 'offByDefault': True,
769
786
  'subscopes': [],
770
787
  'scope': 'https://www.googleapis.com/auth/spreadsheets'},
771
788
  ]
@@ -5,6 +5,7 @@
5
5
  - [Plain Text](#plain-text)
6
6
  - [HTML](#html)
7
7
  - [Read data from a Google Sheet](#read-data-from-a-google-sheet)
8
+ - [Limited Service Account Access](#limited-service-account-access)
8
9
  - [Read data from a Google Cloud Storage File](#read-data-from-a-google-cloud-storage-file)
9
10
  - [Plain Text](#plain-text)
10
11
  - [CSV](#csv)
@@ -79,6 +80,19 @@ Example:
79
80
  ```
80
81
  gam csv gsheet you@exmaple.com <DriveFileIDEntity> "Sheet 1" gam create user firstname "~FirstName" lastname "~lastName" email "~email"
81
82
  ```
83
+
84
+ ## Limited Service Account Access
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:
87
+ ```
88
+ gam user user@domain.com update serviceaccount
89
+
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
94
+ ```
95
+
82
96
  ## Read data from a Google Cloud Storage File
83
97
  ```
84
98
  <StorageBucketName> ::= <String>
@@ -10,6 +10,24 @@ 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.24.00
14
+
15
+ 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,
16
+ issue the following command and make these settings:
17
+ ```
18
+ gam user user@domain.com update serviceaccount
19
+
20
+ [ ] 20) Drive API (supports readonly)
21
+ [*] 21) Drive API - read command data
22
+ [ ] 42) Sheets API (supports readonly)
23
+ [*] 43) Sheets API - read command data
24
+ ```
25
+
26
+ ### 7.23.07
27
+
28
+ Fixed bug in `gam print|show admins` where all admin assignments were not displayed when
29
+ `types <AdminAssigneeTypeList>` was not specified, i.e., all assignments should be displayed.
30
+
13
31
  ### 7.23.06
14
32
 
15
33
  Added option `types <AdminAssigneeTypeList>` to `gam print|show admins` that allows filtering
@@ -252,7 +252,7 @@ writes the credentials into the file oauth2.txt.
252
252
  admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
253
253
  admin@server:/Users/admin$ gam version
254
254
  WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
255
- GAM 7.23.06 - https://github.com/GAM-team/GAM - pyinstaller
255
+ GAM 7.24.00 - https://github.com/GAM-team/GAM - pyinstaller
256
256
  GAM Team <google-apps-manager@googlegroups.com>
257
257
  Python 3.13.7 64-bit final
258
258
  macOS Tahoe 26.0.1 x86_64
@@ -990,7 +990,7 @@ writes the credentials into the file oauth2.txt.
990
990
  C:\>del C:\GAMConfig\oauth2.txt
991
991
  C:\>gam version
992
992
  WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
993
- GAM 7.22.00 - https://github.com/GAM-team/GAM - pythonsource
993
+ GAM 7.24.00 - https://github.com/GAM-team/GAM - pythonsource
994
994
  GAM Team <google-apps-manager@googlegroups.com>
995
995
  Python 3.13.7 64-bit final
996
996
  Windows-10-10.0.17134 AMD64
@@ -330,16 +330,16 @@ you want the updated data copied to `Latest` so you don't have to remember what
330
330
  gam redirect csv - todrive tdfileid <DriveFileID> tdupdatesheet tdsheet Tuesday tdbackupsheet "Backup Tuesday" tdcopysheet "Latest" ...
331
331
  ```
332
332
  ## Limited Service Account Access
333
- If you want to limit a user's service account access but still allow `todrive',
334
- issue the following command and authorize the additional service account APIs:
333
+ If you want to limit a user's service account access to Drive, Gmail and Sheets but still allow `todrive`,
334
+ issue the following command and make these settings:
335
335
  ```
336
- gam user user@domain.com update serviceaccount`
336
+ gam user user@domain.com update serviceaccount
337
337
 
338
- Authorize these APIs:
339
-
340
- Drive API - todrive
341
- Gmail API - Send Messages - including todrive
342
- Sheets API - todrive
338
+ [ ] 20) Drive API (supports readonly)
339
+ [*] 22) Drive API - write todrive data
340
+ [*] 31) Gmail API - Send Messages - including todrive
341
+ [ ] 42) Sheets API (supports readonly)
342
+ [*] 44) Sheets API - write todrive data
343
343
  ```
344
344
 
345
345
  ## No Service Account Access
@@ -27,7 +27,7 @@
27
27
  - [Delete Vault Saved Queries](#delete-vault-saved-queries)
28
28
  - [Display Vault Saved Queries](#display-vault-saved-queries)
29
29
  - [Takeout](#takeout)
30
- - [Copy a Takeout Bucket](#copy-a-takeoutbucket)
30
+ - [Copy a Takeout Bucket](#copy-a-takeout-bucket)
31
31
  - [Download a Takeout Bucket](#download-a-takeout-bucket)
32
32
 
33
33
  ## API documentation
@@ -848,7 +848,7 @@ gam create vaultquery <MatterItem> [name <String>]
848
848
  [<JSONData>]
849
849
  [shownames]
850
850
  [showdetails|returnidonly|formatjson]
851
- ``
851
+ ```
852
852
 
853
853
  If `name <String>` is omitted, the query is named `GAM <corpus> Query - <Time>`
854
854
 
@@ -928,7 +928,7 @@ Select fields to display:
928
928
 
929
929
  The `shownames` argument controls whether org unit and shared drive names are displayed in queries; additional API calls are required to get the names.
930
930
 
931
- # Takeout
931
+ ## Takeout
932
932
  Many thanks to Jay for these commands and documentation.
933
933
 
934
934
  GAM 6.42.00 and newer support copying and downloading Google Cloud Storage (GCS) buckets generated by [organization-wide Takeout](https://support.google.com/a/answer/100458?hl=en).
@@ -3,7 +3,7 @@
3
3
  Print the current version of Gam with details
4
4
  ```
5
5
  gam version
6
- GAM 7.23.06 - https://github.com/GAM-team/GAM - pyinstaller
6
+ GAM 7.24.00 - https://github.com/GAM-team/GAM - pyinstaller
7
7
  GAM Team <google-apps-manager@googlegroups.com>
8
8
  Python 3.13.7 64-bit final
9
9
  macOS Tahoe 26.0.1 x86_64
@@ -15,7 +15,7 @@ Time: 2023-06-02T21:10:00-07:00
15
15
  Print the current version of Gam with details and time offset information
16
16
  ```
17
17
  gam version timeoffset
18
- GAM 7.23.06 - https://github.com/GAM-team/GAM - pyinstaller
18
+ GAM 7.24.00 - https://github.com/GAM-team/GAM - pyinstaller
19
19
  GAM Team <google-apps-manager@googlegroups.com>
20
20
  Python 3.13.7 64-bit final
21
21
  macOS Tahoe 26.0.1 x86_64
@@ -27,7 +27,7 @@ Your system time differs from www.googleapis.com by less than 1 second
27
27
  Print the current version of Gam with extended details and SSL information
28
28
  ```
29
29
  gam version extended
30
- GAM 7.23.06 - https://github.com/GAM-team/GAM - pyinstaller
30
+ GAM 7.24.00 - https://github.com/GAM-team/GAM - pyinstaller
31
31
  GAM Team <google-apps-manager@googlegroups.com>
32
32
  Python 3.13.7 64-bit final
33
33
  macOS Tahoe 26.0.1 x86_64
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes