gam7 7.6.10__tar.gz → 7.6.12__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 (318) hide show
  1. {gam7-7.6.10 → gam7-7.6.12}/.github/workflows/build.yml +14 -2
  2. {gam7-7.6.10 → gam7-7.6.12}/PKG-INFO +2 -2
  3. {gam7-7.6.10 → gam7-7.6.12}/pyproject.toml +2 -1
  4. {gam7-7.6.10 → gam7-7.6.12}/src/GamCommands.txt +0 -11
  5. {gam7-7.6.10 → gam7-7.6.12}/src/GamUpdate.txt +15 -0
  6. {gam7-7.6.10 → gam7-7.6.12}/src/gam/__init__.py +68 -76
  7. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glapi.py +1 -8
  8. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glclargs.py +0 -2
  9. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glentity.py +0 -2
  10. {gam7-7.6.10 → gam7-7.6.12}/src/requirements.txt +1 -1
  11. {gam7-7.6.10 → gam7-7.6.12}/src/setup.cfg +4 -2
  12. {gam7-7.6.10 → gam7-7.6.12}/wiki/GamUpdates.md +15 -0
  13. {gam7-7.6.10 → gam7-7.6.12}/wiki/How-to-Upgrade-Legacy-GAM-to-GAM7.md +2 -2
  14. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Analytics-Admin.md +1 -38
  15. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Chat.md +3 -3
  16. {gam7-7.6.10 → gam7-7.6.12}/wiki/Version-and-Help.md +6 -6
  17. {gam7-7.6.10 → gam7-7.6.12}/.github/ISSUE_TEMPLATE/aa-question.md +0 -0
  18. {gam7-7.6.10 → gam7-7.6.12}/.github/ISSUE_TEMPLATE/za-bug-report.md +0 -0
  19. {gam7-7.6.10 → gam7-7.6.12}/.github/ISSUE_TEMPLATE/zz-feature-request.md +0 -0
  20. {gam7-7.6.10 → gam7-7.6.12}/.github/ISSUE_TEMPLATE.txt +0 -0
  21. {gam7-7.6.10 → gam7-7.6.12}/.github/actions/decrypt.sh +0 -0
  22. {gam7-7.6.10 → gam7-7.6.12}/.github/actions/entitlements.plist +0 -0
  23. {gam7-7.6.10 → gam7-7.6.12}/.github/actions/package_exclusions.txt +0 -0
  24. {gam7-7.6.10 → gam7-7.6.12}/.github/stale.yml +0 -0
  25. {gam7-7.6.10 → gam7-7.6.12}/.github/workflows/codeql-analysis.yml +0 -0
  26. {gam7-7.6.10 → gam7-7.6.12}/.github/workflows/get-cacerts.yml +0 -0
  27. {gam7-7.6.10 → gam7-7.6.12}/.github/workflows/pushwiki.yml +0 -0
  28. {gam7-7.6.10 → gam7-7.6.12}/.github/workflows/pypi.yml +0 -0
  29. {gam7-7.6.10 → gam7-7.6.12}/.pre-commit-config.yaml +0 -0
  30. {gam7-7.6.10 → gam7-7.6.12}/LICENSE +0 -0
  31. {gam7-7.6.10 → gam7-7.6.12}/README.md +0 -0
  32. {gam7-7.6.10 → gam7-7.6.12}/src/.gitignore +0 -0
  33. {gam7-7.6.10 → gam7-7.6.12}/src/LICENSE +0 -0
  34. {gam7-7.6.10 → gam7-7.6.12}/src/cacerts.pem +0 -0
  35. {gam7-7.6.10 → gam7-7.6.12}/src/callgam.py +0 -0
  36. {gam7-7.6.10 → gam7-7.6.12}/src/gam/__main__.py +0 -0
  37. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/__init__.py +0 -0
  38. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/auth.py +0 -0
  39. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/client.py +0 -0
  40. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/core.py +0 -0
  41. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/data.py +0 -0
  42. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/http.py +0 -0
  43. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/http_core.py +0 -0
  44. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/http_interface.py +0 -0
  45. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/mock_http.py +0 -0
  46. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/mock_http_core.py +0 -0
  47. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/mock_service.py +0 -0
  48. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/service.py +0 -0
  49. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/token_store.py +0 -0
  50. {gam7-7.6.10 → gam7-7.6.12}/src/gam/atom/url.py +0 -0
  51. {gam7-7.6.10 → gam7-7.6.12}/src/gam/cacerts.pem +0 -0
  52. {gam7-7.6.10 → gam7-7.6.12}/src/gam/cbcm-v1.1beta1.json +0 -0
  53. {gam7-7.6.10 → gam7-7.6.12}/src/gam/contactdelegation-v1.json +0 -0
  54. {gam7-7.6.10 → gam7-7.6.12}/src/gam/datastudio-v1.json +0 -0
  55. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/__init__.py +0 -0
  56. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glaction.py +0 -0
  57. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glcfg.py +0 -0
  58. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glgapi.py +0 -0
  59. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glgdata.py +0 -0
  60. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glglobals.py +0 -0
  61. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glindent.py +0 -0
  62. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glmsgs.py +0 -0
  63. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glskus.py +0 -0
  64. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/gluprop.py +0 -0
  65. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/glverlibs.py +0 -0
  66. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gamlib/yubikey.py +0 -0
  67. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/__init__.py +0 -0
  68. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/alt/__init__.py +0 -0
  69. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/alt/app_engine.py +0 -0
  70. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/alt/appengine.py +0 -0
  71. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/__init__.py +0 -0
  72. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/audit/__init__.py +0 -0
  73. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/audit/service.py +0 -0
  74. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/contacts/__init__.py +0 -0
  75. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/contacts/service.py +0 -0
  76. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/apps/service.py +0 -0
  77. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/service.py +0 -0
  78. {gam7-7.6.10 → gam7-7.6.12}/src/gam/gdata/urlfetch.py +0 -0
  79. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/__init__.py +0 -0
  80. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/_auth.py +0 -0
  81. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/_helpers.py +0 -0
  82. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/channel.py +0 -0
  83. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/discovery.py +0 -0
  84. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/discovery_cache/__init__.py +0 -0
  85. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/discovery_cache/appengine_memcache.py +0 -0
  86. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/discovery_cache/base.py +0 -0
  87. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/discovery_cache/file_cache.py +0 -0
  88. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/errors.py +0 -0
  89. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/http.py +0 -0
  90. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/mimeparse.py +0 -0
  91. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/model.py +0 -0
  92. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/schema.py +0 -0
  93. {gam7-7.6.10 → gam7-7.6.12}/src/gam/googleapiclient/version.py +0 -0
  94. {gam7-7.6.10 → gam7-7.6.12}/src/gam/iso8601/__init__.py +0 -0
  95. {gam7-7.6.10 → gam7-7.6.12}/src/gam/iso8601/iso8601.py +0 -0
  96. {gam7-7.6.10 → gam7-7.6.12}/src/gam/meet-v2beta.json +0 -0
  97. {gam7-7.6.10 → gam7-7.6.12}/src/gam/serviceaccountlookup-v1.json +0 -0
  98. {gam7-7.6.10 → gam7-7.6.12}/src/gam/six.py +0 -0
  99. {gam7-7.6.10 → gam7-7.6.12}/src/gam-install.sh +0 -0
  100. {gam7-7.6.10 → gam7-7.6.12}/src/gam-setup.bat +0 -0
  101. {gam7-7.6.10 → gam7-7.6.12}/src/gam.exe.manifest +0 -0
  102. {gam7-7.6.10 → gam7-7.6.12}/src/gam.py +0 -0
  103. {gam7-7.6.10 → gam7-7.6.12}/src/gam.spec +0 -0
  104. {gam7-7.6.10 → gam7-7.6.12}/src/gam.wxs +0 -0
  105. {gam7-7.6.10 → gam7-7.6.12}/src/license.rtf +0 -0
  106. {gam7-7.6.10 → gam7-7.6.12}/src/requirements-dev.txt +0 -0
  107. {gam7-7.6.10 → gam7-7.6.12}/src/setup.py +0 -0
  108. {gam7-7.6.10 → gam7-7.6.12}/src/tools/a_atleast_b.py +0 -0
  109. {gam7-7.6.10 → gam7-7.6.12}/src/tools/gen-wix-xml-filelist.py +0 -0
  110. {gam7-7.6.10 → gam7-7.6.12}/src/tools/mkGamRef.py +0 -0
  111. {gam7-7.6.10 → gam7-7.6.12}/src/tools/openssl.props +0 -0
  112. {gam7-7.6.10 → gam7-7.6.12}/src/version_info.txt.in +0 -0
  113. {gam7-7.6.10 → gam7-7.6.12}/wiki/00scratch.md +0 -0
  114. {gam7-7.6.10 → gam7-7.6.12}/wiki/Addresses.md +0 -0
  115. {gam7-7.6.10 → gam7-7.6.12}/wiki/Administrators.md +0 -0
  116. {gam7-7.6.10 → gam7-7.6.12}/wiki/Alert-Center.md +0 -0
  117. {gam7-7.6.10 → gam7-7.6.12}/wiki/Aliases.md +0 -0
  118. {gam7-7.6.10 → gam7-7.6.12}/wiki/Authorization.md +0 -0
  119. {gam7-7.6.10 → gam7-7.6.12}/wiki/BNF-Syntax.md +0 -0
  120. {gam7-7.6.10 → gam7-7.6.12}/wiki/Basic-Items.md +0 -0
  121. {gam7-7.6.10 → gam7-7.6.12}/wiki/Bulk-Processing.md +0 -0
  122. {gam7-7.6.10 → gam7-7.6.12}/wiki/CSV-Input-Filtering.md +0 -0
  123. {gam7-7.6.10 → gam7-7.6.12}/wiki/CSV-Output-Filtering.md +0 -0
  124. {gam7-7.6.10 → gam7-7.6.12}/wiki/CSV-Special-Characters.md +0 -0
  125. {gam7-7.6.10 → gam7-7.6.12}/wiki/Calendars-Access.md +0 -0
  126. {gam7-7.6.10 → gam7-7.6.12}/wiki/Calendars-Events.md +0 -0
  127. {gam7-7.6.10 → gam7-7.6.12}/wiki/Calendars.md +0 -0
  128. {gam7-7.6.10 → gam7-7.6.12}/wiki/Chat-Bot.md +0 -0
  129. {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-AUE-Counts.md +0 -0
  130. {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Browser-Cloud-Management.md +0 -0
  131. {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Installed-Apps.md +0 -0
  132. {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Needs-Attention-Counts.md +0 -0
  133. {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Policies.md +0 -0
  134. {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Printers.md +0 -0
  135. {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Profile-Management.md +0 -0
  136. {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Version-Counts.md +0 -0
  137. {gam7-7.6.10 → gam7-7.6.12}/wiki/Chrome-Version-History.md +0 -0
  138. {gam7-7.6.10 → gam7-7.6.12}/wiki/ChromeOS-Devices.md +0 -0
  139. {gam7-7.6.10 → gam7-7.6.12}/wiki/Classroom-Courses.md +0 -0
  140. {gam7-7.6.10 → gam7-7.6.12}/wiki/Classroom-Guardians.md +0 -0
  141. {gam7-7.6.10 → gam7-7.6.12}/wiki/Classroom-Invitations.md +0 -0
  142. {gam7-7.6.10 → gam7-7.6.12}/wiki/Classroom-Membership.md +0 -0
  143. {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Channel.md +0 -0
  144. {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Identity-Devices.md +0 -0
  145. {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Identity-Groups-Membership.md +0 -0
  146. {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Identity-Groups.md +0 -0
  147. {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Identity-Policies.md +0 -0
  148. {gam7-7.6.10 → gam7-7.6.12}/wiki/Cloud-Storage.md +0 -0
  149. {gam7-7.6.10 → gam7-7.6.12}/wiki/Collections-of-ChromeOS-Devices.md +0 -0
  150. {gam7-7.6.10 → gam7-7.6.12}/wiki/Collections-of-Items.md +0 -0
  151. {gam7-7.6.10 → gam7-7.6.12}/wiki/Collections-of-Users.md +0 -0
  152. {gam7-7.6.10 → gam7-7.6.12}/wiki/Command-Data-From-Google-Docs-Sheets-Storage.md +0 -0
  153. {gam7-7.6.10 → gam7-7.6.12}/wiki/Command-Line-Parsing.md +0 -0
  154. {gam7-7.6.10 → gam7-7.6.12}/wiki/Command-Logging-Progress.md +0 -0
  155. {gam7-7.6.10 → gam7-7.6.12}/wiki/Context-Aware-Access-Levels.md +0 -0
  156. {gam7-7.6.10 → gam7-7.6.12}/wiki/Customer.md +0 -0
  157. {gam7-7.6.10 → gam7-7.6.12}/wiki/Domain-People-Contacts-Profiles.md +0 -0
  158. {gam7-7.6.10 → gam7-7.6.12}/wiki/Domain-SharedContacts-GAL.md +0 -0
  159. {gam7-7.6.10 → gam7-7.6.12}/wiki/Domains-Verification.md +0 -0
  160. {gam7-7.6.10 → gam7-7.6.12}/wiki/Domains.md +0 -0
  161. {gam7-7.6.10 → gam7-7.6.12}/wiki/Downloads-Installs.md +0 -0
  162. {gam7-7.6.10 → gam7-7.6.12}/wiki/Drive-File-Selection.md +0 -0
  163. {gam7-7.6.10 → gam7-7.6.12}/wiki/Drive-Items.md +0 -0
  164. {gam7-7.6.10 → gam7-7.6.12}/wiki/Drive-REST-API-v3.md +0 -0
  165. {gam7-7.6.10 → gam7-7.6.12}/wiki/Email-Audit-Monitor.md +0 -0
  166. {gam7-7.6.10 → gam7-7.6.12}/wiki/Find-File-Owner.md +0 -0
  167. {gam7-7.6.10 → gam7-7.6.12}/wiki/GAM-Public-Chat-Room.md +0 -0
  168. {gam7-7.6.10 → gam7-7.6.12}/wiki/GAM-Return-Codes.md +0 -0
  169. {gam7-7.6.10 → gam7-7.6.12}/wiki/GAM-with-minimal-GCP-rights.md +0 -0
  170. {gam7-7.6.10 → gam7-7.6.12}/wiki/GAM7-on-Android-Devices.md +0 -0
  171. {gam7-7.6.10 → gam7-7.6.12}/wiki/GAM7-on-Chrome-OS-Devices.md +0 -0
  172. {gam7-7.6.10 → gam7-7.6.12}/wiki/Google-Data-Transfers.md +0 -0
  173. {gam7-7.6.10 → gam7-7.6.12}/wiki/Google-Network-Addresses.md +0 -0
  174. {gam7-7.6.10 → gam7-7.6.12}/wiki/Groups-Membership.md +0 -0
  175. {gam7-7.6.10 → gam7-7.6.12}/wiki/Groups.md +0 -0
  176. {gam7-7.6.10 → gam7-7.6.12}/wiki/HTTPS-Proxy.md +0 -0
  177. {gam7-7.6.10 → gam7-7.6.12}/wiki/Home.md +0 -0
  178. {gam7-7.6.10 → gam7-7.6.12}/wiki/How-to-Install-GAM7.md +0 -0
  179. {gam7-7.6.10 → gam7-7.6.12}/wiki/How-to-Uninstall-GAM7.md +0 -0
  180. {gam7-7.6.10 → gam7-7.6.12}/wiki/How-to-Update-GAM7.md +0 -0
  181. {gam7-7.6.10 → gam7-7.6.12}/wiki/How-to-Upgrade-GAMADV-XTD3-to-GAM7.md +0 -0
  182. {gam7-7.6.10 → gam7-7.6.12}/wiki/Inbound-SSO.md +0 -0
  183. {gam7-7.6.10 → gam7-7.6.12}/wiki/Install-GAM-as-Python-Library.md +0 -0
  184. {gam7-7.6.10 → gam7-7.6.12}/wiki/Licenses.md +0 -0
  185. {gam7-7.6.10 → gam7-7.6.12}/wiki/List-Items.md +0 -0
  186. {gam7-7.6.10 → gam7-7.6.12}/wiki/List.md +0 -0
  187. {gam7-7.6.10 → gam7-7.6.12}/wiki/Meta-Commands-and-File-Redirection.md +0 -0
  188. {gam7-7.6.10 → gam7-7.6.12}/wiki/Mobile-Devices.md +0 -0
  189. {gam7-7.6.10 → gam7-7.6.12}/wiki/Organizational-Units.md +0 -0
  190. {gam7-7.6.10 → gam7-7.6.12}/wiki/Other-Resources.md +0 -0
  191. {gam7-7.6.10 → gam7-7.6.12}/wiki/Permission-Matches.md +0 -0
  192. {gam7-7.6.10 → gam7-7.6.12}/wiki/Python-Regular-Expressions.md +0 -0
  193. {gam7-7.6.10 → gam7-7.6.12}/wiki/README.md +0 -0
  194. {gam7-7.6.10 → gam7-7.6.12}/wiki/Rclone.md +0 -0
  195. {gam7-7.6.10 → gam7-7.6.12}/wiki/Reports.md +0 -0
  196. {gam7-7.6.10 → gam7-7.6.12}/wiki/Reseller.md +0 -0
  197. {gam7-7.6.10 → gam7-7.6.12}/wiki/Resources.md +0 -0
  198. {gam7-7.6.10 → gam7-7.6.12}/wiki/Running-GAM7-securely-on-a-Google-Compute-Engine.md +0 -0
  199. {gam7-7.6.10 → gam7-7.6.12}/wiki/SSL-Root-CA-Certificates.md +0 -0
  200. {gam7-7.6.10 → gam7-7.6.12}/wiki/Schemas.md +0 -0
  201. {gam7-7.6.10 → gam7-7.6.12}/wiki/Scripts.md +0 -0
  202. {gam7-7.6.10 → gam7-7.6.12}/wiki/Send-Email.md +0 -0
  203. {gam7-7.6.10 → gam7-7.6.12}/wiki/Shared-Drives.md +0 -0
  204. {gam7-7.6.10 → gam7-7.6.12}/wiki/Sites.md +0 -0
  205. {gam7-7.6.10 → gam7-7.6.12}/wiki/Tag-Replace.md +0 -0
  206. {gam7-7.6.10 → gam7-7.6.12}/wiki/Todrive.md +0 -0
  207. {gam7-7.6.10 → gam7-7.6.12}/wiki/Unmanaged-Accounts.md +0 -0
  208. {gam7-7.6.10 → gam7-7.6.12}/wiki/Upgrade-Benefits.md +0 -0
  209. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Application-Specific-Passwords.md +0 -0
  210. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Backup-Verification-Codes.md +0 -0
  211. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Calendars-Access.md +0 -0
  212. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Calendars-Events.md +0 -0
  213. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Calendars.md +0 -0
  214. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Classification-Labels.md +0 -0
  215. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Classroom-Profile.md +0 -0
  216. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Contacts-Delegates.md +0 -0
  217. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Contacts.md +0 -0
  218. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Deprovision.md +0 -0
  219. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Activity-Settings.md +0 -0
  220. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Cleanup.md +0 -0
  221. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Comments.md +0 -0
  222. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Copy-Move.md +0 -0
  223. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Files-Display.md +0 -0
  224. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Files-Manage.md +0 -0
  225. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Orphans.md +0 -0
  226. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Ownership.md +0 -0
  227. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Permissions.md +0 -0
  228. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Query.md +0 -0
  229. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Revisions.md +0 -0
  230. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Shortcuts.md +0 -0
  231. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Drive-Transfer.md +0 -0
  232. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Forms.md +0 -0
  233. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-CSE.md +0 -0
  234. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Delegates.md +0 -0
  235. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Filters.md +0 -0
  236. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Forwarding.md +0 -0
  237. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Labels.md +0 -0
  238. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Messages-Threads.md +0 -0
  239. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Profile.md +0 -0
  240. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-S-MIME.md +0 -0
  241. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Send-As-Signature-Vacation.md +0 -0
  242. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Gmail-Settings.md +0 -0
  243. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Group-Membership.md +0 -0
  244. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Keep-Notes.md +0 -0
  245. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Looker-Studio.md +0 -0
  246. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Meet.md +0 -0
  247. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-People-Contacts-Profiles.md +0 -0
  248. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Photo.md +0 -0
  249. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Profile-Photo.md +0 -0
  250. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Profile-Sharing.md +0 -0
  251. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Shared-Drives.md +0 -0
  252. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Signout-Turnoff2SV.md +0 -0
  253. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Spreadsheets.md +0 -0
  254. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Tasks.md +0 -0
  255. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-Tokens.md +0 -0
  256. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users-YouTube.md +0 -0
  257. {gam7-7.6.10 → gam7-7.6.12}/wiki/Users.md +0 -0
  258. {gam7-7.6.10 → gam7-7.6.12}/wiki/Using-GAM7-with-a-YubiKey.md +0 -0
  259. {gam7-7.6.10 → gam7-7.6.12}/wiki/Using-GAM7-with-a-delegated-admin-service-account.md +0 -0
  260. {gam7-7.6.10 → gam7-7.6.12}/wiki/Vault-Takeout.md +0 -0
  261. {gam7-7.6.10 → gam7-7.6.12}/wiki/Verifying-a-GAM7-Build-is-Legitimate-and-Official.md +0 -0
  262. {gam7-7.6.10 → gam7-7.6.12}/wiki/_Sidebar.md +0 -0
  263. {gam7-7.6.10 → gam7-7.6.12}/wiki/gam.cfg.md +0 -0
  264. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-AdminSettingsExamples.md +0 -0
  265. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Android-Installation.md +0 -0
  266. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-BulkOperations.md +0 -0
  267. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-CalendarExamples.md +0 -0
  268. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Chat-Bot.md +0 -0
  269. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Chrome-Browser-Management.md +0 -0
  270. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Chrome-OS-Installation.md +0 -0
  271. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Chrome-Policy-Settings.md +0 -0
  272. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Cloud-Identity-Groups.md +0 -0
  273. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Calendar-Resources.md +0 -0
  274. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Calendars.md +0 -0
  275. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Definitions.md +0 -0
  276. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Drive.md +0 -0
  277. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Email.md +0 -0
  278. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Group-Attributes.md +0 -0
  279. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Groups.md +0 -0
  280. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Command-Reference-Users.md +0 -0
  281. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Context-Aware-Access-Levels.md +0 -0
  282. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Creating-client_secrets.json-and-oauth2service.json.md +0 -0
  283. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-CreatingClientSecretsFile.md +0 -0
  284. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Custom-Schemas.md +0 -0
  285. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Data-Transfers.md +0 -0
  286. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-DomainVerification.md +0 -0
  287. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-ExamplesAccountAuditing.md +0 -0
  288. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-ExamplesCSV.md +0 -0
  289. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-ExamplesEmailSettings.md +0 -0
  290. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-ExamplesOrganizations.md +0 -0
  291. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM-Discussion-Group.md +0 -0
  292. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM-on-Android-and-Chrome-OS.md +0 -0
  293. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM-options-files.md +0 -0
  294. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM-with--minimal-GCP-rights.md +0 -0
  295. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM3CSVListings.md +0 -0
  296. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM3DirectoryCommands.md +0 -0
  297. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM3GroupSettings.md +0 -0
  298. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GAM7-FAQ.md +0 -0
  299. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Google-Vault---Takeout-Commands.md +0 -0
  300. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-GoogleDriveManagement.md +0 -0
  301. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Grouping-18-or-Older-Users.md +0 -0
  302. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Home.md +0 -0
  303. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-How-to-upgrade-from-Standard-GAM.md +0 -0
  304. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Inbound-SSO-Settings.md +0 -0
  305. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-LicenseExamples.md +0 -0
  306. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Managing-Admins.md +0 -0
  307. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Managing-CloudPrint-Printers.md +0 -0
  308. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Managing-Devices.md +0 -0
  309. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Managing-Google-Classroom.md +0 -0
  310. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-OAuthKeyManagement.md +0 -0
  311. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Printers.md +0 -0
  312. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-ResellerCommands.md +0 -0
  313. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Running-GAM-on-Google-Compute-Engine-(GCE)-Securely.md +0 -0
  314. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-SecurityExamples.md +0 -0
  315. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-UnmanagedUsersExamples.md +0 -0
  316. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Use-a-Yubikey.md +0 -0
  317. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-Using-GAM-with-a-delegated-admin-service-account-(DASA).md +0 -0
  318. {gam7-7.6.10 → gam7-7.6.12}/wiki/l-_Footer.md +0 -0
@@ -28,6 +28,8 @@ env:
28
28
  OPENSSL_SOURCE_PATH: ${{ github.workspace }}/src/openssl
29
29
  PYTHON_INSTALL_PATH: ${{ github.workspace }}/bin/python
30
30
  PYTHON_SOURCE_PATH: ${{ github.workspace }}/src/cpython
31
+ CRYPTOGRAPHY_BUILD_OPENSSL_NO_LEGACY: 1
32
+ CRYPTOGRAPHY_OPENSSL_NO_LEGACY: 1
31
33
 
32
34
  jobs:
33
35
  build:
@@ -197,7 +199,7 @@ jobs:
197
199
  run: |
198
200
  echo "RUNNING: apt update..."
199
201
  sudo apt-get -qq --yes update
200
- sudo apt-get -qq --yes install swig libpcsclite-dev libxslt1-dev libsqlite3-dev
202
+ sudo apt-get -qq --yes install swig libpcsclite-dev libxslt1-dev libsqlite3-dev libffi-dev pkg-config
201
203
 
202
204
  - name: MacOS install tools
203
205
  if: runner.os == 'macOS'
@@ -450,6 +452,9 @@ jobs:
450
452
  "$PYTHON" -m pip install --upgrade pip
451
453
  "$PYTHON" -m pip install --upgrade wheel
452
454
  "$PYTHON" -m pip install --upgrade setuptools
455
+ "$PYTHON" -m pip install --upgrade importlib-metadata
456
+ "$PYTHON" -m pip install --upgrade setuptools-scm
457
+ "$PYTHON" -m pip list
453
458
 
454
459
  - name: Custom wheels for Win arm64
455
460
  if: runner.os == 'Windows' && runner.arch == 'ARM64'
@@ -462,7 +467,14 @@ jobs:
462
467
  echo "Downloading ${latest_crypt_whl}..."
463
468
  curl -O -L "$latest_crypt_whl"
464
469
  "$PYTHON" -m pip install cryptography*.whl
465
-
470
+
471
+ - uses: actions-rust-lang/setup-rust-toolchain@v1
472
+
473
+ # - name: Compile cryptography from source (no legacy)
474
+ # if: runner.os != 'Windows' || runner.arch != 'ARM64'
475
+ # run: |
476
+ # pip install --no-binary ":all:" --force cryptography
477
+
466
478
  - name: Install pip requirements
467
479
  run: |
468
480
  echo "before anything..."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gam7
3
- Version: 7.6.10
3
+ Version: 7.6.12
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
@@ -27,7 +27,7 @@ Requires-Dist: google-auth-httplib2>=0.2.0
27
27
  Requires-Dist: google-auth-oauthlib>=1.2.2
28
28
  Requires-Dist: google-auth>=2.39.0
29
29
  Requires-Dist: httplib2>=0.22.0
30
- Requires-Dist: lxml
30
+ Requires-Dist: lxml>=5.4.0
31
31
  Requires-Dist: passlib>=1.7.4
32
32
  Requires-Dist: pathvalidate>=3.2.3
33
33
  Requires-Dist: pyscard==2.2.1
@@ -7,6 +7,7 @@ authors = [
7
7
  { name="Jay Lee", email="jay0lee@gmail.com" },
8
8
  { name="Ross Scroggs", email="Ross.Scroggs@gmail.com" },
9
9
  ]
10
+ # # The following files should be edited to match: setup.cfg, requirements.txt
10
11
  dependencies = [
11
12
  "chardet>=5.2.0",
12
13
  "cryptography>=44.0.2",
@@ -17,7 +18,7 @@ dependencies = [
17
18
  "google-auth-oauthlib>=1.2.2",
18
19
  "google-auth>=2.39.0",
19
20
  "httplib2>=0.22.0",
20
- "lxml",
21
+ "lxml>=5.4.0",
21
22
  "passlib>=1.7.4",
22
23
  "pathvalidate>=3.2.3",
23
24
  "pyscard==2.2.1",
@@ -1523,17 +1523,6 @@ gam print alias|aliases [todrive <ToDriveAttribute>*]
1523
1523
 
1524
1524
  gam whatis <EmailItem> [noinfo] [noinivitablecheck]
1525
1525
 
1526
- # Analytics UA
1527
-
1528
- gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
1529
- accountid [accounts/]<String>
1530
- [maxresults <Integer>]
1531
- [formatjson [quotechar <Character>]]
1532
- gam <UserTypeEntity> show analyticuaproperties
1533
- accountid [accounts/]<String>
1534
- [maxresults <Integer>]
1535
- [formatjson]
1536
-
1537
1526
  # Analytics Admin
1538
1527
 
1539
1528
  gam <UserTypeEntity> print analyticaccounts [todrive <ToDriveAttribute>*]
@@ -1,3 +1,18 @@
1
+ 7.06.12
2
+
3
+ Deleted commands to display Analytic UA properties; the API has been deprecated.
4
+ ```
5
+ gam <UserTypeEntity> print|show analyticuaproperties
6
+ ```
7
+
8
+ 7.06.11
9
+
10
+ Improved `gam checkconn`.
11
+
12
+ Updated `gam print group-members` and `gam print cigroup-members` to recognize members
13
+ that are groups representing chat spaces. For now, these groups are not expanded when
14
+ `recursive` is specified.
15
+
1
16
  7.06.10
2
17
 
3
18
  Added the following license SKU.
@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
25
25
  """
26
26
 
27
27
  __author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
28
- __version__ = '7.06.10'
28
+ __version__ = '7.06.12'
29
29
  __license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
30
30
 
31
31
  #pylint: disable=wrong-import-position
@@ -95,6 +95,8 @@ import wsgiref.simple_server
95
95
  import wsgiref.util
96
96
  import zipfile
97
97
 
98
+ # disable legacy stuff we don't use and isn't secure
99
+ os.environ['CRYPTOGRAPHY_OPENSSL_NO_LEGACY'] = "1"
98
100
  from cryptography import x509
99
101
  from cryptography.hazmat.backends import default_backend
100
102
  from cryptography.hazmat.primitives import hashes, serialization
@@ -9358,32 +9360,9 @@ def getOSPlatform():
9358
9360
 
9359
9361
  # gam checkconnection
9360
9362
  def doCheckConnection():
9361
- hosts = ['api.github.com',
9362
- 'raw.githubusercontent.com',
9363
- 'accounts.google.com',
9364
- 'workspace.google.com',
9365
- 'oauth2.googleapis.com',
9366
- 'www.googleapis.com']
9367
- fix_hosts = {'calendar-json.googleapis.com': 'www.googleapis.com',
9368
- 'storage-api.googleapis.com': 'storage.googleapis.com'}
9369
- api_hosts = ['apps-apis.google.com',
9370
- 'sites.google.com',
9371
- 'versionhistory.googleapis.com',
9372
- 'www.google.com']
9373
- for host in API.PROJECT_APIS:
9374
- host = fix_hosts.get(host, host)
9375
- if host not in api_hosts and host not in hosts:
9376
- api_hosts.append(host)
9377
- hosts.extend(sorted(api_hosts))
9378
- host_count = len(hosts)
9379
- httpObj = getHttpObj(timeout=30)
9380
- httpObj.follow_redirects = False
9381
- headers = {'user-agent': GAM_USER_AGENT}
9382
- okay = createGreenText('OK')
9383
- not_okay = createRedText('ERROR')
9384
- try_count = 0
9385
- success_count = 0
9386
- for host in hosts:
9363
+
9364
+ def check_host(host):
9365
+ nonlocal try_count, okay, not_okay, success_count
9387
9366
  try_count += 1
9388
9367
  dns_err = None
9389
9368
  ip = 'unknown'
@@ -9393,12 +9372,12 @@ def doCheckConnection():
9393
9372
  dns_err = f'{not_okay}\n DNS failure: {str(e)}\n'
9394
9373
  except Exception as e:
9395
9374
  dns_err = f'{not_okay}\n Unknown DNS failure: {str(e)}\n'
9396
- check_line = f'Checking {host} ({ip}) ({try_count}/{host_count})...'
9375
+ check_line = f'Checking {host} ({ip}) ({try_count})...'
9397
9376
  writeStdout(f'{check_line:<100}')
9398
9377
  flushStdout()
9399
9378
  if dns_err:
9400
9379
  writeStdout(dns_err)
9401
- continue
9380
+ return
9402
9381
  gen_firewall = 'You probably have security software or a firewall on your machine or network that is preventing GAM from making Internet connections. Check your network configuration or try running GAM on a hotspot or home network to see if the problem exists only on your organization\'s network.'
9403
9382
  try:
9404
9383
  if host.startswith('http'):
@@ -9427,7 +9406,54 @@ def doCheckConnection():
9427
9406
  writeStdout(f'{not_okay}\n Timed out trying to connect to host\n')
9428
9407
  except Exception as e:
9429
9408
  writeStdout(f'{not_okay}\n {str(e)}\n')
9430
- if success_count == host_count:
9409
+
9410
+ try_count = 0
9411
+ httpObj = getHttpObj(timeout=30)
9412
+ httpObj.follow_redirects = False
9413
+ headers = {'user-agent': GAM_USER_AGENT}
9414
+ okay = createGreenText('OK')
9415
+ not_okay = createRedText('ERROR')
9416
+ success_count = 0
9417
+ initial_hosts = ['api.github.com',
9418
+ 'raw.githubusercontent.com',
9419
+ 'accounts.google.com',
9420
+ 'oauth2.googleapis.com',
9421
+ 'www.googleapis.com']
9422
+ for host in initial_hosts:
9423
+ check_host(host)
9424
+ api_hosts = ['apps-apis.google.com',
9425
+ 'www.google.com']
9426
+ for host in api_hosts:
9427
+ check_host(host)
9428
+ # For v2 discovery APIs, GAM gets discovery file from <api>.googleapis.com so
9429
+ # add those domains.
9430
+ disc_hosts = []
9431
+ for api, config in API._INFO.items():
9432
+ if config.get('v2discovery') and not config.get('localdiscovery'):
9433
+ if mapped_api := config.get('mappedAPI'):
9434
+ api = mapped_api
9435
+ host = f'{api}.googleapis.com'
9436
+ if host not in disc_hosts:
9437
+ disc_hosts.append(host)
9438
+ for host in disc_hosts:
9439
+ check_host(host)
9440
+ checked_hosts = initial_hosts + api_hosts + disc_hosts
9441
+ # now we need to "build" each API and check it's base URL host
9442
+ # if we haven't already. This may not be any hosts at all but
9443
+ # to ensure we are checking all hosts GAM may use we should
9444
+ # keep this.
9445
+ for api in API._INFO:
9446
+ if api in [API.CONTACTS, API.EMAIL_AUDIT]:
9447
+ continue
9448
+ svc = getService(api, httpObj)
9449
+ base_url = svc._rootDesc.get('baseUrl')
9450
+ parsed_base_url = urlparse(base_url)
9451
+ base_host = parsed_base_url.netloc
9452
+ if base_host not in checked_hosts:
9453
+ writeStdout(f'Checking {base_host} for {api}\n')
9454
+ check_host(base_host)
9455
+ checked_hosts.append(base_host)
9456
+ if success_count == try_count:
9431
9457
  writeStdout(createGreenText('All hosts passed!\n'))
9432
9458
  else:
9433
9459
  systemErrorExit(3, createYellowText('Some hosts failed to connect! Please follow the recommendations for those hosts to correct any issues and try again.'))
@@ -15778,27 +15804,13 @@ ANALYTIC_ENTITY_MAP = {
15778
15804
  'pageSize': 50,
15779
15805
  'maxPageSize': 200,
15780
15806
  },
15781
- Ent.ANALYTIC_UA_PROPERTY:
15782
- {'titles': ['User', 'accountId', 'name', 'id', 'created', 'updated'],
15783
- 'JSONtitles': ['User', 'accountId', 'name', 'id', 'JSON'],
15784
- 'timeObjects': ['created', 'updated'],
15785
- 'items': 'items',
15786
- 'pageSize': 50,
15787
- 'maxPageSize': 200,
15788
- },
15789
15807
  }
15790
15808
 
15791
15809
  def printShowAnalyticItems(users, entityType):
15792
15810
  analyticEntityMap = ANALYTIC_ENTITY_MAP[entityType]
15793
15811
  csvPF = CSVPrintFile(analyticEntityMap['titles'], 'sortall') if Act.csvFormat() else None
15794
15812
  FJQC = FormatJSONQuoteChar(csvPF)
15795
- if entityType != Ent.ANALYTIC_UA_PROPERTY:
15796
- kwargs = {'pageSize': analyticEntityMap['pageSize']}
15797
- api = API.ANALYTICS_ADMIN
15798
- else:
15799
- # kwargs = {'webPropertyId': '~all'}
15800
- kwargs = {}
15801
- api = API.ANALYTICS
15813
+ kwargs = {'pageSize': analyticEntityMap['pageSize']}
15802
15814
  if entityType in {Ent.ANALYTIC_ACCOUNT, Ent.ANALYTIC_PROPERTY}:
15803
15815
  kwargs['showDeleted'] = False
15804
15816
  while Cmd.ArgumentsRemaining():
@@ -15811,16 +15823,12 @@ def printShowAnalyticItems(users, entityType):
15811
15823
  kwargs['showDeleted'] = getBoolean()
15812
15824
  elif entityType == Ent.ANALYTIC_PROPERTY and myarg == 'filter':
15813
15825
  kwargs['filter'] = getString(Cmd.OB_STRING)
15814
- elif entityType == Ent.ANALYTIC_UA_PROPERTY and myarg == 'accountid':
15815
- kwargs['accountId'] = getString(Cmd.OB_STRING).replace('accounts/', '')
15816
15826
  elif entityType == Ent.ANALYTIC_DATASTREAM and myarg == 'parent':
15817
15827
  kwargs['parent'] = getString(Cmd.OB_STRING)
15818
15828
  else:
15819
15829
  FJQC.GetFormatJSONQuoteChar(myarg, True)
15820
15830
  if entityType == Ent.ANALYTIC_PROPERTY and 'filter' not in kwargs:
15821
15831
  missingArgumentExit('filter')
15822
- if entityType == Ent.ANALYTIC_UA_PROPERTY and 'accountId' not in kwargs:
15823
- missingArgumentExit('accountid')
15824
15832
  if entityType == Ent.ANALYTIC_DATASTREAM and 'parent' not in kwargs:
15825
15833
  missingArgumentExit('parent')
15826
15834
  if csvPF and FJQC.formatJSON:
@@ -15828,7 +15836,7 @@ def printShowAnalyticItems(users, entityType):
15828
15836
  i, count, users = getEntityArgument(users)
15829
15837
  for user in users:
15830
15838
  i += 1
15831
- user, analytics = buildGAPIServiceObject(api, user, i, count)
15839
+ user, analytics = buildGAPIServiceObject(API.ANALYTICS_ADMIN, user, i, count)
15832
15840
  if not analytics:
15833
15841
  continue
15834
15842
  if entityType == Ent.ANALYTIC_ACCOUNT:
@@ -15837,11 +15845,8 @@ def printShowAnalyticItems(users, entityType):
15837
15845
  service = analytics.accountSummaries()
15838
15846
  elif entityType == Ent.ANALYTIC_DATASTREAM:
15839
15847
  service = analytics.properties().dataStreams()
15840
- elif entityType == Ent.ANALYTIC_PROPERTY:
15848
+ else: # entityType == Ent.ANALYTIC_PROPERTY:
15841
15849
  service = analytics.properties()
15842
- else: #Ent.ANALYTIC_UA_PROPERTY:
15843
- service = analytics.management().webproperties()
15844
- # service = analytics.management().profiles()
15845
15850
  if csvPF:
15846
15851
  printGettingAllEntityItemsForWhom(entityType, user, i, count)
15847
15852
  pageMessage = getPageMessageForWhom()
@@ -15882,10 +15887,7 @@ def printShowAnalyticItems(users, entityType):
15882
15887
  if not FJQC.formatJSON:
15883
15888
  csvPF.WriteRowTitles(row)
15884
15889
  elif csvPF.CheckRowTitles(row):
15885
- if entityType != Ent.ANALYTIC_UA_PROPERTY:
15886
- row = {'User': user, 'name': item['name'], 'displayName': item['displayName']}
15887
- else:
15888
- row = {'User': user, 'accountId': item['accountId'], 'id': item['id'], 'name': item['name']}
15890
+ row = {'User': user, 'name': item['name'], 'displayName': item['displayName']}
15889
15891
  for field in analyticEntityMap['JSONtitles'][2:-1]:
15890
15892
  row[field] = item[field]
15891
15893
  row['JSON'] = json.dumps(cleanJSON(item, timeObjects=analyticEntityMap['timeObjects']),
@@ -15923,17 +15925,6 @@ def printShowAnalyticAccountSummaries(users):
15923
15925
  def printShowAnalyticProperties(users):
15924
15926
  printShowAnalyticItems(users, Ent.ANALYTIC_PROPERTY)
15925
15927
 
15926
- # gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
15927
- # accountid [accounts/]<String>
15928
- # [maxresults <Integer>]
15929
- # [formatjson [quotechar <Character>]]
15930
- # gam <UserTypeEntity> show analyticuaproperties
15931
- # accountid [accounts/]<String>
15932
- # [maxresults <Integer>]
15933
- # [formatjson]
15934
- def printShowAnalyticUAProperties(users):
15935
- printShowAnalyticItems(users, Ent.ANALYTIC_UA_PROPERTY)
15936
-
15937
15928
  # gam <UserTypeEntity> print analyticdatastreams [todrive <ToDriveAttribute>*]
15938
15929
  # parent <String>
15939
15930
  # [maxresults <Integer>]
@@ -34179,7 +34170,8 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
34179
34170
  elif memberOptions[MEMBEROPTION_NODUPLICATES]:
34180
34171
  groupMemberList = []
34181
34172
  for member in groupMembers:
34182
- if member['type'] != Ent.TYPE_GROUP:
34173
+ namespace = member['email'].find('@') == -1
34174
+ if member['type'] != Ent.TYPE_GROUP or namespace:
34183
34175
  if ((member['type'] in typesSet and
34184
34176
  checkMemberMatch(member, memberOptions) and
34185
34177
  _checkMemberRoleIsSuspendedIsArchived(member, validRoles, memberOptions[MEMBEROPTION_ISSUSPENDED], memberOptions[MEMBEROPTION_ISARCHIVED]) and
@@ -34208,7 +34200,8 @@ def getGroupMembers(cd, groupEmail, memberRoles, membersList, membersSet, i, cou
34208
34200
  memberOptions, memberDisplayOptions, level+1, typesSet)
34209
34201
  else:
34210
34202
  for member in groupMembers:
34211
- if member['type'] != Ent.TYPE_GROUP:
34203
+ namespace = member['email'].find('@') == -1
34204
+ if member['type'] != Ent.TYPE_GROUP or namespace:
34212
34205
  if ((member['type'] in typesSet) and
34213
34206
  checkMemberMatch(member, memberOptions) and
34214
34207
  _checkMemberRoleIsSuspendedIsArchived(member, validRoles,
@@ -36307,7 +36300,8 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
36307
36300
  for member in groupMembers:
36308
36301
  getCIGroupMemberRoleFixType(member)
36309
36302
  memberName = member.get('preferredMemberKey', {}).get('id', '')
36310
- if member['type'] != Ent.TYPE_GROUP:
36303
+ namespace = member.get('preferredMemberKey', {}).get('namespace', '')
36304
+ if member['type'] != Ent.TYPE_GROUP or namespace:
36311
36305
  if (member['type'] in typesSet and
36312
36306
  checkCIMemberMatch(member, memberOptions) and
36313
36307
  _checkMemberRole(member, validRoles) and
@@ -36335,7 +36329,8 @@ def getCIGroupMembers(ci, groupName, memberRoles, membersList, membersSet, i, co
36335
36329
  for member in groupMembers:
36336
36330
  getCIGroupMemberRoleFixType(member)
36337
36331
  memberName = member.get('preferredMemberKey', {}).get('id', '')
36338
- if member['type'] != Ent.TYPE_GROUP:
36332
+ namespace = member.get('preferredMemberKey', {}).get('namespace', '')
36333
+ if member['type'] != Ent.TYPE_GROUP or namespace:
36339
36334
  if (member['type'] in typesSet and
36340
36335
  checkCIMemberMatch(member, memberOptions) and
36341
36336
  _checkMemberRole(member, validRoles) and
@@ -76686,7 +76681,6 @@ USER_COMMANDS_WITH_OBJECTS = {
76686
76681
  Cmd.ARG_ANALYTICACCOUNTSUMMARY: printShowAnalyticAccountSummaries,
76687
76682
  Cmd.ARG_ANALYTICDATASTREAM: printShowAnalyticDatastreams,
76688
76683
  Cmd.ARG_ANALYTICPROPERTY: printShowAnalyticProperties,
76689
- Cmd.ARG_ANALYTICUAPROPERTY: printShowAnalyticUAProperties,
76690
76684
  Cmd.ARG_ASP: printShowASPs,
76691
76685
  Cmd.ARG_BACKUPCODE: printShowBackupCodes,
76692
76686
  Cmd.ARG_CALENDAR: printShowCalendars,
@@ -76793,7 +76787,6 @@ USER_COMMANDS_WITH_OBJECTS = {
76793
76787
  Cmd.ARG_ANALYTICACCOUNTSUMMARY: printShowAnalyticAccountSummaries,
76794
76788
  Cmd.ARG_ANALYTICDATASTREAM: printShowAnalyticDatastreams,
76795
76789
  Cmd.ARG_ANALYTICPROPERTY: printShowAnalyticProperties,
76796
- Cmd.ARG_ANALYTICUAPROPERTY: printShowAnalyticUAProperties,
76797
76790
  Cmd.ARG_ASP: printShowASPs,
76798
76791
  Cmd.ARG_BACKUPCODE: printShowBackupCodes,
76799
76792
  Cmd.ARG_CALENDAR: printShowCalendars,
@@ -77006,7 +76999,6 @@ USER_COMMANDS_OBJ_ALIASES = {
77006
76999
  Cmd.ARG_ANALYTICACCOUNTSUMMARIES: Cmd.ARG_ANALYTICACCOUNTSUMMARY,
77007
77000
  Cmd.ARG_ANALYTICDATASTREAMS: Cmd.ARG_ANALYTICDATASTREAM,
77008
77001
  Cmd.ARG_ANALYTICPROPERTIES: Cmd.ARG_ANALYTICPROPERTY,
77009
- Cmd.ARG_ANALYTICUAPROPERTIES: Cmd.ARG_ANALYTICUAPROPERTY,
77010
77002
  Cmd.ARG_ASPS: Cmd.ARG_ASP,
77011
77003
  Cmd.ARG_BACKUPCODES: Cmd.ARG_BACKUPCODE,
77012
77004
  Cmd.ARG_CALENDARS: Cmd.ARG_CALENDAR,
@@ -22,7 +22,6 @@
22
22
  # APIs
23
23
  ACCESSCONTEXTMANAGER = 'accesscontextmanager'
24
24
  ALERTCENTER = 'alertcenter'
25
- ANALYTICS = 'analytics'
26
25
  ANALYTICS_ADMIN = 'analyticsadmin'
27
26
  CALENDAR = 'calendar'
28
27
  CBCM = 'cbcm'
@@ -162,7 +161,6 @@ PROJECT_APIS = [
162
161
  'accesscontextmanager.googleapis.com',
163
162
  'admin.googleapis.com',
164
163
  'alertcenter.googleapis.com',
165
- 'analytics.googleapis.com',
166
164
  'analyticsadmin.googleapis.com',
167
165
  # 'audit.googleapis.com',
168
166
  'calendar-json.googleapis.com',
@@ -201,7 +199,6 @@ PROJECT_APIS = [
201
199
  _INFO = {
202
200
  ACCESSCONTEXTMANAGER: {'name': 'Access Context Manager API', 'version': 'v1', 'v2discovery': True},
203
201
  ALERTCENTER: {'name': 'AlertCenter API', 'version': 'v1beta1', 'v2discovery': True},
204
- ANALYTICS: {'name': 'Analytics API', 'version': 'v3', 'v2discovery': False},
205
202
  ANALYTICS_ADMIN: {'name': 'Analytics Admin API', 'version': 'v1beta', 'v2discovery': True},
206
203
  CALENDAR: {'name': 'Calendar API', 'version': 'v3', 'v2discovery': True, 'mappedAPI': 'calendar-json'},
207
204
  CBCM: {'name': 'Chrome Browser Cloud Management API', 'version': 'v1.1beta1', 'v2discovery': True, 'localjson': True},
@@ -244,7 +241,7 @@ _INFO = {
244
241
  EMAIL_AUDIT: {'name': 'Email Audit API', 'version': 'v1', 'v2discovery': False},
245
242
  FORMS: {'name': 'Forms API', 'version': 'v1', 'v2discovery': True},
246
243
  GMAIL: {'name': 'Gmail API', 'version': 'v1', 'v2discovery': True},
247
- GROUPSMIGRATION: {'name': 'Groups Migration API', 'version': 'v1', 'v2discovery': False},
244
+ GROUPSMIGRATION: {'name': 'Groups Migration API', 'version': 'v1', 'v2discovery': True},
248
245
  GROUPSSETTINGS: {'name': 'Groups Settings API', 'version': 'v1', 'v2discovery': True},
249
246
  IAM: {'name': 'Identity and Access Management API', 'version': 'v1', 'v2discovery': True},
250
247
  IAM_CREDENTIALS: {'name': 'Identity and Access Management Credentials API', 'version': 'v1', 'v2discovery': True},
@@ -532,10 +529,6 @@ _SVCACCT_SCOPES = [
532
529
  'api': ALERTCENTER,
533
530
  'subscopes': [],
534
531
  'scope': 'https://www.googleapis.com/auth/apps.alerts'},
535
- {'name': 'Analytics API - read only',
536
- 'api': ANALYTICS,
537
- 'subscopes': [],
538
- 'scope': 'https://www.googleapis.com/auth/analytics.readonly'},
539
532
  {'name': 'Analytics Admin API - read only',
540
533
  'api': ANALYTICS_ADMIN,
541
534
  'subscopes': [],
@@ -423,8 +423,6 @@ class GamCLArgs():
423
423
  ARG_ANALYTICDATASTREAMS = 'analyticdatastreams'
424
424
  ARG_ANALYTICPROPERTY = 'analyticproperty'
425
425
  ARG_ANALYTICPROPERTIES = 'analyticproperties'
426
- ARG_ANALYTICUAPROPERTY = 'analyticuaproperty'
427
- ARG_ANALYTICUAPROPERTIES = 'analyticuaproperties'
428
426
  ARG_API = 'api'
429
427
  ARG_APIS = 'apis'
430
428
  ARG_APIPROJECT = 'apiproject'
@@ -61,7 +61,6 @@ class GamEntity():
61
61
  ANALYTIC_ACCOUNT_SUMMARY = 'anas'
62
62
  ANALYTIC_DATASTREAM = 'anad'
63
63
  ANALYTIC_PROPERTY = 'anap'
64
- ANALYTIC_UA_PROPERTY = 'anau'
65
64
  API = 'api '
66
65
  APP_ACCESS_SETTINGS = 'apps'
67
66
  APP_ID = 'appi'
@@ -412,7 +411,6 @@ class GamEntity():
412
411
  ANALYTIC_ACCOUNT_SUMMARY: ['Analytic Account Summaries', 'Analytic Account Summary'],
413
412
  ANALYTIC_DATASTREAM: ['Analytic Datastreams', 'Analytic Datastream'],
414
413
  ANALYTIC_PROPERTY: ['Analytic GA4 Properties', 'Analytic GA4 Property'],
415
- ANALYTIC_UA_PROPERTY: ['Analytic UA Properties', 'Analytic UA Property'],
416
414
  API: ['APIs', 'API'],
417
415
  APP_ACCESS_SETTINGS: ['Application Access Settings', 'Application Access Settings'],
418
416
  APP_ID: ['Application IDs', 'Application ID'],
@@ -7,7 +7,7 @@ google-auth-httplib2>=0.2.0
7
7
  google-auth-oauthlib>=1.2.2
8
8
  google-auth>=2.39.0
9
9
  httplib2>=0.22.0
10
- lxml
10
+ lxml>=5.4.0
11
11
  passlib>=1.7.4
12
12
  pathvalidate>=3.2.3
13
13
  pyscard==2.2.1
@@ -17,11 +17,13 @@ classifiers =
17
17
  Programming Language :: Python :: 3.10
18
18
  Programming Language :: Python :: 3.11
19
19
  Programming Language :: Python :: 3.12
20
+ Programming Language :: Python :: 3.13
20
21
  License :: OSI Approved :: Apache License
21
22
 
22
23
  [options]
23
24
  packages = find:
24
- python_requires = >= 3.8
25
+ python_requires = >= 3.9
26
+ # The following files should be edited to match: pyproject.toml, requirements.txt
25
27
  install_requires =
26
28
  chardet >= 5.2.0
27
29
  cryptography >= 44.0.2
@@ -32,7 +34,7 @@ install_requires =
32
34
  google-auth-oauthlib >= 1.2.2
33
35
  google-auth >= 2.39.0
34
36
  httplib2 >= 0.22.0
35
- lxml
37
+ lxml >= 5.4.0
36
38
  passlib >= 1.7.4
37
39
  pathvalidate >= 3.2.3
38
40
  pyscard == 2.2.1
@@ -10,6 +10,21 @@ 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.06.12
14
+
15
+ Deleted commands to display Analytic UA properties; the API has been deprecated.
16
+ ```
17
+ gam <UserTypeEntity> print|show analyticuaproperties
18
+ ```
19
+
20
+ ### 7.06.11
21
+
22
+ Improved `gam checkconn`.
23
+
24
+ Updated `gam print group-members` and `gam print cigroup-members` to recognize members
25
+ that are groups representing chat spaces. For now, these groups are not expanded when
26
+ `recursive` is specified.
27
+
13
28
  ### 7.06.10
14
29
 
15
30
  Added the following license SKU.
@@ -251,7 +251,7 @@ writes the credentials into the file oauth2.txt.
251
251
  admin@server:/Users/admin$ rm -f /Users/admin/GAMConfig/oauth2.txt
252
252
  admin@server:/Users/admin$ gam version
253
253
  WARNING: Config File: /Users/admin/GAMConfig/gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: /Users/admin/GAMConfig/oauth2.txt, Not Found
254
- GAM 7.06.10 - https://github.com/GAM-team/GAM - pyinstaller
254
+ GAM 7.06.12 - https://github.com/GAM-team/GAM - pyinstaller
255
255
  GAM Team <google-apps-manager@googlegroups.com>
256
256
  Python 3.13.3 64-bit final
257
257
  MacOS Sequoia 15.4.1 x86_64
@@ -989,7 +989,7 @@ writes the credentials into the file oauth2.txt.
989
989
  C:\>del C:\GAMConfig\oauth2.txt
990
990
  C:\>gam version
991
991
  WARNING: Config File: C:\GAMConfig\gam.cfg, Section: DEFAULT, Item: oauth2_txt, Value: C:\GAMConfig\oauth2.txt, Not Found
992
- GAM 7.06.10 - https://github.com/GAM-team/GAM - pythonsource
992
+ GAM 7.06.12 - https://github.com/GAM-team/GAM - pythonsource
993
993
  GAM Team <google-apps-manager@googlegroups.com>
994
994
  Python 3.13.3 64-bit final
995
995
  Windows-10-10.0.17134 AMD64
@@ -6,14 +6,13 @@
6
6
  - [Display Analytic Account Summaries](#display-analytic-account-summaries)
7
7
  - [Display Analytic Properties](#display-analytic-properties)
8
8
  - [Display Analytic Datastreams](#display-analytic-datastreams)
9
- - [Display Analytic UA Properties](#display-analytic-ua-properties)
10
9
  - [Examples](#examples)
11
10
 
12
11
  ## API documentation
13
12
  * [Analytics Admin API](https://developers.google.com/analytics/devguides/config/admin/v1/rest)
14
13
 
15
14
  ## Notes
16
- To use these commands you must add 'Analytics API' and 'Analytics Admin API' to your project and update your service account authorization.
15
+ To use these commands you must add 'Analytics Admin API' to your project and update your service account authorization.
17
16
  ```
18
17
  gam update project
19
18
  gam user user@domain.com update serviceaccount
@@ -142,37 +141,6 @@ When using the `formatjson` option, double quotes are used extensively in the da
142
141
  The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
143
142
  `quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
144
143
 
145
- ## Display Analytic UA Properties
146
- ```
147
- gam <UserTypeEntity> show analyticuaproperties
148
- accountid [accounts/]<String>
149
- [maxresults <Integer>]
150
- [formatjson]
151
- ```
152
- The required `accountid <String>` can be in the format: 'accounts/123' or '123'.
153
-
154
- By default, GAM asks the API for 50 properties per page of results,
155
- * `maxresults` - Maximum number of results per page; range is 1-200; the default is 50.
156
-
157
- By default, Gam displays the information as an indented list of keys and values.
158
- * `formatjson` - Display the fields in JSON format.
159
- ```
160
- gam <UserTypeEntity> print analyticuaproperties [todrive <ToDriveAttribute>*]
161
- accountid [accounts/]<String>
162
- [maxresults <Integer>]
163
- [formatjson [quotechar <Character>]]
164
- ```
165
- The required `accountid <String>` can be in the format: 'accounts/123' or '123'.
166
-
167
- By default, GAM asks the API for 50 properties per page of results,
168
- * `maxresults` - Maximum number of results per page; range is 1-200; the default is 50.
169
-
170
- By default, when writing CSV files, Gam uses a quote character of double quote `"`. The quote character is used to enclose columns that contain
171
- the quote character itself, the column delimiter (comma by default) and new-line characters. Any quote characters within the column are doubled.
172
- When using the `formatjson` option, double quotes are used extensively in the data resulting in hard to read/process output.
173
- The `quotechar <Character>` option allows you to choose an alternate quote character, single quote for instance, that makes for readable/processable output.
174
- `quotechar` defaults to `gam.cfg/csv_output_quote_char`. When uploading CSV files to Google, double quote `"` should be used.
175
-
176
144
 
177
145
  ## Examples
178
146
  Get all analytic accounts
@@ -189,8 +157,3 @@ Get all analytic account properties (GA4)
189
157
  ```
190
158
  gam redirect stdout - multiprocess redirect stderr stdout redirect csv ./GA4AnalyticAccountProperties.csv multiprocess csv AnalyticAccounts.csv gam user "~User" print analyticproperties filter "parent:~~name~~"
191
159
  ```
192
-
193
- Get all analytic account properties (UA)
194
- ```
195
- gam redirect stdout - multiprocess redirect stderr stdout redirect csv ./UAAnalyticAccountProperties.csv multiprocess csv AnalyticAccounts.csv gam user "~User" print analyticuaproperties accountid "~~name~~"
196
- ```
@@ -42,12 +42,12 @@ Google requires that you have a Chat Bot configured in order to use the Chat API
42
42
 
43
43
  ## Set up a Chat Bot
44
44
 
45
- * Run the command `gam setup chat`; it will point you to a URL to configure your Chat Bot; this is required to use the Chat API.
45
+ * Run the command `gam setup chat`; it will point you to a URL to configure your Chat Bot.
46
46
  * Enter an App name and Description of your choosing.
47
47
  * For the Avatar URL you can use `https://dummyimage.com/384x256/4d4d4d/0011ff.png&text=+GAM` or a public URL to an image of your own choosing.
48
48
  * In Functionality, uncheck both "Receive 1:1 messages" and "Join spaces and group conversations"
49
- * In Connection settings, choose "Cloud Pub/Sub" and enter "no-topic" for the topic name. GAM doesn't yet listen to pub/sub so this option is not used.
50
- * In Visibility, uncheck "Make this Chat app available to specific people and groups in Domain Workspace".
49
+ * In Connection settings, choose "Cloud Pub/Sub" and enter `projects/<ProjectID>/topics/no-topic` for the topic name. Replace `<ProjectID>` with your GAM project ID. GAM doesn't yet listen to pub/sub so this option is not used.
50
+ * In Visibility, uncheck "Make this Chat app available to specific people and groups in Domain Workspace".
51
51
  * Click Save.
52
52
 
53
53
  ## API documentation