girder 3.2.16.dev1__tar.gz → 3.2.19.dev1__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.
Files changed (804) hide show
  1. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.circleci/publish_npm.sh +10 -5
  2. {girder-3.2.16.dev1/girder.egg-info → girder-3.2.19.dev1}/PKG-INFO +1 -1
  3. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/folder.py +1 -1
  4. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/group.py +6 -0
  5. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/item.py +1 -1
  6. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/user.py +1 -1
  7. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/folder.py +38 -3
  8. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/item.py +7 -2
  9. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/model_base.py +21 -6
  10. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/token.py +10 -0
  11. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/settings.py +21 -0
  12. girder-3.2.19.dev1/girder/utility/_hash_state.py +261 -0
  13. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/webroot.mako +2 -1
  14. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/webroot.py +1 -0
  15. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/collectionPage.pug +7 -5
  16. girder-3.2.19.dev1/girder/web_client/src/templates/body/itemPage.pug +64 -0
  17. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/systemConfiguration.pug +17 -0
  18. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/checkedActionsMenu.pug +5 -4
  19. girder-3.2.19.dev1/girder/web_client/src/templates/widgets/fileList.pug +44 -0
  20. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/hierarchyWidget.pug +5 -4
  21. girder-3.2.19.dev1/girder/web_client/src/utilities/ShowDownload.js +15 -0
  22. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/utilities/index.js +3 -1
  23. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/App.js +11 -0
  24. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/CollectionView.js +12 -1
  25. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/ItemView.js +3 -0
  26. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/SystemConfigurationView.js +5 -2
  27. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/UserView.js +5 -1
  28. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/CheckedMenuWidget.js +3 -0
  29. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/FileListWidget.js +3 -0
  30. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/FolderListWidget.js +3 -1
  31. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/HierarchyWidget.js +15 -5
  32. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/ItemListWidget.js +8 -1
  33. {girder-3.2.16.dev1 → girder-3.2.19.dev1/girder.egg-info}/PKG-INFO +1 -1
  34. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder.egg-info/SOURCES.txt +3 -0
  35. girder-3.2.19.dev1/girder.egg-info/scm_file_list.json +942 -0
  36. girder-3.2.19.dev1/girder.egg-info/scm_version.json +8 -0
  37. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/views/JobListWidget.js +14 -16
  38. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/scripts/publicNames.txt +3 -0
  39. girder-3.2.16.dev1/girder/utility/_hash_state.py +0 -151
  40. girder-3.2.16.dev1/girder/web_client/src/templates/body/itemPage.pug +0 -61
  41. girder-3.2.16.dev1/girder/web_client/src/templates/widgets/fileList.pug +0 -33
  42. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.circleci/Dockerfile +0 -0
  43. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.circleci/config.yml +0 -0
  44. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.circleci/create_ansible_subtree.sh +0 -0
  45. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.circleci/generatePyEnvChecksum.sh +0 -0
  46. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.circleci/publish_pypi.sh +0 -0
  47. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.codecov.yml +0 -0
  48. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.dockerignore +0 -0
  49. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.editorconfig +0 -0
  50. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.github/workflows/codespell.yml +0 -0
  51. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.gitignore +0 -0
  52. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/.readthedocs.yml +0 -0
  53. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/CHANGELOG.rst +0 -0
  54. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/CMakeLists.txt +0 -0
  55. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/CONTRIBUTING.rst +0 -0
  56. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/Dockerfile +0 -0
  57. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/LICENSE +0 -0
  58. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/MANIFEST.in +0 -0
  59. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/README.rst +0 -0
  60. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/Vagrantfile +0 -0
  61. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/clients/python/README.rst +0 -0
  62. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/clients/python/girder_client/__init__.py +0 -0
  63. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/clients/python/girder_client/cli.py +0 -0
  64. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/clients/python/pyproject.toml +0 -0
  65. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/clients/python/setup.py +0 -0
  66. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/.yamllint +0 -0
  67. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/LICENSE +0 -0
  68. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/README.md +0 -0
  69. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/defaults/main.yml +0 -0
  70. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/handlers/main.yml +0 -0
  71. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/library/.gitignore +0 -0
  72. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/library/README.md +0 -0
  73. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/library/girder.py +0 -0
  74. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/meta/main.yml +0 -0
  75. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/converge.yml +0 -0
  76. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/data/test1.txt +0 -0
  77. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/data/test2.txt +0 -0
  78. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/data/test3.txt +0 -0
  79. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/molecule.yml +0 -0
  80. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/prepare.yml +0 -0
  81. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/requirements.yml +0 -0
  82. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/test_access.yml +0 -0
  83. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/test_apikey.yml +0 -0
  84. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/test_assetstore.yml +0 -0
  85. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/test_files.yml +0 -0
  86. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/test_hierarchy.yml +0 -0
  87. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/test_resources.yml +0 -0
  88. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/test_setting.yml +0 -0
  89. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/ansible-module/test_user.yml +0 -0
  90. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/default/converge.yml +0 -0
  91. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/default/molecule.yml +0 -0
  92. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/default/prepare.yml +0 -0
  93. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/default/pytest.ini +0 -0
  94. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/molecule/default/tests/test_default.py +0 -0
  95. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/tasks/main.yml +0 -0
  96. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/tasks/nodejs.yml +0 -0
  97. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/ansible-role-girder/templates/daemon/girder.service.j2 +0 -0
  98. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/deployment-template/hosts.yml +0 -0
  99. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/deployment-template/playbook.yml +0 -0
  100. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/deployment-template/provision.sh +0 -0
  101. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/deployment-template/requirements.yml +0 -0
  102. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/vagrant/.gitignore +0 -0
  103. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/vagrant/ansible.cfg +0 -0
  104. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/vagrant/vagrant-playbook.yml +0 -0
  105. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/devops/vagrant/vagrant-requirements.yml +0 -0
  106. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docker-compose.yml +0 -0
  107. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/admin-docs.rst +0 -0
  108. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/api-docs.rst +0 -0
  109. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/build-docs.rst +0 -0
  110. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/changelog.rst +0 -0
  111. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/conf.py +0 -0
  112. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/configuration.rst +0 -0
  113. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/dependencies.rst +0 -0
  114. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/deployment-alternatives.rst +0 -0
  115. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/deployment.rst +0 -0
  116. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/dev-installation.rst +0 -0
  117. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/developer-cookbook.rst +0 -0
  118. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/developer-docs.rst +0 -0
  119. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/development.rst +0 -0
  120. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/external-web-clients.rst +0 -0
  121. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/favicon.ico +0 -0
  122. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/images/dicom-viewer.png +0 -0
  123. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/index.rst +0 -0
  124. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/license.png +0 -0
  125. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/migration-guide.rst +0 -0
  126. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/mount.rst +0 -0
  127. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/plugin-development.rst +0 -0
  128. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/plugins.rst +0 -0
  129. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/python-client.rst +0 -0
  130. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/requirements-docs.txt +0 -0
  131. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/security.rst +0 -0
  132. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/sftp.rst +0 -0
  133. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/user-docs.rst +0 -0
  134. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/docs/user-guide.rst +0 -0
  135. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/__init__.py +0 -0
  136. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/__init__.py +0 -0
  137. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/access.py +0 -0
  138. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/api_docs.mako +0 -0
  139. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/api_main.py +0 -0
  140. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/describe.py +0 -0
  141. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/docs.py +0 -0
  142. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/filter_logging.py +0 -0
  143. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/rest.py +0 -0
  144. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/sftp.py +0 -0
  145. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/__init__.py +0 -0
  146. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/api_key.py +0 -0
  147. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/assetstore.py +0 -0
  148. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/collection.py +0 -0
  149. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/file.py +0 -0
  150. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/notification.py +0 -0
  151. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/resource.py +0 -0
  152. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/system.py +0 -0
  153. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/api/v1/token.py +0 -0
  154. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/cli/__init__.py +0 -0
  155. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/cli/build.py +0 -0
  156. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/cli/mount.py +0 -0
  157. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/cli/serve.py +0 -0
  158. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/cli/sftpd.py +0 -0
  159. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/cli/shell.py +0 -0
  160. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/conf/girder.dist.cfg +0 -0
  161. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/constants.py +0 -0
  162. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/events.py +0 -0
  163. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/exceptions.py +0 -0
  164. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/mail_templates/_footer.mako +0 -0
  165. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/mail_templates/_header.mako +0 -0
  166. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/mail_templates/accountApproval.mako +0 -0
  167. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/mail_templates/accountApproved.mako +0 -0
  168. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/mail_templates/emailVerification.mako +0 -0
  169. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/mail_templates/groupInvite.mako +0 -0
  170. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/mail_templates/temporaryAccess.mako +0 -0
  171. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/__init__.py +0 -0
  172. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/api_key.py +0 -0
  173. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/assetstore.py +0 -0
  174. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/collection.py +0 -0
  175. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/file.py +0 -0
  176. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/group.py +0 -0
  177. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/notification.py +0 -0
  178. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/setting.py +0 -0
  179. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/upload.py +0 -0
  180. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/models/user.py +0 -0
  181. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/plugin.py +0 -0
  182. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/__init__.py +0 -0
  183. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/_cache.py +0 -0
  184. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/abstract_assetstore_adapter.py +0 -0
  185. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/acl_mixin.py +0 -0
  186. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/assetstore_utilities.py +0 -0
  187. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/config.py +0 -0
  188. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/error.mako +0 -0
  189. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/filesystem_assetstore_adapter.py +0 -0
  190. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/gridfs_assetstore_adapter.py +0 -0
  191. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/mail_utils.py +0 -0
  192. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/model_importer.py +0 -0
  193. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/path.py +0 -0
  194. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/progress.py +0 -0
  195. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/s3_assetstore_adapter.py +0 -0
  196. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/search.py +0 -0
  197. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/server.py +0 -0
  198. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/setting_utilities.py +0 -0
  199. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/system.py +0 -0
  200. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/utility/ziputil.py +0 -0
  201. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/.gitignore +0 -0
  202. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/Gruntfile.js +0 -0
  203. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/eslint-config/.gitignore +0 -0
  204. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/eslint-config/.npmignore +0 -0
  205. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/eslint-config/README.md +0 -0
  206. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/eslint-config/index.js +0 -0
  207. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/eslint-config/package-lock.json +0 -0
  208. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/eslint-config/package.json +0 -0
  209. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/fontello/.gitignore +0 -0
  210. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/fontello/.npmignore +0 -0
  211. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/fontello/Gruntfile.js +0 -0
  212. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/fontello/README.md +0 -0
  213. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/fontello/fontello.config.json +0 -0
  214. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/fontello/package-lock.json +0 -0
  215. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/fontello/package.json +0 -0
  216. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/grunt_tasks/build.js +0 -0
  217. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/grunt_tasks/swagger.js +0 -0
  218. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/grunt_tasks/test.js +0 -0
  219. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/grunt_tasks/webpack.config.js +0 -0
  220. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/grunt_tasks/webpack.paths.js +0 -0
  221. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/grunt_tasks/webpack.plugins.js +0 -0
  222. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/package.json.template +0 -0
  223. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/pug-lint-config/.gitignore +0 -0
  224. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/pug-lint-config/.npmignore +0 -0
  225. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/pug-lint-config/README.md +0 -0
  226. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/pug-lint-config/index.js +0 -0
  227. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/pug-lint-config/package-lock.json +0 -0
  228. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/pug-lint-config/package.json +0 -0
  229. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/assets/Girder_Mark.png +0 -0
  230. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/auth.js +0 -0
  231. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/collections/ApiKeyCollection.js +0 -0
  232. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/collections/AssetstoreCollection.js +0 -0
  233. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/collections/Collection.js +0 -0
  234. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/collections/CollectionCollection.js +0 -0
  235. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/collections/FileCollection.js +0 -0
  236. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/collections/FolderCollection.js +0 -0
  237. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/collections/GroupCollection.js +0 -0
  238. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/collections/ItemCollection.js +0 -0
  239. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/collections/UserCollection.js +0 -0
  240. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/collections/index.js +0 -0
  241. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/constants.js +0 -0
  242. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/dialog.js +0 -0
  243. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/events.js +0 -0
  244. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/index.js +0 -0
  245. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/main.js +0 -0
  246. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/misc.js +0 -0
  247. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/AccessControlledModel.js +0 -0
  248. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/ApiKeyModel.js +0 -0
  249. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/AssetstoreModel.js +0 -0
  250. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/CollectionCreationPolicyModel.js +0 -0
  251. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/CollectionModel.js +0 -0
  252. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/FileModel.js +0 -0
  253. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/FolderModel.js +0 -0
  254. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/GroupModel.js +0 -0
  255. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/ItemModel.js +0 -0
  256. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/MetadataMixin.js +0 -0
  257. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/Model.js +0 -0
  258. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/UserModel.js +0 -0
  259. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/models/index.js +0 -0
  260. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/package.json +0 -0
  261. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/pluginUtils.js +0 -0
  262. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/rest.js +0 -0
  263. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/router.js +0 -0
  264. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/routes.js +0 -0
  265. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/apidocs/apidocs.styl +0 -0
  266. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/adminConsole.styl +0 -0
  267. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/assetstores.styl +0 -0
  268. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/collectionList.styl +0 -0
  269. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/collectionPage.styl +0 -0
  270. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/frontPage.styl +0 -0
  271. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/groupList.styl +0 -0
  272. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/groupPage.styl +0 -0
  273. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/itemPage.styl +0 -0
  274. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/plugins.styl +0 -0
  275. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/searchResultsList.styl +0 -0
  276. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/systemConfig.styl +0 -0
  277. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/userAccount.styl +0 -0
  278. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/userList.styl +0 -0
  279. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/body/userPage.styl +0 -0
  280. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/layout/footer.styl +0 -0
  281. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/layout/global.styl +0 -0
  282. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/layout/globalNav.styl +0 -0
  283. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/layout/header.styl +0 -0
  284. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/layout/headerUser.styl +0 -0
  285. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/layout/layout.styl +0 -0
  286. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/layout/layoutVars.styl +0 -0
  287. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/layout/loading.styl +0 -0
  288. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/layout/progressArea.styl +0 -0
  289. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/widgets/accessWidget.styl +0 -0
  290. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/widgets/browserWidget.styl +0 -0
  291. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/widgets/hierarchyWidget.styl +0 -0
  292. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/widgets/markdownWidget.styl +0 -0
  293. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/widgets/metadataWidget.styl +0 -0
  294. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/widgets/searchFieldWidget.styl +0 -0
  295. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/widgets/taskProgress.styl +0 -0
  296. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/widgets/timelineWidget.styl +0 -0
  297. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/widgets/uploadWidget.styl +0 -0
  298. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/stylesheets/widgets/userOtpManagementWidget.styl +0 -0
  299. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/adminConsole.pug +0 -0
  300. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/assetstores.pug +0 -0
  301. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/collectionList.pug +0 -0
  302. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/filesystemImport.pug +0 -0
  303. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/frontPage.pug +0 -0
  304. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/groupList.pug +0 -0
  305. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/groupPage.pug +0 -0
  306. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/plugins.pug +0 -0
  307. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/s3Import.pug +0 -0
  308. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/searchResults.pug +0 -0
  309. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/searchResultsType.pug +0 -0
  310. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/userAccount.pug +0 -0
  311. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/userList.pug +0 -0
  312. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/body/userPage.pug +0 -0
  313. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/layout/alert.pug +0 -0
  314. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/layout/layout.pug +0 -0
  315. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/layout/layoutFooter.pug +0 -0
  316. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/layout/layoutGlobalNav.pug +0 -0
  317. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/layout/layoutHeader.pug +0 -0
  318. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/layout/layoutHeaderUser.pug +0 -0
  319. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/layout/layoutProgressArea.pug +0 -0
  320. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/layout/loginDialog.pug +0 -0
  321. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/layout/registerDialog.pug +0 -0
  322. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/layout/resetPasswordDialog.pug +0 -0
  323. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/accessEditor.pug +0 -0
  324. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/accessEditorMixins.pug +0 -0
  325. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/accessEditorNonModal.pug +0 -0
  326. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/accessEntry.pug +0 -0
  327. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/apiKeyList.pug +0 -0
  328. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/browserWidget.pug +0 -0
  329. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/collectionInfoDialog.pug +0 -0
  330. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/confirmDialog.pug +0 -0
  331. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/dateTimeRangeWidget.pug +0 -0
  332. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/dateTimeWidget.pug +0 -0
  333. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/editApiKeyWidget.pug +0 -0
  334. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/editAssetstoreWidget.pug +0 -0
  335. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/editCollectionWidget.pug +0 -0
  336. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/editFileWidget.pug +0 -0
  337. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/editFolderWidget.pug +0 -0
  338. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/editGroupWidget.pug +0 -0
  339. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/editItemWidget.pug +0 -0
  340. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/fileInfoDialog.pug +0 -0
  341. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/folderInfoDialog.pug +0 -0
  342. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/folderList.pug +0 -0
  343. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/groupAdminList.pug +0 -0
  344. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/groupInviteDialog.pug +0 -0
  345. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/groupInviteList.pug +0 -0
  346. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/groupMemberList.pug +0 -0
  347. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/groupModList.pug +0 -0
  348. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/hierarchyBreadcrumb.pug +0 -0
  349. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/hierarchyPaginated.pug +0 -0
  350. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/itemBreadcrumb.pug +0 -0
  351. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/itemList.pug +0 -0
  352. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/jsonMetadatumEditWidget.pug +0 -0
  353. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/jsonMetadatumView.pug +0 -0
  354. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/loadingAnimation.pug +0 -0
  355. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/markdownWidget.pug +0 -0
  356. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/metadataWidget.pug +0 -0
  357. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/metadatumEditWidget.pug +0 -0
  358. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/metadatumView.pug +0 -0
  359. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/newAssetstore.pug +0 -0
  360. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/paginateWidget.pug +0 -0
  361. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/pluginConfigBreadcrumb.pug +0 -0
  362. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/rootSelectorWidget.pug +0 -0
  363. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/searchField.pug +0 -0
  364. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/searchHelp.pug +0 -0
  365. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/searchModeSelect.pug +0 -0
  366. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/searchResults.pug +0 -0
  367. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/sortCollectionWidget.pug +0 -0
  368. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/taskProgress.pug +0 -0
  369. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/timeline.pug +0 -0
  370. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/uploadWidget.pug +0 -0
  371. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/uploadWidgetMixins.pug +0 -0
  372. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/uploadWidgetNonModal.pug +0 -0
  373. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/userOtpBegin.pug +0 -0
  374. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/userOtpDisable.pug +0 -0
  375. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/templates/widgets/userOtpEnable.pug +0 -0
  376. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/utilities/EventStream.js +0 -0
  377. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/utilities/PluginUtils.js +0 -0
  378. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/utilities/S3UploadHandler.js +0 -0
  379. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/utilities/jquery/girderEnable.js +0 -0
  380. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/utilities/jquery/girderModal.js +0 -0
  381. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/version.js +0 -0
  382. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/View.js +0 -0
  383. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/AdminView.js +0 -0
  384. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/AssetstoresView.js +0 -0
  385. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/CollectionsView.js +0 -0
  386. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/FilesystemImportView.js +0 -0
  387. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/FolderView.js +0 -0
  388. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/FrontPageView.js +0 -0
  389. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/GroupView.js +0 -0
  390. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/GroupsView.js +0 -0
  391. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/PluginsView.js +0 -0
  392. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/S3ImportView.js +0 -0
  393. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/SearchResultsView.js +0 -0
  394. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/UserAccountView.js +0 -0
  395. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/UsersView.js +0 -0
  396. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/body/index.js +0 -0
  397. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/index.js +0 -0
  398. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/layout/FooterView.js +0 -0
  399. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/layout/GlobalNavView.js +0 -0
  400. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/layout/HeaderUserView.js +0 -0
  401. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/layout/HeaderView.js +0 -0
  402. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/layout/LoginView.js +0 -0
  403. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/layout/ProgressListView.js +0 -0
  404. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/layout/RegisterView.js +0 -0
  405. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/layout/ResetPasswordView.js +0 -0
  406. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/layout/index.js +0 -0
  407. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/AccessWidget.js +0 -0
  408. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/ApiKeyListWidget.js +0 -0
  409. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/BrowserWidget.js +0 -0
  410. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/CollectionInfoWidget.js +0 -0
  411. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/DateTimeRangeWidget.js +0 -0
  412. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/DateTimeWidget.js +0 -0
  413. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/EditApiKeyWidget.js +0 -0
  414. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/EditAssetstoreWidget.js +0 -0
  415. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/EditCollectionWidget.js +0 -0
  416. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/EditFileWidget.js +0 -0
  417. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/EditFolderWidget.js +0 -0
  418. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/EditGroupWidget.js +0 -0
  419. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/EditItemWidget.js +0 -0
  420. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/FileInfoWidget.js +0 -0
  421. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/FolderInfoWidget.js +0 -0
  422. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/GroupAdminsWidget.js +0 -0
  423. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/GroupInvitesWidget.js +0 -0
  424. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/GroupMembersWidget.js +0 -0
  425. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/GroupModsWidget.js +0 -0
  426. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/ItemBreadcrumbWidget.js +0 -0
  427. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/LoadingAnimation.js +0 -0
  428. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/MarkdownWidget.js +0 -0
  429. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/MetadataWidget.js +0 -0
  430. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/NewAssetstoreWidget.js +0 -0
  431. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/PaginateWidget.js +0 -0
  432. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/PluginConfigBreadcrumbWidget.js +0 -0
  433. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/RootSelectorWidget.js +0 -0
  434. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/SearchFieldWidget.js +0 -0
  435. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/SearchPaginateWidget.js +0 -0
  436. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/SortCollectionWidget.js +0 -0
  437. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/TaskProgressWidget.js +0 -0
  438. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/TimelineWidget.js +0 -0
  439. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/UploadWidget.js +0 -0
  440. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/UserOtpManagementWidget.js +0 -0
  441. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/src/views/widgets/index.js +0 -0
  442. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/static/.gitignore +0 -0
  443. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/static/built/.gitignore +0 -0
  444. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/static/girder-swagger.js +0 -0
  445. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/static/img/Girder_Favicon.png +0 -0
  446. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/fake.jpg +0 -0
  447. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/lib/jasmine-1.3.1/ConsoleReporter.js +0 -0
  448. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/lib/jasmine-1.3.1/MIT.LICENSE.txt +0 -0
  449. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/lib/jasmine-1.3.1/jasmine.css +0 -0
  450. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/lib/jasmine-1.3.1/jasmine.js +0 -0
  451. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/specRunner.js +0 -0
  452. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/testEnv.pug +0 -0
  453. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/testFile.csv +0 -0
  454. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/testFile.tsv +0 -0
  455. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/testFile.txt +0 -0
  456. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/testFile2 +0 -0
  457. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder/web_client/test/testUtils.js +0 -0
  458. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder.egg-info/dependency_links.txt +0 -0
  459. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder.egg-info/entry_points.txt +0 -0
  460. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder.egg-info/not-zip-safe +0 -0
  461. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder.egg-info/requires.txt +0 -0
  462. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/girder.egg-info/top_level.txt +0 -0
  463. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/package-lock.json +0 -0
  464. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/package.json +0 -0
  465. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/.gitignore +0 -0
  466. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/audit_logs/girder_audit_logs/__init__.py +0 -0
  467. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/audit_logs/girder_audit_logs/cleanup.py +0 -0
  468. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/audit_logs/girder_audit_logs/report.py +0 -0
  469. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/audit_logs/pyproject.toml +0 -0
  470. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/audit_logs/setup.py +0 -0
  471. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/__init__.py +0 -0
  472. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/constants.py +0 -0
  473. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/mail_templates/authorized_upload.uploadFinished.mako +0 -0
  474. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/rest.py +0 -0
  475. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/web_client/main.js +0 -0
  476. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/web_client/package.json +0 -0
  477. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/web_client/routes.js +0 -0
  478. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/web_client/stylesheets/authorizeUpload.styl +0 -0
  479. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/web_client/stylesheets/authorizedUpload.styl +0 -0
  480. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/web_client/templates/authorizeUpload.pug +0 -0
  481. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/web_client/templates/authorizedUpload.pug +0 -0
  482. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/web_client/templates/folderActions.pug +0 -0
  483. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/web_client/views/AuthorizeUploadView.js +0 -0
  484. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/girder_authorized_upload/web_client/views/AuthorizedUploadView.js +0 -0
  485. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/plugin_tests/__init__.py +0 -0
  486. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/plugin_tests/authorizedUploadSpec.js +0 -0
  487. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/plugin_tests/upload_test.py +0 -0
  488. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/pyproject.toml +0 -0
  489. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/authorized_upload/setup.py +0 -0
  490. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/girder_autojoin/__init__.py +0 -0
  491. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/girder_autojoin/settings.py +0 -0
  492. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/girder_autojoin/web_client/main.js +0 -0
  493. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/girder_autojoin/web_client/package.json +0 -0
  494. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/girder_autojoin/web_client/routes.js +0 -0
  495. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/girder_autojoin/web_client/stylesheets/configView.styl +0 -0
  496. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/girder_autojoin/web_client/templates/configView.pug +0 -0
  497. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/girder_autojoin/web_client/views/ConfigView.js +0 -0
  498. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/plugin_tests/__init__.py +0 -0
  499. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/plugin_tests/autojoinSpec.js +0 -0
  500. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/plugin_tests/autojoin_test.py +0 -0
  501. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/pyproject.toml +0 -0
  502. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/autojoin/setup.py +0 -0
  503. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/__init__.py +0 -0
  504. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/event_helper.py +0 -0
  505. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/web_client/main.js +0 -0
  506. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/web_client/package.json +0 -0
  507. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/web_client/stylesheets/dicomItem.styl +0 -0
  508. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/web_client/stylesheets/dicomSliceMetadata.styl +0 -0
  509. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/web_client/templates/dicomItem.pug +0 -0
  510. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/web_client/templates/dicomSliceMetadata.pug +0 -0
  511. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/web_client/templates/parseDicomItem.pug +0 -0
  512. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/web_client/views/DicomView.js +0 -0
  513. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/girder_dicom_viewer/web_client/webpack.helper.js +0 -0
  514. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/plugin_tests/__init__.py +0 -0
  515. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/plugin_tests/data/000000.dcm.sha512 +0 -0
  516. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/plugin_tests/data/000001.dcm.sha512 +0 -0
  517. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/plugin_tests/data/000002.dcm.sha512 +0 -0
  518. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/plugin_tests/data/000003.dcm.sha512 +0 -0
  519. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/plugin_tests/dicom_viewer_test.py +0 -0
  520. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/pyproject.toml +0 -0
  521. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/dicom_viewer/setup.py +0 -0
  522. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/download_statistics/girder_download_statistics/__init__.py +0 -0
  523. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/download_statistics/plugin_tests/__init__.py +0 -0
  524. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/download_statistics/plugin_tests/download_statistics_test.py +0 -0
  525. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/download_statistics/plugin_tests/files/txt1.txt +0 -0
  526. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/download_statistics/plugin_tests/files/txt2.txt +0 -0
  527. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/download_statistics/pyproject.toml +0 -0
  528. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/download_statistics/setup.py +0 -0
  529. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/girder_google_analytics/__init__.py +0 -0
  530. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/girder_google_analytics/rest.py +0 -0
  531. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/girder_google_analytics/settings.py +0 -0
  532. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/girder_google_analytics/web_client/main.js +0 -0
  533. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/girder_google_analytics/web_client/package.json +0 -0
  534. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/girder_google_analytics/web_client/routes.js +0 -0
  535. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/girder_google_analytics/web_client/stylesheets/configView.styl +0 -0
  536. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/girder_google_analytics/web_client/templates/configView.pug +0 -0
  537. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/girder_google_analytics/web_client/views/ConfigView.js +0 -0
  538. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/plugin_tests/__init__.py +0 -0
  539. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/plugin_tests/google_analytics_test.py +0 -0
  540. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/pyproject.toml +0 -0
  541. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/google_analytics/setup.py +0 -0
  542. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/girder_gravatar/__init__.py +0 -0
  543. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/girder_gravatar/settings.py +0 -0
  544. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/girder_gravatar/web_client/main.js +0 -0
  545. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/girder_gravatar/web_client/models/UserModel.js +0 -0
  546. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/girder_gravatar/web_client/package.json +0 -0
  547. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/girder_gravatar/web_client/routes.js +0 -0
  548. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/girder_gravatar/web_client/templates/configView.pug +0 -0
  549. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/girder_gravatar/web_client/views/ConfigView.js +0 -0
  550. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/plugin_tests/__init__.py +0 -0
  551. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/plugin_tests/gravatar_test.py +0 -0
  552. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/pyproject.toml +0 -0
  553. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/gravatar/setup.py +0 -0
  554. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/girder_hashsum_download/__init__.py +0 -0
  555. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/girder_hashsum_download/settings.py +0 -0
  556. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/girder_hashsum_download/web_client/main.js +0 -0
  557. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/girder_hashsum_download/web_client/package.json +0 -0
  558. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/girder_hashsum_download/web_client/stylesheets/hashsumDownloadFileInfoWidget.styl +0 -0
  559. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/girder_hashsum_download/web_client/templates/config.pug +0 -0
  560. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/girder_hashsum_download/web_client/templates/hashsumDownloadFileInfoWidget.pug +0 -0
  561. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/girder_hashsum_download/web_client/views/ConfigView.js +0 -0
  562. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/girder_hashsum_download/web_client/views/FileInfoWidget.js +0 -0
  563. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/plugin_tests/__init__.py +0 -0
  564. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/plugin_tests/hashsumSpec.js +0 -0
  565. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/plugin_tests/hashsum_download_test.py +0 -0
  566. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/pyproject.toml +0 -0
  567. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/hashsum_download/setup.py +0 -0
  568. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/__init__.py +0 -0
  569. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/constants.py +0 -0
  570. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/rest.py +0 -0
  571. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/settings.py +0 -0
  572. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/web_client/main.js +0 -0
  573. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/web_client/package.json +0 -0
  574. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/web_client/routes.js +0 -0
  575. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/web_client/stylesheets/configView.styl +0 -0
  576. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/web_client/templates/configView.pug +0 -0
  577. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/web_client/views/ConfigView.js +0 -0
  578. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/girder_homepage/web_client/views/FrontPageView.js +0 -0
  579. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/plugin_tests/__init__.py +0 -0
  580. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/plugin_tests/homepageSpec.js +0 -0
  581. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/plugin_tests/homepage_test.py +0 -0
  582. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/pyproject.toml +0 -0
  583. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/homepage/setup.py +0 -0
  584. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/__init__.py +0 -0
  585. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/rest.py +0 -0
  586. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/settings.py +0 -0
  587. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/main.js +0 -0
  588. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/package.json +0 -0
  589. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/routes.js +0 -0
  590. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/stylesheets/configView.styl +0 -0
  591. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/templates/configView.pug +0 -0
  592. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/templates/itemLicenseWidget.pug +0 -0
  593. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/templates/selectLicenseWidget.pug +0 -0
  594. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/views/ConfigView.js +0 -0
  595. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/views/EditItemWidget.js +0 -0
  596. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/views/HierarchyWidget.js +0 -0
  597. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/views/ItemLicenseWidget.js +0 -0
  598. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/views/ItemView.js +0 -0
  599. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/views/SelectLicenseWidget.js +0 -0
  600. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/girder_item_licenses/web_client/views/UploadWidget.js +0 -0
  601. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/plugin_tests/__init__.py +0 -0
  602. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/plugin_tests/itemLicensesSpec.js +0 -0
  603. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/plugin_tests/item_licenses_test.py +0 -0
  604. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/pyproject.toml +0 -0
  605. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/item_licenses/setup.py +0 -0
  606. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/__init__.py +0 -0
  607. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/constants.py +0 -0
  608. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/job_rest.py +0 -0
  609. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/models/__init__.py +0 -0
  610. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/models/job.py +0 -0
  611. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/JobStatus.js +0 -0
  612. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/collections/JobCollection.js +0 -0
  613. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/collections/index.js +0 -0
  614. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/index.js +0 -0
  615. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/main.js +0 -0
  616. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/models/JobModel.js +0 -0
  617. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/models/index.js +0 -0
  618. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/package.json +0 -0
  619. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/routes.js +0 -0
  620. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/stylesheets/jobDetailsWidget.styl +0 -0
  621. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/stylesheets/jobListWidget.styl +0 -0
  622. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/templates/adminViewMenuItem.pug +0 -0
  623. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/templates/headerUserViewMenu.pug +0 -0
  624. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/templates/jobCheckBoxContent.pug +0 -0
  625. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/templates/jobCheckBoxMenu.pug +0 -0
  626. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/templates/jobDetailsWidget.pug +0 -0
  627. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/templates/jobList.pug +0 -0
  628. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/templates/jobListWidget.pug +0 -0
  629. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/templates/jobsGraphWidget.pug +0 -0
  630. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/views/AdminView.js +0 -0
  631. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/views/CheckBoxMenu.js +0 -0
  632. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/views/HeaderUserView.js +0 -0
  633. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/views/JobDetailsWidget.js +0 -0
  634. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/views/JobGraphWidget.js +0 -0
  635. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/views/index.js +0 -0
  636. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/views/timeChartConfig.js +0 -0
  637. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/girder_jobs/web_client/views/timingHistoryChartConfig.js +0 -0
  638. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/plugin_tests/__init__.py +0 -0
  639. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/plugin_tests/jobsSpec.js +0 -0
  640. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/plugin_tests/jobs_test.py +0 -0
  641. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/plugin_tests/local_job_impl.py +0 -0
  642. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/pyproject.toml +0 -0
  643. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/jobs/setup.py +0 -0
  644. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/girder_ldap/__init__.py +0 -0
  645. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/girder_ldap/settings.py +0 -0
  646. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/girder_ldap/web_client/main.js +0 -0
  647. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/girder_ldap/web_client/package.json +0 -0
  648. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/girder_ldap/web_client/routes.js +0 -0
  649. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/girder_ldap/web_client/stylesheets/configView.styl +0 -0
  650. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/girder_ldap/web_client/templates/configView.pug +0 -0
  651. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/girder_ldap/web_client/templates/editServerMixin.pug +0 -0
  652. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/girder_ldap/web_client/templates/newServerTemplate.pug +0 -0
  653. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/girder_ldap/web_client/views/ConfigView.js +0 -0
  654. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/plugin_tests/__init__.py +0 -0
  655. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/plugin_tests/ldap_test.py +0 -0
  656. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/pyproject.toml +0 -0
  657. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/ldap/setup.py +0 -0
  658. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/__init__.py +0 -0
  659. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/providers/__init__.py +0 -0
  660. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/providers/base.py +0 -0
  661. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/providers/bitbucket.py +0 -0
  662. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/providers/box.py +0 -0
  663. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/providers/cilogon.py +0 -0
  664. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/providers/github.py +0 -0
  665. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/providers/globus.py +0 -0
  666. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/providers/google.py +0 -0
  667. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/providers/linkedin.py +0 -0
  668. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/providers/microsoft.py +0 -0
  669. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/rest.py +0 -0
  670. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/settings.py +0 -0
  671. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/main.js +0 -0
  672. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/package.json +0 -0
  673. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/routes.js +0 -0
  674. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/stylesheets/configView.styl +0 -0
  675. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/stylesheets/oauthLoginView.styl +0 -0
  676. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/templates/configView.pug +0 -0
  677. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/templates/oauthLoginView.pug +0 -0
  678. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/views/ConfigView.js +0 -0
  679. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/views/LoginView.js +0 -0
  680. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/views/OAuthLoginView.js +0 -0
  681. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/girder_oauth/web_client/views/RegisterView.js +0 -0
  682. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/plugin_tests/__init__.py +0 -0
  683. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/plugin_tests/oauth_test.py +0 -0
  684. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/pyproject.toml +0 -0
  685. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/oauth/setup.py +0 -0
  686. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/girder_readme/__init__.py +0 -0
  687. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/girder_readme/rest.py +0 -0
  688. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/girder_readme/web_client/main.js +0 -0
  689. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/girder_readme/web_client/package.json +0 -0
  690. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/girder_readme/web_client/stylesheets/readmeWidget.styl +0 -0
  691. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/girder_readme/web_client/templates/readmeWidget.pug +0 -0
  692. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/girder_readme/web_client/views/HierarchyWidget.js +0 -0
  693. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/plugin_tests/data/README.md +0 -0
  694. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/plugin_tests/readmeSpec.js +0 -0
  695. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/pyproject.toml +0 -0
  696. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/readme/setup.py +0 -0
  697. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/girder_sentry/__init__.py +0 -0
  698. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/girder_sentry/rest.py +0 -0
  699. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/girder_sentry/settings.py +0 -0
  700. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/girder_sentry/web_client/main.js +0 -0
  701. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/girder_sentry/web_client/package.json +0 -0
  702. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/girder_sentry/web_client/routes.js +0 -0
  703. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/girder_sentry/web_client/stylesheets/configView.styl +0 -0
  704. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/girder_sentry/web_client/templates/configView.pug +0 -0
  705. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/girder_sentry/web_client/views/ConfigView.js +0 -0
  706. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/pyproject.toml +0 -0
  707. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/sentry/setup.py +0 -0
  708. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/__init__.py +0 -0
  709. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/main.js +0 -0
  710. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/models/CollectionModel.js +0 -0
  711. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/package.json +0 -0
  712. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/routes.js +0 -0
  713. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/stylesheets/collectionInfoWidget.styl +0 -0
  714. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/stylesheets/editCollectionTermsWidget.styl +0 -0
  715. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/stylesheets/termsAcceptance.styl +0 -0
  716. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/templates/collectionInfoWidget.pug +0 -0
  717. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/templates/editCollectionTermsWidget.pug +0 -0
  718. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/templates/termsAcceptance.pug +0 -0
  719. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/views/CollectionInfoWidget.js +0 -0
  720. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/views/EditCollectionWidget.js +0 -0
  721. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/girder_terms/web_client/views/TermsAcceptanceView.js +0 -0
  722. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/plugin_tests/__init__.py +0 -0
  723. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/plugin_tests/termsSpec.js +0 -0
  724. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/plugin_tests/terms_test.py +0 -0
  725. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/pyproject.toml +0 -0
  726. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/terms/setup.py +0 -0
  727. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/__init__.py +0 -0
  728. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/rest.py +0 -0
  729. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/utils.py +0 -0
  730. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/main.js +0 -0
  731. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/models/ThumbnailModel.js +0 -0
  732. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/package.json +0 -0
  733. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/stylesheets/createThumbnailView.styl +0 -0
  734. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/stylesheets/flowView.styl +0 -0
  735. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/templates/createThumbnailViewDialog.pug +0 -0
  736. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/templates/createThumbnailViewTargetDescription.pug +0 -0
  737. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/templates/fileListWidgetCreateButton.pug +0 -0
  738. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/templates/flowView.pug +0 -0
  739. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/templates/itemView.pug +0 -0
  740. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/views/CreateThumbnailView.js +0 -0
  741. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/views/FileListWidget.js +0 -0
  742. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/views/FlowView.js +0 -0
  743. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/web_client/views/ItemView.js +0 -0
  744. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/girder_thumbnails/worker.py +0 -0
  745. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/plugin_tests/__init__.py +0 -0
  746. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/plugin_tests/data/sample_dicom.dcm +0 -0
  747. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/plugin_tests/thumbnail_test.py +0 -0
  748. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/plugin_tests/thumbnailsSpec.js +0 -0
  749. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/pyproject.toml +0 -0
  750. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/thumbnails/setup.py +0 -0
  751. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/__init__.py +0 -0
  752. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/quota.py +0 -0
  753. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/settings.py +0 -0
  754. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/main.js +0 -0
  755. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/models/CollectionModel.js +0 -0
  756. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/models/UserModel.js +0 -0
  757. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/models/extendModel.js +0 -0
  758. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/package.json +0 -0
  759. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/routes.js +0 -0
  760. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/stylesheets/userQuota.styl +0 -0
  761. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/templates/collectionViewPoliciesMenu.pug +0 -0
  762. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/templates/configView.pug +0 -0
  763. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/templates/quotaPoliciesWidget.pug +0 -0
  764. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/templates/userViewPoliciesMenu.pug +0 -0
  765. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/utilities/Conversions.js +0 -0
  766. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/views/CollectionView.js +0 -0
  767. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/views/ConfigView.js +0 -0
  768. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/views/QuotaPoliciesWidget.js +0 -0
  769. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/views/UploadWidget.js +0 -0
  770. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/views/UserView.js +0 -0
  771. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/girder_user_quota/web_client/views/extendView.js +0 -0
  772. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/plugin_tests/__init__.py +0 -0
  773. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/plugin_tests/userQuotaSpec.js +0 -0
  774. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/plugin_tests/user_quota_test.py +0 -0
  775. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/pyproject.toml +0 -0
  776. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/user_quota/setup.py +0 -0
  777. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/virtual_folders/girder_virtual_folders/__init__.py +0 -0
  778. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/virtual_folders/plugin_tests/__init__.py +0 -0
  779. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/virtual_folders/plugin_tests/virtual_folders_test.py +0 -0
  780. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/virtual_folders/pyproject.toml +0 -0
  781. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/plugins/virtual_folders/setup.py +0 -0
  782. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pyproject.toml +0 -0
  783. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/LICENSE +0 -0
  784. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/MANIFEST.in +0 -0
  785. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/pyproject.toml +0 -0
  786. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/pytest_girder/__init__.py +0 -0
  787. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/pytest_girder/assertions.py +0 -0
  788. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/pytest_girder/fixtures.py +0 -0
  789. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/pytest_girder/plugin.py +0 -0
  790. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/pytest_girder/plugin_registry.py +0 -0
  791. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/pytest_girder/utils.py +0 -0
  792. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/pytest_girder/web_client.py +0 -0
  793. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/pytest_girder/setup.py +0 -0
  794. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/requirements-dev.txt +0 -0
  795. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/scripts/midas/README.rst +0 -0
  796. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/scripts/midas/migrate.py +0 -0
  797. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/scripts/midas/requirements.txt +0 -0
  798. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/scripts/midas/walk_girder.py +0 -0
  799. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/scripts/midas/walk_midas.py +0 -0
  800. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/scripts/publicNames.py +0 -0
  801. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/scripts/test_names.sh +0 -0
  802. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/setup.cfg +0 -0
  803. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/setup.py +0 -0
  804. {girder-3.2.16.dev1 → girder-3.2.19.dev1}/tox.ini +0 -0
@@ -1,7 +1,12 @@
1
1
  #!/bin/bash
2
2
  set -e
3
- # Publish npm packages for selected locations
4
- # NPM_AUTH_TOKEN must be set by the build environment
3
+ # Publish npm packages for selected locations, using npm trusted publishing
4
+ # (CircleCI OIDC). No NPM_AUTH_TOKEN is needed.
5
+ export NPM_CONFIG_PREFIX="$HOME/.npm-global"
6
+ npm install -g 'npm@^11.5.1'
7
+ export PATH="$NPM_CONFIG_PREFIX/bin:$PATH"
8
+ hash -r
9
+ npm --version
5
10
 
6
11
  readonly GIT_VERSION=$(git describe --tags)
7
12
  readonly PUBLISHED_NPM_PACKAGES=(
@@ -19,10 +24,10 @@ readonly PUBLISHED_NPM_PACKAGES=(
19
24
  )
20
25
  for directory in "${PUBLISHED_NPM_PACKAGES[@]}"; do
21
26
  pushd "$directory"
22
- # Trying to set the auth token via 'npm_config_' environment variables does not work
23
- echo '//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN}' > ./.npmrc
24
27
  npm version --allow-same-version --no-git-tag-version "$GIT_VERSION"
28
+ # OIDC tokens are short-lived, so fetch a fresh one for each publish
29
+ export NPM_ID_TOKEN=$(circleci run oidc get --claims '{"aud": "npm:registry.npmjs.org"}')
25
30
  npm publish --access public
26
- rm --interactive=never ./.npmrc
27
31
  popd
28
32
  done
33
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: girder
3
- Version: 3.2.16.dev1
3
+ Version: 3.2.19.dev1
4
4
  Summary: Web-based data management platform
5
5
  Home-page: https://girder.readthedocs.org
6
6
  Author: Kitware, Inc.
@@ -429,4 +429,4 @@ class Folder(Resource):
429
429
  .errorResponse('Read access was denied for the folder.', 403)
430
430
  )
431
431
  def rootpath(self, folder, params):
432
- return self._model.parentsToRoot(folder, user=self.getCurrentUser())
432
+ return self._model.parentsToRoot(folder, user=self.getCurrentUser(), hideInaccessible=True)
@@ -221,6 +221,12 @@ class Group(Resource):
221
221
  mustBeAdmin = False
222
222
  if mustBeAdmin:
223
223
  self.requireAdmin(user)
224
+ if not user['admin']:
225
+ # A non-site-admin may only grant an access level that they
226
+ # themselves hold. Without this clamp, a moderator (WRITE)
227
+ # could promote an arbitrary user to ADMIN via the force path,
228
+ # bypassing the level check that the non-force branch applies.
229
+ groupModel.requireAccess(group, user, level)
224
230
  groupModel.addUser(group, userToInvite, level=level)
225
231
  else:
226
232
  # Can only invite into access levels that you yourself have
@@ -313,7 +313,7 @@ class Item(Resource):
313
313
  .errorResponse('Read access was denied for the item.', 403)
314
314
  )
315
315
  def rootpath(self, item):
316
- return self._model.parentsToRoot(item, self.getCurrentUser())
316
+ return self._model.parentsToRoot(item, self.getCurrentUser(), hideInaccessible=True)
317
317
 
318
318
  @access.user(scope=TokenScope.DATA_WRITE)
319
319
  @filtermodel(model=ItemModel)
@@ -136,7 +136,7 @@ class User(Resource):
136
136
  def logout(self):
137
137
  token = self.getCurrentToken()
138
138
  if token:
139
- Token().remove(token)
139
+ Token().expire(token)
140
140
  self.deleteAuthTokenCookie()
141
141
  return {'message': 'Logged out.'}
142
142
 
@@ -564,7 +564,15 @@ class Folder(AccessControlledModel):
564
564
 
565
565
  return filteredDoc
566
566
 
567
- def parentsToRoot(self, folder, curPath=None, user=None, force=False, level=AccessType.READ):
567
+ def parentsToRoot(
568
+ self,
569
+ folder,
570
+ curPath=None,
571
+ user=None,
572
+ force=False,
573
+ level=AccessType.READ,
574
+ hideInaccessible=False,
575
+ ):
568
576
  """
569
577
  Get the path to traverse to a root of the hierarchy.
570
578
 
@@ -572,6 +580,7 @@ class Folder(AccessControlledModel):
572
580
  :type folder: dict
573
581
  :returns: an ordered list of dictionaries from root to the current folder
574
582
  """
583
+ force = force or hideInaccessible
575
584
  curPath = curPath or []
576
585
  curParentId = folder['parentId']
577
586
  curParentType = folder['parentCollection']
@@ -585,10 +594,30 @@ class Folder(AccessControlledModel):
585
594
  else:
586
595
  parentFiltered = ModelImporter.model(curParentType).filter(curParentObject, user)
587
596
 
588
- return [{
597
+ curPaths = [{
589
598
  'type': curParentType,
590
599
  'object': parentFiltered
591
600
  }] + curPath
601
+ if hideInaccessible:
602
+ consolidatedPaths = []
603
+ # Walk the hierarchy from root to leaf, and return only the objects
604
+ # that the user has access to, providing they don't leak any parent
605
+ # information to the client.
606
+ for path in curPaths:
607
+ pathModel = ModelImporter.model(path['type'])
608
+ if not pathModel.hasAccess(path['object'], user, level):
609
+ # If the user does not have access to a folder/collection/user,
610
+ # discard all the accumulated hierarchy so as to not leak any
611
+ # relational information.
612
+ consolidatedPaths = []
613
+ continue
614
+ consolidatedPaths.append({
615
+ 'type': path['type'],
616
+ 'object': pathModel.filter(path['object'], user)
617
+ })
618
+
619
+ return consolidatedPaths
620
+ return curPaths
592
621
  else:
593
622
  curParentObject = self.load(curParentId, user=user, level=level, force=force)
594
623
  curPath = [{
@@ -596,7 +625,13 @@ class Folder(AccessControlledModel):
596
625
  'object': curParentObject if force else self.filter(curParentObject, user)
597
626
  }] + curPath
598
627
 
599
- return self.parentsToRoot(curParentObject, curPath, user=user, force=force)
628
+ return self.parentsToRoot(
629
+ curParentObject,
630
+ curPath,
631
+ user=user,
632
+ force=force,
633
+ hideInaccessible=hideInaccessible
634
+ )
600
635
 
601
636
  def countItems(self, folder):
602
637
  """
@@ -374,7 +374,7 @@ class Item(acl_mixin.AccessControlMixin, Model):
374
374
 
375
375
  return self.save(item)
376
376
 
377
- def parentsToRoot(self, item, user=None, force=False):
377
+ def parentsToRoot(self, item, user=None, force=False, hideInaccessible=False):
378
378
  """
379
379
  Get the path to traverse to a root of the hierarchy.
380
380
 
@@ -393,7 +393,12 @@ class Item(acl_mixin.AccessControlMixin, Model):
393
393
  curFolder = folderModel.load(
394
394
  item['folderId'], user=user, level=AccessType.READ, force=force)
395
395
  folderIdsToRoot = folderModel.parentsToRoot(
396
- curFolder, user=user, level=AccessType.READ, force=force)
396
+ curFolder,
397
+ user=user,
398
+ level=AccessType.READ,
399
+ force=force,
400
+ hideInaccessible=hideInaccessible,
401
+ )
397
402
 
398
403
  if force:
399
404
  folderIdsToRoot.append({'type': 'folder', 'object': curFolder})
@@ -43,12 +43,18 @@ def _permissionClauses(user=None, level=None, prefix=''):
43
43
  :returns: A query dictionary with an '$or' entry which consists of a list
44
44
  of match clauses, any one of which implies validation.
45
45
  """
46
+ from girder.models.setting import Setting
47
+ from girder.settings import SettingKey
48
+
46
49
  permissionClauses = []
47
50
  if level is None or (user and user['admin']):
48
51
  # Without a level or with an admin user, match everything.
49
52
  return {}
50
53
  if level <= AccessType.READ:
51
- permissionClauses.append({prefix + 'public': True})
54
+ if user or not Setting().get(SettingKey.DISABLE_ANONYMOUS_ACCESS):
55
+ permissionClauses.append({prefix + 'public': True})
56
+ else:
57
+ return {'__matchnothing': 'nothing'}
52
58
  elif not user:
53
59
  # If we have no user and asked for higher than read access, make a
54
60
  # query that will fail
@@ -1205,9 +1211,12 @@ class AccessControlledModel(Model):
1205
1211
  """
1206
1212
  if user is None:
1207
1213
  if doc.get('public', False):
1208
- return AccessType.READ
1209
- else:
1210
- return AccessType.NONE
1214
+ from girder.models.setting import Setting
1215
+ from girder.settings import SettingKey
1216
+
1217
+ if not Setting().get(SettingKey.DISABLE_ANONYMOUS_ACCESS):
1218
+ return AccessType.READ
1219
+ return AccessType.NONE
1211
1220
  elif user['admin']:
1212
1221
  return AccessType.ADMIN
1213
1222
  else:
@@ -1357,8 +1366,14 @@ class AccessControlledModel(Model):
1357
1366
  :returns: Whether the access is granted.
1358
1367
  """
1359
1368
  if level <= AccessType.READ and doc.get('public', False) is True:
1360
- # Short-circuit the case of public resources
1361
- return True
1369
+ from girder.models.setting import Setting
1370
+ from girder.settings import SettingKey
1371
+
1372
+ if user is not None or not Setting().get(SettingKey.DISABLE_ANONYMOUS_ACCESS):
1373
+ # Short-circuit the case of public resources
1374
+ return True
1375
+ elif user is None:
1376
+ return False
1362
1377
  elif user is None:
1363
1378
  # Anonymous users can only see public resources
1364
1379
  return False
@@ -135,3 +135,13 @@ class Token(AccessControlledModel):
135
135
  """
136
136
  for token in self.find({'apiKeyId': apiKey['_id']}):
137
137
  self.remove(token)
138
+
139
+ def expire(self, token: dict):
140
+ """
141
+ Expire a token immediately.
142
+
143
+ :param token: The token document to expire.
144
+ """
145
+ expires = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(seconds=1)
146
+ self.update({'_id': token['_id']}, {'$set': {'expires': expires}})
147
+ return self.save(token)
@@ -26,11 +26,13 @@ class SettingKey:
26
26
  CORS_ALLOW_METHODS = 'core.cors.allow_methods'
27
27
  CORS_ALLOW_ORIGIN = 'core.cors.allow_origin'
28
28
  CORS_EXPOSE_HEADERS = 'core.cors.expose_headers'
29
+ SHOW_DOWNLOAD = 'core.show_download'
29
30
  EMAIL_FROM_ADDRESS = 'core.email_from_address'
30
31
  EMAIL_HOST = 'core.email_host'
31
32
  EMAIL_VERIFICATION = 'core.email_verification'
32
33
  ENABLE_NOTIFICATION_STREAM = 'core.enable_notification_stream'
33
34
  ENABLE_PASSWORD_LOGIN = 'core.enable_password_login'
35
+ DISABLE_ANONYMOUS_ACCESS = 'core.disable_anonymous_access'
34
36
  FILEHANDLE_MAX_SIZE = 'core.filehandle_max_size'
35
37
  GIRDER_MOUNT_INFORMATION = 'core.girder_mount_information'
36
38
  HTTP_ONLY_COOKIES = 'core.http_only_cookies'
@@ -73,6 +75,7 @@ class SettingDefault:
73
75
  SettingKey.CORS_ALLOW_METHODS: 'GET, POST, PUT, HEAD, DELETE',
74
76
  SettingKey.CORS_ALLOW_ORIGIN: '',
75
77
  SettingKey.CORS_EXPOSE_HEADERS: 'Girder-Total-Count, Content-Disposition',
78
+ SettingKey.SHOW_DOWNLOAD: 'all',
76
79
  # An apache server using reverse proxy would also need
77
80
  # X-Requested-With, X-Forwarded-Server, X-Forwarded-For,
78
81
  # X-Forwarded-Host, Remote-Addr
@@ -81,6 +84,7 @@ class SettingDefault:
81
84
  SettingKey.EMAIL_VERIFICATION: 'disabled',
82
85
  SettingKey.ENABLE_NOTIFICATION_STREAM: True,
83
86
  SettingKey.ENABLE_PASSWORD_LOGIN: True,
87
+ SettingKey.DISABLE_ANONYMOUS_ACCESS: False,
84
88
  SettingKey.FILEHANDLE_MAX_SIZE: 1024 * 1024 * 16,
85
89
  SettingKey.GIRDER_MOUNT_INFORMATION: None,
86
90
  SettingKey.HTTP_ONLY_COOKIES: False, # TODO This will go away in next major version
@@ -229,6 +233,17 @@ class SettingValidator:
229
233
  if not isinstance(doc['value'], str):
230
234
  raise ValidationException('CORS exposed headers must be a string', 'value')
231
235
 
236
+ @staticmethod
237
+ @setting_utilities.validator(SettingKey.SHOW_DOWNLOAD)
238
+ def _validateshowDownload(doc):
239
+ if not isinstance(doc['value'], str):
240
+ raise ValidationException(
241
+ 'Show download must be "all", "user", "admin", or "none".', 'value')
242
+ doc['value'] = doc['value'].lower()
243
+ if doc['value'] not in ('all', 'user', 'admin', 'none'):
244
+ raise ValidationException(
245
+ 'Show download must be "all", "user", "admin", or "none".', 'value')
246
+
232
247
  @staticmethod
233
248
  @setting_utilities.validator(SettingKey.EMAIL_FROM_ADDRESS)
234
249
  def _validateEmailFromAddress(doc):
@@ -265,6 +280,12 @@ class SettingValidator:
265
280
  if not isinstance(doc['value'], bool):
266
281
  raise ValidationException('Enable password login setting must be boolean.', 'value')
267
282
 
283
+ @staticmethod
284
+ @setting_utilities.validator(SettingKey.DISABLE_ANONYMOUS_ACCESS)
285
+ def _validateDisableAnonymousAccess(doc):
286
+ if not isinstance(doc['value'], bool):
287
+ raise ValidationException('Disable anonymous access setting must be boolean.', 'value')
288
+
268
289
  @staticmethod
269
290
  @setting_utilities.validator(SettingKey.FILEHANDLE_MAX_SIZE)
270
291
  def _validateFilehandleMaxSize(doc):
@@ -0,0 +1,261 @@
1
+ # Utility for saving and restoring the internal state of a hash object
2
+ # so that checksums can be streamed without having to remain in memory.
3
+ # Inspired by http://code.activestate.com/recipes/
4
+ # 578479-save-and-restore-sha-512-internal-state/
5
+
6
+ import binascii
7
+ import ctypes
8
+ import hashlib
9
+ import ssl
10
+ import sys
11
+
12
+ _ver = sys.version_info
13
+ _free_threaded = hasattr(sys, '_is_gil_enabled') and not sys._is_gil_enabled()
14
+ _WORD = ctypes.sizeof(ctypes.c_void_p)
15
+
16
+ # This is the offset to the EVP_MD_CTX structure in CPython's _hashopenssl.c
17
+ # EVPObject. It changed for Python 3.8 in
18
+ # https://github.com/python/cpython/pull/16023 and again for the free-threaded
19
+ # builds in 3.14 (which add two words to the object header) and for all builds
20
+ # in 3.15 (which add one word). These values are only used as a fallback on
21
+ # platforms where we cannot safely auto-detect the layout.
22
+ if _free_threaded:
23
+ _HASHLIB_EVP_STRUCT_OFFSET = 5 if _ver >= (3, 15) else 4
24
+ else:
25
+ _HASHLIB_EVP_STRUCT_OFFSET = 3 if _ver >= (3, 15) else 2
26
+
27
+ # Number of pointer-sized words to scan when auto-detecting the layout of
28
+ # CPython's _hashlib.HASH object and the OpenSSL EVP_MD_CTX structure it
29
+ # references. The digest state has never been stored inline in the hash
30
+ # object (since CPython 2.7.13), so it is always reachable via two levels of
31
+ # pointers: the hash object points to an EVP_MD_CTX, which points to the
32
+ # state data.
33
+ _HASHLIB_OBJECT_SCAN_WORDS = 10
34
+ _EVP_MD_CTX_SCAN_WORDS = 16
35
+
36
+ # Minimum plausible heap address; anything smaller is not a real pointer.
37
+ _MIN_VALID_ADDRESS = 0x1000
38
+
39
+ # Auto-detected offsets, in units of words: (offset of the EVP_MD_CTX pointer
40
+ # within the hash object, offset of the state data pointer within the
41
+ # EVP_MD_CTX). Set once the first hash object has been inspected and reused
42
+ # for all subsequent objects, since the layout is the same for every hash
43
+ # algorithm within a single interpreter build.
44
+ _STATE_OFFSETS = None
45
+
46
+
47
+ def _readPointer(address):
48
+ return ctypes.cast(address, ctypes.POINTER(ctypes.c_void_p))[0]
49
+
50
+
51
+ def _getReadableAddressRanges():
52
+ """
53
+ Get the readable memory ranges of the current process, used to validate
54
+ candidate pointers before dereferencing them.
55
+
56
+ :returns: A list of (start, end) address tuples, or None if the platform
57
+ does not provide the information (in which case hardcoded offsets are
58
+ used instead).
59
+ """
60
+ try:
61
+ with open('/proc/self/maps') as mapsFile:
62
+ ranges = []
63
+ for line in mapsFile:
64
+ fields = line.split()
65
+ if 'r' not in fields[1]:
66
+ continue
67
+ start, end = fields[0].split('-')
68
+ ranges.append((int(start, 16), int(end, 16)))
69
+ return ranges
70
+ except (OSError, IndexError, ValueError):
71
+ return None
72
+
73
+
74
+ def _isValidAddress(ranges, address, size):
75
+ """
76
+ Check that an address range is safe to read without segfaulting.
77
+ """
78
+ if not address or address < _MIN_VALID_ADDRESS:
79
+ return False
80
+ return any(start <= address and address + size <= end for start, end in ranges)
81
+
82
+
83
+ def _locateStateDataAddress(hashObject, initVectorFirstWord, stateSize):
84
+ """
85
+ Find the address of the internal hash state of a hash object.
86
+
87
+ When possible, this is done by scanning the hash object for a pointer to
88
+ an OpenSSL EVP_MD_CTX and scanning that for a pointer to memory that
89
+ begins with the algorithm's initialization vector. This avoids depending
90
+ on hardcoded struct offsets, which CPython has repeatedly changed (see
91
+ the fallback offsets below the imports). On platforms where memory
92
+ ranges cannot be enumerated, the hardcoded offsets are used instead.
93
+
94
+ :param hashObject: A hashlib hash object backed by OpenSSL
95
+ (_hashlib.HASH).
96
+ :param initVectorFirstWord: The first eight bytes of the digest state of a
97
+ freshly initialized hash object of this algorithm.
98
+ :param stateSize: The size in bytes of the digest state.
99
+ :return: The address of the digest state, or None if it could not be
100
+ located.
101
+ """
102
+ global _STATE_OFFSETS
103
+ objectAddress = id(hashObject)
104
+
105
+ if _STATE_OFFSETS is not None:
106
+ objectOffset, ctxOffset = _STATE_OFFSETS
107
+ ctxAddress = _readPointer(objectAddress + objectOffset * _WORD)
108
+ return _readPointer(ctxAddress + ctxOffset * _WORD)
109
+
110
+ ranges = _getReadableAddressRanges()
111
+ if ranges is None:
112
+ # Platforms without /proc/self/maps, such as macOS and Windows.
113
+ ctxAddress = _readPointer(objectAddress + _HASHLIB_EVP_STRUCT_OFFSET * _WORD)
114
+ if ssl._OPENSSL_API_VERSION < (3, 0):
115
+ # OpenSSL 1.x
116
+ return _readPointer(ctxAddress + 3 * _WORD)
117
+ # OpenSSL 3.x
118
+ return _readPointer(ctxAddress + 7 * _WORD)
119
+
120
+ for objectOffset in range(2, _HASHLIB_OBJECT_SCAN_WORDS):
121
+ ctxAddress = _readPointer(objectAddress + objectOffset * _WORD)
122
+ if not _isValidAddress(ranges, ctxAddress, _EVP_MD_CTX_SCAN_WORDS * _WORD):
123
+ continue
124
+ for ctxOffset in range(_EVP_MD_CTX_SCAN_WORDS):
125
+ stateAddress = _readPointer(ctxAddress + ctxOffset * _WORD)
126
+ if not _isValidAddress(ranges, stateAddress, stateSize):
127
+ continue
128
+ if ctypes.cast(
129
+ stateAddress, ctypes.POINTER(ctypes.c_char)
130
+ )[:8] == initVectorFirstWord:
131
+ _STATE_OFFSETS = (objectOffset, ctxOffset)
132
+ return stateAddress
133
+ return None
134
+
135
+
136
+ def _getStateDataPointer(hashObject, hashInfo):
137
+ """
138
+ Get a pointer to the internal hash state of a hash object.
139
+
140
+ :param hashObject: A hashlib hash object.
141
+ :param hashInfo: The _HashInfo instance describing the hash algorithm.
142
+ :return: A ctypes pointer to the internal hash state.
143
+ :rtype: ctypes.POINTER(ctypes.c_char)
144
+ """
145
+ stateAddress = _locateStateDataAddress(
146
+ hashObject, hashInfo.initVectorFirstWord, hashInfo.stateSize)
147
+ if stateAddress is None:
148
+ raise RuntimeError(
149
+ 'Could not locate the internal state of the %s hash object. This module '
150
+ 'requires a CPython build with OpenSSL-backed hashlib.' % hashInfo.name)
151
+ return ctypes.cast(stateAddress, ctypes.POINTER(ctypes.c_char))
152
+
153
+
154
+ _HASH_INFOS = {}
155
+
156
+
157
+ class _HashInfo:
158
+ def __init__(self, type, stateSize, initVectorFirstWord):
159
+ self.type = type
160
+ self.stateSize = stateSize
161
+ self.initVectorFirstWord = initVectorFirstWord
162
+
163
+ # Instantiate to get the name and do a sanity check
164
+ instance = self.type()
165
+ self.name = instance.name
166
+
167
+ stateDataPointer = _getStateDataPointer(instance, self)
168
+ assert stateDataPointer[:8] == initVectorFirstWord
169
+
170
+ _HASH_INFOS[self.name] = self
171
+
172
+
173
+ _HashInfo(
174
+ type=hashlib.md5,
175
+ # github.com/openssl/openssl/blob/OpenSSL_1_0_1f/crypto/md5/md5.h#L100
176
+ stateSize=92,
177
+ # Found empirically
178
+ initVectorFirstWord=b'\x01\x23\x45\x67\x89\xab\xcd\xef'
179
+ )
180
+ _HashInfo(
181
+ type=hashlib.sha1,
182
+ # github.com/openssl/openssl/blob/OpenSSL_1_0_1f/crypto/sha/sha.h#L100
183
+ stateSize=96,
184
+ # Found empirically
185
+ initVectorFirstWord=b'\x01\x23\x45\x67\x89\xab\xcd\xef'
186
+ )
187
+ _HashInfo(
188
+ type=hashlib.sha224,
189
+ # Uses the same struct as sha256
190
+ stateSize=112,
191
+ # github.com/openssl/openssl/blob/OpenSSL_1_0_1f/crypto/sha256.c#L22
192
+ initVectorFirstWord=b'\xd8\x9e\x05\xc1\x07\xd5\x7c\x36'
193
+ )
194
+ _HashInfo(
195
+ type=hashlib.sha256,
196
+ # github.com/openssl/openssl/blob/OpenSSL_1_0_1f/crypto/sha/sha.h#L135
197
+ stateSize=112,
198
+ # github.com/openssl/openssl/blob/OpenSSL_1_0_1f/crypto/sha/sha256.c#L33
199
+ initVectorFirstWord=b'\x67\xe6\x09\x6a\x85\xae\x67\xbb'
200
+ )
201
+ _HashInfo(
202
+ type=hashlib.sha384,
203
+ # Uses the same struct as sha512
204
+ stateSize=216,
205
+ # github.com/openssl/openssl/blob/OpenSSL_1_0_1f/crypto/sha/sha512.c#L64
206
+ initVectorFirstWord=b'\xd8\x9e\x05\xc1\x5d\x9d\xbb\xcb'
207
+ )
208
+ _HashInfo(
209
+ type=hashlib.sha512,
210
+ # github.com/openssl/openssl/blob/OpenSSL_1_0_1f/crypto/sha/sha.h#L182
211
+ stateSize=216,
212
+ # github.com/openssl/openssl/blob/OpenSSL_1_0_1f/crypto/sha/sha512.c#L80
213
+ initVectorFirstWord=b'\x08\xc9\xbc\xf3\x67\xe6\x09\x6a'
214
+ )
215
+
216
+
217
+ def serialize(hashObject):
218
+ """
219
+ Serializes the internal state of the hash object passed in. Calling
220
+ restore() on the serialized value afterward will return an equivalent
221
+ hash object to the one passed.
222
+
223
+ :param hashObject: The hash object to serialize.
224
+ :type hashObject: _hashlib.HASH
225
+ :returns: A binary string representing the serialized state.
226
+ """
227
+ hashInfo = _HASH_INFOS[hashObject.name]
228
+ stateDataPointer = _getStateDataPointer(hashObject, hashInfo)
229
+ return stateDataPointer[:hashInfo.stateSize]
230
+
231
+
232
+ def restore(oldStateData, hashName):
233
+ """
234
+ Unserializes a hash object from a binary string created by the
235
+ serialize() method in this module.
236
+
237
+ :param oldStateData: The serialized state.
238
+ :type oldStateData: binary string
239
+ :param hashName: The name of the hash algorithm type.
240
+ :type hashName: str
241
+ :returns: A hash object in the same state as the one that serialize()
242
+ was called on.
243
+ """
244
+ hashInfo = _HASH_INFOS[hashName]
245
+ assert len(oldStateData) == hashInfo.stateSize
246
+
247
+ hashObject = hashInfo.type()
248
+ stateDataPointer = _getStateDataPointer(hashObject, hashInfo)
249
+
250
+ for i, byte in enumerate(oldStateData):
251
+ stateDataPointer[i] = byte
252
+
253
+ return hashObject
254
+
255
+
256
+ def serializeHex(hashObject):
257
+ return binascii.b2a_hex(serialize(hashObject))
258
+
259
+
260
+ def restoreHex(oldHexStateData, hashName):
261
+ return restore(binascii.a2b_hex(oldHexStateData), hashName)
@@ -24,7 +24,8 @@
24
24
  brandName: '${brandName | js}',
25
25
  bannerColor: '${bannerColor | js}',
26
26
  registrationPolicy: '${registrationPolicy | js}',
27
- enablePasswordLogin: ${enablePasswordLogin | n,json,js}
27
+ enablePasswordLogin: ${enablePasswordLogin | n,json,js},
28
+ showDownload: '${showDownload | js}'
28
29
  }).render();
29
30
  girder.events.trigger('g:appload.after', girder.app);
30
31
  });
@@ -122,5 +122,6 @@ class Webroot(WebrootBase):
122
122
  self.vars['bannerColor'] = Setting().get(SettingKey.BANNER_COLOR)
123
123
  self.vars['registrationPolicy'] = Setting().get(SettingKey.REGISTRATION_POLICY)
124
124
  self.vars['enablePasswordLogin'] = Setting().get(SettingKey.ENABLE_PASSWORD_LOGIN)
125
+ self.vars['showDownload'] = Setting().get(SettingKey.SHOW_DOWNLOAD)
125
126
 
126
127
  return super()._renderHTML()
@@ -7,12 +7,14 @@
7
7
  | Actions
8
8
  i.icon-down-dir
9
9
  ul.g-collection-actions-menu.dropdown-menu.pull-right(role="menu")
10
- li(role="presentation")
11
- a.g-download-collection(role="menuitem", href=collection.downloadUrl())
12
- i.icon-download
13
- | Download collection
14
- if (collection.getAccessLevel() >= AccessType.WRITE)
10
+ if (showDownload)
11
+ li(role="presentation")
12
+ a.g-download-collection(role="menuitem", href=collection.downloadUrl())
13
+ i.icon-download
14
+ | Download collection
15
+ if (showDownload && collection.getAccessLevel() >= AccessType.WRITE)
15
16
  li.divider(role="presentation")
17
+ if (collection.getAccessLevel() >= AccessType.WRITE)
16
18
  li(role="presentation")
17
19
  a.g-edit-collection(role="menuitem")
18
20
  i.icon-edit
@@ -0,0 +1,64 @@
1
+ .g-item-breadcrumb-container
2
+ .g-item-header
3
+
4
+ .pull-right
5
+ if (accessLevel >= AccessType.WRITE)
6
+ button.g-upload-into-item.btn.btn-sm.btn-success(title="Upload files into item")
7
+ i.icon-upload
8
+ if showDownload || accessLevel >= AccessType.WRITE
9
+ .btn-group
10
+ button.g-item-actions-button.btn.btn-sm.btn-default.dropdown-toggle(
11
+ data-toggle="dropdown", title="Item actions")
12
+ i.icon-doc-text-inv
13
+ | Actions
14
+ i.icon-down-dir
15
+ ul.g-item-actions-menu.dropdown-menu.pull-right(role="menu")
16
+ if (showDownload)
17
+ li(role="presentation")
18
+ a.g-download-item(role="menuitem", href=item.downloadUrl())
19
+ i.icon-download
20
+ | Download item
21
+ if (showDownload && accessLevel >= AccessType.WRITE)
22
+ li.divider(role="presentation")
23
+ if (accessLevel >= AccessType.WRITE)
24
+ li(role="presentation")
25
+ a.g-edit-item(role="menuitem")
26
+ i.icon-edit
27
+ | Edit item
28
+ li.divider(role="presentation")
29
+ li(role="presentation")
30
+ a.g-delete-item(role="menuitem")
31
+ i.icon-trash
32
+ | Delete item
33
+
34
+ .g-item-name.g-body-title= item.name()
35
+
36
+ .g-item-description!= renderMarkdown(item.get('description'))
37
+
38
+ .g-item-info
39
+ .g-item-info-header
40
+ i.icon-info
41
+ | Info
42
+ .g-item-size.g-info-list-entry
43
+ i.icon-hdd
44
+ if item.get('size') < 1024
45
+ | #{item.get('size')} bytes
46
+ else
47
+ | #{formatSize(item.get('size'))} (#{item.get('size')} bytes)
48
+ .g-item-created.g-info-list-entry
49
+ i.icon-clock
50
+ | Created on #{formatDate(item.get('created'), DATE_SECOND)}
51
+ .g-item-updated.g-info-list-entry
52
+ i.icon-clock
53
+ | Updated on #{formatDate(item.get('updated'), DATE_SECOND)}
54
+ .g-item-id.g-info-list-entry
55
+ i.icon-share
56
+ | Unique ID: #{item.id}
57
+
58
+ .g-item-metadata
59
+
60
+ .g-item-files
61
+ .g-item-files-header
62
+ i.icon-docs
63
+ | Files &amp; links
64
+ .g-item-files-container