@sync-in/server 1.11.0 → 2.0.0

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 (1040) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +1 -1
  3. package/README.md +3 -11
  4. package/environment/environment.dist.min.yaml +1 -1
  5. package/environment/environment.dist.yaml +173 -28
  6. package/package.json +17 -16
  7. package/server/app.bootstrap.js +1 -5
  8. package/server/app.bootstrap.js.map +1 -1
  9. package/server/app.constants.js +1 -5
  10. package/server/app.constants.js.map +1 -1
  11. package/server/app.e2e-spec.js +1 -5
  12. package/server/app.e2e-spec.js.map +1 -1
  13. package/server/app.functions.js +1 -5
  14. package/server/app.functions.js.map +1 -1
  15. package/server/app.module.js +1 -5
  16. package/server/app.module.js.map +1 -1
  17. package/server/app.service.js +1 -5
  18. package/server/app.service.js.map +1 -1
  19. package/server/app.service.spec.js +2 -6
  20. package/server/app.service.spec.js.map +1 -1
  21. package/server/applications/admin/admin.module.js +1 -5
  22. package/server/applications/admin/admin.module.js.map +1 -1
  23. package/server/applications/admin/constants/routes.js +1 -5
  24. package/server/applications/admin/constants/routes.js.map +1 -1
  25. package/server/applications/admin/interfaces/check-update.interfaces.js +1 -5
  26. package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -1
  27. package/server/applications/admin/services/admin-scheduler.service.js +1 -5
  28. package/server/applications/admin/services/admin-scheduler.service.js.map +1 -1
  29. package/server/applications/admin/services/admin.service.js +13 -8
  30. package/server/applications/admin/services/admin.service.js.map +1 -1
  31. package/server/applications/admin/services/admin.service.spec.js +1 -5
  32. package/server/applications/admin/services/admin.service.spec.js.map +1 -1
  33. package/server/applications/admin/utils/check-update.js +1 -5
  34. package/server/applications/admin/utils/check-update.js.map +1 -1
  35. package/server/applications/applications.config.js +1 -5
  36. package/server/applications/applications.config.js.map +1 -1
  37. package/server/applications/applications.constants.js +5 -5
  38. package/server/applications/applications.constants.js.map +1 -1
  39. package/server/applications/applications.module.js +1 -5
  40. package/server/applications/applications.module.js.map +1 -1
  41. package/server/applications/comments/comments.controller.js +1 -5
  42. package/server/applications/comments/comments.controller.js.map +1 -1
  43. package/server/applications/comments/comments.controller.spec.js +1 -5
  44. package/server/applications/comments/comments.controller.spec.js.map +1 -1
  45. package/server/applications/comments/comments.module.js +1 -5
  46. package/server/applications/comments/comments.module.js.map +1 -1
  47. package/server/applications/comments/constants/routes.js +1 -5
  48. package/server/applications/comments/constants/routes.js.map +1 -1
  49. package/server/applications/comments/dto/comment.dto.js +1 -5
  50. package/server/applications/comments/dto/comment.dto.js.map +1 -1
  51. package/server/applications/comments/interfaces/comment-recent.interface.js +1 -5
  52. package/server/applications/comments/interfaces/comment-recent.interface.js.map +1 -1
  53. package/server/applications/comments/schemas/comment.interface.js +1 -5
  54. package/server/applications/comments/schemas/comment.interface.js.map +1 -1
  55. package/server/applications/comments/schemas/comments.schema.js +1 -5
  56. package/server/applications/comments/schemas/comments.schema.js.map +1 -1
  57. package/server/applications/comments/services/comments-manager.service.js +9 -7
  58. package/server/applications/comments/services/comments-manager.service.js.map +1 -1
  59. package/server/applications/comments/services/comments-manager.service.spec.js +10 -8
  60. package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
  61. package/server/applications/comments/services/comments-queries.service.js +1 -5
  62. package/server/applications/comments/services/comments-queries.service.js.map +1 -1
  63. package/server/applications/files/adapters/files-indexer-mysql.service.js +29 -12
  64. package/server/applications/files/adapters/files-indexer-mysql.service.js.map +1 -1
  65. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js +1 -5
  66. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js.map +1 -1
  67. package/server/applications/files/constants/cache.js +1 -5
  68. package/server/applications/files/constants/cache.js.map +1 -1
  69. package/server/applications/files/constants/compress.js +1 -5
  70. package/server/applications/files/constants/compress.js.map +1 -1
  71. package/server/applications/files/constants/files.js +1 -5
  72. package/server/applications/files/constants/files.js.map +1 -1
  73. package/server/applications/files/constants/indexing.js +1 -5
  74. package/server/applications/files/constants/indexing.js.map +1 -1
  75. package/server/applications/files/constants/operations.js +1 -5
  76. package/server/applications/files/constants/operations.js.map +1 -1
  77. package/server/applications/files/constants/routes.js +1 -5
  78. package/server/applications/files/constants/routes.js.map +1 -1
  79. package/server/applications/files/constants/samples.js +1 -5
  80. package/server/applications/files/constants/samples.js.map +1 -1
  81. package/server/applications/files/dto/file-operations.dto.js +1 -5
  82. package/server/applications/files/dto/file-operations.dto.js.map +1 -1
  83. package/server/applications/files/events/file-task-event.js +1 -5
  84. package/server/applications/files/events/file-task-event.js.map +1 -1
  85. package/server/applications/files/files-tasks.controller.js +1 -5
  86. package/server/applications/files/files-tasks.controller.js.map +1 -1
  87. package/server/applications/files/files-tasks.controller.spec.js +1 -5
  88. package/server/applications/files/files-tasks.controller.spec.js.map +1 -1
  89. package/server/applications/files/files.config.js +1 -5
  90. package/server/applications/files/files.config.js.map +1 -1
  91. package/server/applications/files/files.controller.js +1 -5
  92. package/server/applications/files/files.controller.js.map +1 -1
  93. package/server/applications/files/files.controller.spec.js +1 -5
  94. package/server/applications/files/files.controller.spec.js.map +1 -1
  95. package/server/applications/files/files.module.js +1 -5
  96. package/server/applications/files/files.module.js.map +1 -1
  97. package/server/applications/files/interfaces/file-db-props.interface.js +1 -5
  98. package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
  99. package/server/applications/files/interfaces/file-lock.interface.js +1 -5
  100. package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
  101. package/server/applications/files/interfaces/file-parse-index.js +1 -5
  102. package/server/applications/files/interfaces/file-parse-index.js.map +1 -1
  103. package/server/applications/files/interfaces/file-props.interface.js +1 -5
  104. package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
  105. package/server/applications/files/interfaces/file-recent-location.interface.js +1 -5
  106. package/server/applications/files/interfaces/file-recent-location.interface.js.map +1 -1
  107. package/server/applications/files/interfaces/file-space.interface.js +1 -5
  108. package/server/applications/files/interfaces/file-space.interface.js.map +1 -1
  109. package/server/applications/files/interfaces/file-tree.interface.js +1 -5
  110. package/server/applications/files/interfaces/file-tree.interface.js.map +1 -1
  111. package/server/applications/files/models/file-error.js +1 -5
  112. package/server/applications/files/models/file-error.js.map +1 -1
  113. package/server/applications/files/models/file-lock-error.js +1 -5
  114. package/server/applications/files/models/file-lock-error.js.map +1 -1
  115. package/server/applications/files/models/file-task.js +1 -5
  116. package/server/applications/files/models/file-task.js.map +1 -1
  117. package/server/applications/files/models/files-indexer.js +1 -5
  118. package/server/applications/files/models/files-indexer.js.map +1 -1
  119. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +1 -5
  120. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -1
  121. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +21 -10
  122. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -1
  123. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +1 -5
  124. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -1
  125. package/server/applications/files/modules/collabora-online/collabora-online.config.js +1 -5
  126. package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -1
  127. package/server/applications/files/modules/collabora-online/collabora-online.constants.js +1 -5
  128. package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -1
  129. package/server/applications/files/modules/collabora-online/collabora-online.controller.js +1 -5
  130. package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -1
  131. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +1 -5
  132. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -1
  133. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js +1 -5
  134. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -1
  135. package/server/applications/files/modules/collabora-online/collabora-online.guard.js +1 -5
  136. package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -1
  137. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +1 -5
  138. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -1
  139. package/server/applications/files/modules/collabora-online/collabora-online.interface.js +1 -5
  140. package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -1
  141. package/server/applications/files/modules/collabora-online/collabora-online.module.js +1 -5
  142. package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -1
  143. package/server/applications/files/modules/collabora-online/collabora-online.routes.js +1 -5
  144. package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -1
  145. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +1 -5
  146. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -1
  147. package/server/applications/files/modules/collabora-online/collabora-online.utils.js +1 -5
  148. package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -1
  149. package/server/applications/files/modules/file-editor-providers.interface.js +6 -0
  150. package/server/applications/files/modules/file-editor-providers.interface.js.map +1 -0
  151. package/server/applications/files/modules/only-office/only-office-environment.decorator.js +1 -5
  152. package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -1
  153. package/server/applications/files/modules/only-office/only-office-manager.service.js +57 -19
  154. package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -1
  155. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +1 -5
  156. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -1
  157. package/server/applications/files/modules/only-office/only-office.config.js +1 -5
  158. package/server/applications/files/modules/only-office/only-office.config.js.map +1 -1
  159. package/server/applications/files/modules/only-office/only-office.constants.js +1 -5
  160. package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -1
  161. package/server/applications/files/modules/only-office/only-office.controller.js +1 -5
  162. package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -1
  163. package/server/applications/files/modules/only-office/only-office.controller.spec.js +1 -5
  164. package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -1
  165. package/server/applications/files/modules/only-office/only-office.dtos.js +1 -5
  166. package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -1
  167. package/server/applications/files/modules/only-office/only-office.guard.js +1 -5
  168. package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -1
  169. package/server/applications/files/modules/only-office/only-office.guard.spec.js +1 -5
  170. package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -1
  171. package/server/applications/files/modules/only-office/only-office.interface.js +1 -5
  172. package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -1
  173. package/server/applications/files/modules/only-office/only-office.module.js +1 -5
  174. package/server/applications/files/modules/only-office/only-office.module.js.map +1 -1
  175. package/server/applications/files/modules/only-office/only-office.routes.js +1 -5
  176. package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -1
  177. package/server/applications/files/modules/only-office/only-office.strategy.js +1 -5
  178. package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -1
  179. package/server/applications/files/schemas/file-content.interface.js +1 -5
  180. package/server/applications/files/schemas/file-content.interface.js.map +1 -1
  181. package/server/applications/files/schemas/file-recent.interface.js +1 -5
  182. package/server/applications/files/schemas/file-recent.interface.js.map +1 -1
  183. package/server/applications/files/schemas/file.interface.js +1 -5
  184. package/server/applications/files/schemas/file.interface.js.map +1 -1
  185. package/server/applications/files/schemas/files-content.schema.js +1 -5
  186. package/server/applications/files/schemas/files-content.schema.js.map +1 -1
  187. package/server/applications/files/schemas/files-recents.schema.js +1 -5
  188. package/server/applications/files/schemas/files-recents.schema.js.map +1 -1
  189. package/server/applications/files/schemas/files.schema.js +1 -5
  190. package/server/applications/files/schemas/files.schema.js.map +1 -1
  191. package/server/applications/files/services/files-content-manager.service.js +45 -16
  192. package/server/applications/files/services/files-content-manager.service.js.map +1 -1
  193. package/server/applications/files/services/files-lock-manager.service.js +53 -18
  194. package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
  195. package/server/applications/files/services/files-lock-manager.service.spec.js +1 -5
  196. package/server/applications/files/services/files-lock-manager.service.spec.js.map +1 -1
  197. package/server/applications/files/services/files-manager.service.js +77 -24
  198. package/server/applications/files/services/files-manager.service.js.map +1 -1
  199. package/server/applications/files/services/files-manager.service.spec.js +1 -5
  200. package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
  201. package/server/applications/files/services/files-methods.service.js +5 -6
  202. package/server/applications/files/services/files-methods.service.js.map +1 -1
  203. package/server/applications/files/services/files-methods.service.spec.js +1 -5
  204. package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
  205. package/server/applications/files/services/files-parser.service.js +13 -8
  206. package/server/applications/files/services/files-parser.service.js.map +1 -1
  207. package/server/applications/files/services/files-parser.service.spec.js +1 -5
  208. package/server/applications/files/services/files-parser.service.spec.js.map +1 -1
  209. package/server/applications/files/services/files-queries.service.js +29 -12
  210. package/server/applications/files/services/files-queries.service.js.map +1 -1
  211. package/server/applications/files/services/files-recents.service.js +1 -5
  212. package/server/applications/files/services/files-recents.service.js.map +1 -1
  213. package/server/applications/files/services/files-recents.service.spec.js +1 -5
  214. package/server/applications/files/services/files-recents.service.spec.js.map +1 -1
  215. package/server/applications/files/services/files-scheduler.service.js +77 -24
  216. package/server/applications/files/services/files-scheduler.service.js.map +1 -1
  217. package/server/applications/files/services/files-search-manager.service.js +9 -7
  218. package/server/applications/files/services/files-search-manager.service.js.map +1 -1
  219. package/server/applications/files/services/files-search-manager.service.spec.js +1 -5
  220. package/server/applications/files/services/files-search-manager.service.spec.js.map +1 -1
  221. package/server/applications/files/services/files-tasks-manager.service.js +77 -24
  222. package/server/applications/files/services/files-tasks-manager.service.js.map +1 -1
  223. package/server/applications/files/services/files-tasks-manager.service.spec.js +1 -5
  224. package/server/applications/files/services/files-tasks-manager.service.spec.js.map +1 -1
  225. package/server/applications/files/utils/doc-textify/adapters/excel.js +1 -5
  226. package/server/applications/files/utils/doc-textify/adapters/excel.js.map +1 -1
  227. package/server/applications/files/utils/doc-textify/adapters/html.js +1 -5
  228. package/server/applications/files/utils/doc-textify/adapters/html.js.map +1 -1
  229. package/server/applications/files/utils/doc-textify/adapters/open-office.js +1 -5
  230. package/server/applications/files/utils/doc-textify/adapters/open-office.js.map +1 -1
  231. package/server/applications/files/utils/doc-textify/adapters/pdf.js +1 -5
  232. package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
  233. package/server/applications/files/utils/doc-textify/adapters/power-point.js +1 -5
  234. package/server/applications/files/utils/doc-textify/adapters/power-point.js.map +1 -1
  235. package/server/applications/files/utils/doc-textify/adapters/text.js +1 -5
  236. package/server/applications/files/utils/doc-textify/adapters/text.js.map +1 -1
  237. package/server/applications/files/utils/doc-textify/adapters/word.js +1 -5
  238. package/server/applications/files/utils/doc-textify/adapters/word.js.map +1 -1
  239. package/server/applications/files/utils/doc-textify/doc-textify.js +1 -5
  240. package/server/applications/files/utils/doc-textify/doc-textify.js.map +1 -1
  241. package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js +1 -5
  242. package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js.map +1 -1
  243. package/server/applications/files/utils/doc-textify/utils/clean.js +1 -5
  244. package/server/applications/files/utils/doc-textify/utils/clean.js.map +1 -1
  245. package/server/applications/files/utils/files-search.js +1 -5
  246. package/server/applications/files/utils/files-search.js.map +1 -1
  247. package/server/applications/files/utils/files-tree.js +1 -5
  248. package/server/applications/files/utils/files-tree.js.map +1 -1
  249. package/server/applications/files/utils/files.js +1 -5
  250. package/server/applications/files/utils/files.js.map +1 -1
  251. package/server/applications/files/utils/send-file.js +1 -5
  252. package/server/applications/files/utils/send-file.js.map +1 -1
  253. package/server/applications/files/utils/unzip-file.js +1 -5
  254. package/server/applications/files/utils/unzip-file.js.map +1 -1
  255. package/server/applications/files/utils/url-file.js +1 -5
  256. package/server/applications/files/utils/url-file.js.map +1 -1
  257. package/server/applications/links/constants/cache.js +1 -5
  258. package/server/applications/links/constants/cache.js.map +1 -1
  259. package/server/applications/links/constants/links.js +1 -5
  260. package/server/applications/links/constants/links.js.map +1 -1
  261. package/server/applications/links/constants/routes.js +1 -5
  262. package/server/applications/links/constants/routes.js.map +1 -1
  263. package/server/applications/links/dto/create-or-update-link.dto.js +1 -5
  264. package/server/applications/links/dto/create-or-update-link.dto.js.map +1 -1
  265. package/server/applications/links/interfaces/link-guest.interface.js +1 -5
  266. package/server/applications/links/interfaces/link-guest.interface.js.map +1 -1
  267. package/server/applications/links/interfaces/link-space.interface.js +1 -5
  268. package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
  269. package/server/applications/links/links.controller.js +1 -5
  270. package/server/applications/links/links.controller.js.map +1 -1
  271. package/server/applications/links/links.controller.spec.js +1 -5
  272. package/server/applications/links/links.controller.spec.js.map +1 -1
  273. package/server/applications/links/schemas/link.interface.js +1 -5
  274. package/server/applications/links/schemas/link.interface.js.map +1 -1
  275. package/server/applications/links/schemas/links.schema.js +1 -5
  276. package/server/applications/links/schemas/links.schema.js.map +1 -1
  277. package/server/applications/links/services/links-manager.service.js +55 -20
  278. package/server/applications/links/services/links-manager.service.js.map +1 -1
  279. package/server/applications/links/services/links-manager.service.spec.js +3 -7
  280. package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
  281. package/server/applications/links/services/links-queries.service.js +1 -5
  282. package/server/applications/links/services/links-queries.service.js.map +1 -1
  283. package/server/applications/notifications/constants/notifications.js +1 -5
  284. package/server/applications/notifications/constants/notifications.js.map +1 -1
  285. package/server/applications/notifications/constants/routes.js +1 -5
  286. package/server/applications/notifications/constants/routes.js.map +1 -1
  287. package/server/applications/notifications/constants/websocket.js +1 -5
  288. package/server/applications/notifications/constants/websocket.js.map +1 -1
  289. package/server/applications/notifications/i18n/de.js +1 -9
  290. package/server/applications/notifications/i18n/de.js.map +1 -1
  291. package/server/applications/notifications/i18n/es.js +1 -5
  292. package/server/applications/notifications/i18n/es.js.map +1 -1
  293. package/server/applications/notifications/i18n/fr.js +1 -5
  294. package/server/applications/notifications/i18n/fr.js.map +1 -1
  295. package/server/applications/notifications/i18n/hi.js +1 -5
  296. package/server/applications/notifications/i18n/hi.js.map +1 -1
  297. package/server/applications/notifications/i18n/index.js +1 -5
  298. package/server/applications/notifications/i18n/index.js.map +1 -1
  299. package/server/applications/notifications/i18n/it.js +1 -5
  300. package/server/applications/notifications/i18n/it.js.map +1 -1
  301. package/server/applications/notifications/i18n/ja.js +1 -5
  302. package/server/applications/notifications/i18n/ja.js.map +1 -1
  303. package/server/applications/notifications/i18n/ko.js +1 -5
  304. package/server/applications/notifications/i18n/ko.js.map +1 -1
  305. package/server/applications/notifications/i18n/pl.js +1 -5
  306. package/server/applications/notifications/i18n/pl.js.map +1 -1
  307. package/server/applications/notifications/i18n/pt.js +1 -5
  308. package/server/applications/notifications/i18n/pt.js.map +1 -1
  309. package/server/applications/notifications/i18n/pt_br.js +1 -5
  310. package/server/applications/notifications/i18n/pt_br.js.map +1 -1
  311. package/server/applications/notifications/i18n/ru.js +1 -5
  312. package/server/applications/notifications/i18n/ru.js.map +1 -1
  313. package/server/applications/notifications/i18n/tr.js +1 -5
  314. package/server/applications/notifications/i18n/tr.js.map +1 -1
  315. package/server/applications/notifications/i18n/zh.js +1 -5
  316. package/server/applications/notifications/i18n/zh.js.map +1 -1
  317. package/server/applications/notifications/interfaces/notification-properties.interface.js +1 -5
  318. package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
  319. package/server/applications/notifications/interfaces/user-mail-notification.interface.js +1 -5
  320. package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -1
  321. package/server/applications/notifications/mails/models.js +1 -5
  322. package/server/applications/notifications/mails/models.js.map +1 -1
  323. package/server/applications/notifications/mails/templates.js +1 -5
  324. package/server/applications/notifications/mails/templates.js.map +1 -1
  325. package/server/applications/notifications/mails/urls.js +1 -5
  326. package/server/applications/notifications/mails/urls.js.map +1 -1
  327. package/server/applications/notifications/notifications.controller.js +1 -5
  328. package/server/applications/notifications/notifications.controller.js.map +1 -1
  329. package/server/applications/notifications/notifications.controller.spec.js +1 -5
  330. package/server/applications/notifications/notifications.controller.spec.js.map +1 -1
  331. package/server/applications/notifications/notifications.gateway.js +1 -5
  332. package/server/applications/notifications/notifications.gateway.js.map +1 -1
  333. package/server/applications/notifications/notifications.module.js +1 -5
  334. package/server/applications/notifications/notifications.module.js.map +1 -1
  335. package/server/applications/notifications/schemas/notification.interface.js +1 -5
  336. package/server/applications/notifications/schemas/notification.interface.js.map +1 -1
  337. package/server/applications/notifications/schemas/notifications.schema.js +1 -5
  338. package/server/applications/notifications/schemas/notifications.schema.js.map +1 -1
  339. package/server/applications/notifications/services/notifications-manager.service.js +25 -11
  340. package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
  341. package/server/applications/notifications/services/notifications-manager.service.spec.js +20 -11
  342. package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
  343. package/server/applications/notifications/services/notifications-queries.service.js +1 -5
  344. package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
  345. package/server/applications/shares/constants/routes.js +1 -5
  346. package/server/applications/shares/constants/routes.js.map +1 -1
  347. package/server/applications/shares/constants/shares.js +1 -5
  348. package/server/applications/shares/constants/shares.js.map +1 -1
  349. package/server/applications/shares/dto/create-or-update-share.dto.js +1 -5
  350. package/server/applications/shares/dto/create-or-update-share.dto.js.map +1 -1
  351. package/server/applications/shares/interfaces/share-child.interface.js +1 -5
  352. package/server/applications/shares/interfaces/share-child.interface.js.map +1 -1
  353. package/server/applications/shares/interfaces/share-env.interface.js +1 -5
  354. package/server/applications/shares/interfaces/share-env.interface.js.map +1 -1
  355. package/server/applications/shares/interfaces/share-file.interface.js +1 -5
  356. package/server/applications/shares/interfaces/share-file.interface.js.map +1 -1
  357. package/server/applications/shares/interfaces/share-link.interface.js +1 -5
  358. package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
  359. package/server/applications/shares/interfaces/share-props.interface.js +1 -5
  360. package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
  361. package/server/applications/shares/models/share-child.model.js +1 -5
  362. package/server/applications/shares/models/share-child.model.js.map +1 -1
  363. package/server/applications/shares/schemas/share-members.interface.js +1 -5
  364. package/server/applications/shares/schemas/share-members.interface.js.map +1 -1
  365. package/server/applications/shares/schemas/share.interface.js +1 -5
  366. package/server/applications/shares/schemas/share.interface.js.map +1 -1
  367. package/server/applications/shares/schemas/shares-members.schema.js +1 -5
  368. package/server/applications/shares/schemas/shares-members.schema.js.map +1 -1
  369. package/server/applications/shares/schemas/shares.schema.js +1 -5
  370. package/server/applications/shares/schemas/shares.schema.js.map +1 -1
  371. package/server/applications/shares/services/shares-manager.service.js +214 -68
  372. package/server/applications/shares/services/shares-manager.service.js.map +1 -1
  373. package/server/applications/shares/services/shares-manager.service.spec.js +1 -5
  374. package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
  375. package/server/applications/shares/services/shares-queries.service.js +49 -17
  376. package/server/applications/shares/services/shares-queries.service.js.map +1 -1
  377. package/server/applications/shares/shares.controller.js +1 -5
  378. package/server/applications/shares/shares.controller.js.map +1 -1
  379. package/server/applications/shares/shares.controller.spec.js +1 -5
  380. package/server/applications/shares/shares.controller.spec.js.map +1 -1
  381. package/server/applications/shares/shares.module.js +1 -5
  382. package/server/applications/shares/shares.module.js.map +1 -1
  383. package/server/applications/spaces/constants/cache.js +1 -5
  384. package/server/applications/spaces/constants/cache.js.map +1 -1
  385. package/server/applications/spaces/constants/routes.js +1 -5
  386. package/server/applications/spaces/constants/routes.js.map +1 -1
  387. package/server/applications/spaces/constants/spaces.js +1 -5
  388. package/server/applications/spaces/constants/spaces.js.map +1 -1
  389. package/server/applications/spaces/decorators/space-override-permission.decorator.js +1 -5
  390. package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -1
  391. package/server/applications/spaces/decorators/space-skip-guard.decorator.js +1 -5
  392. package/server/applications/spaces/decorators/space-skip-guard.decorator.js.map +1 -1
  393. package/server/applications/spaces/decorators/space-skip-permissions.decorator.js +1 -5
  394. package/server/applications/spaces/decorators/space-skip-permissions.decorator.js.map +1 -1
  395. package/server/applications/spaces/decorators/space.decorator.js +1 -5
  396. package/server/applications/spaces/decorators/space.decorator.js.map +1 -1
  397. package/server/applications/spaces/dto/create-or-update-space.dto.js +1 -5
  398. package/server/applications/spaces/dto/create-or-update-space.dto.js.map +1 -1
  399. package/server/applications/spaces/dto/delete-space.dto.js +1 -5
  400. package/server/applications/spaces/dto/delete-space.dto.js.map +1 -1
  401. package/server/applications/spaces/dto/search-space.dto.js +1 -5
  402. package/server/applications/spaces/dto/search-space.dto.js.map +1 -1
  403. package/server/applications/spaces/dto/space-roots.dto.js +1 -5
  404. package/server/applications/spaces/dto/space-roots.dto.js.map +1 -1
  405. package/server/applications/spaces/guards/space.guard.js +17 -9
  406. package/server/applications/spaces/guards/space.guard.js.map +1 -1
  407. package/server/applications/spaces/guards/space.guard.spec.js +1 -5
  408. package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
  409. package/server/applications/spaces/interfaces/space-diff.interface.js +1 -5
  410. package/server/applications/spaces/interfaces/space-diff.interface.js.map +1 -1
  411. package/server/applications/spaces/interfaces/space-files.interface.js +1 -5
  412. package/server/applications/spaces/interfaces/space-files.interface.js.map +1 -1
  413. package/server/applications/spaces/interfaces/space-request.interface.js +1 -5
  414. package/server/applications/spaces/interfaces/space-request.interface.js.map +1 -1
  415. package/server/applications/spaces/interfaces/space-trash.interface.js +1 -5
  416. package/server/applications/spaces/interfaces/space-trash.interface.js.map +1 -1
  417. package/server/applications/spaces/models/space-env.model.js +1 -5
  418. package/server/applications/spaces/models/space-env.model.js.map +1 -1
  419. package/server/applications/spaces/models/space-props.model.js +1 -5
  420. package/server/applications/spaces/models/space-props.model.js.map +1 -1
  421. package/server/applications/spaces/models/space-root-props.model.js +1 -5
  422. package/server/applications/spaces/models/space-root-props.model.js.map +1 -1
  423. package/server/applications/spaces/models/space.model.js +1 -5
  424. package/server/applications/spaces/models/space.model.js.map +1 -1
  425. package/server/applications/spaces/schemas/space-members.interface.js +1 -5
  426. package/server/applications/spaces/schemas/space-members.interface.js.map +1 -1
  427. package/server/applications/spaces/schemas/space-root.interface.js +1 -5
  428. package/server/applications/spaces/schemas/space-root.interface.js.map +1 -1
  429. package/server/applications/spaces/schemas/space.interface.js +1 -5
  430. package/server/applications/spaces/schemas/space.interface.js.map +1 -1
  431. package/server/applications/spaces/schemas/spaces-members.schema.js +1 -5
  432. package/server/applications/spaces/schemas/spaces-members.schema.js.map +1 -1
  433. package/server/applications/spaces/schemas/spaces-roots.schema.js +1 -5
  434. package/server/applications/spaces/schemas/spaces-roots.schema.js.map +1 -1
  435. package/server/applications/spaces/schemas/spaces.schema.js +1 -5
  436. package/server/applications/spaces/schemas/spaces.schema.js.map +1 -1
  437. package/server/applications/spaces/services/spaces-browser.service.js +77 -24
  438. package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
  439. package/server/applications/spaces/services/spaces-browser.service.spec.js +1 -5
  440. package/server/applications/spaces/services/spaces-browser.service.spec.js.map +1 -1
  441. package/server/applications/spaces/services/spaces-manager.service.js +193 -53
  442. package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
  443. package/server/applications/spaces/services/spaces-manager.service.spec.js +1 -5
  444. package/server/applications/spaces/services/spaces-manager.service.spec.js.map +1 -1
  445. package/server/applications/spaces/services/spaces-queries.service.js +65 -21
  446. package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
  447. package/server/applications/spaces/services/spaces-scheduler.service.js +49 -17
  448. package/server/applications/spaces/services/spaces-scheduler.service.js.map +1 -1
  449. package/server/applications/spaces/spaces.controller.js +1 -5
  450. package/server/applications/spaces/spaces.controller.js.map +1 -1
  451. package/server/applications/spaces/spaces.controller.spec.js +1 -5
  452. package/server/applications/spaces/spaces.controller.spec.js.map +1 -1
  453. package/server/applications/spaces/spaces.module.js +1 -5
  454. package/server/applications/spaces/spaces.module.js.map +1 -1
  455. package/server/applications/spaces/utils/paths.js +1 -5
  456. package/server/applications/spaces/utils/paths.js.map +1 -1
  457. package/server/applications/spaces/utils/permissions.js +1 -5
  458. package/server/applications/spaces/utils/permissions.js.map +1 -1
  459. package/server/applications/spaces/utils/routes.js +1 -5
  460. package/server/applications/spaces/utils/routes.js.map +1 -1
  461. package/server/applications/sync/constants/auth.js +1 -5
  462. package/server/applications/sync/constants/auth.js.map +1 -1
  463. package/server/applications/sync/constants/routes.js +6 -5
  464. package/server/applications/sync/constants/routes.js.map +1 -1
  465. package/server/applications/sync/constants/store.js +1 -9
  466. package/server/applications/sync/constants/store.js.map +1 -1
  467. package/server/applications/sync/constants/sync.js +2 -6
  468. package/server/applications/sync/constants/sync.js.map +1 -1
  469. package/server/applications/sync/decorators/sync-context.decorator.js +1 -5
  470. package/server/applications/sync/decorators/sync-context.decorator.js.map +1 -1
  471. package/server/applications/sync/decorators/sync-environment.decorator.js +1 -5
  472. package/server/applications/sync/decorators/sync-environment.decorator.js.map +1 -1
  473. package/server/applications/sync/dtos/sync-client-auth.dto.js +12 -8
  474. package/server/applications/sync/dtos/sync-client-auth.dto.js.map +1 -1
  475. package/server/applications/sync/dtos/sync-client-info.dto.js +49 -0
  476. package/server/applications/sync/dtos/sync-client-info.dto.js.map +1 -0
  477. package/server/applications/sync/dtos/sync-client-registration.dto.js +34 -11
  478. package/server/applications/sync/dtos/sync-client-registration.dto.js.map +1 -1
  479. package/server/applications/sync/dtos/sync-operations.dto.js +1 -5
  480. package/server/applications/sync/dtos/sync-operations.dto.js.map +1 -1
  481. package/server/applications/sync/dtos/sync-path.dto.js +1 -5
  482. package/server/applications/sync/dtos/sync-path.dto.js.map +1 -1
  483. package/server/applications/sync/dtos/sync-upload.dto.js +1 -5
  484. package/server/applications/sync/dtos/sync-upload.dto.js.map +1 -1
  485. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js +1 -5
  486. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js.map +1 -1
  487. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js +1 -5
  488. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js.map +1 -1
  489. package/server/applications/sync/interfaces/store-manifest.interface.js +1 -5
  490. package/server/applications/sync/interfaces/store-manifest.interface.js.map +1 -1
  491. package/server/applications/sync/interfaces/sync-client-auth.interface.js +1 -25
  492. package/server/applications/sync/interfaces/sync-client-auth.interface.js.map +1 -1
  493. package/server/applications/sync/interfaces/sync-client-paths.interface.js +1 -5
  494. package/server/applications/sync/interfaces/sync-client-paths.interface.js.map +1 -1
  495. package/server/applications/sync/interfaces/sync-client.interface.js +1 -5
  496. package/server/applications/sync/interfaces/sync-client.interface.js.map +1 -1
  497. package/server/applications/sync/interfaces/sync-diff.interface.js +1 -5
  498. package/server/applications/sync/interfaces/sync-diff.interface.js.map +1 -1
  499. package/server/applications/sync/interfaces/sync-path.interface.js +1 -5
  500. package/server/applications/sync/interfaces/sync-path.interface.js.map +1 -1
  501. package/server/applications/sync/schemas/sync-client.interface.js +1 -5
  502. package/server/applications/sync/schemas/sync-client.interface.js.map +1 -1
  503. package/server/applications/sync/schemas/sync-clients.schema.js +1 -5
  504. package/server/applications/sync/schemas/sync-clients.schema.js.map +1 -1
  505. package/server/applications/sync/schemas/sync-path.interface.js +1 -5
  506. package/server/applications/sync/schemas/sync-path.interface.js.map +1 -1
  507. package/server/applications/sync/schemas/sync-paths.schema.js +1 -5
  508. package/server/applications/sync/schemas/sync-paths.schema.js.map +1 -1
  509. package/server/applications/sync/services/sync-clients-manager.service.js +108 -44
  510. package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
  511. package/server/applications/sync/services/sync-clients-manager.service.spec.js +14 -17
  512. package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
  513. package/server/applications/sync/services/sync-manager.service.js +29 -12
  514. package/server/applications/sync/services/sync-manager.service.js.map +1 -1
  515. package/server/applications/sync/services/sync-manager.service.spec.js +1 -5
  516. package/server/applications/sync/services/sync-manager.service.spec.js.map +1 -1
  517. package/server/applications/sync/services/sync-paths-manager.service.js +27 -17
  518. package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
  519. package/server/applications/sync/services/sync-paths-manager.service.spec.js +11 -15
  520. package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
  521. package/server/applications/sync/services/sync-queries.service.js +1 -5
  522. package/server/applications/sync/services/sync-queries.service.js.map +1 -1
  523. package/server/applications/sync/sync.config.js +1 -5
  524. package/server/applications/sync/sync.config.js.map +1 -1
  525. package/server/applications/sync/sync.controller.js +21 -6
  526. package/server/applications/sync/sync.controller.js.map +1 -1
  527. package/server/applications/sync/sync.controller.spec.js +1 -5
  528. package/server/applications/sync/sync.controller.spec.js.map +1 -1
  529. package/server/applications/sync/sync.module.js +1 -5
  530. package/server/applications/sync/sync.module.js.map +1 -1
  531. package/server/applications/sync/utils/functions.js +1 -5
  532. package/server/applications/sync/utils/functions.js.map +1 -1
  533. package/server/applications/sync/utils/normalizedMap.js +1 -5
  534. package/server/applications/sync/utils/normalizedMap.js.map +1 -1
  535. package/server/applications/sync/utils/routes.js +1 -5
  536. package/server/applications/sync/utils/routes.js.map +1 -1
  537. package/server/applications/users/admin-users.controller.js +2 -6
  538. package/server/applications/users/admin-users.controller.js.map +1 -1
  539. package/server/applications/users/admin-users.controller.spec.js +6 -10
  540. package/server/applications/users/admin-users.controller.spec.js.map +1 -1
  541. package/server/applications/users/constants/group.js +1 -5
  542. package/server/applications/users/constants/group.js.map +1 -1
  543. package/server/applications/users/constants/member.js +1 -5
  544. package/server/applications/users/constants/member.js.map +1 -1
  545. package/server/applications/users/constants/routes.js +1 -5
  546. package/server/applications/users/constants/routes.js.map +1 -1
  547. package/server/applications/users/constants/user.js +1 -5
  548. package/server/applications/users/constants/user.js.map +1 -1
  549. package/server/applications/users/constants/websocket.js +1 -5
  550. package/server/applications/users/constants/websocket.js.map +1 -1
  551. package/server/applications/users/decorators/permissions.decorator.js +1 -5
  552. package/server/applications/users/decorators/permissions.decorator.js.map +1 -1
  553. package/server/applications/users/decorators/roles.decorator.js +1 -5
  554. package/server/applications/users/decorators/roles.decorator.js.map +1 -1
  555. package/server/applications/users/decorators/user.decorator.js +1 -5
  556. package/server/applications/users/decorators/user.decorator.js.map +1 -1
  557. package/server/applications/users/dto/create-or-update-group.dto.js +1 -5
  558. package/server/applications/users/dto/create-or-update-group.dto.js.map +1 -1
  559. package/server/applications/users/dto/create-or-update-user.dto.js +1 -5
  560. package/server/applications/users/dto/create-or-update-user.dto.js.map +1 -1
  561. package/server/applications/users/dto/delete-user.dto.js +1 -5
  562. package/server/applications/users/dto/delete-user.dto.js.map +1 -1
  563. package/server/applications/users/dto/search-members.dto.js +1 -5
  564. package/server/applications/users/dto/search-members.dto.js.map +1 -1
  565. package/server/applications/users/dto/user-properties.dto.js +1 -5
  566. package/server/applications/users/dto/user-properties.dto.js.map +1 -1
  567. package/server/applications/users/guards/permissions.guard.js +1 -5
  568. package/server/applications/users/guards/permissions.guard.js.map +1 -1
  569. package/server/applications/users/guards/permissions.guard.spec.js +1 -5
  570. package/server/applications/users/guards/permissions.guard.spec.js.map +1 -1
  571. package/server/applications/users/guards/roles.guard.js +1 -5
  572. package/server/applications/users/guards/roles.guard.js.map +1 -1
  573. package/server/applications/users/guards/roles.guard.spec.js +1 -5
  574. package/server/applications/users/guards/roles.guard.spec.js.map +1 -1
  575. package/server/applications/users/interfaces/admin-group.interface.js +1 -5
  576. package/server/applications/users/interfaces/admin-group.interface.js.map +1 -1
  577. package/server/applications/users/interfaces/admin-user.interface.js +1 -5
  578. package/server/applications/users/interfaces/admin-user.interface.js.map +1 -1
  579. package/server/applications/users/interfaces/group-browse.interface.js +1 -5
  580. package/server/applications/users/interfaces/group-browse.interface.js.map +1 -1
  581. package/server/applications/users/interfaces/group-member.js +1 -5
  582. package/server/applications/users/interfaces/group-member.js.map +1 -1
  583. package/server/applications/users/interfaces/guest-user.interface.js +1 -5
  584. package/server/applications/users/interfaces/guest-user.interface.js.map +1 -1
  585. package/server/applications/users/interfaces/member.interface.js +1 -5
  586. package/server/applications/users/interfaces/member.interface.js.map +1 -1
  587. package/server/applications/users/interfaces/owner.interface.js +1 -5
  588. package/server/applications/users/interfaces/owner.interface.js.map +1 -1
  589. package/server/applications/users/interfaces/user-secrets.interface.js +1 -5
  590. package/server/applications/users/interfaces/user-secrets.interface.js.map +1 -1
  591. package/server/applications/users/interfaces/websocket.interface.js +1 -5
  592. package/server/applications/users/interfaces/websocket.interface.js.map +1 -1
  593. package/server/applications/users/models/user.model.js +1 -5
  594. package/server/applications/users/models/user.model.js.map +1 -1
  595. package/server/applications/users/schemas/group.interface.js +1 -5
  596. package/server/applications/users/schemas/group.interface.js.map +1 -1
  597. package/server/applications/users/schemas/groups.schema.js +1 -5
  598. package/server/applications/users/schemas/groups.schema.js.map +1 -1
  599. package/server/applications/users/schemas/user-group.interface.js +1 -5
  600. package/server/applications/users/schemas/user-group.interface.js.map +1 -1
  601. package/server/applications/users/schemas/user.interface.js +1 -5
  602. package/server/applications/users/schemas/user.interface.js.map +1 -1
  603. package/server/applications/users/schemas/users-groups.schema.js +1 -5
  604. package/server/applications/users/schemas/users-groups.schema.js.map +1 -1
  605. package/server/applications/users/schemas/users-guests.schema.js +1 -5
  606. package/server/applications/users/schemas/users-guests.schema.js.map +1 -1
  607. package/server/applications/users/schemas/users.schema.js +1 -5
  608. package/server/applications/users/schemas/users.schema.js.map +1 -1
  609. package/server/applications/users/services/admin-users-manager.service.js +67 -23
  610. package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
  611. package/server/applications/users/services/admin-users-manager.service.spec.js +3 -7
  612. package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
  613. package/server/applications/users/services/admin-users-queries.service.js +65 -21
  614. package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
  615. package/server/applications/users/services/users-manager.service.js +81 -25
  616. package/server/applications/users/services/users-manager.service.js.map +1 -1
  617. package/server/applications/users/services/users-manager.service.spec.js +14 -12
  618. package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
  619. package/server/applications/users/services/users-queries.service.js +49 -17
  620. package/server/applications/users/services/users-queries.service.js.map +1 -1
  621. package/server/applications/users/users.controller.js +2 -6
  622. package/server/applications/users/users.controller.js.map +1 -1
  623. package/server/applications/users/users.controller.spec.js +5 -9
  624. package/server/applications/users/users.controller.spec.js.map +1 -1
  625. package/server/applications/users/users.e2e-spec.js +3 -7
  626. package/server/applications/users/users.e2e-spec.js.map +1 -1
  627. package/server/applications/users/users.gateway.js +29 -12
  628. package/server/applications/users/users.gateway.js.map +1 -1
  629. package/server/applications/users/users.gateway.spec.js +1 -5
  630. package/server/applications/users/users.gateway.spec.js.map +1 -1
  631. package/server/applications/users/users.module.js +1 -5
  632. package/server/applications/users/users.module.js.map +1 -1
  633. package/server/applications/users/utils/avatar.js +1 -5
  634. package/server/applications/users/utils/avatar.js.map +1 -1
  635. package/server/applications/users/utils/test.js +1 -5
  636. package/server/applications/users/utils/test.js.map +1 -1
  637. package/server/applications/webdav/constants/routes.js +1 -5
  638. package/server/applications/webdav/constants/routes.js.map +1 -1
  639. package/server/applications/webdav/constants/webdav.js +1 -5
  640. package/server/applications/webdav/constants/webdav.js.map +1 -1
  641. package/server/applications/webdav/decorators/if-header.decorator.js +1 -5
  642. package/server/applications/webdav/decorators/if-header.decorator.js.map +1 -1
  643. package/server/applications/webdav/decorators/webdav-context.decorator.js +1 -5
  644. package/server/applications/webdav/decorators/webdav-context.decorator.js.map +1 -1
  645. package/server/applications/webdav/filters/webdav.filter.js +1 -5
  646. package/server/applications/webdav/filters/webdav.filter.js.map +1 -1
  647. package/server/applications/webdav/filters/webdav.filter.spec.js +1 -5
  648. package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -1
  649. package/server/applications/webdav/guards/webdav-protocol.guard.js +54 -20
  650. package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
  651. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +54 -0
  652. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
  653. package/server/applications/webdav/interfaces/if-header.interface.js +1 -5
  654. package/server/applications/webdav/interfaces/if-header.interface.js.map +1 -1
  655. package/server/applications/webdav/interfaces/webdav.interface.js +1 -5
  656. package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
  657. package/server/applications/webdav/models/webdav-file.model.js +1 -5
  658. package/server/applications/webdav/models/webdav-file.model.js.map +1 -1
  659. package/server/applications/webdav/services/webdav-methods.service.js +74 -26
  660. package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
  661. package/server/applications/webdav/services/webdav-methods.service.spec.js +15 -18
  662. package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
  663. package/server/applications/webdav/services/webdav-spaces.service.js +17 -9
  664. package/server/applications/webdav/services/webdav-spaces.service.js.map +1 -1
  665. package/server/applications/webdav/services/webdav-spaces.service.spec.js +1 -5
  666. package/server/applications/webdav/services/webdav-spaces.service.spec.js.map +1 -1
  667. package/server/applications/webdav/utils/bootstrap.js +1 -5
  668. package/server/applications/webdav/utils/bootstrap.js.map +1 -1
  669. package/server/applications/webdav/utils/if-header.js +1 -5
  670. package/server/applications/webdav/utils/if-header.js.map +1 -1
  671. package/server/applications/webdav/utils/routes.js +1 -5
  672. package/server/applications/webdav/utils/routes.js.map +1 -1
  673. package/server/applications/webdav/utils/webdav.js +1 -5
  674. package/server/applications/webdav/utils/webdav.js.map +1 -1
  675. package/server/applications/webdav/utils/xml.js +1 -5
  676. package/server/applications/webdav/utils/xml.js.map +1 -1
  677. package/server/applications/webdav/webdav.controller.js +1 -5
  678. package/server/applications/webdav/webdav.controller.js.map +1 -1
  679. package/server/applications/webdav/webdav.controller.spec.js +1 -5
  680. package/server/applications/webdav/webdav.controller.spec.js.map +1 -1
  681. package/server/applications/webdav/webdav.e2e-spec.js +1 -5
  682. package/server/applications/webdav/webdav.e2e-spec.js.map +1 -1
  683. package/server/applications/webdav/webdav.module.js +1 -5
  684. package/server/applications/webdav/webdav.module.js.map +1 -1
  685. package/server/authentication/auth.config.js +23 -123
  686. package/server/authentication/auth.config.js.map +1 -1
  687. package/server/authentication/auth.controller.js +27 -21
  688. package/server/authentication/auth.controller.js.map +1 -1
  689. package/server/authentication/auth.controller.spec.js +6 -10
  690. package/server/authentication/auth.controller.spec.js.map +1 -1
  691. package/server/authentication/auth.e2e-spec.js +1 -5
  692. package/server/authentication/auth.e2e-spec.js.map +1 -1
  693. package/server/authentication/auth.module.js +17 -20
  694. package/server/authentication/auth.module.js.map +1 -1
  695. package/server/authentication/{services/auth-manager.service.js → auth.service.js} +41 -18
  696. package/server/authentication/auth.service.js.map +1 -0
  697. package/server/authentication/{services/auth-manager.service.spec.js → auth.service.spec.js} +6 -10
  698. package/server/authentication/auth.service.spec.js.map +1 -0
  699. package/server/authentication/constants/auth.js +1 -5
  700. package/server/authentication/constants/auth.js.map +1 -1
  701. package/server/authentication/constants/routes.js +41 -30
  702. package/server/authentication/constants/routes.js.map +1 -1
  703. package/server/authentication/constants/scope.js +2 -5
  704. package/server/authentication/constants/scope.js.map +1 -1
  705. package/server/authentication/decorators/auth-token-optional.decorator.js +1 -5
  706. package/server/authentication/decorators/auth-token-optional.decorator.js.map +1 -1
  707. package/server/authentication/decorators/auth-token-skip.decorator.js +1 -5
  708. package/server/authentication/decorators/auth-token-skip.decorator.js.map +1 -1
  709. package/server/authentication/dto/login-response.dto.js +1 -10
  710. package/server/authentication/dto/login-response.dto.js.map +1 -1
  711. package/server/authentication/dto/token-response.dto.js +1 -5
  712. package/server/authentication/dto/token-response.dto.js.map +1 -1
  713. package/server/authentication/guards/auth-anonymous.guard.js +1 -5
  714. package/server/authentication/guards/auth-anonymous.guard.js.map +1 -1
  715. package/server/authentication/guards/auth-anonymous.guard.spec.js +1 -5
  716. package/server/authentication/guards/auth-anonymous.guard.spec.js.map +1 -1
  717. package/server/authentication/guards/auth-anonymous.strategy.js +1 -5
  718. package/server/authentication/guards/auth-anonymous.strategy.js.map +1 -1
  719. package/server/authentication/guards/auth-basic.guard.js +1 -5
  720. package/server/authentication/guards/auth-basic.guard.js.map +1 -1
  721. package/server/authentication/guards/auth-basic.guard.spec.js +13 -14
  722. package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
  723. package/server/authentication/guards/auth-basic.strategy.js +10 -11
  724. package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
  725. package/server/authentication/guards/auth-digest.guard.js +1 -5
  726. package/server/authentication/guards/auth-digest.guard.js.map +1 -1
  727. package/server/authentication/guards/auth-digest.strategy.js +1 -5
  728. package/server/authentication/guards/auth-digest.strategy.js.map +1 -1
  729. package/server/authentication/guards/auth-local.guard.js +1 -5
  730. package/server/authentication/guards/auth-local.guard.js.map +1 -1
  731. package/server/authentication/guards/auth-local.guard.spec.js +9 -13
  732. package/server/authentication/guards/auth-local.guard.spec.js.map +1 -1
  733. package/server/authentication/guards/auth-local.strategy.js +6 -10
  734. package/server/authentication/guards/auth-local.strategy.js.map +1 -1
  735. package/server/authentication/guards/auth-token-access.guard.js +1 -5
  736. package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
  737. package/server/authentication/guards/auth-token-access.guard.spec.js +3 -7
  738. package/server/authentication/guards/auth-token-access.guard.spec.js.map +1 -1
  739. package/server/authentication/guards/auth-token-access.strategy.js +3 -7
  740. package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
  741. package/server/authentication/guards/auth-token-refresh.guard.js +1 -5
  742. package/server/authentication/guards/auth-token-refresh.guard.js.map +1 -1
  743. package/server/authentication/guards/auth-token-refresh.guard.spec.js +3 -7
  744. package/server/authentication/guards/auth-token-refresh.guard.spec.js.map +1 -1
  745. package/server/authentication/guards/auth-token-refresh.strategy.js +3 -7
  746. package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
  747. package/server/authentication/guards/implementations/http-basic.strategy.js +1 -5
  748. package/server/authentication/guards/implementations/http-basic.strategy.js.map +1 -1
  749. package/server/authentication/guards/implementations/http-digest.strategy.js +1 -5
  750. package/server/authentication/guards/implementations/http-digest.strategy.js.map +1 -1
  751. package/server/authentication/interfaces/auth-request.interface.js +1 -5
  752. package/server/authentication/interfaces/auth-request.interface.js.map +1 -1
  753. package/server/authentication/interfaces/jwt-payload.interface.js +1 -5
  754. package/server/authentication/interfaces/jwt-payload.interface.js.map +1 -1
  755. package/server/authentication/interfaces/token.interface.js +1 -5
  756. package/server/authentication/interfaces/token.interface.js.map +1 -1
  757. package/server/authentication/providers/auth-providers.constants.js +18 -0
  758. package/server/authentication/providers/auth-providers.constants.js.map +1 -0
  759. package/server/authentication/providers/auth-providers.models.js +14 -0
  760. package/server/authentication/providers/auth-providers.models.js.map +1 -0
  761. package/server/authentication/providers/auth-providers.utils.js +42 -0
  762. package/server/authentication/providers/auth-providers.utils.js.map +1 -0
  763. package/server/authentication/providers/ldap/auth-ldap.config.js +143 -0
  764. package/server/authentication/providers/ldap/auth-ldap.config.js.map +1 -0
  765. package/server/authentication/{constants/auth-ldap.js → providers/ldap/auth-ldap.constants.js} +12 -6
  766. package/server/authentication/providers/ldap/auth-ldap.constants.js.map +1 -0
  767. package/server/authentication/providers/ldap/auth-provider-ldap.service.js +506 -0
  768. package/server/authentication/providers/ldap/auth-provider-ldap.service.js.map +1 -0
  769. package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js +674 -0
  770. package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js.map +1 -0
  771. package/server/authentication/{services/auth-methods/auth-method-database.service.js → providers/mysql/auth-provider-mysql.service.js} +16 -14
  772. package/server/authentication/providers/mysql/auth-provider-mysql.service.js.map +1 -0
  773. package/server/authentication/{services/auth-methods/auth-method-database.service.spec.js → providers/mysql/auth-provider-mysql.service.spec.js} +15 -19
  774. package/server/authentication/providers/mysql/auth-provider-mysql.service.spec.js.map +1 -0
  775. package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js +30 -0
  776. package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js.map +1 -0
  777. package/server/authentication/providers/oidc/auth-oidc.config.js +149 -0
  778. package/server/authentication/providers/oidc/auth-oidc.config.js.map +1 -0
  779. package/server/authentication/providers/oidc/auth-oidc.constants.js +39 -0
  780. package/server/authentication/providers/oidc/auth-oidc.constants.js.map +1 -0
  781. package/server/authentication/providers/oidc/auth-oidc.controller.js +83 -0
  782. package/server/authentication/providers/oidc/auth-oidc.controller.js.map +1 -0
  783. package/server/authentication/providers/oidc/auth-oidc.interfaces.js +6 -0
  784. package/server/authentication/providers/oidc/auth-oidc.interfaces.js.map +1 -0
  785. package/server/authentication/providers/oidc/auth-provider-oidc.module.js +36 -0
  786. package/server/authentication/providers/oidc/auth-provider-oidc.module.js.map +1 -0
  787. package/server/authentication/providers/oidc/auth-provider-oidc.service.js +373 -0
  788. package/server/authentication/providers/oidc/auth-provider-oidc.service.js.map +1 -0
  789. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js +270 -0
  790. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js.map +1 -0
  791. package/server/authentication/{services/auth-methods/auth-method-two-fa.service.js → providers/two-fa/auth-provider-two-fa.service.js} +56 -38
  792. package/server/authentication/providers/two-fa/auth-provider-two-fa.service.js.map +1 -0
  793. package/server/authentication/{services/auth-methods/auth-method-two-fa.service.spec.js → providers/two-fa/auth-provider-two-fa.service.spec.js} +6 -10
  794. package/server/authentication/providers/two-fa/auth-provider-two-fa.service.spec.js.map +1 -0
  795. package/server/authentication/{guards → providers/two-fa}/auth-two-fa-guard.js +10 -14
  796. package/server/authentication/providers/two-fa/auth-two-fa-guard.js.map +1 -0
  797. package/server/authentication/providers/two-fa/auth-two-fa.config.js +57 -0
  798. package/server/authentication/providers/two-fa/auth-two-fa.config.js.map +1 -0
  799. package/server/authentication/{dto/two-fa-verify.dto.js → providers/two-fa/auth-two-fa.dtos.js} +8 -6
  800. package/server/authentication/providers/two-fa/auth-two-fa.dtos.js.map +1 -0
  801. package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js +6 -0
  802. package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js.map +1 -0
  803. package/server/authentication/utils/crypt-secret.js +1 -5
  804. package/server/authentication/utils/crypt-secret.js.map +1 -1
  805. package/server/common/constants.js +1 -5
  806. package/server/common/constants.js.map +1 -1
  807. package/server/common/decorators.js +1 -5
  808. package/server/common/decorators.js.map +1 -1
  809. package/server/common/functions.js +25 -9
  810. package/server/common/functions.js.map +1 -1
  811. package/server/common/i18n.js +1 -5
  812. package/server/common/i18n.js.map +1 -1
  813. package/server/common/image.js +1 -5
  814. package/server/common/image.js.map +1 -1
  815. package/server/common/interfaces.js +1 -5
  816. package/server/common/interfaces.js.map +1 -1
  817. package/server/common/qrcode.js +1 -5
  818. package/server/common/qrcode.js.map +1 -1
  819. package/server/common/shared.js +6 -6
  820. package/server/common/shared.js.map +1 -1
  821. package/server/configuration/config.constants.js +1 -5
  822. package/server/configuration/config.constants.js.map +1 -1
  823. package/server/configuration/config.environment.js +2 -6
  824. package/server/configuration/config.environment.js.map +1 -1
  825. package/server/configuration/config.interfaces.js +1 -5
  826. package/server/configuration/config.interfaces.js.map +1 -1
  827. package/server/configuration/config.loader.js +1 -5
  828. package/server/configuration/config.loader.js.map +1 -1
  829. package/server/configuration/config.logger.js +4 -8
  830. package/server/configuration/config.logger.js.map +1 -1
  831. package/server/configuration/config.validation.js +7 -5
  832. package/server/configuration/config.validation.js.map +1 -1
  833. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +9 -7
  834. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
  835. package/server/infrastructure/cache/adapters/redis-cache.adapter.js +1 -5
  836. package/server/infrastructure/cache/adapters/redis-cache.adapter.js.map +1 -1
  837. package/server/infrastructure/cache/cache.config.js +1 -5
  838. package/server/infrastructure/cache/cache.config.js.map +1 -1
  839. package/server/infrastructure/cache/cache.decorator.js +9 -7
  840. package/server/infrastructure/cache/cache.decorator.js.map +1 -1
  841. package/server/infrastructure/cache/cache.e2e-spec.js +1 -5
  842. package/server/infrastructure/cache/cache.e2e-spec.js.map +1 -1
  843. package/server/infrastructure/cache/cache.module.js +1 -5
  844. package/server/infrastructure/cache/cache.module.js.map +1 -1
  845. package/server/infrastructure/cache/schemas/mysql-cache.interface.js +1 -5
  846. package/server/infrastructure/cache/schemas/mysql-cache.interface.js.map +1 -1
  847. package/server/infrastructure/cache/schemas/mysql-cache.schema.js +1 -5
  848. package/server/infrastructure/cache/schemas/mysql-cache.schema.js.map +1 -1
  849. package/server/infrastructure/cache/services/cache.service.js +1 -5
  850. package/server/infrastructure/cache/services/cache.service.js.map +1 -1
  851. package/server/infrastructure/context/context.module.js +1 -5
  852. package/server/infrastructure/context/context.module.js.map +1 -1
  853. package/server/infrastructure/context/interceptors/context.interceptor.js +1 -5
  854. package/server/infrastructure/context/interceptors/context.interceptor.js.map +1 -1
  855. package/server/infrastructure/context/interceptors/context.interceptor.spec.js +2 -6
  856. package/server/infrastructure/context/interceptors/context.interceptor.spec.js.map +1 -1
  857. package/server/infrastructure/context/interfaces/context-store.interface.js +1 -5
  858. package/server/infrastructure/context/interfaces/context-store.interface.js.map +1 -1
  859. package/server/infrastructure/context/services/context-manager.service.js +1 -5
  860. package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
  861. package/server/infrastructure/context/services/context-manager.service.spec.js +1 -5
  862. package/server/infrastructure/context/services/context-manager.service.spec.js.map +1 -1
  863. package/server/infrastructure/database/columns.js +1 -5
  864. package/server/infrastructure/database/columns.js.map +1 -1
  865. package/server/infrastructure/database/configuration.js +1 -5
  866. package/server/infrastructure/database/configuration.js.map +1 -1
  867. package/server/infrastructure/database/constants.js +2 -6
  868. package/server/infrastructure/database/constants.js.map +1 -1
  869. package/server/infrastructure/database/database.config.js +1 -5
  870. package/server/infrastructure/database/database.config.js.map +1 -1
  871. package/server/infrastructure/database/database.logger.js +1 -5
  872. package/server/infrastructure/database/database.logger.js.map +1 -1
  873. package/server/infrastructure/database/database.module.js +1 -5
  874. package/server/infrastructure/database/database.module.js.map +1 -1
  875. package/server/infrastructure/database/interfaces/database.interface.js +1 -5
  876. package/server/infrastructure/database/interfaces/database.interface.js.map +1 -1
  877. package/server/infrastructure/database/schema.js +1 -5
  878. package/server/infrastructure/database/schema.js.map +1 -1
  879. package/server/infrastructure/database/scripts/create-user.js +1 -5
  880. package/server/infrastructure/database/scripts/create-user.js.map +1 -1
  881. package/server/infrastructure/database/scripts/db.js +1 -5
  882. package/server/infrastructure/database/scripts/db.js.map +1 -1
  883. package/server/infrastructure/database/scripts/seed/main.js +1 -5
  884. package/server/infrastructure/database/scripts/seed/main.js.map +1 -1
  885. package/server/infrastructure/database/scripts/seed/usersgroups.js +1 -5
  886. package/server/infrastructure/database/scripts/seed/usersgroups.js.map +1 -1
  887. package/server/infrastructure/database/utils.js +1 -5
  888. package/server/infrastructure/database/utils.js.map +1 -1
  889. package/server/infrastructure/mailer/interfaces/mail.interface.js +1 -5
  890. package/server/infrastructure/mailer/interfaces/mail.interface.js.map +1 -1
  891. package/server/infrastructure/mailer/mailer.config.js +1 -5
  892. package/server/infrastructure/mailer/mailer.config.js.map +1 -1
  893. package/server/infrastructure/mailer/mailer.module.js +1 -5
  894. package/server/infrastructure/mailer/mailer.module.js.map +1 -1
  895. package/server/infrastructure/mailer/mailer.service.js +1 -5
  896. package/server/infrastructure/mailer/mailer.service.js.map +1 -1
  897. package/server/infrastructure/mailer/mailer.service.spec.js +2 -6
  898. package/server/infrastructure/mailer/mailer.service.spec.js.map +1 -1
  899. package/server/infrastructure/scheduler/scheduler.constants.js +1 -5
  900. package/server/infrastructure/scheduler/scheduler.constants.js.map +1 -1
  901. package/server/infrastructure/scheduler/scheduler.module.js +1 -5
  902. package/server/infrastructure/scheduler/scheduler.module.js.map +1 -1
  903. package/server/infrastructure/websocket/adapters/cluster.adapter.js +1 -5
  904. package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
  905. package/server/infrastructure/websocket/adapters/redis.adapter.js +1 -5
  906. package/server/infrastructure/websocket/adapters/redis.adapter.js.map +1 -1
  907. package/server/infrastructure/websocket/adapters/web-socket.adapter.js +1 -5
  908. package/server/infrastructure/websocket/adapters/web-socket.adapter.js.map +1 -1
  909. package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js +1 -5
  910. package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js.map +1 -1
  911. package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js +1 -5
  912. package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js.map +1 -1
  913. package/server/infrastructure/websocket/utils.js +1 -5
  914. package/server/infrastructure/websocket/utils.js.map +1 -1
  915. package/server/infrastructure/websocket/web-socket.config.js +1 -5
  916. package/server/infrastructure/websocket/web-socket.config.js.map +1 -1
  917. package/server/main.js +5 -0
  918. package/server/main.js.map +1 -1
  919. package/static/assets/pdfjs/build/pdf.mjs +724 -745
  920. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  921. package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
  922. package/static/assets/pdfjs/build/pdf.worker.mjs +706 -193
  923. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  924. package/static/assets/pdfjs/version +1 -1
  925. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +5 -5
  926. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +1 -0
  927. package/static/assets/pdfjs/web/locale/fur/viewer.ftl +5 -0
  928. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +28 -0
  929. package/static/assets/pdfjs/web/locale/ml/viewer.ftl +4 -0
  930. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -3
  931. package/static/assets/pdfjs/web/viewer.css +207 -65
  932. package/static/assets/pdfjs/web/viewer.html +11 -10
  933. package/static/assets/pdfjs/web/viewer.mjs +850 -270
  934. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  935. package/static/assets/pdfjs/web/wasm/LICENSE_JBIG2 +196 -0
  936. package/static/assets/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  937. package/static/assets/pdfjs/web/wasm/jbig2.wasm +0 -0
  938. package/static/chunk-22TZP6HW.js +1 -0
  939. package/static/{chunk-G7TLKY5X.js → chunk-27ATUHBH.js} +1 -1
  940. package/static/{chunk-CQOQXVYG.js → chunk-2CKLZ3FM.js} +1 -1
  941. package/static/{chunk-FVFOX6OP.js → chunk-2QZPX7LO.js} +1 -1
  942. package/static/{chunk-32AVRWC3.js → chunk-2R6IBBPZ.js} +1 -1
  943. package/static/{chunk-76JDXKD7.js → chunk-4FIGEBNL.js} +1 -1
  944. package/static/{chunk-ACCGBDUZ.js → chunk-4P3JABAP.js} +4 -4
  945. package/static/chunk-5CZOSAMZ.js +1 -0
  946. package/static/{chunk-2PDTP6N4.js → chunk-677WUBCT.js} +1 -1
  947. package/static/{chunk-K5VO5XTG.js → chunk-74CAHBFM.js} +1 -1
  948. package/static/{chunk-WTWGBCFO.js → chunk-7GWW6MJO.js} +1 -1
  949. package/static/{chunk-JXZOYX4N.js → chunk-A4UGPSWX.js} +1 -1
  950. package/static/{chunk-44D7RWET.js → chunk-AHO37FKW.js} +1 -1
  951. package/static/{chunk-WB2DECOA.js → chunk-AQCXMKP3.js} +1 -1
  952. package/static/chunk-B6PDYCRO.js +3 -0
  953. package/static/{chunk-JVGN5V5E.js → chunk-CU76ATCF.js} +1 -1
  954. package/static/{chunk-Q5K4ZUHK.js → chunk-CWYHOPOP.js} +1 -1
  955. package/static/{chunk-IOX3ANJR.js → chunk-E5WI5725.js} +1 -1
  956. package/static/{chunk-NUG54Y65.js → chunk-FC5HTKVM.js} +1 -1
  957. package/static/{chunk-LRK6RNPR.js → chunk-FOSM7EYI.js} +1 -1
  958. package/static/{chunk-B4UP2EQM.js → chunk-GAZO25PI.js} +1 -1
  959. package/static/{chunk-3WBCGTYW.js → chunk-GB7ABR5N.js} +1 -1
  960. package/static/{chunk-XFZ37WVK.js → chunk-GEHFKZQ5.js} +1 -1
  961. package/static/{chunk-4CQLN5HL.js → chunk-GQFMWVFD.js} +1 -1
  962. package/static/{chunk-YBEH442D.js → chunk-GVNTC564.js} +1 -1
  963. package/static/{chunk-WO6GBHBZ.js → chunk-HGL3NYP2.js} +2 -2
  964. package/static/{chunk-IAWRRL6J.js → chunk-HLIWPWRA.js} +1 -1
  965. package/static/{chunk-6LHJBXUE.js → chunk-HNYB3M4S.js} +1 -1
  966. package/static/{chunk-5WTIUYFF.js → chunk-HUXAUQMN.js} +1 -1
  967. package/static/{chunk-VBH3Y2M5.js → chunk-I2XA6PPK.js} +1 -1
  968. package/static/{chunk-I3XI72AV.js → chunk-ISV3BO6R.js} +1 -1
  969. package/static/{chunk-P7X53PEP.js → chunk-JV3AGU5B.js} +1 -1
  970. package/static/{chunk-ZFAXICUH.js → chunk-K25E7YGG.js} +1 -1
  971. package/static/{chunk-CAD3RHAY.js → chunk-K46PUTZB.js} +1 -1
  972. package/static/{chunk-GYFLVCFN.js → chunk-KERFLJ56.js} +1 -7
  973. package/static/{chunk-WSTGWBVW.js → chunk-KJD3KFF3.js} +1 -1
  974. package/static/{chunk-R4P4NBUL.js → chunk-KPKSI23S.js} +1 -1
  975. package/static/{chunk-M7IFVC5D.js → chunk-KZS7CTNR.js} +1 -1
  976. package/static/{chunk-P2IJCGWD.js → chunk-L5IHUVXL.js} +1 -1
  977. package/static/{chunk-DXESTGOH.js → chunk-L7RRX2M3.js} +1 -1
  978. package/static/{chunk-WE3ISL7O.js → chunk-LGWJ2WKU.js} +1 -1
  979. package/static/{chunk-OKI3N5AI.js → chunk-MLC7JK2H.js} +2 -2
  980. package/static/{chunk-NG7QWUFM.js → chunk-MOHNYW2A.js} +1 -1
  981. package/static/{chunk-SQYWQUL4.js → chunk-NCDUOVMW.js} +1 -1
  982. package/static/chunk-NGUAJIGI.js +1 -0
  983. package/static/{chunk-OYPJUVD6.js → chunk-NIPP6JDI.js} +1 -1
  984. package/static/{chunk-Y433XOAJ.js → chunk-NMTBMHUL.js} +1 -1
  985. package/static/chunk-O4XXMZFX.js +4 -0
  986. package/static/{chunk-IOP3ON2H.js → chunk-OANZITPM.js} +1 -1
  987. package/static/{chunk-WJFKUJJX.js → chunk-OGE4SAHU.js} +1 -1
  988. package/static/{chunk-7EHP6HO3.js → chunk-OI3ME22C.js} +1 -1
  989. package/static/{chunk-D4XDSS6P.js → chunk-Q3EGCMF5.js} +1 -1
  990. package/static/{chunk-TQBCGNFG.js → chunk-QF2NSHZA.js} +1 -1
  991. package/static/{chunk-RBBMH2FM.js → chunk-QKN6LAAA.js} +1 -1
  992. package/static/{chunk-J45SD6RC.js → chunk-QRFESU5O.js} +2 -2
  993. package/static/chunk-QVRVFYJH.js +1 -0
  994. package/static/{chunk-BAHNSFET.js → chunk-RFJIPIOK.js} +1 -1
  995. package/static/{chunk-IZ7TCHUW.js → chunk-RLL634K4.js} +1 -1
  996. package/static/{chunk-MOWL3ILT.js → chunk-RS2OFKWP.js} +1 -1
  997. package/static/{chunk-WM56LPJ3.js → chunk-RWAAC3A4.js} +1 -1
  998. package/static/{chunk-F3GMI6OL.js → chunk-S5Y64DDS.js} +1 -1
  999. package/static/{chunk-VNNLMUK7.js → chunk-SLG5KDU6.js} +1 -1
  1000. package/static/chunk-TJ4CVFEL.js +1 -0
  1001. package/static/{chunk-SAN35XTD.js → chunk-TWCGKSYE.js} +1 -1
  1002. package/static/{chunk-EUKVDBBK.js → chunk-UMDRE4S7.js} +1 -1
  1003. package/static/{chunk-YKCUUBZP.js → chunk-VRIOLRYR.js} +4 -4
  1004. package/static/chunk-VS4O2XDP.js +1 -0
  1005. package/static/{chunk-2MRTBCSV.js → chunk-VSBFNFOM.js} +1 -1
  1006. package/static/{chunk-CTPKDDVI.js → chunk-WN4WXCVK.js} +1 -1
  1007. package/static/{chunk-2AA3WMW5.js → chunk-WX7RXW7K.js} +1 -1
  1008. package/static/{chunk-J2BUPRCZ.js → chunk-XC4POKR3.js} +2 -2
  1009. package/static/{chunk-AXLDYLIO.js → chunk-Y4AUYQTG.js} +1 -1
  1010. package/static/{chunk-RPHWIW7S.js → chunk-YMIXHRJQ.js} +1 -7
  1011. package/static/{chunk-AFNUBQMD.js → chunk-ZUNKFAKP.js} +1 -1
  1012. package/static/index.html +3 -3
  1013. package/static/main-QN4UCOC5.js +5 -0
  1014. package/static/{styles-PD6764CP.css → styles-46GLIE7Y.css} +1 -1
  1015. package/server/authentication/constants/auth-ldap.js.map +0 -1
  1016. package/server/authentication/dto/two-fa-verify.dto.js.map +0 -1
  1017. package/server/authentication/guards/auth-two-fa-guard.js.map +0 -1
  1018. package/server/authentication/interfaces/two-fa-setup.interface.js +0 -10
  1019. package/server/authentication/interfaces/two-fa-setup.interface.js.map +0 -1
  1020. package/server/authentication/models/auth-method.js +0 -18
  1021. package/server/authentication/models/auth-method.js.map +0 -1
  1022. package/server/authentication/services/auth-manager.service.js.map +0 -1
  1023. package/server/authentication/services/auth-manager.service.spec.js.map +0 -1
  1024. package/server/authentication/services/auth-methods/auth-method-database.service.js.map +0 -1
  1025. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +0 -1
  1026. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +0 -326
  1027. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +0 -1
  1028. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +0 -534
  1029. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +0 -1
  1030. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +0 -1
  1031. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +0 -1
  1032. package/static/chunk-3I6NPM62.js +0 -1
  1033. package/static/chunk-GCPX3EFC.js +0 -1
  1034. package/static/chunk-KBUIDMCK.js +0 -1
  1035. package/static/chunk-KY6MNZLC.js +0 -1
  1036. package/static/chunk-MPWD4VMY.js +0 -1
  1037. package/static/chunk-QQAF3MLL.js +0 -1
  1038. package/static/chunk-VHZKPUWE.js +0 -4
  1039. package/static/chunk-YWLMFOB4.js +0 -3
  1040. package/static/main-ZXEMCBMI.js +0 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/spaces/services/spaces-manager.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { eq, isNotNull, lte } from 'drizzle-orm'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { ACTION } from '../../../common/constants'\nimport { convertDiffUpdate, diffCollection, differencePermissions } from '../../../common/functions'\nimport type { Entries, StorageQuota } from '../../../common/interfaces'\nimport { createSlug, regExpNumberSuffix } from '../../../common/shared'\nimport { configuration } from '../../../configuration/config.environment'\nimport { ContextManager } from '../../../infrastructure/context/services/context-manager.service'\nimport { FileError } from '../../files/models/file-error'\nimport { dirListFileNames, dirSize, getProps, isPathExists, moveFiles, removeFiles } from '../../files/utils/files'\nimport { LINK_TYPE } from '../../links/constants/links'\nimport { NOTIFICATION_APP, NOTIFICATION_APP_EVENT } from '../../notifications/constants/notifications'\nimport { NotificationContent } from '../../notifications/interfaces/notification-properties.interface'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { CreateOrUpdateShareDto } from '../../shares/dto/create-or-update-share.dto'\nimport type { ShareLink } from '../../shares/interfaces/share-link.interface'\nimport type { ShareProps } from '../../shares/interfaces/share-props.interface'\nimport type { ShareChild } from '../../shares/models/share-child.model'\nimport { SharesManager } from '../../shares/services/shares-manager.service'\nimport { MEMBER_TYPE } from '../../users/constants/member'\nimport { USER_ROLE } from '../../users/constants/user'\nimport { UserModel } from '../../users/models/user.model'\nimport type { User } from '../../users/schemas/user.interface'\nimport { users } from '../../users/schemas/users.schema'\nimport { UsersQueries } from '../../users/services/users-queries.service'\nimport { CACHE_QUOTA_SPACE_PREFIX, CACHE_QUOTA_TTL, CACHE_QUOTA_USER_PREFIX } from '../constants/cache'\nimport {\n SPACE_ALIAS,\n SPACE_ALL_OPERATIONS,\n SPACE_MAX_DISABLED_DAYS,\n SPACE_OPERATION,\n SPACE_PERSONAL,\n SPACE_REPOSITORY,\n SPACE_ROLE,\n SPACE_SHARES\n} from '../constants/spaces'\nimport { CreateOrUpdateSpaceDto, SpaceMemberDto } from '../dto/create-or-update-space.dto'\nimport { DeleteSpaceDto } from '../dto/delete-space.dto'\nimport { SearchSpaceDto } from '../dto/search-space.dto'\nimport { SpaceTrash } from '../interfaces/space-trash.interface'\nimport { SpaceEnv } from '../models/space-env.model'\nimport { SpaceProps } from '../models/space-props.model'\nimport type { SpaceRootProps } from '../models/space-root-props.model'\nimport { SpaceModel } from '../models/space.model'\nimport type { SpaceRoot } from '../schemas/space-root.interface'\nimport type { Space } from '../schemas/space.interface'\nimport { spaces } from '../schemas/spaces.schema'\nimport { quotaKeyFromSpace } from '../utils/paths'\nimport { haveSpacePermission } from '../utils/permissions'\nimport { SpacesQueries } from './spaces-queries.service'\n\n@Injectable()\nexport class SpacesManager {\n private readonly logger = new Logger(SpacesManager.name)\n\n constructor(\n private readonly contextManager: ContextManager,\n private readonly spacesQueries: SpacesQueries,\n private readonly usersQueries: UsersQueries,\n private readonly sharesManager: SharesManager,\n private readonly notificationsManager: NotificationsManager\n ) {}\n\n listSpaces(userId: number): Promise<Partial<SpaceProps>[]> {\n return this.spacesQueries.spaces(userId)\n }\n\n spacesWithDetails(userId: number): Promise<SpaceProps[]> {\n return this.spacesQueries.spacesWithDetails(userId)\n }\n\n uniqueRootName(name: string, names: string[]) {\n if (names.find((fName: string) => name.toLowerCase() === fName.toLowerCase())) {\n const nameExtension = path.extname(name)\n const nameWithoutExtension = path.basename(name, nameExtension)\n const originalName = nameWithoutExtension.replace(regExpNumberSuffix, '')\n let count = 1\n let newName = `${originalName}-${count}${nameExtension}`\n while (names.find((fName: string) => newName.toLowerCase() === fName.toLowerCase())) {\n count += 1\n newName = `${originalName}-${count}${nameExtension}`\n }\n return newName\n }\n return null\n }\n\n async spaceEnv(user: UserModel, urlSegments: string[], skipEndpointProtection = false): Promise<SpaceEnv> {\n /* SpaceEnv builder */\n let [repository, spaceAlias, rootAlias, ...paths] = urlSegments\n\n if (\n !repository ||\n (!spaceAlias && repository !== SPACE_REPOSITORY.SHARES) ||\n Object.values(SPACE_REPOSITORY).indexOf(repository as SPACE_REPOSITORY) === -1\n ) {\n throw new Error(`Space path is not valid : ${urlSegments}`)\n }\n\n let space: SpaceEnv\n if (spaceAlias === SPACE_ALIAS.PERSONAL) {\n /* Personal Space (static) */\n if (rootAlias) {\n // there is no root in a personal space\n paths.unshift(rootAlias)\n rootAlias = null\n }\n space = new SpaceEnv(SPACE_PERSONAL, rootAlias, false)\n } else if (repository === SPACE_REPOSITORY.SHARES) {\n if (spaceAlias) {\n /* Share */\n const spacePermissions: Partial<SpaceEnv> = await this.sharesManager.permissions(user, spaceAlias)\n if (spacePermissions) {\n space = new SpaceEnv(spacePermissions, null, false)\n }\n } else {\n /* Shares List (static) */\n space = new SpaceEnv(SPACE_SHARES, null, false)\n }\n } else {\n /* Space */\n if (repository === SPACE_REPOSITORY.TRASH && rootAlias) {\n // there is no root in a trash space\n paths.unshift(rootAlias)\n rootAlias = null\n }\n const spacePermissions: Partial<SpaceEnv> = await this.spacesQueries.permissions(user.id, spaceAlias, rootAlias)\n if (spacePermissions) {\n space = new SpaceEnv(spacePermissions, rootAlias || '')\n }\n }\n if (!space) return null\n try {\n space.setup(user, repository as SPACE_REPOSITORY, rootAlias, paths, urlSegments, skipEndpointProtection)\n await this.setQuotaExceeded(user, space)\n return space\n } catch (e) {\n this.logger.warn(`${this.spaceEnv.name} - *${space.alias}* : ${e}`)\n throw new HttpException(e.message, e instanceof FileError ? e.httpCode : HttpStatus.BAD_REQUEST)\n }\n }\n\n async searchSpaces(userId: number, searchSpaceDto: SearchSpaceDto): Promise<SpaceProps[]> {\n const sps: SpaceProps[] = []\n for (const s of await this.spacesQueries.spaces(userId, true)) {\n if (searchSpaceDto.shareInsidePermission && !haveSpacePermission(s, SPACE_OPERATION.SHARE_INSIDE)) {\n continue\n }\n if (!searchSpaceDto.search || `${s.name} ${s.alias} ${s.description || ''}`.toLowerCase().indexOf(searchSpaceDto.search) > -1) {\n sps.push(s)\n }\n if (sps.length >= searchSpaceDto.limit) {\n break\n }\n }\n return sps\n }\n\n async listSpacesWithPermissions(user: UserModel): Promise<SpaceEnv[]> {\n return Promise.all(\n (await this.spacesQueries.spaces(user.id, true)).map(async (s) => {\n const space = new SpaceEnv(s)\n await this.setQuotaExceeded(user, space)\n return space\n })\n )\n }\n\n async listTrashes(user: UserModel): Promise<SpaceTrash[]> {\n const trashes: SpaceTrash[] = []\n // todo: store 'Personal files' as const somewhere (used in frontend too)\n const personalTrash: SpaceTrash = { id: 0, name: 'Personal files', alias: SPACE_ALIAS.PERSONAL, nb: 0, mtime: 0, ctime: 0 }\n for (const space of [...(await this.listSpaces(user.id)), personalTrash] as SpaceTrash[]) {\n const rPath = space.alias === SPACE_ALIAS.PERSONAL ? user.trashPath : SpaceModel.getTrashPath(space.alias)\n try {\n space.nb = (await fs.readdir(rPath)).filter((f) => configuration.applications.files.showHiddenFiles || f[0] !== '.').length\n if (space.nb) {\n const stats = await fs.stat(rPath)\n space.mtime = stats.mtime.getTime()\n space.ctime = stats.birthtime.getTime()\n trashes.push(space)\n }\n } catch (e) {\n this.logger.error(`${this.listTrashes.name} - ${e}`)\n }\n }\n return trashes\n }\n\n async getSpace(user: UserModel, spaceId: number): Promise<SpaceProps> {\n const space: SpaceProps = await this.userCanAccessSpace(user.id, spaceId, true)\n if (space.roots?.length && !user.isAdmin) {\n // remove external path if the current user is not an administrator\n for (const root of space.roots) {\n root.externalPath = null\n }\n }\n return space\n }\n\n async createSpace(user: UserModel, createOrUpdateSpaceDto: CreateOrUpdateSpaceDto): Promise<SpaceProps> {\n /* only users with admin space role can create a space */\n // create space\n const space: SpaceProps = new SpaceProps({\n name: createOrUpdateSpaceDto.name,\n alias: await this.uniqueSpaceAlias(createOrUpdateSpaceDto.name, true),\n description: createOrUpdateSpaceDto.description,\n enabled: createOrUpdateSpaceDto.enabled,\n storageQuota: createOrUpdateSpaceDto.storageQuota,\n storageIndexing: createOrUpdateSpaceDto.storageIndexing,\n disabledAt: createOrUpdateSpaceDto.enabled ? null : new Date()\n })\n try {\n space.id = await this.spacesQueries.createSpace(space)\n } catch (e) {\n this.logger.error(`${this.createSpace.name} - unable to create space *${space.alias}* : ${e}`)\n throw new HttpException('Unable to create space', e)\n }\n // create space paths\n await SpaceModel.makePaths(space.alias)\n // add roots\n await this.updateRoots(user, space, space.roots, createOrUpdateSpaceDto.roots, [], [])\n // add members\n await this.updateMembers(user, space, createOrUpdateSpaceDto.members.concat(createOrUpdateSpaceDto.managers))\n // create links after members, user must be a space manager to create links\n await this.sharesManager.createOrUpdateLinksAsMembers(user, space, LINK_TYPE.SPACE, createOrUpdateSpaceDto.links)\n return this.spacesQueries.getSpaceAsManager(user.id, space.id)\n }\n\n async updateSpace(user: UserModel, spaceId: number, createOrUpdateSpaceDto: CreateOrUpdateSpaceDto): Promise<SpaceProps> {\n /* only managers of the space can update it */\n const space: SpaceProps = await this.userCanAccessSpace(user.id, spaceId, true)\n // check and update space info\n const spaceDiffProps: Partial<SpaceProps> = { modifiedAt: new Date() }\n const props: (keyof CreateOrUpdateSpaceDto)[] = ['name', 'description', 'enabled', 'storageQuota', 'storageIndexing']\n for (const prop of props) {\n if (createOrUpdateSpaceDto[prop] !== space[prop]) {\n spaceDiffProps[prop] = createOrUpdateSpaceDto[prop]\n if (prop === 'name') {\n spaceDiffProps.alias = await this.uniqueSpaceAlias(spaceDiffProps.name, true)\n if (space.alias !== spaceDiffProps.alias) {\n // must move the space to match the new alias\n const spaceLocationWasRenamed: boolean = await this.renameSpaceLocation(space.alias, spaceDiffProps.alias)\n if (!spaceLocationWasRenamed) {\n throw new HttpException('Unable to rename space', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n space.alias = spaceDiffProps.alias\n }\n } else if (prop === 'enabled') {\n spaceDiffProps.disabledAt = spaceDiffProps[prop] ? null : new Date()\n }\n }\n }\n // updates in db\n this.spacesQueries.updateSpace(spaceId, spaceDiffProps).catch((e: Error) => this.logger.error(`${this.updateSpace.name} - ${e}`))\n // checks & updates members\n const linkMembers: SpaceMemberDto[] = await this.sharesManager.createOrUpdateLinksAsMembers(\n user,\n space,\n LINK_TYPE.SPACE,\n createOrUpdateSpaceDto.links\n )\n const rootOwnerIds: number[] = await this.updateMembers(user, space, [\n ...createOrUpdateSpaceDto.members,\n ...createOrUpdateSpaceDto.managers,\n ...linkMembers\n ])\n if (rootOwnerIds.length) {\n // removes the roots of removed members or those no longer having the `share inside` permission\n createOrUpdateSpaceDto.roots = createOrUpdateSpaceDto.roots.filter((r) => rootOwnerIds.indexOf(r.owner.id) === -1)\n }\n // checks & updates roots\n const aliases: string[] = space.roots.map((r) => r.alias)\n const names: string[] = [...(await dirListFileNames(SpaceModel.getFilesPath(space.alias))), ...space.roots.map((r) => r.name)]\n await this.updateRoots(user, space, space.roots, createOrUpdateSpaceDto.roots, aliases, names)\n if (rootOwnerIds.indexOf(user.id) > -1) {\n // current manager was removed\n return null\n } else {\n return this.spacesQueries.getSpaceAsManager(user.id, spaceId)\n }\n }\n\n async deleteSpace(user: UserModel, spaceId: number, deleteSpaceDto?: DeleteSpaceDto) {\n /* only managers of the space can disable it */\n const space: SpaceProps = await this.userCanAccessSpace(user.id, spaceId, true)\n // only admin can delete the space data, managers can only disable the space for 30 days\n const deleteNow: boolean = user.isAdmin && !!deleteSpaceDto?.deleteNow\n try {\n if (deleteNow) {\n await this.sharesManager.deleteAllLinkMembers(spaceId, LINK_TYPE.SPACE)\n }\n await this.deleteOrDisableSpace(space, deleteNow)\n this.logger.log(`${this.deleteSpace.name} - *${space.alias}* (${space.id}) was ${deleteNow ? 'deleted' : 'disabled'}`)\n } catch (e) {\n this.logger.error(`${this.deleteSpace.name} - *${space.alias}* (${space.id}) was not ${deleteNow ? 'deleted' : 'disabled'} : ${e}`)\n throw new HttpException('Unable to delete space', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n async getUserRoots(user: UserModel, spaceId: number): Promise<SpaceRootProps[]> {\n /* if user has no permissions on the space an empty array will be returned */\n return this.spacesQueries.getSpaceRoots(spaceId, user.id)\n }\n\n async updateUserRoots(user: UserModel, spaceId: number, userRoots: SpaceRootProps[], addOnly: boolean = false): Promise<SpaceRootProps[]> {\n const space: Partial<SpaceProps> = await this.userCanAccessSpace(user.id, spaceId)\n if (space.role !== SPACE_ROLE.IS_MANAGER && !haveSpacePermission(space, SPACE_OPERATION.SHARE_INSIDE)) {\n this.logger.warn(`is not allowed to share inside on this space : *${space.alias}* (${space.id})`)\n throw new HttpException('You are not allowed to do this action', HttpStatus.FORBIDDEN)\n }\n // current states\n const spaceRoots: SpaceRootProps[] = await this.spacesQueries.getSpaceRoots(spaceId)\n const aliases = spaceRoots.map((r) => r.alias)\n const names = [...(await dirListFileNames(SpaceModel.getFilesPath(space.alias))), ...spaceRoots.map((r) => r.name)]\n // force owner.id on new user roots (owner is optional and required for the next steps)\n userRoots.forEach((r: SpaceRootProps) => (r.owner = { id: user.id }))\n if (addOnly) {\n // short circuit the `updateRoots` function\n // we need to provide all space roots to avoid collisions on aliases and names for new user roots\n const toAdd: SpaceRootProps[] = await this.validateNewRoots(user, space, spaceRoots, userRoots, aliases, names)\n const status: Record<Exclude<ACTION, ACTION.DELETE_PERMANENTLY>, SpaceRootProps[]> = await this.spacesQueries.updateSpaceRoots(\n user.id,\n space.id,\n toAdd,\n [],\n []\n )\n Object.entries(status).forEach(([action, roots]: [ACTION, SpaceRootProps[]]) =>\n this.clearCachePermissionsAndOrNotify(space, action, user, null, roots).catch((e: Error) =>\n this.logger.error(`${this.updateUserRoots.name} - ${e}`)\n )\n )\n return this.getUserRoots(user, spaceId)\n } else {\n const currentUserRoots: SpaceRootProps[] = spaceRoots.filter((r) => r.owner?.id === user.id)\n await this.updateRoots(user, space, currentUserRoots, userRoots, aliases, names)\n return this.spacesQueries.getSpaceRoots(spaceId, user.id)\n }\n }\n\n async uniqueRootAlias(spaceId: number, alias: string, aliasesAndNames: string[], replaceCount = false): Promise<string> {\n /* for some webdav clients the root alias is displayed instead of the file name.\n * This is why a root alias must be unique for files too */\n if (aliasesAndNames.find((fName: string) => alias.toLowerCase() === fName.toLowerCase())) {\n const aliasExtension = path.extname(alias)\n const aliasWithoutExtension = path.basename(alias, aliasExtension)\n const originalAlias = createSlug(aliasWithoutExtension, replaceCount)\n let count = 1\n let newAlias = `${originalAlias}-${count}${aliasExtension}`\n while (await this.spacesQueries.spaceRootExistsForAlias(spaceId, newAlias)) {\n count += 1\n newAlias = `${originalAlias}-${count}${aliasExtension}`\n }\n return newAlias\n }\n return null\n }\n\n async updatePersonalSpacesQuota(): Promise<void>\n async updatePersonalSpacesQuota(forUser: UserModel): Promise<StorageQuota>\n async updatePersonalSpacesQuota(forUser?: UserModel): Promise<void | StorageQuota> {\n const props: (keyof User)[] = ['id', 'login', 'storageUsage', 'storageQuota']\n for (const user of await this.usersQueries.selectUsers(props, [\n lte(users.role, USER_ROLE.USER),\n ...(forUser ? [eq(users.id, forUser.id)] : [])\n ])) {\n const userPath = UserModel.getHomePath(user.login)\n if (!(await isPathExists(userPath))) {\n this.logger.warn(`${this.updatePersonalSpacesQuota.name} - *${user.login}* home path does not exist`)\n continue\n }\n const [size, errors] = await dirSize(userPath)\n for (const [path, error] of Object.entries(errors)) {\n this.logger.warn(`${this.updatePersonalSpacesQuota.name} - unable to get size for *${user.login}* on ${path} : ${error}`)\n }\n const spaceQuota: StorageQuota = { storageUsage: size, storageQuota: user.storageQuota }\n this.spacesQueries.cache\n .set(`${CACHE_QUOTA_USER_PREFIX}-${user.id}`, spaceQuota, CACHE_QUOTA_TTL)\n .catch((e: Error) => this.logger.error(`${this.updatePersonalSpacesQuota.name} - user *${user.login}* (${user.id}) : ${e}`))\n if (user.storageUsage !== spaceQuota.storageUsage) {\n this.usersQueries\n .updateUserOrGuest(user.id, { storageUsage: spaceQuota.storageUsage })\n .then(\n (updated: boolean) =>\n updated &&\n this.logger.log(\n `${this.updatePersonalSpacesQuota.name} - user *${user.login}* (${user.id}) - storage usage updated: ${spaceQuota.storageUsage}`\n )\n )\n }\n if (forUser) {\n return spaceQuota\n }\n }\n }\n\n async updateSpacesQuota(): Promise<void>\n async updateSpacesQuota(spaceId: number): Promise<StorageQuota>\n async updateSpacesQuota(spaceId?: number): Promise<void | StorageQuota> {\n for (const space of await this.spacesQueries.spacesQuotaPaths(spaceId)) {\n const spacePath = SpaceModel.getHomePath(space.alias)\n if (!(await isPathExists(spacePath))) {\n this.logger.warn(`${this.updateSpacesQuota.name} - *${space.alias}* home path does not exist`)\n continue\n }\n let size = 0\n for (const rPath of [spacePath, ...space.externalPaths.filter(Boolean)]) {\n const [rPathSize, errors] = await dirSize(rPath)\n size += rPathSize\n for (const [path, error] of Object.entries(errors)) {\n this.logger.warn(`${this.updateSpacesQuota.name} - unable to get size for *${space.alias}* on ${path} : ${error}`)\n }\n }\n const spaceQuota: StorageQuota = { storageUsage: size, storageQuota: space.storageQuota }\n this.spacesQueries.cache\n .set(`${CACHE_QUOTA_SPACE_PREFIX}-${space.id}`, spaceQuota, CACHE_QUOTA_TTL)\n .catch((e: Error) => this.logger.error(`${this.updateSpacesQuota.name} - space *${space.alias}* (${space.id}) : ${e}`))\n if (space.storageUsage !== spaceQuota.storageUsage) {\n this.spacesQueries\n .updateSpace(space.id, { storageUsage: spaceQuota.storageUsage })\n .then(\n (updated: boolean) =>\n updated &&\n this.logger.log(\n `${this.updateSpacesQuota.name} - space *${space.alias}* (${space.id}) - storage usage updated : ${spaceQuota.storageUsage}`\n )\n )\n }\n if (spaceId) {\n return spaceQuota\n }\n }\n }\n\n async deleteExpiredSpaces() {\n /* Removes spaces that have been disabled for more than 30 days */\n const props: (keyof Space)[] = ['id', 'name', 'alias', 'disabledAt']\n for (const space of await this.spacesQueries.selectSpaces(props, [eq(spaces.enabled, false), isNotNull(spaces.disabledAt)])) {\n const disabled = new Date(space.disabledAt)\n disabled.setDate(disabled.getDate() + SPACE_MAX_DISABLED_DAYS)\n if (new Date() > disabled) {\n try {\n await this.sharesManager.deleteAllLinkMembers(space.id, LINK_TYPE.SPACE)\n await this.deleteOrDisableSpace(space, true)\n this.logger.log(`${this.deleteExpiredSpaces.name} - space *${space.alias}* (${space.id}) was deleted`)\n } catch (e) {\n this.logger.error(`${this.deleteExpiredSpaces.name} - space *${space.alias}* (${space.id}) was not deleted : ${e}`)\n }\n }\n }\n }\n\n async listSpaceShares(user: UserModel, spaceId: number): Promise<ShareChild[]> {\n if (await this.userIsSpaceManager(user, spaceId)) {\n return this.sharesManager.listSpaceShares(spaceId)\n }\n }\n\n async getSpaceShare(user: UserModel, spaceId: number, shareId: number): Promise<ShareProps> {\n if (await this.userIsSpaceManager(user, spaceId, shareId)) {\n return this.sharesManager.getShareWithMembers(user, shareId, true)\n }\n }\n\n async updateSpaceShare(user: UserModel, spaceId: number, shareId: number, createOrUpdateShareDto: CreateOrUpdateShareDto): Promise<ShareProps> {\n if (await this.userIsSpaceManager(user, spaceId, shareId)) {\n return this.sharesManager.updateShare(user, shareId, createOrUpdateShareDto, true)\n }\n }\n\n async deleteSpaceShare(user: UserModel, spaceId: number, shareId: number): Promise<void> {\n if (await this.userIsSpaceManager(user, spaceId, shareId)) {\n return this.sharesManager.deleteShare(user, shareId, true)\n }\n }\n\n async getSpaceShareLink(user: UserModel, spaceId: number, shareId: number): Promise<ShareLink> {\n if (await this.userIsSpaceManager(user, spaceId, shareId)) {\n return this.sharesManager.getShareLink(user, shareId, true)\n }\n }\n\n private async updateMembers(user: UserModel, space: SpaceProps, currentMembers: SpaceMemberDto[]): Promise<number[]> {\n if (space.members.length === 0 && currentMembers.length === 0) {\n return\n }\n // diff\n const [add, update, remove]: [SpaceMemberDto[], Record<string | 'object', { old: any; new: any } | SpaceMemberDto>[], SpaceMemberDto[]] =\n diffCollection(space.members, currentMembers, ['permissions', 'spaceRole'], ['id', 'type'])\n\n // check members whitelists\n let toAdd: SpaceMemberDto[] = []\n if (add.length) {\n const [userIdsWhitelist, groupIdsWhitelist] = await Promise.all([\n this.usersQueries.usersWhitelist(user.id),\n this.usersQueries.groupsWhitelist(user.id)\n ])\n toAdd = add.filter((m) => {\n if (\n ((m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && !m.linkId && userIdsWhitelist.indexOf(m.id) === -1) ||\n ((m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && groupIdsWhitelist.indexOf(m.id) === -1)\n ) {\n this.logger.warn(\n `${this.updateMembers.name} - cannot add ${m.type} (${m.id}) to space *${space.alias}* (${space.id}) : not in the members whitelist`\n )\n return false\n }\n return true\n })\n }\n\n // filter links\n const toRemove: SpaceMemberDto[] = remove.filter((m) => !m.linkId)\n // do remove links\n this.sharesManager.deleteLinkMembers(remove.filter((m) => !!m.linkId)).catch((e: Error) => this.logger.error(`${this.updateMembers.name} - ${e}`))\n // do update members\n const status: Record<\n Exclude<ACTION, ACTION.DELETE_PERMANENTLY>,\n {\n groupIds: number[]\n userIds: number[]\n }\n > = await this.spacesQueries.updateMembers(space.id, toAdd, convertDiffUpdate(update), toRemove)\n\n // lists deleted and updated members as potential share or space roots owners\n const [rmShareOwners, upShareOwners, rmRootOwners]: [\n SpaceMemberDto[],\n {\n object: SpaceMemberDto\n rmPermissions: SPACE_OPERATION[]\n }[],\n number[]\n ] = [[], [], []]\n\n for (const [action, members] of Object.entries(status) as Entries<typeof status>) {\n if (!members.userIds.length && !members.groupIds.length) continue\n if (action === ACTION.DELETE) {\n // stores the removed members who might own shares created from the current space\n rmShareOwners.push(\n ...toRemove.filter(\n (m) =>\n ((m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && members.userIds.indexOf(m.id) > -1) ||\n ((m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && members.groupIds.indexOf(m.id) > -1)\n )\n )\n // stores ids of removed members that might have space roots\n rmRootOwners.push(...members.userIds)\n } else if (action === ACTION.UPDATE) {\n // stores permissions updates and members who might own shares created from the current space\n // ignore space managers (they have all permissions)\n for (const m of update as {\n object: SpaceMemberDto\n permissions?: { old: string; new: string }\n spaceRole?: { old: number; new: number }\n }[]) {\n if (\n ((m.object.type === MEMBER_TYPE.USER || m.object.type === MEMBER_TYPE.GUEST) &&\n m.object.spaceRole !== SPACE_ROLE.IS_MANAGER &&\n members.userIds.indexOf(m.object.id) > -1) ||\n ((m.object.type === MEMBER_TYPE.GROUP || m.object.type === MEMBER_TYPE.PGROUP) && members.groupIds.indexOf(m.object.id) > -1)\n ) {\n // special case, the manager was moved to members without permissions change\n if (!m.permissions && m.spaceRole.new === SPACE_ROLE.IS_MEMBER) {\n m.permissions = { old: SPACE_ALL_OPERATIONS, new: m.object.permissions }\n }\n // `share inside` permission is only used for spaces\n const diffPermissions = differencePermissions(m.permissions.old, m.permissions.new).filter((p) => p !== SPACE_OPERATION.SHARE_INSIDE)\n if (diffPermissions.length) {\n upShareOwners.push({ object: m.object, rmPermissions: diffPermissions as SPACE_OPERATION[] })\n }\n }\n }\n }\n // clear cache &|| notify\n this.onSpaceActionForMembers(space, action, members, user).catch((e: Error) => this.logger.error(`${this.updateMembers.name} - ${e}`))\n }\n // do updates\n // remove or update potential shares\n this.sharesManager\n .updateSharesFromSpace(space.id, currentMembers, rmShareOwners, upShareOwners)\n .catch((e: Error) => this.logger.error(`${this.updateMembers.name} - ${e}`))\n // return potential root owner ids\n return rmRootOwners\n }\n\n private async updateRoots(\n user: UserModel,\n space: Partial<SpaceProps>,\n curRoots: SpaceRootProps[],\n newRoots: SpaceRootProps[],\n aliases: string[],\n names: string[]\n ) {\n // diff\n const [add, toUpdate, toRemove]: [\n SpaceRootProps[],\n Record<\n string | 'object',\n | {\n old: any\n new: any\n }\n | SpaceRootProps\n | any\n >[],\n SpaceRootProps[]\n ] = diffCollection(curRoots, newRoots, ['name', 'alias', 'permissions'])\n\n // update\n for (const props of toUpdate) {\n if ('alias' in props) {\n props.alias.new = (await this.uniqueRootAlias(space.id, props.alias.new, aliases.concat(names), true)) || props.alias.new\n // remove from space cache permissions\n this.spacesQueries\n .clearCachePermissions(space.alias, [props.alias.old, props.alias.new])\n .catch((e: Error) => this.logger.error(`${this.updateRoots.name} - ${e}`))\n // update aliases list for next roots\n aliases.push(props.alias.new)\n }\n if ('name' in props) {\n props.name.new = this.uniqueRootName(props.name.new, names) || props.name.new\n // update names list for next roots\n names.push(props.name.new)\n }\n }\n\n // format actions\n const toAdd = await this.validateNewRoots(user, space, curRoots, add, aliases, names)\n\n // remove a root implies that all shares with a reference to root.id will be deleted in cascade\n // however, it is \"cleaner\" to warn users about the deletion of these shares and to clear the permission caches before the cascade deletion\n // it must be assumed that the deletion and modifications of space roots will be successful\n const [rmRoots, rmRootPermissions]: [\n SpaceRoot['id'][],\n {\n id: SpaceRoot['id']\n rmPermissions: SPACE_OPERATION[]\n }[]\n ] = [\n toRemove.map((r) => r.id),\n (toUpdate as any).reduce((acc: typeof rmRootPermissions, r: any): typeof rmRootPermissions => {\n if (r.permissions !== undefined) {\n const diffPermissions = differencePermissions(r.permissions.old, r.permissions.new) as SPACE_OPERATION[]\n if (diffPermissions.length) {\n acc.push({ id: r.object.id, rmPermissions: diffPermissions })\n }\n }\n return acc\n }, [])\n ]\n // do share updates\n await this.sharesManager.updateSharesFromSpaceRoots(space.id, rmRoots, rmRootPermissions)\n\n // do root updates\n const status: Record<Exclude<ACTION, ACTION.DELETE_PERMANENTLY>, SpaceRootProps[]> = await this.spacesQueries.updateSpaceRoots(\n user.id,\n space.id,\n toAdd,\n convertDiffUpdate(toUpdate),\n toRemove\n )\n Object.entries(status).forEach(([action, roots]: [ACTION, SpaceRootProps[]]) =>\n this.clearCachePermissionsAndOrNotify(space, action, user, null, roots).catch((e: Error) =>\n this.logger.error(`${this.updateRoots.name} - ${e}`)\n )\n )\n }\n\n private async validateNewRoots(\n user: UserModel,\n space: Partial<SpaceProps>,\n curRoots: SpaceRootProps[],\n newRoots: SpaceRootProps[],\n aliases: string[],\n names: string[]\n ): Promise<SpaceRootProps[]> {\n const toAdd: SpaceRootProps[] = []\n for (const r of newRoots) {\n if (r.externalPath && !user.isAdmin) {\n this.logger.warn(`ignore new root *${r.alias}* (${r.externalPath}) : adding an external path requires the admin role`)\n continue\n }\n const rPath = r.externalPath || path.join(user.filesPath, r.file.path)\n if (!(await isPathExists(rPath))) {\n this.logger.warn(`ignore new root *${r.alias}* (${r.file.path}) : *${rPath}* does not exist`)\n continue\n }\n // check if a parent exists for an externalPath or if the file (or parent) is already anchored\n let rExists: SpaceRootProps\n if (r.externalPath) {\n rExists = curRoots.find((cr) => cr.externalPath && r.externalPath.startsWith(cr.externalPath))\n } else {\n rExists = curRoots.find(\n (cr) => cr.file?.id === r.file.id || (cr.owner?.id === r.owner.id && cr.file?.path && r.file.path.startsWith(cr.file.path))\n )\n }\n if (rExists) {\n this.logger.warn(`ignore new root *${r.alias}* (${r.externalPath || r.file.path}) (${r.file?.id}) : parent or file already exists in roots`)\n continue\n }\n // keep the file id (maybe already in db)\n if (!r.externalPath) {\n r.file = { ...(await getProps(rPath, r.file.path)), id: r.file.id }\n }\n r.alias = (await this.uniqueRootAlias(space.id, r.alias, aliases.concat(names), true)) || r.alias\n // update aliases list for next roots\n aliases.push(r.alias)\n r.name = this.uniqueRootName(r.name, names) || r.name\n // update names list for next roots\n names.push(r.name)\n // reset id\n r.id = 0\n toAdd.push(r)\n }\n return toAdd\n }\n\n private async deleteOrDisableSpace(space: Partial<SpaceProps>, deleteNow: boolean = false) {\n if (deleteNow) {\n // clear cache &|| notify\n const memberIds: { groupIds: number[]; userIds: number[] } = await this.spacesQueries.getSpaceMemberIds(space.id)\n this.onSpaceActionForMembers(space, ACTION.DELETE_PERMANENTLY, memberIds).catch((e: Error) =>\n this.logger.error(`${this.deleteOrDisableSpace.name} - ${e}`)\n )\n // remove all shares related to the space\n await this.sharesManager.removeSharesFromSpace(space.id)\n }\n await this.spacesQueries.deleteSpace(space.id, deleteNow)\n if (deleteNow) {\n this.spacesQueries.cache\n .del(`${CACHE_QUOTA_SPACE_PREFIX}-${space.id}`)\n .catch((e: Error) => this.logger.error(`${this.deleteOrDisableSpace.name} - ${e}`))\n await this.deleteSpaceLocation(space.alias)\n }\n }\n\n private async deleteSpaceLocation(spaceAlias: string) {\n const spaceLocation = SpaceModel.getHomePath(spaceAlias)\n if (await isPathExists(spaceLocation)) {\n await removeFiles(spaceLocation)\n this.logger.warn(`${this.deleteSpaceLocation.name} - space *${spaceAlias}* location was deleted`)\n } else {\n this.logger.warn(`${this.deleteSpaceLocation.name} - space *${spaceAlias}* location does not exist : ${spaceLocation}`)\n }\n }\n\n private async renameSpaceLocation(oldSpaceAlias: string, newSpaceAlias: string): Promise<boolean> {\n const currentSpaceLocation: string = SpaceModel.getHomePath(oldSpaceAlias)\n if (await isPathExists(currentSpaceLocation)) {\n const newSpaceLocation: string = SpaceModel.getHomePath(newSpaceAlias)\n if (await isPathExists(newSpaceLocation)) {\n this.logger.warn(`${this.renameSpaceLocation.name} - *${newSpaceAlias}* home path already exists : ${newSpaceLocation}`)\n return false\n } else {\n try {\n await moveFiles(currentSpaceLocation, newSpaceLocation)\n return true\n } catch (e) {\n // try to restore\n await moveFiles(newSpaceLocation, currentSpaceLocation, true)\n this.logger.error(\n `${this.renameSpaceLocation.name} - unable to rename space location from *${currentSpaceLocation}* to *${newSpaceLocation}* : ${e}`\n )\n return false\n }\n }\n } else {\n this.logger.warn(`${this.renameSpaceLocation.name} - *${oldSpaceAlias}* space location does not exist : ${currentSpaceLocation}`)\n return false\n }\n }\n\n private async uniqueSpaceAlias(name: string, replaceCount = false): Promise<string> {\n let alias = createSlug(name, replaceCount)\n let count = 0\n // Personal space name is reserved\n if (alias === SPACE_ALIAS.PERSONAL) {\n count += 1\n alias = `${name}-${count}`\n }\n while (await this.spacesQueries.spaceExistsForAlias(alias)) {\n count += 1\n alias = `${name}-${count}`\n }\n return alias\n }\n\n private async userCanAccessSpace(userId: number, spaceId: number, asManager: true): Promise<SpaceProps>\n private async userCanAccessSpace(userId: number, spaceId: number, asManager?: false): Promise<Partial<SpaceProps>>\n private async userCanAccessSpace(userId: number, spaceId: number, asManager: boolean = false): Promise<Partial<SpaceProps>> {\n if (asManager) {\n // Get all space details if user is a manager\n const space: SpaceProps = await this.spacesQueries.getSpaceAsManager(userId, spaceId)\n if (!space) {\n this.logger.warn(`space (${spaceId}) not found or not authorized for user (${userId})`)\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n return space\n } else {\n const [space]: SpaceProps[] = await this.spacesQueries.spaces(userId, true, spaceId)\n if (!space) {\n this.logger.warn(`space (${spaceId}) not found or not authorized for user (${userId})`)\n throw new HttpException('Space not found', HttpStatus.NOT_FOUND)\n }\n return space\n }\n }\n\n private async userIsSpaceManager(user: UserModel, spaceId: number, shareId?: number): Promise<boolean> {\n if (!(await this.spacesQueries.userIsSpaceManager(user.id, spaceId, shareId))) {\n this.logger.warn(`space (${spaceId}) not found or not authorized for user (${user.id})`)\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n return true\n }\n\n private async setQuotaExceeded(user: UserModel, space: SpaceEnv) {\n /* extract quota from spaces|shares|roots */\n if (space.inSharesList) {\n return\n }\n const cacheQuotaKey = quotaKeyFromSpace(user.id, space)\n if (!cacheQuotaKey) {\n this.logger.verbose(`${this.setQuotaExceeded.name} - quota was ignored for space : *${space.alias}* (${space.id})`)\n return\n }\n let quota: StorageQuota = await this.spacesQueries.cache.get(cacheQuotaKey)\n if (!quota) {\n // the quota scheduler has not started yet or the cache has been cleared\n if (space.inPersonalSpace) {\n quota = await this.updatePersonalSpacesQuota(user)\n } else if (space.inSharesRepository) {\n // Shares with external paths\n quota = await this.sharesManager.updateSharesExternalPathQuota(space.id)\n } else {\n quota = await this.updateSpacesQuota(space.id)\n }\n }\n if (quota) {\n space.storageUsage = quota.storageUsage\n space.storageQuota = quota.storageQuota\n space.quotaIsExceeded = quota.storageQuota !== null && quota.storageUsage >= quota.storageQuota\n } else {\n this.logger.verbose(`${this.setQuotaExceeded.name} - quota not found for space : *${space.alias}* (${space.id})`)\n }\n }\n\n private async onSpaceActionForMembers(\n space: Partial<SpaceProps>,\n action: ACTION,\n members: {\n groupIds: number[]\n userIds: number[]\n },\n user?: UserModel\n ) {\n this.clearCachePermissionsAndOrNotify(\n space,\n action,\n user,\n Array.from(new Set([...(await this.usersQueries.allUserIdsFromGroupsAndSubGroups(members.groupIds)), ...members.userIds])).filter(\n (uid) => uid !== user?.id\n )\n ).catch((e: Error) => this.logger.error(`${this.onSpaceActionForMembers.name} - ${e}`))\n }\n\n private async clearCachePermissionsAndOrNotify(\n space: Partial<SpaceProps>,\n action: ACTION,\n user?: UserModel,\n memberIds?: number[],\n roots?: SpaceRootProps[]\n ): Promise<void> {\n if (memberIds?.length) {\n // clear permissions for space members\n if (action === ACTION.DELETE_PERMANENTLY) {\n this.logger.verbose(`${this.clearCachePermissionsAndOrNotify.name} - space:${space.alias} ${action}`)\n this.spacesQueries\n .clearCachePermissions(space.alias)\n .catch((e: Error) => this.logger.error(`${this.clearCachePermissionsAndOrNotify.name} - ${e}`))\n } else {\n // update space members cache\n this.logger.verbose(`${this.clearCachePermissionsAndOrNotify.name} - space:${space.alias} ${action} members:${JSON.stringify(memberIds)}`)\n this.spacesQueries\n .clearCachePermissions(space.alias, undefined, memberIds)\n .catch((e: Error) => this.logger.error(`${this.clearCachePermissionsAndOrNotify.name} - ${e}`))\n }\n // notify\n if (action !== ACTION.UPDATE) {\n // notify the members who have joined or left the space\n const notification: NotificationContent = {\n app: NOTIFICATION_APP.SPACES,\n event: NOTIFICATION_APP_EVENT.SPACES[action],\n element: space.name,\n url: ''\n }\n this.notificationsManager\n .create(memberIds, notification, {\n currentUrl: this.contextManager.headerOriginUrl(),\n action: action\n })\n .catch((e: Error) => this.logger.error(`${this.clearCachePermissionsAndOrNotify.name} - ${e}`))\n }\n } else if (roots?.length) {\n // clear permissions for space roots\n const rootAliases: string[] = roots.map((r) => r.alias)\n this.logger.verbose(`${this.clearCachePermissionsAndOrNotify.name} - space:${space.alias} ${action} roots:${JSON.stringify(rootAliases)}`)\n if (action !== ACTION.ADD) {\n this.spacesQueries\n .clearCachePermissions(space.alias, rootAliases)\n .catch((e: Error) => this.logger.error(`${this.clearCachePermissionsAndOrNotify.name} - ${e}`))\n }\n // notify\n if (action !== ACTION.UPDATE) {\n // notify the space members that a new root was anchored / unanchored\n const spaceMembers = await this.spacesQueries.getSpaceMemberIds(space.id)\n const spaceUserIds = Array.from(\n new Set([...(await this.usersQueries.allUserIdsFromGroupsAndSubGroups(spaceMembers.groupIds)), ...spaceMembers.userIds])\n ).filter((uid) => uid !== user?.id)\n if (!spaceUserIds.length) {\n return\n }\n for (const r of roots) {\n const notification: NotificationContent = {\n app: NOTIFICATION_APP.SPACE_ROOTS,\n event: NOTIFICATION_APP_EVENT.SPACE_ROOTS[action],\n element: r.name,\n url: `${SPACE_REPOSITORY.FILES}/${space.name}`\n }\n this.notificationsManager\n .create(spaceUserIds, notification, {\n currentUrl: this.contextManager.headerOriginUrl(),\n author: user,\n action: action\n })\n .catch((e: Error) => this.logger.error(`${this.clearCachePermissionsAndOrNotify.name} - ${e}`))\n }\n }\n }\n }\n}\n"],"names":["SpacesManager","listSpaces","userId","spacesQueries","spaces","spacesWithDetails","uniqueRootName","name","names","find","fName","toLowerCase","nameExtension","path","extname","nameWithoutExtension","basename","originalName","replace","regExpNumberSuffix","count","newName","spaceEnv","user","urlSegments","skipEndpointProtection","repository","spaceAlias","rootAlias","paths","SPACE_REPOSITORY","SHARES","Object","values","indexOf","Error","space","SPACE_ALIAS","PERSONAL","unshift","SpaceEnv","SPACE_PERSONAL","spacePermissions","sharesManager","permissions","SPACE_SHARES","TRASH","id","setup","setQuotaExceeded","e","logger","warn","alias","HttpException","message","FileError","httpCode","HttpStatus","BAD_REQUEST","searchSpaces","searchSpaceDto","sps","s","shareInsidePermission","haveSpacePermission","SPACE_OPERATION","SHARE_INSIDE","search","description","push","length","limit","listSpacesWithPermissions","Promise","all","map","listTrashes","trashes","personalTrash","nb","mtime","ctime","rPath","trashPath","SpaceModel","getTrashPath","fs","readdir","filter","f","configuration","applications","files","showHiddenFiles","stats","stat","getTime","birthtime","error","getSpace","spaceId","userCanAccessSpace","roots","isAdmin","root","externalPath","createSpace","createOrUpdateSpaceDto","SpaceProps","uniqueSpaceAlias","enabled","storageQuota","storageIndexing","disabledAt","Date","makePaths","updateRoots","updateMembers","members","concat","managers","createOrUpdateLinksAsMembers","LINK_TYPE","SPACE","links","getSpaceAsManager","updateSpace","spaceDiffProps","modifiedAt","props","prop","spaceLocationWasRenamed","renameSpaceLocation","INTERNAL_SERVER_ERROR","catch","linkMembers","rootOwnerIds","r","owner","aliases","dirListFileNames","getFilesPath","deleteSpace","deleteSpaceDto","deleteNow","deleteAllLinkMembers","deleteOrDisableSpace","log","getUserRoots","getSpaceRoots","updateUserRoots","userRoots","addOnly","role","SPACE_ROLE","IS_MANAGER","FORBIDDEN","spaceRoots","forEach","toAdd","validateNewRoots","status","updateSpaceRoots","entries","action","clearCachePermissionsAndOrNotify","currentUserRoots","uniqueRootAlias","aliasesAndNames","replaceCount","aliasExtension","aliasWithoutExtension","originalAlias","createSlug","newAlias","spaceRootExistsForAlias","updatePersonalSpacesQuota","forUser","usersQueries","selectUsers","lte","users","USER_ROLE","USER","eq","userPath","UserModel","getHomePath","login","isPathExists","size","errors","dirSize","spaceQuota","storageUsage","cache","set","CACHE_QUOTA_USER_PREFIX","CACHE_QUOTA_TTL","updateUserOrGuest","then","updated","updateSpacesQuota","spacesQuotaPaths","spacePath","externalPaths","Boolean","rPathSize","CACHE_QUOTA_SPACE_PREFIX","deleteExpiredSpaces","selectSpaces","isNotNull","disabled","setDate","getDate","SPACE_MAX_DISABLED_DAYS","listSpaceShares","userIsSpaceManager","getSpaceShare","shareId","getShareWithMembers","updateSpaceShare","createOrUpdateShareDto","updateShare","deleteSpaceShare","deleteShare","getSpaceShareLink","getShareLink","currentMembers","add","update","remove","diffCollection","userIdsWhitelist","groupIdsWhitelist","usersWhitelist","groupsWhitelist","m","type","MEMBER_TYPE","GUEST","linkId","GROUP","PGROUP","toRemove","deleteLinkMembers","convertDiffUpdate","rmShareOwners","upShareOwners","rmRootOwners","userIds","groupIds","ACTION","DELETE","UPDATE","object","spaceRole","new","IS_MEMBER","old","SPACE_ALL_OPERATIONS","diffPermissions","differencePermissions","p","rmPermissions","onSpaceActionForMembers","updateSharesFromSpace","curRoots","newRoots","toUpdate","clearCachePermissions","rmRoots","rmRootPermissions","reduce","acc","undefined","updateSharesFromSpaceRoots","join","filesPath","file","rExists","cr","startsWith","getProps","memberIds","getSpaceMemberIds","DELETE_PERMANENTLY","removeSharesFromSpace","del","deleteSpaceLocation","spaceLocation","removeFiles","oldSpaceAlias","newSpaceAlias","currentSpaceLocation","newSpaceLocation","moveFiles","spaceExistsForAlias","asManager","NOT_FOUND","inSharesList","cacheQuotaKey","quotaKeyFromSpace","verbose","quota","get","inPersonalSpace","inSharesRepository","updateSharesExternalPathQuota","quotaIsExceeded","Array","from","Set","allUserIdsFromGroupsAndSubGroups","uid","JSON","stringify","notification","app","NOTIFICATION_APP","SPACES","event","NOTIFICATION_APP_EVENT","element","url","notificationsManager","create","currentUrl","contextManager","headerOriginUrl","rootAliases","ADD","spaceMembers","spaceUserIds","SPACE_ROOTS","FILES","author","Logger"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/spaces/services/spaces-manager.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { eq, isNotNull, lte } from 'drizzle-orm'\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { ACTION } from '../../../common/constants'\nimport { convertDiffUpdate, diffCollection, differencePermissions } from '../../../common/functions'\nimport type { Entries, StorageQuota } from '../../../common/interfaces'\nimport { createSlug, regExpNumberSuffix } from '../../../common/shared'\nimport { configuration } from '../../../configuration/config.environment'\nimport { ContextManager } from '../../../infrastructure/context/services/context-manager.service'\nimport { FileError } from '../../files/models/file-error'\nimport { dirListFileNames, dirSize, getProps, isPathExists, moveFiles, removeFiles } from '../../files/utils/files'\nimport { LINK_TYPE } from '../../links/constants/links'\nimport { NOTIFICATION_APP, NOTIFICATION_APP_EVENT } from '../../notifications/constants/notifications'\nimport { NotificationContent } from '../../notifications/interfaces/notification-properties.interface'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { CreateOrUpdateShareDto } from '../../shares/dto/create-or-update-share.dto'\nimport type { ShareLink } from '../../shares/interfaces/share-link.interface'\nimport type { ShareProps } from '../../shares/interfaces/share-props.interface'\nimport type { ShareChild } from '../../shares/models/share-child.model'\nimport { SharesManager } from '../../shares/services/shares-manager.service'\nimport { MEMBER_TYPE } from '../../users/constants/member'\nimport { USER_ROLE } from '../../users/constants/user'\nimport { UserModel } from '../../users/models/user.model'\nimport type { User } from '../../users/schemas/user.interface'\nimport { users } from '../../users/schemas/users.schema'\nimport { UsersQueries } from '../../users/services/users-queries.service'\nimport { CACHE_QUOTA_SPACE_PREFIX, CACHE_QUOTA_TTL, CACHE_QUOTA_USER_PREFIX } from '../constants/cache'\nimport {\n SPACE_ALIAS,\n SPACE_ALL_OPERATIONS,\n SPACE_MAX_DISABLED_DAYS,\n SPACE_OPERATION,\n SPACE_PERSONAL,\n SPACE_REPOSITORY,\n SPACE_ROLE,\n SPACE_SHARES\n} from '../constants/spaces'\nimport { CreateOrUpdateSpaceDto, SpaceMemberDto } from '../dto/create-or-update-space.dto'\nimport { DeleteSpaceDto } from '../dto/delete-space.dto'\nimport { SearchSpaceDto } from '../dto/search-space.dto'\nimport { SpaceTrash } from '../interfaces/space-trash.interface'\nimport { SpaceEnv } from '../models/space-env.model'\nimport { SpaceProps } from '../models/space-props.model'\nimport type { SpaceRootProps } from '../models/space-root-props.model'\nimport { SpaceModel } from '../models/space.model'\nimport type { SpaceRoot } from '../schemas/space-root.interface'\nimport type { Space } from '../schemas/space.interface'\nimport { spaces } from '../schemas/spaces.schema'\nimport { quotaKeyFromSpace } from '../utils/paths'\nimport { haveSpacePermission } from '../utils/permissions'\nimport { SpacesQueries } from './spaces-queries.service'\n\n@Injectable()\nexport class SpacesManager {\n private readonly logger = new Logger(SpacesManager.name)\n\n constructor(\n private readonly contextManager: ContextManager,\n private readonly spacesQueries: SpacesQueries,\n private readonly usersQueries: UsersQueries,\n private readonly sharesManager: SharesManager,\n private readonly notificationsManager: NotificationsManager\n ) {}\n\n listSpaces(userId: number): Promise<Partial<SpaceProps>[]> {\n return this.spacesQueries.spaces(userId)\n }\n\n spacesWithDetails(userId: number): Promise<SpaceProps[]> {\n return this.spacesQueries.spacesWithDetails(userId)\n }\n\n uniqueRootName(name: string, names: string[]) {\n if (names.find((fName: string) => name.toLowerCase() === fName.toLowerCase())) {\n const nameExtension = path.extname(name)\n const nameWithoutExtension = path.basename(name, nameExtension)\n const originalName = nameWithoutExtension.replace(regExpNumberSuffix, '')\n let count = 1\n let newName = `${originalName}-${count}${nameExtension}`\n while (names.find((fName: string) => newName.toLowerCase() === fName.toLowerCase())) {\n count += 1\n newName = `${originalName}-${count}${nameExtension}`\n }\n return newName\n }\n return null\n }\n\n async spaceEnv(user: UserModel, urlSegments: string[], skipEndpointProtection = false): Promise<SpaceEnv> {\n /* SpaceEnv builder */\n let [repository, spaceAlias, rootAlias, ...paths] = urlSegments\n\n if (\n !repository ||\n (!spaceAlias && repository !== SPACE_REPOSITORY.SHARES) ||\n Object.values(SPACE_REPOSITORY).indexOf(repository as SPACE_REPOSITORY) === -1\n ) {\n throw new Error(`Space path is not valid : ${urlSegments}`)\n }\n\n let space: SpaceEnv\n if (spaceAlias === SPACE_ALIAS.PERSONAL) {\n /* Personal Space (static) */\n if (rootAlias) {\n // there is no root in a personal space\n paths.unshift(rootAlias)\n rootAlias = null\n }\n space = new SpaceEnv(SPACE_PERSONAL, rootAlias, false)\n } else if (repository === SPACE_REPOSITORY.SHARES) {\n if (spaceAlias) {\n /* Share */\n const spacePermissions: Partial<SpaceEnv> = await this.sharesManager.permissions(user, spaceAlias)\n if (spacePermissions) {\n space = new SpaceEnv(spacePermissions, null, false)\n }\n } else {\n /* Shares List (static) */\n space = new SpaceEnv(SPACE_SHARES, null, false)\n }\n } else {\n /* Space */\n if (repository === SPACE_REPOSITORY.TRASH && rootAlias) {\n // there is no root in a trash space\n paths.unshift(rootAlias)\n rootAlias = null\n }\n const spacePermissions: Partial<SpaceEnv> = await this.spacesQueries.permissions(user.id, spaceAlias, rootAlias)\n if (spacePermissions) {\n space = new SpaceEnv(spacePermissions, rootAlias || '')\n }\n }\n if (!space) return null\n try {\n space.setup(user, repository as SPACE_REPOSITORY, rootAlias, paths, urlSegments, skipEndpointProtection)\n await this.setQuotaExceeded(user, space)\n return space\n } catch (e) {\n this.logger.warn({ tag: this.spaceEnv.name, msg: `*${space.alias}* : ${e}` })\n throw new HttpException(e.message, e instanceof FileError ? e.httpCode : HttpStatus.BAD_REQUEST)\n }\n }\n\n async searchSpaces(userId: number, searchSpaceDto: SearchSpaceDto): Promise<SpaceProps[]> {\n const sps: SpaceProps[] = []\n for (const s of await this.spacesQueries.spaces(userId, true)) {\n if (searchSpaceDto.shareInsidePermission && !haveSpacePermission(s, SPACE_OPERATION.SHARE_INSIDE)) {\n continue\n }\n if (!searchSpaceDto.search || `${s.name} ${s.alias} ${s.description || ''}`.toLowerCase().indexOf(searchSpaceDto.search) > -1) {\n sps.push(s)\n }\n if (sps.length >= searchSpaceDto.limit) {\n break\n }\n }\n return sps\n }\n\n async listSpacesWithPermissions(user: UserModel): Promise<SpaceEnv[]> {\n return Promise.all(\n (await this.spacesQueries.spaces(user.id, true)).map(async (s) => {\n const space = new SpaceEnv(s)\n await this.setQuotaExceeded(user, space)\n return space\n })\n )\n }\n\n async listTrashes(user: UserModel): Promise<SpaceTrash[]> {\n const trashes: SpaceTrash[] = []\n // todo: store 'Personal files' as const somewhere (used in frontend too)\n const personalTrash: SpaceTrash = { id: 0, name: 'Personal files', alias: SPACE_ALIAS.PERSONAL, nb: 0, mtime: 0, ctime: 0 }\n for (const space of [...(await this.listSpaces(user.id)), personalTrash] as SpaceTrash[]) {\n const rPath = space.alias === SPACE_ALIAS.PERSONAL ? user.trashPath : SpaceModel.getTrashPath(space.alias)\n try {\n space.nb = (await fs.readdir(rPath)).filter((f) => configuration.applications.files.showHiddenFiles || f[0] !== '.').length\n if (space.nb) {\n const stats = await fs.stat(rPath)\n space.mtime = stats.mtime.getTime()\n space.ctime = stats.birthtime.getTime()\n trashes.push(space)\n }\n } catch (e) {\n this.logger.error({ tag: this.listTrashes.name, msg: `${e}` })\n }\n }\n return trashes\n }\n\n async getSpace(user: UserModel, spaceId: number): Promise<SpaceProps> {\n const space: SpaceProps = await this.userCanAccessSpace(user.id, spaceId, true)\n if (space.roots?.length && !user.isAdmin) {\n // remove external path if the current user is not an administrator\n for (const root of space.roots) {\n root.externalPath = null\n }\n }\n return space\n }\n\n async createSpace(user: UserModel, createOrUpdateSpaceDto: CreateOrUpdateSpaceDto): Promise<SpaceProps> {\n /* only users with admin space role can create a space */\n // create space\n const space: SpaceProps = new SpaceProps({\n name: createOrUpdateSpaceDto.name,\n alias: await this.uniqueSpaceAlias(createOrUpdateSpaceDto.name, true),\n description: createOrUpdateSpaceDto.description,\n enabled: createOrUpdateSpaceDto.enabled,\n storageQuota: createOrUpdateSpaceDto.storageQuota,\n storageIndexing: createOrUpdateSpaceDto.storageIndexing,\n disabledAt: createOrUpdateSpaceDto.enabled ? null : new Date()\n })\n try {\n space.id = await this.spacesQueries.createSpace(space)\n } catch (e) {\n this.logger.error({ tag: this.createSpace.name, msg: `unable to create space *${space.alias}* : ${e}` })\n throw new HttpException('Unable to create space', e)\n }\n // create space paths\n await SpaceModel.makePaths(space.alias)\n // add roots\n await this.updateRoots(user, space, space.roots, createOrUpdateSpaceDto.roots, [], [])\n // add members\n await this.updateMembers(user, space, createOrUpdateSpaceDto.members.concat(createOrUpdateSpaceDto.managers))\n // create links after members, user must be a space manager to create links\n await this.sharesManager.createOrUpdateLinksAsMembers(user, space, LINK_TYPE.SPACE, createOrUpdateSpaceDto.links)\n return this.spacesQueries.getSpaceAsManager(user.id, space.id)\n }\n\n async updateSpace(user: UserModel, spaceId: number, createOrUpdateSpaceDto: CreateOrUpdateSpaceDto): Promise<SpaceProps> {\n /* only managers of the space can update it */\n const space: SpaceProps = await this.userCanAccessSpace(user.id, spaceId, true)\n // check and update space info\n const spaceDiffProps: Partial<SpaceProps> = { modifiedAt: new Date() }\n const props: (keyof CreateOrUpdateSpaceDto)[] = ['name', 'description', 'enabled', 'storageQuota', 'storageIndexing']\n for (const prop of props) {\n if (createOrUpdateSpaceDto[prop] !== space[prop]) {\n spaceDiffProps[prop] = createOrUpdateSpaceDto[prop]\n if (prop === 'name') {\n spaceDiffProps.alias = await this.uniqueSpaceAlias(spaceDiffProps.name, true)\n if (space.alias !== spaceDiffProps.alias) {\n // must move the space to match the new alias\n const spaceLocationWasRenamed: boolean = await this.renameSpaceLocation(space.alias, spaceDiffProps.alias)\n if (!spaceLocationWasRenamed) {\n throw new HttpException('Unable to rename space', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n space.alias = spaceDiffProps.alias\n }\n } else if (prop === 'enabled') {\n spaceDiffProps.disabledAt = spaceDiffProps[prop] ? null : new Date()\n }\n }\n }\n // updates in db\n this.spacesQueries.updateSpace(spaceId, spaceDiffProps).catch((e: Error) => this.logger.error({ tag: this.updateSpace.name, msg: `${e}` }))\n // checks & updates members\n const linkMembers: SpaceMemberDto[] = await this.sharesManager.createOrUpdateLinksAsMembers(\n user,\n space,\n LINK_TYPE.SPACE,\n createOrUpdateSpaceDto.links\n )\n const rootOwnerIds: number[] = await this.updateMembers(user, space, [\n ...createOrUpdateSpaceDto.members,\n ...createOrUpdateSpaceDto.managers,\n ...linkMembers\n ])\n if (rootOwnerIds.length) {\n // removes the roots of removed members or those no longer having the `share inside` permission\n createOrUpdateSpaceDto.roots = createOrUpdateSpaceDto.roots.filter((r) => rootOwnerIds.indexOf(r.owner.id) === -1)\n }\n // checks & updates roots\n const aliases: string[] = space.roots.map((r) => r.alias)\n const names: string[] = [...(await dirListFileNames(SpaceModel.getFilesPath(space.alias))), ...space.roots.map((r) => r.name)]\n await this.updateRoots(user, space, space.roots, createOrUpdateSpaceDto.roots, aliases, names)\n if (rootOwnerIds.indexOf(user.id) > -1) {\n // current manager was removed\n return null\n } else {\n return this.spacesQueries.getSpaceAsManager(user.id, spaceId)\n }\n }\n\n async deleteSpace(user: UserModel, spaceId: number, deleteSpaceDto?: DeleteSpaceDto) {\n /* only managers of the space can disable it */\n const space: SpaceProps = await this.userCanAccessSpace(user.id, spaceId, true)\n // only admin can delete the space data, managers can only disable the space for 30 days\n const deleteNow: boolean = user.isAdmin && !!deleteSpaceDto?.deleteNow\n try {\n if (deleteNow) {\n await this.sharesManager.deleteAllLinkMembers(spaceId, LINK_TYPE.SPACE)\n }\n await this.deleteOrDisableSpace(space, deleteNow)\n this.logger.log({ tag: this.deleteSpace.name, msg: `*${space.alias}* (${space.id}) was ${deleteNow ? 'deleted' : 'disabled'}` })\n } catch (e) {\n this.logger.error({ tag: this.deleteSpace.name, msg: `*${space.alias}* (${space.id}) was not ${deleteNow ? 'deleted' : 'disabled'} : ${e}` })\n throw new HttpException('Unable to delete space', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n async getUserRoots(user: UserModel, spaceId: number): Promise<SpaceRootProps[]> {\n /* if user has no permissions on the space an empty array will be returned */\n return this.spacesQueries.getSpaceRoots(spaceId, user.id)\n }\n\n async updateUserRoots(user: UserModel, spaceId: number, userRoots: SpaceRootProps[], addOnly: boolean = false): Promise<SpaceRootProps[]> {\n const space: Partial<SpaceProps> = await this.userCanAccessSpace(user.id, spaceId)\n if (space.role !== SPACE_ROLE.IS_MANAGER && !haveSpacePermission(space, SPACE_OPERATION.SHARE_INSIDE)) {\n this.logger.warn({ tag: this.updateUserRoots.name, msg: `is not allowed to share inside on this space : *${space.alias}* (${space.id})` })\n throw new HttpException('You are not allowed to do this action', HttpStatus.FORBIDDEN)\n }\n // current states\n const spaceRoots: SpaceRootProps[] = await this.spacesQueries.getSpaceRoots(spaceId)\n const aliases = spaceRoots.map((r) => r.alias)\n const names = [...(await dirListFileNames(SpaceModel.getFilesPath(space.alias))), ...spaceRoots.map((r) => r.name)]\n // force owner.id on new user roots (owner is optional and required for the next steps)\n userRoots.forEach((r: SpaceRootProps) => (r.owner = { id: user.id }))\n if (addOnly) {\n // short circuit the `updateRoots` function\n // we need to provide all space roots to avoid collisions on aliases and names for new user roots\n const toAdd: SpaceRootProps[] = await this.validateNewRoots(user, space, spaceRoots, userRoots, aliases, names)\n const status: Record<Exclude<ACTION, ACTION.DELETE_PERMANENTLY>, SpaceRootProps[]> = await this.spacesQueries.updateSpaceRoots(\n user.id,\n space.id,\n toAdd,\n [],\n []\n )\n Object.entries(status).forEach(([action, roots]: [ACTION, SpaceRootProps[]]) =>\n this.clearCachePermissionsAndOrNotify(space, action, user, null, roots).catch((e: Error) =>\n this.logger.error({ tag: this.updateUserRoots.name, msg: `${e}` })\n )\n )\n return this.getUserRoots(user, spaceId)\n } else {\n const currentUserRoots: SpaceRootProps[] = spaceRoots.filter((r) => r.owner?.id === user.id)\n await this.updateRoots(user, space, currentUserRoots, userRoots, aliases, names)\n return this.spacesQueries.getSpaceRoots(spaceId, user.id)\n }\n }\n\n async uniqueRootAlias(spaceId: number, alias: string, aliasesAndNames: string[], replaceCount = false): Promise<string> {\n /* for some webdav clients the root alias is displayed instead of the file name.\n * This is why a root alias must be unique for files too */\n if (aliasesAndNames.find((fName: string) => alias.toLowerCase() === fName.toLowerCase())) {\n const aliasExtension = path.extname(alias)\n const aliasWithoutExtension = path.basename(alias, aliasExtension)\n const originalAlias = createSlug(aliasWithoutExtension, replaceCount)\n let count = 1\n let newAlias = `${originalAlias}-${count}${aliasExtension}`\n while (await this.spacesQueries.spaceRootExistsForAlias(spaceId, newAlias)) {\n count += 1\n newAlias = `${originalAlias}-${count}${aliasExtension}`\n }\n return newAlias\n }\n return null\n }\n\n async updatePersonalSpacesQuota(): Promise<void>\n async updatePersonalSpacesQuota(forUser: UserModel): Promise<StorageQuota>\n async updatePersonalSpacesQuota(forUser?: UserModel): Promise<void | StorageQuota> {\n const props: (keyof User)[] = ['id', 'login', 'storageUsage', 'storageQuota']\n for (const user of await this.usersQueries.selectUsers(props, [\n lte(users.role, USER_ROLE.USER),\n ...(forUser ? [eq(users.id, forUser.id)] : [])\n ])) {\n const userPath = UserModel.getHomePath(user.login)\n if (!(await isPathExists(userPath))) {\n this.logger.warn({ tag: this.updatePersonalSpacesQuota.name, msg: `*${user.login}* home path does not exist` })\n continue\n }\n const [size, errors] = await dirSize(userPath)\n for (const [path, error] of Object.entries(errors)) {\n this.logger.warn({ tag: this.updatePersonalSpacesQuota.name, msg: `unable to get size for *${user.login}* on ${path} : ${error}` })\n }\n const spaceQuota: StorageQuota = { storageUsage: size, storageQuota: user.storageQuota }\n this.spacesQueries.cache\n .set(`${CACHE_QUOTA_USER_PREFIX}-${user.id}`, spaceQuota, CACHE_QUOTA_TTL)\n .catch((e: Error) => this.logger.error({ tag: this.updatePersonalSpacesQuota.name, msg: `user *${user.login}* (${user.id}) : ${e}` }))\n if (user.storageUsage !== spaceQuota.storageUsage) {\n this.usersQueries.updateUserOrGuest(user.id, { storageUsage: spaceQuota.storageUsage }).then(\n (updated: boolean) =>\n updated &&\n this.logger.log({\n tag: this.updatePersonalSpacesQuota.name,\n msg: `user *${user.login}* (${user.id}) - storage usage updated: ${spaceQuota.storageUsage}`\n })\n )\n }\n if (forUser) {\n return spaceQuota\n }\n }\n }\n\n async updateSpacesQuota(): Promise<void>\n async updateSpacesQuota(spaceId: number): Promise<StorageQuota>\n async updateSpacesQuota(spaceId?: number): Promise<void | StorageQuota> {\n for (const space of await this.spacesQueries.spacesQuotaPaths(spaceId)) {\n const spacePath = SpaceModel.getHomePath(space.alias)\n if (!(await isPathExists(spacePath))) {\n this.logger.warn({ tag: this.updateSpacesQuota.name, msg: `*${space.alias}* home path does not exist` })\n continue\n }\n let size = 0\n for (const rPath of [spacePath, ...space.externalPaths.filter(Boolean)]) {\n const [rPathSize, errors] = await dirSize(rPath)\n size += rPathSize\n for (const [path, error] of Object.entries(errors)) {\n this.logger.warn({ tag: this.updateSpacesQuota.name, msg: `unable to get size for *${space.alias}* on ${path} : ${error}` })\n }\n }\n const spaceQuota: StorageQuota = { storageUsage: size, storageQuota: space.storageQuota }\n this.spacesQueries.cache\n .set(`${CACHE_QUOTA_SPACE_PREFIX}-${space.id}`, spaceQuota, CACHE_QUOTA_TTL)\n .catch((e: Error) => this.logger.error({ tag: this.updateSpacesQuota.name, msg: `space *${space.alias}* (${space.id}) : ${e}` }))\n if (space.storageUsage !== spaceQuota.storageUsage) {\n this.spacesQueries.updateSpace(space.id, { storageUsage: spaceQuota.storageUsage }).then(\n (updated: boolean) =>\n updated &&\n this.logger.log({\n tag: this.updateSpacesQuota.name,\n msg: `space *${space.alias}* (${space.id}) - storage usage updated : ${spaceQuota.storageUsage}`\n })\n )\n }\n if (spaceId) {\n return spaceQuota\n }\n }\n }\n\n async deleteExpiredSpaces() {\n /* Removes spaces that have been disabled for more than 30 days */\n const props: (keyof Space)[] = ['id', 'name', 'alias', 'disabledAt']\n for (const space of await this.spacesQueries.selectSpaces(props, [eq(spaces.enabled, false), isNotNull(spaces.disabledAt)])) {\n const disabled = new Date(space.disabledAt)\n disabled.setDate(disabled.getDate() + SPACE_MAX_DISABLED_DAYS)\n if (new Date() > disabled) {\n try {\n await this.sharesManager.deleteAllLinkMembers(space.id, LINK_TYPE.SPACE)\n await this.deleteOrDisableSpace(space, true)\n this.logger.log({ tag: this.deleteExpiredSpaces.name, msg: `space *${space.alias}* (${space.id}) was deleted` })\n } catch (e) {\n this.logger.error({ tag: this.deleteExpiredSpaces.name, msg: `space *${space.alias}* (${space.id}) was not deleted : ${e}` })\n }\n }\n }\n }\n\n async listSpaceShares(user: UserModel, spaceId: number): Promise<ShareChild[]> {\n if (await this.userIsSpaceManager(user, spaceId)) {\n return this.sharesManager.listSpaceShares(spaceId)\n }\n }\n\n async getSpaceShare(user: UserModel, spaceId: number, shareId: number): Promise<ShareProps> {\n if (await this.userIsSpaceManager(user, spaceId, shareId)) {\n return this.sharesManager.getShareWithMembers(user, shareId, true)\n }\n }\n\n async updateSpaceShare(user: UserModel, spaceId: number, shareId: number, createOrUpdateShareDto: CreateOrUpdateShareDto): Promise<ShareProps> {\n if (await this.userIsSpaceManager(user, spaceId, shareId)) {\n return this.sharesManager.updateShare(user, shareId, createOrUpdateShareDto, true)\n }\n }\n\n async deleteSpaceShare(user: UserModel, spaceId: number, shareId: number): Promise<void> {\n if (await this.userIsSpaceManager(user, spaceId, shareId)) {\n return this.sharesManager.deleteShare(user, shareId, true)\n }\n }\n\n async getSpaceShareLink(user: UserModel, spaceId: number, shareId: number): Promise<ShareLink> {\n if (await this.userIsSpaceManager(user, spaceId, shareId)) {\n return this.sharesManager.getShareLink(user, shareId, true)\n }\n }\n\n private async updateMembers(user: UserModel, space: SpaceProps, currentMembers: SpaceMemberDto[]): Promise<number[]> {\n if (space.members.length === 0 && currentMembers.length === 0) {\n return\n }\n // diff\n const [add, update, remove]: [SpaceMemberDto[], Record<string | 'object', { old: any; new: any } | SpaceMemberDto>[], SpaceMemberDto[]] =\n diffCollection(space.members, currentMembers, ['permissions', 'spaceRole'], ['id', 'type'])\n\n // check members whitelists\n let toAdd: SpaceMemberDto[] = []\n if (add.length) {\n const [userIdsWhitelist, groupIdsWhitelist] = await Promise.all([\n this.usersQueries.usersWhitelist(user.id),\n this.usersQueries.groupsWhitelist(user.id)\n ])\n toAdd = add.filter((m) => {\n if (\n ((m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && !m.linkId && userIdsWhitelist.indexOf(m.id) === -1) ||\n ((m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && groupIdsWhitelist.indexOf(m.id) === -1)\n ) {\n this.logger.warn({\n tag: this.updateMembers.name,\n msg: `cannot add ${m.type} (${m.id}) to space *${space.alias}* (${space.id}) : not in the members whitelist`\n })\n return false\n }\n return true\n })\n }\n\n // filter links\n const toRemove: SpaceMemberDto[] = remove.filter((m) => !m.linkId)\n // do remove links\n this.sharesManager\n .deleteLinkMembers(remove.filter((m) => !!m.linkId))\n .catch((e: Error) => this.logger.error({ tag: this.updateMembers.name, msg: `${e}` }))\n // do update members\n const status: Record<\n Exclude<ACTION, ACTION.DELETE_PERMANENTLY>,\n {\n groupIds: number[]\n userIds: number[]\n }\n > = await this.spacesQueries.updateMembers(space.id, toAdd, convertDiffUpdate(update), toRemove)\n\n // lists deleted and updated members as potential share or space roots owners\n const [rmShareOwners, upShareOwners, rmRootOwners]: [\n SpaceMemberDto[],\n {\n object: SpaceMemberDto\n rmPermissions: SPACE_OPERATION[]\n }[],\n number[]\n ] = [[], [], []]\n\n for (const [action, members] of Object.entries(status) as Entries<typeof status>) {\n if (!members.userIds.length && !members.groupIds.length) continue\n if (action === ACTION.DELETE) {\n // stores the removed members who might own shares created from the current space\n rmShareOwners.push(\n ...toRemove.filter(\n (m) =>\n ((m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && members.userIds.indexOf(m.id) > -1) ||\n ((m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && members.groupIds.indexOf(m.id) > -1)\n )\n )\n // stores ids of removed members that might have space roots\n rmRootOwners.push(...members.userIds)\n } else if (action === ACTION.UPDATE) {\n // stores permissions updates and members who might own shares created from the current space\n // ignore space managers (they have all permissions)\n for (const m of update as {\n object: SpaceMemberDto\n permissions?: { old: string; new: string }\n spaceRole?: { old: number; new: number }\n }[]) {\n if (\n ((m.object.type === MEMBER_TYPE.USER || m.object.type === MEMBER_TYPE.GUEST) &&\n m.object.spaceRole !== SPACE_ROLE.IS_MANAGER &&\n members.userIds.indexOf(m.object.id) > -1) ||\n ((m.object.type === MEMBER_TYPE.GROUP || m.object.type === MEMBER_TYPE.PGROUP) && members.groupIds.indexOf(m.object.id) > -1)\n ) {\n // special case, the manager was moved to members without permissions change\n if (!m.permissions && m.spaceRole.new === SPACE_ROLE.IS_MEMBER) {\n m.permissions = { old: SPACE_ALL_OPERATIONS, new: m.object.permissions }\n }\n // `share inside` permission is only used for spaces\n const diffPermissions = differencePermissions(m.permissions.old, m.permissions.new).filter((p) => p !== SPACE_OPERATION.SHARE_INSIDE)\n if (diffPermissions.length) {\n upShareOwners.push({ object: m.object, rmPermissions: diffPermissions as SPACE_OPERATION[] })\n }\n }\n }\n }\n // clear cache &|| notify\n this.onSpaceActionForMembers(space, action, members, user).catch((e: Error) => this.logger.error({ tag: this.updateMembers.name, msg: `${e}` }))\n }\n // do updates\n // remove or update potential shares\n this.sharesManager\n .updateSharesFromSpace(space.id, currentMembers, rmShareOwners, upShareOwners)\n .catch((e: Error) => this.logger.error({ tag: this.updateMembers.name, msg: `${e}` }))\n // return potential root owner ids\n return rmRootOwners\n }\n\n private async updateRoots(\n user: UserModel,\n space: Partial<SpaceProps>,\n curRoots: SpaceRootProps[],\n newRoots: SpaceRootProps[],\n aliases: string[],\n names: string[]\n ) {\n // diff\n const [add, toUpdate, toRemove]: [\n SpaceRootProps[],\n Record<\n string | 'object',\n | {\n old: any\n new: any\n }\n | SpaceRootProps\n | any\n >[],\n SpaceRootProps[]\n ] = diffCollection(curRoots, newRoots, ['name', 'alias', 'permissions'])\n\n // update\n for (const props of toUpdate) {\n if ('alias' in props) {\n props.alias.new = (await this.uniqueRootAlias(space.id, props.alias.new, aliases.concat(names), true)) || props.alias.new\n // remove from space cache permissions\n this.spacesQueries\n .clearCachePermissions(space.alias, [props.alias.old, props.alias.new])\n .catch((e: Error) => this.logger.error({ tag: this.updateRoots.name, msg: `${e}` }))\n // update aliases list for next roots\n aliases.push(props.alias.new)\n }\n if ('name' in props) {\n props.name.new = this.uniqueRootName(props.name.new, names) || props.name.new\n // update names list for next roots\n names.push(props.name.new)\n }\n }\n\n // format actions\n const toAdd = await this.validateNewRoots(user, space, curRoots, add, aliases, names)\n\n // remove a root implies that all shares with a reference to root.id will be deleted in cascade\n // however, it is \"cleaner\" to warn users about the deletion of these shares and to clear the permission caches before the cascade deletion\n // it must be assumed that the deletion and modifications of space roots will be successful\n const [rmRoots, rmRootPermissions]: [\n SpaceRoot['id'][],\n {\n id: SpaceRoot['id']\n rmPermissions: SPACE_OPERATION[]\n }[]\n ] = [\n toRemove.map((r) => r.id),\n (toUpdate as any).reduce((acc: typeof rmRootPermissions, r: any): typeof rmRootPermissions => {\n if (r.permissions !== undefined) {\n const diffPermissions = differencePermissions(r.permissions.old, r.permissions.new) as SPACE_OPERATION[]\n if (diffPermissions.length) {\n acc.push({ id: r.object.id, rmPermissions: diffPermissions })\n }\n }\n return acc\n }, [])\n ]\n // do share updates\n await this.sharesManager.updateSharesFromSpaceRoots(space.id, rmRoots, rmRootPermissions)\n\n // do root updates\n const status: Record<Exclude<ACTION, ACTION.DELETE_PERMANENTLY>, SpaceRootProps[]> = await this.spacesQueries.updateSpaceRoots(\n user.id,\n space.id,\n toAdd,\n convertDiffUpdate(toUpdate),\n toRemove\n )\n Object.entries(status).forEach(([action, roots]: [ACTION, SpaceRootProps[]]) =>\n this.clearCachePermissionsAndOrNotify(space, action, user, null, roots).catch((e: Error) =>\n this.logger.error({ tag: this.updateRoots.name, msg: `${e}` })\n )\n )\n }\n\n private async validateNewRoots(\n user: UserModel,\n space: Partial<SpaceProps>,\n curRoots: SpaceRootProps[],\n newRoots: SpaceRootProps[],\n aliases: string[],\n names: string[]\n ): Promise<SpaceRootProps[]> {\n const toAdd: SpaceRootProps[] = []\n for (const r of newRoots) {\n if (r.externalPath && !user.isAdmin) {\n this.logger.warn({\n tag: this.validateNewRoots.name,\n msg: `ignore new root *${r.alias}* (${r.externalPath}) : adding an external path requires the admin role`\n })\n continue\n }\n const rPath = r.externalPath || path.join(user.filesPath, r.file.path)\n if (!(await isPathExists(rPath))) {\n this.logger.warn({ tag: this.validateNewRoots.name, msg: `ignore new root *${r.alias}* (${r.file.path}) : *${rPath}* does not exist` })\n continue\n }\n // check if a parent exists for an externalPath or if the file (or parent) is already anchored\n let rExists: SpaceRootProps\n if (r.externalPath) {\n rExists = curRoots.find((cr) => cr.externalPath && r.externalPath.startsWith(cr.externalPath))\n } else {\n rExists = curRoots.find(\n (cr) => cr.file?.id === r.file.id || (cr.owner?.id === r.owner.id && cr.file?.path && r.file.path.startsWith(cr.file.path))\n )\n }\n if (rExists) {\n this.logger.warn({\n tag: this.validateNewRoots.name,\n msg: `ignore new root *${r.alias}* (${r.externalPath || r.file.path}) (${r.file?.id}) : parent or file already exists in roots`\n })\n continue\n }\n // keep the file id (maybe already in db)\n if (!r.externalPath) {\n r.file = { ...(await getProps(rPath, r.file.path)), id: r.file.id }\n }\n r.alias = (await this.uniqueRootAlias(space.id, r.alias, aliases.concat(names), true)) || r.alias\n // update aliases list for next roots\n aliases.push(r.alias)\n r.name = this.uniqueRootName(r.name, names) || r.name\n // update names list for next roots\n names.push(r.name)\n // reset id\n r.id = 0\n toAdd.push(r)\n }\n return toAdd\n }\n\n private async deleteOrDisableSpace(space: Partial<SpaceProps>, deleteNow: boolean = false) {\n if (deleteNow) {\n // clear cache &|| notify\n const memberIds: { groupIds: number[]; userIds: number[] } = await this.spacesQueries.getSpaceMemberIds(space.id)\n this.onSpaceActionForMembers(space, ACTION.DELETE_PERMANENTLY, memberIds).catch((e: Error) =>\n this.logger.error({ tag: this.deleteOrDisableSpace.name, msg: `${e}` })\n )\n // remove all shares related to the space\n await this.sharesManager.removeSharesFromSpace(space.id)\n }\n await this.spacesQueries.deleteSpace(space.id, deleteNow)\n if (deleteNow) {\n this.spacesQueries.cache\n .del(`${CACHE_QUOTA_SPACE_PREFIX}-${space.id}`)\n .catch((e: Error) => this.logger.error({ tag: this.deleteOrDisableSpace.name, msg: `${e}` }))\n await this.deleteSpaceLocation(space.alias)\n }\n }\n\n private async deleteSpaceLocation(spaceAlias: string) {\n const spaceLocation = SpaceModel.getHomePath(spaceAlias)\n if (await isPathExists(spaceLocation)) {\n await removeFiles(spaceLocation)\n this.logger.warn({ tag: this.deleteSpaceLocation.name, msg: `space *${spaceAlias}* location was deleted` })\n } else {\n this.logger.warn({ tag: this.deleteSpaceLocation.name, msg: `space *${spaceAlias}* location does not exist : ${spaceLocation}` })\n }\n }\n\n private async renameSpaceLocation(oldSpaceAlias: string, newSpaceAlias: string): Promise<boolean> {\n const currentSpaceLocation: string = SpaceModel.getHomePath(oldSpaceAlias)\n if (await isPathExists(currentSpaceLocation)) {\n const newSpaceLocation: string = SpaceModel.getHomePath(newSpaceAlias)\n if (await isPathExists(newSpaceLocation)) {\n this.logger.warn({ tag: this.renameSpaceLocation.name, msg: `*${newSpaceAlias}* home path already exists : ${newSpaceLocation}` })\n return false\n } else {\n try {\n await moveFiles(currentSpaceLocation, newSpaceLocation)\n return true\n } catch (e) {\n // try to restore\n await moveFiles(newSpaceLocation, currentSpaceLocation, true)\n this.logger.error({\n tag: this.renameSpaceLocation.name,\n msg: `unable to rename space location from *${currentSpaceLocation}* to *${newSpaceLocation}* : ${e}`\n })\n return false\n }\n }\n } else {\n this.logger.warn({ tag: this.renameSpaceLocation.name, msg: `*${oldSpaceAlias}* space location does not exist : ${currentSpaceLocation}` })\n return false\n }\n }\n\n private async uniqueSpaceAlias(name: string, replaceCount = false): Promise<string> {\n let alias = createSlug(name, replaceCount)\n let count = 0\n // Personal space name is reserved\n if (alias === SPACE_ALIAS.PERSONAL) {\n count += 1\n alias = `${name}-${count}`\n }\n while (await this.spacesQueries.spaceExistsForAlias(alias)) {\n count += 1\n alias = `${name}-${count}`\n }\n return alias\n }\n\n private async userCanAccessSpace(userId: number, spaceId: number, asManager: true): Promise<SpaceProps>\n private async userCanAccessSpace(userId: number, spaceId: number, asManager?: false): Promise<Partial<SpaceProps>>\n private async userCanAccessSpace(userId: number, spaceId: number, asManager: boolean = false): Promise<Partial<SpaceProps>> {\n if (asManager) {\n // Get all space details if user is a manager\n const space: SpaceProps = await this.spacesQueries.getSpaceAsManager(userId, spaceId)\n if (!space) {\n this.logger.warn({ tag: this.userCanAccessSpace.name, msg: `space (${spaceId}) not found or not authorized for user (${userId})` })\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n return space\n } else {\n const [space]: SpaceProps[] = await this.spacesQueries.spaces(userId, true, spaceId)\n if (!space) {\n this.logger.warn({ tag: this.userCanAccessSpace.name, msg: `space (${spaceId}) not found or not authorized for user (${userId})` })\n throw new HttpException('Space not found', HttpStatus.NOT_FOUND)\n }\n return space\n }\n }\n\n private async userIsSpaceManager(user: UserModel, spaceId: number, shareId?: number): Promise<boolean> {\n if (!(await this.spacesQueries.userIsSpaceManager(user.id, spaceId, shareId))) {\n this.logger.warn({ tag: this.userIsSpaceManager.name, msg: `space (${spaceId}) not found or not authorized for user (${user.id})` })\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n return true\n }\n\n private async setQuotaExceeded(user: UserModel, space: SpaceEnv) {\n /* extract quota from spaces|shares|roots */\n if (space.inSharesList) {\n return\n }\n const cacheQuotaKey = quotaKeyFromSpace(user.id, space)\n if (!cacheQuotaKey) {\n this.logger.verbose({ tag: this.setQuotaExceeded.name, msg: `quota was ignored for space : *${space.alias}* (${space.id})` })\n return\n }\n let quota: StorageQuota = await this.spacesQueries.cache.get(cacheQuotaKey)\n if (!quota) {\n // the quota scheduler has not started yet or the cache has been cleared\n if (space.inPersonalSpace) {\n quota = await this.updatePersonalSpacesQuota(user)\n } else if (space.inSharesRepository) {\n // Shares with external paths\n quota = await this.sharesManager.updateSharesExternalPathQuota(space.id)\n } else {\n quota = await this.updateSpacesQuota(space.id)\n }\n }\n if (quota) {\n space.storageUsage = quota.storageUsage\n space.storageQuota = quota.storageQuota\n space.quotaIsExceeded = quota.storageQuota !== null && quota.storageUsage >= quota.storageQuota\n } else {\n this.logger.verbose({ tag: this.setQuotaExceeded.name, msg: `quota not found for space : *${space.alias}* (${space.id})` })\n }\n }\n\n private async onSpaceActionForMembers(\n space: Partial<SpaceProps>,\n action: ACTION,\n members: {\n groupIds: number[]\n userIds: number[]\n },\n user?: UserModel\n ) {\n this.clearCachePermissionsAndOrNotify(\n space,\n action,\n user,\n Array.from(new Set([...(await this.usersQueries.allUserIdsFromGroupsAndSubGroups(members.groupIds)), ...members.userIds])).filter(\n (uid) => uid !== user?.id\n )\n ).catch((e: Error) => this.logger.error({ tag: this.onSpaceActionForMembers.name, msg: `${e}` }))\n }\n\n private async clearCachePermissionsAndOrNotify(\n space: Partial<SpaceProps>,\n action: ACTION,\n user?: UserModel,\n memberIds?: number[],\n roots?: SpaceRootProps[]\n ): Promise<void> {\n if (memberIds?.length) {\n // clear permissions for space members\n if (action === ACTION.DELETE_PERMANENTLY) {\n this.logger.verbose({ tag: this.clearCachePermissionsAndOrNotify.name, msg: `space:${space.alias} ${action}` })\n this.spacesQueries\n .clearCachePermissions(space.alias)\n .catch((e: Error) => this.logger.error({ tag: this.clearCachePermissionsAndOrNotify.name, msg: `${e}` }))\n } else {\n // update space members cache\n this.logger.verbose({\n tag: this.clearCachePermissionsAndOrNotify.name,\n msg: `space:${space.alias} ${action} members:${JSON.stringify(memberIds)}`\n })\n this.spacesQueries\n .clearCachePermissions(space.alias, undefined, memberIds)\n .catch((e: Error) => this.logger.error({ tag: this.clearCachePermissionsAndOrNotify.name, msg: `${e}` }))\n }\n // notify\n if (action !== ACTION.UPDATE) {\n // notify the members who have joined or left the space\n const notification: NotificationContent = {\n app: NOTIFICATION_APP.SPACES,\n event: NOTIFICATION_APP_EVENT.SPACES[action],\n element: space.name,\n url: ''\n }\n this.notificationsManager\n .create(memberIds, notification, {\n currentUrl: this.contextManager.headerOriginUrl(),\n action: action\n })\n .catch((e: Error) => this.logger.error({ tag: this.clearCachePermissionsAndOrNotify.name, msg: `${e}` }))\n }\n } else if (roots?.length) {\n // clear permissions for space roots\n const rootAliases: string[] = roots.map((r) => r.alias)\n this.logger.verbose({\n tag: this.clearCachePermissionsAndOrNotify.name,\n msg: `space:${space.alias} ${action} roots:${JSON.stringify(rootAliases)}`\n })\n if (action !== ACTION.ADD) {\n this.spacesQueries\n .clearCachePermissions(space.alias, rootAliases)\n .catch((e: Error) => this.logger.error({ tag: this.clearCachePermissionsAndOrNotify.name, msg: `${e}` }))\n }\n // notify\n if (action !== ACTION.UPDATE) {\n // notify the space members that a new root was anchored / unanchored\n const spaceMembers = await this.spacesQueries.getSpaceMemberIds(space.id)\n const spaceUserIds = Array.from(\n new Set([...(await this.usersQueries.allUserIdsFromGroupsAndSubGroups(spaceMembers.groupIds)), ...spaceMembers.userIds])\n ).filter((uid) => uid !== user?.id)\n if (!spaceUserIds.length) {\n return\n }\n for (const r of roots) {\n const notification: NotificationContent = {\n app: NOTIFICATION_APP.SPACE_ROOTS,\n event: NOTIFICATION_APP_EVENT.SPACE_ROOTS[action],\n element: r.name,\n url: `${SPACE_REPOSITORY.FILES}/${space.name}`\n }\n this.notificationsManager\n .create(spaceUserIds, notification, {\n currentUrl: this.contextManager.headerOriginUrl(),\n author: user,\n action: action\n })\n .catch((e: Error) => this.logger.error({ tag: this.clearCachePermissionsAndOrNotify.name, msg: `${e}` }))\n }\n }\n }\n }\n}\n"],"names":["SpacesManager","listSpaces","userId","spacesQueries","spaces","spacesWithDetails","uniqueRootName","name","names","find","fName","toLowerCase","nameExtension","path","extname","nameWithoutExtension","basename","originalName","replace","regExpNumberSuffix","count","newName","spaceEnv","user","urlSegments","skipEndpointProtection","repository","spaceAlias","rootAlias","paths","SPACE_REPOSITORY","SHARES","Object","values","indexOf","Error","space","SPACE_ALIAS","PERSONAL","unshift","SpaceEnv","SPACE_PERSONAL","spacePermissions","sharesManager","permissions","SPACE_SHARES","TRASH","id","setup","setQuotaExceeded","e","logger","warn","tag","msg","alias","HttpException","message","FileError","httpCode","HttpStatus","BAD_REQUEST","searchSpaces","searchSpaceDto","sps","s","shareInsidePermission","haveSpacePermission","SPACE_OPERATION","SHARE_INSIDE","search","description","push","length","limit","listSpacesWithPermissions","Promise","all","map","listTrashes","trashes","personalTrash","nb","mtime","ctime","rPath","trashPath","SpaceModel","getTrashPath","fs","readdir","filter","f","configuration","applications","files","showHiddenFiles","stats","stat","getTime","birthtime","error","getSpace","spaceId","userCanAccessSpace","roots","isAdmin","root","externalPath","createSpace","createOrUpdateSpaceDto","SpaceProps","uniqueSpaceAlias","enabled","storageQuota","storageIndexing","disabledAt","Date","makePaths","updateRoots","updateMembers","members","concat","managers","createOrUpdateLinksAsMembers","LINK_TYPE","SPACE","links","getSpaceAsManager","updateSpace","spaceDiffProps","modifiedAt","props","prop","spaceLocationWasRenamed","renameSpaceLocation","INTERNAL_SERVER_ERROR","catch","linkMembers","rootOwnerIds","r","owner","aliases","dirListFileNames","getFilesPath","deleteSpace","deleteSpaceDto","deleteNow","deleteAllLinkMembers","deleteOrDisableSpace","log","getUserRoots","getSpaceRoots","updateUserRoots","userRoots","addOnly","role","SPACE_ROLE","IS_MANAGER","FORBIDDEN","spaceRoots","forEach","toAdd","validateNewRoots","status","updateSpaceRoots","entries","action","clearCachePermissionsAndOrNotify","currentUserRoots","uniqueRootAlias","aliasesAndNames","replaceCount","aliasExtension","aliasWithoutExtension","originalAlias","createSlug","newAlias","spaceRootExistsForAlias","updatePersonalSpacesQuota","forUser","usersQueries","selectUsers","lte","users","USER_ROLE","USER","eq","userPath","UserModel","getHomePath","login","isPathExists","size","errors","dirSize","spaceQuota","storageUsage","cache","set","CACHE_QUOTA_USER_PREFIX","CACHE_QUOTA_TTL","updateUserOrGuest","then","updated","updateSpacesQuota","spacesQuotaPaths","spacePath","externalPaths","Boolean","rPathSize","CACHE_QUOTA_SPACE_PREFIX","deleteExpiredSpaces","selectSpaces","isNotNull","disabled","setDate","getDate","SPACE_MAX_DISABLED_DAYS","listSpaceShares","userIsSpaceManager","getSpaceShare","shareId","getShareWithMembers","updateSpaceShare","createOrUpdateShareDto","updateShare","deleteSpaceShare","deleteShare","getSpaceShareLink","getShareLink","currentMembers","add","update","remove","diffCollection","userIdsWhitelist","groupIdsWhitelist","usersWhitelist","groupsWhitelist","m","type","MEMBER_TYPE","GUEST","linkId","GROUP","PGROUP","toRemove","deleteLinkMembers","convertDiffUpdate","rmShareOwners","upShareOwners","rmRootOwners","userIds","groupIds","ACTION","DELETE","UPDATE","object","spaceRole","new","IS_MEMBER","old","SPACE_ALL_OPERATIONS","diffPermissions","differencePermissions","p","rmPermissions","onSpaceActionForMembers","updateSharesFromSpace","curRoots","newRoots","toUpdate","clearCachePermissions","rmRoots","rmRootPermissions","reduce","acc","undefined","updateSharesFromSpaceRoots","join","filesPath","file","rExists","cr","startsWith","getProps","memberIds","getSpaceMemberIds","DELETE_PERMANENTLY","removeSharesFromSpace","del","deleteSpaceLocation","spaceLocation","removeFiles","oldSpaceAlias","newSpaceAlias","currentSpaceLocation","newSpaceLocation","moveFiles","spaceExistsForAlias","asManager","NOT_FOUND","inSharesList","cacheQuotaKey","quotaKeyFromSpace","verbose","quota","get","inPersonalSpace","inSharesRepository","updateSharesExternalPathQuota","quotaIsExceeded","Array","from","Set","allUserIdsFromGroupsAndSubGroups","uid","JSON","stringify","notification","app","NOTIFICATION_APP","SPACES","event","NOTIFICATION_APP_EVENT","element","url","notificationsManager","create","currentUrl","contextManager","headerOriginUrl","rootAliases","ADD","spaceMembers","spaceUserIds","SPACE_ROOTS","FILES","author","Logger"],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/spaces/services/spaces-manager.service.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { ConfigModule, ConfigService } from '@nestjs/config'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { transformAndValidate } from '../../../common/functions'\nimport { exportConfiguration } from '../../../configuration/config.environment'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { ContextManager } from '../../../infrastructure/context/services/context-manager.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport { FilesConfig } from '../../files/files.config'\nimport { FileError } from '../../files/models/file-error'\nimport { FilesQueries } from '../../files/services/files-queries.service'\nimport { removeFiles } from '../../files/utils/files'\nimport { LinksQueries } from '../../links/services/links-queries.service'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { SharesManager } from '../../shares/services/shares-manager.service'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { MEMBER_TYPE } from '../../users/constants/member'\nimport { UserModel } from '../../users/models/user.model'\nimport { UsersQueries } from '../../users/services/users-queries.service'\nimport { generateUserTest } from '../../users/utils/test'\nimport { SPACE_ALIAS, SPACE_ALL_OPERATIONS, SPACE_OPERATION, SPACE_PERMS_SEP, SPACE_REPOSITORY } from '../constants/spaces'\nimport { CreateOrUpdateSpaceDto, SpaceMemberDto } from '../dto/create-or-update-space.dto'\nimport { SpaceRootFileDto } from '../dto/space-roots.dto'\nimport { SpaceEnv } from '../models/space-env.model'\nimport { SpaceModel } from '../models/space.model'\nimport { IsRealPathIsDirAndExists } from '../utils/paths'\nimport { SpacesManager } from './spaces-manager.service'\nimport { SpacesQueries } from './spaces-queries.service'\n\ndescribe(SpacesManager.name, () => {\n let filesConfig: FilesConfig\n let spacesManager: SpacesManager\n let spacesQueries: SpacesQueries\n let userTest: UserModel\n const spaceAlias = 'project'\n const tmpDir = os.tmpdir()\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n imports: [await ConfigModule.forRoot({ load: [exportConfiguration], isGlobal: true })],\n providers: [\n { provide: DB_TOKEN_PROVIDER, useValue: {} },\n {\n provide: Cache,\n useValue: { get: () => null }\n },\n { provide: ContextManager, useValue: {} },\n {\n provide: NotificationsManager,\n useValue: {}\n },\n SpacesManager,\n SpacesQueries,\n UsersQueries,\n SharesManager,\n SharesQueries,\n FilesQueries,\n LinksQueries\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n filesConfig = module.get<ConfigService>(ConfigService).get('applications.files')\n spacesManager = module.get<SpacesManager>(SpacesManager)\n spacesQueries = module.get<SpacesQueries>(SpacesQueries)\n spacesManager['setQuotaExceeded'] = jest.fn()\n userTest = new UserModel(generateUserTest())\n // todo: validate shares, permissions\n })\n\n afterAll(async () => {\n await removeFiles(userTest.homePath)\n await removeFiles(SpaceModel.getHomePath(spaceAlias))\n })\n\n it('should be defined', () => {\n expect(filesConfig).toBeDefined()\n expect(spacesManager).toBeDefined()\n expect(userTest).toBeDefined()\n })\n\n it('should prevent path traversal', () => {\n const createOrUpdateSpaceDto = transformAndValidate(CreateOrUpdateSpaceDto, {\n name: '../../../foo/..bar',\n alias: '../../bar.',\n managers: [transformAndValidate(SpaceMemberDto, { id: 0, type: MEMBER_TYPE.USER })]\n } satisfies CreateOrUpdateSpaceDto)\n expect(createOrUpdateSpaceDto.name).toEqual('foobar')\n expect(createOrUpdateSpaceDto.alias).toEqual('bar')\n const spaceRootFileDto = transformAndValidate(SpaceRootFileDto, { id: 0, path: '../../foo/bar' } satisfies SpaceRootFileDto)\n expect(spaceRootFileDto.path).toEqual('foo/bar')\n const spaceRootFileDto2 = transformAndValidate(SpaceRootFileDto, {\n id: 0,\n path: `${SPACE_REPOSITORY.FILES}/${SPACE_ALIAS.PERSONAL}/../../../foo/bar`\n } satisfies SpaceRootFileDto)\n expect(spaceRootFileDto2.path).toEqual('foo/bar')\n })\n\n it('should validate the permissions on personal & shares space', async () => {\n const personalSpace = await spacesManager.spaceEnv(userTest, ['files', SPACE_ALIAS.PERSONAL])\n expect(personalSpace.envPermissions).toBe(\n Object.values(SPACE_OPERATION)\n .filter((p) => p !== SPACE_OPERATION.DELETE)\n .join(SPACE_PERMS_SEP)\n )\n const sharesSpace = await spacesManager.spaceEnv(userTest, ['shares'])\n expect(sharesSpace.envPermissions).toBe('')\n })\n\n it(\"should validate (or not) the user's personal space (files & trash repositories)\", async () => {\n for (const repository of [SPACE_REPOSITORY.FILES, SPACE_REPOSITORY.TRASH]) {\n const spaceEnv = await spacesManager.spaceEnv(userTest, [repository, SPACE_ALIAS.PERSONAL, 'foo', 'bar'])\n expect(spaceEnv.envPermissions).toBe(SPACE_ALL_OPERATIONS)\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).rejects.toThrow()\n const repoPath = UserModel.getRepositoryPath(userTest.login, spaceEnv.inTrashRepository)\n await fs.mkdir(path.join(repoPath, 'foo', 'bar'), { recursive: true })\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).resolves.toBeUndefined()\n await removeFiles(path.join(repoPath, 'foo', 'bar'))\n try {\n await IsRealPathIsDirAndExists(spaceEnv.realPath)\n } catch (e) {\n expect(e).toBeInstanceOf(FileError)\n }\n }\n })\n\n it(`should validate (or not) the space : ${spaceAlias} (files & trash repositories)`, async () => {\n const permissions: Partial<SpaceEnv> = {\n id: 1,\n alias: spaceAlias,\n name: spaceAlias,\n enabled: true,\n permissions: 'a:d:m:so',\n role: 0\n }\n spacesQueries.permissions = jest.fn().mockReturnValue(permissions)\n for (const repository of [SPACE_REPOSITORY.FILES, SPACE_REPOSITORY.TRASH]) {\n const spaceEnv = await spacesManager.spaceEnv(userTest, [repository, spaceAlias, 'foo', 'bar'])\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).rejects.toThrow()\n const repoPath = SpaceModel.getRepositoryPath(spaceAlias, spaceEnv.inTrashRepository)\n await fs.mkdir(path.join(repoPath, spaceEnv.root.alias, ...spaceEnv.paths), { recursive: true })\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).resolves.toBeUndefined()\n await removeFiles(path.join(repoPath, spaceEnv.root.alias, ...spaceEnv.paths))\n }\n })\n\n it(`should validate (or not) the space : ${spaceAlias} with a root (an external dir)`, async () => {\n const permissions: Partial<SpaceEnv> = {\n id: 0,\n alias: spaceAlias,\n name: spaceAlias,\n permissions: SPACE_ALL_OPERATIONS,\n root: { id: 1, alias: 'foo', name: 'foo', externalPath: tmpDir, permissions: SPACE_ALL_OPERATIONS }\n }\n spacesQueries.permissions = jest.fn().mockReturnValueOnce(permissions)\n const spaceEnv = await spacesManager.spaceEnv(userTest, [SPACE_REPOSITORY.FILES, spaceAlias, 'foo', 'bar'])\n const rootPath = path.join(tmpDir, ...spaceEnv.paths)\n await fs.mkdir(rootPath, { recursive: true })\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).resolves.toBeUndefined()\n await removeFiles(rootPath)\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).rejects.toThrow()\n })\n\n it(`should validate (or not) the space : ${spaceAlias} with a root (a file/directory from user)`, async () => {\n const permissions: Partial<SpaceEnv> = {\n id: 0,\n alias: spaceAlias,\n name: spaceAlias,\n permissions: SPACE_ALL_OPERATIONS,\n root: {\n id: 1,\n alias: 'document',\n name: 'document',\n file: { id: 0, path: '/foo', inTrash: false },\n owner: { id: 0, login: userTest.login },\n permissions: SPACE_ALL_OPERATIONS\n }\n }\n spacesQueries.permissions = jest.fn().mockReturnValueOnce(permissions)\n const spaceEnv = await spacesManager.spaceEnv(userTest, [SPACE_REPOSITORY.FILES, spaceAlias, 'document', 'bar'])\n await fs.mkdir(path.join(UserModel.getFilesPath(userTest.login), 'foo', 'bar'), { recursive: true })\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).resolves.toBeUndefined()\n await removeFiles(path.join(UserModel.getFilesPath(userTest.login), 'foo', 'bar'))\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).rejects.toThrow()\n delete spaceEnv.root.file.path\n try {\n await IsRealPathIsDirAndExists(spaceEnv.realPath)\n } catch (e) {\n expect(e).toBeInstanceOf(FileError)\n }\n })\n})\n"],"names":["describe","SpacesManager","name","filesConfig","spacesManager","spacesQueries","userTest","spaceAlias","tmpDir","os","tmpdir","beforeAll","module","Test","createTestingModule","imports","ConfigModule","forRoot","load","exportConfiguration","isGlobal","providers","provide","DB_TOKEN_PROVIDER","useValue","Cache","get","ContextManager","NotificationsManager","SpacesQueries","UsersQueries","SharesManager","SharesQueries","FilesQueries","LinksQueries","compile","useLogger","ConfigService","jest","fn","UserModel","generateUserTest","afterAll","removeFiles","homePath","SpaceModel","getHomePath","it","expect","toBeDefined","createOrUpdateSpaceDto","transformAndValidate","CreateOrUpdateSpaceDto","alias","managers","SpaceMemberDto","id","type","MEMBER_TYPE","USER","toEqual","spaceRootFileDto","SpaceRootFileDto","path","spaceRootFileDto2","SPACE_REPOSITORY","FILES","SPACE_ALIAS","PERSONAL","personalSpace","spaceEnv","envPermissions","toBe","Object","values","SPACE_OPERATION","filter","p","DELETE","join","SPACE_PERMS_SEP","sharesSpace","repository","TRASH","SPACE_ALL_OPERATIONS","IsRealPathIsDirAndExists","realPath","rejects","toThrow","repoPath","getRepositoryPath","login","inTrashRepository","fs","mkdir","recursive","resolves","toBeUndefined","e","toBeInstanceOf","FileError","permissions","enabled","role","mockReturnValue","root","paths","externalPath","mockReturnValueOnce","rootPath","file","inTrash","owner","getFilesPath"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/spaces/services/spaces-manager.service.spec.ts"],"sourcesContent":["import { ConfigModule, ConfigService } from '@nestjs/config'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { transformAndValidate } from '../../../common/functions'\nimport { exportConfiguration } from '../../../configuration/config.environment'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { ContextManager } from '../../../infrastructure/context/services/context-manager.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport { FilesConfig } from '../../files/files.config'\nimport { FileError } from '../../files/models/file-error'\nimport { FilesQueries } from '../../files/services/files-queries.service'\nimport { removeFiles } from '../../files/utils/files'\nimport { LinksQueries } from '../../links/services/links-queries.service'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { SharesManager } from '../../shares/services/shares-manager.service'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { MEMBER_TYPE } from '../../users/constants/member'\nimport { UserModel } from '../../users/models/user.model'\nimport { UsersQueries } from '../../users/services/users-queries.service'\nimport { generateUserTest } from '../../users/utils/test'\nimport { SPACE_ALIAS, SPACE_ALL_OPERATIONS, SPACE_OPERATION, SPACE_PERMS_SEP, SPACE_REPOSITORY } from '../constants/spaces'\nimport { CreateOrUpdateSpaceDto, SpaceMemberDto } from '../dto/create-or-update-space.dto'\nimport { SpaceRootFileDto } from '../dto/space-roots.dto'\nimport { SpaceEnv } from '../models/space-env.model'\nimport { SpaceModel } from '../models/space.model'\nimport { IsRealPathIsDirAndExists } from '../utils/paths'\nimport { SpacesManager } from './spaces-manager.service'\nimport { SpacesQueries } from './spaces-queries.service'\n\ndescribe(SpacesManager.name, () => {\n let filesConfig: FilesConfig\n let spacesManager: SpacesManager\n let spacesQueries: SpacesQueries\n let userTest: UserModel\n const spaceAlias = 'project'\n const tmpDir = os.tmpdir()\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n imports: [await ConfigModule.forRoot({ load: [exportConfiguration], isGlobal: true })],\n providers: [\n { provide: DB_TOKEN_PROVIDER, useValue: {} },\n {\n provide: Cache,\n useValue: { get: () => null }\n },\n { provide: ContextManager, useValue: {} },\n {\n provide: NotificationsManager,\n useValue: {}\n },\n SpacesManager,\n SpacesQueries,\n UsersQueries,\n SharesManager,\n SharesQueries,\n FilesQueries,\n LinksQueries\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n filesConfig = module.get<ConfigService>(ConfigService).get('applications.files')\n spacesManager = module.get<SpacesManager>(SpacesManager)\n spacesQueries = module.get<SpacesQueries>(SpacesQueries)\n spacesManager['setQuotaExceeded'] = jest.fn()\n userTest = new UserModel(generateUserTest())\n // todo: validate shares, permissions\n })\n\n afterAll(async () => {\n await removeFiles(userTest.homePath)\n await removeFiles(SpaceModel.getHomePath(spaceAlias))\n })\n\n it('should be defined', () => {\n expect(filesConfig).toBeDefined()\n expect(spacesManager).toBeDefined()\n expect(userTest).toBeDefined()\n })\n\n it('should prevent path traversal', () => {\n const createOrUpdateSpaceDto = transformAndValidate(CreateOrUpdateSpaceDto, {\n name: '../../../foo/..bar',\n alias: '../../bar.',\n managers: [transformAndValidate(SpaceMemberDto, { id: 0, type: MEMBER_TYPE.USER })]\n } satisfies CreateOrUpdateSpaceDto)\n expect(createOrUpdateSpaceDto.name).toEqual('foobar')\n expect(createOrUpdateSpaceDto.alias).toEqual('bar')\n const spaceRootFileDto = transformAndValidate(SpaceRootFileDto, { id: 0, path: '../../foo/bar' } satisfies SpaceRootFileDto)\n expect(spaceRootFileDto.path).toEqual('foo/bar')\n const spaceRootFileDto2 = transformAndValidate(SpaceRootFileDto, {\n id: 0,\n path: `${SPACE_REPOSITORY.FILES}/${SPACE_ALIAS.PERSONAL}/../../../foo/bar`\n } satisfies SpaceRootFileDto)\n expect(spaceRootFileDto2.path).toEqual('foo/bar')\n })\n\n it('should validate the permissions on personal & shares space', async () => {\n const personalSpace = await spacesManager.spaceEnv(userTest, ['files', SPACE_ALIAS.PERSONAL])\n expect(personalSpace.envPermissions).toBe(\n Object.values(SPACE_OPERATION)\n .filter((p) => p !== SPACE_OPERATION.DELETE)\n .join(SPACE_PERMS_SEP)\n )\n const sharesSpace = await spacesManager.spaceEnv(userTest, ['shares'])\n expect(sharesSpace.envPermissions).toBe('')\n })\n\n it(\"should validate (or not) the user's personal space (files & trash repositories)\", async () => {\n for (const repository of [SPACE_REPOSITORY.FILES, SPACE_REPOSITORY.TRASH]) {\n const spaceEnv = await spacesManager.spaceEnv(userTest, [repository, SPACE_ALIAS.PERSONAL, 'foo', 'bar'])\n expect(spaceEnv.envPermissions).toBe(SPACE_ALL_OPERATIONS)\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).rejects.toThrow()\n const repoPath = UserModel.getRepositoryPath(userTest.login, spaceEnv.inTrashRepository)\n await fs.mkdir(path.join(repoPath, 'foo', 'bar'), { recursive: true })\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).resolves.toBeUndefined()\n await removeFiles(path.join(repoPath, 'foo', 'bar'))\n try {\n await IsRealPathIsDirAndExists(spaceEnv.realPath)\n } catch (e) {\n expect(e).toBeInstanceOf(FileError)\n }\n }\n })\n\n it(`should validate (or not) the space : ${spaceAlias} (files & trash repositories)`, async () => {\n const permissions: Partial<SpaceEnv> = {\n id: 1,\n alias: spaceAlias,\n name: spaceAlias,\n enabled: true,\n permissions: 'a:d:m:so',\n role: 0\n }\n spacesQueries.permissions = jest.fn().mockReturnValue(permissions)\n for (const repository of [SPACE_REPOSITORY.FILES, SPACE_REPOSITORY.TRASH]) {\n const spaceEnv = await spacesManager.spaceEnv(userTest, [repository, spaceAlias, 'foo', 'bar'])\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).rejects.toThrow()\n const repoPath = SpaceModel.getRepositoryPath(spaceAlias, spaceEnv.inTrashRepository)\n await fs.mkdir(path.join(repoPath, spaceEnv.root.alias, ...spaceEnv.paths), { recursive: true })\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).resolves.toBeUndefined()\n await removeFiles(path.join(repoPath, spaceEnv.root.alias, ...spaceEnv.paths))\n }\n })\n\n it(`should validate (or not) the space : ${spaceAlias} with a root (an external dir)`, async () => {\n const permissions: Partial<SpaceEnv> = {\n id: 0,\n alias: spaceAlias,\n name: spaceAlias,\n permissions: SPACE_ALL_OPERATIONS,\n root: { id: 1, alias: 'foo', name: 'foo', externalPath: tmpDir, permissions: SPACE_ALL_OPERATIONS }\n }\n spacesQueries.permissions = jest.fn().mockReturnValueOnce(permissions)\n const spaceEnv = await spacesManager.spaceEnv(userTest, [SPACE_REPOSITORY.FILES, spaceAlias, 'foo', 'bar'])\n const rootPath = path.join(tmpDir, ...spaceEnv.paths)\n await fs.mkdir(rootPath, { recursive: true })\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).resolves.toBeUndefined()\n await removeFiles(rootPath)\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).rejects.toThrow()\n })\n\n it(`should validate (or not) the space : ${spaceAlias} with a root (a file/directory from user)`, async () => {\n const permissions: Partial<SpaceEnv> = {\n id: 0,\n alias: spaceAlias,\n name: spaceAlias,\n permissions: SPACE_ALL_OPERATIONS,\n root: {\n id: 1,\n alias: 'document',\n name: 'document',\n file: { id: 0, path: '/foo', inTrash: false },\n owner: { id: 0, login: userTest.login },\n permissions: SPACE_ALL_OPERATIONS\n }\n }\n spacesQueries.permissions = jest.fn().mockReturnValueOnce(permissions)\n const spaceEnv = await spacesManager.spaceEnv(userTest, [SPACE_REPOSITORY.FILES, spaceAlias, 'document', 'bar'])\n await fs.mkdir(path.join(UserModel.getFilesPath(userTest.login), 'foo', 'bar'), { recursive: true })\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).resolves.toBeUndefined()\n await removeFiles(path.join(UserModel.getFilesPath(userTest.login), 'foo', 'bar'))\n await expect(IsRealPathIsDirAndExists(spaceEnv.realPath)).rejects.toThrow()\n delete spaceEnv.root.file.path\n try {\n await IsRealPathIsDirAndExists(spaceEnv.realPath)\n } catch (e) {\n expect(e).toBeInstanceOf(FileError)\n }\n })\n})\n"],"names":["describe","SpacesManager","name","filesConfig","spacesManager","spacesQueries","userTest","spaceAlias","tmpDir","os","tmpdir","beforeAll","module","Test","createTestingModule","imports","ConfigModule","forRoot","load","exportConfiguration","isGlobal","providers","provide","DB_TOKEN_PROVIDER","useValue","Cache","get","ContextManager","NotificationsManager","SpacesQueries","UsersQueries","SharesManager","SharesQueries","FilesQueries","LinksQueries","compile","useLogger","ConfigService","jest","fn","UserModel","generateUserTest","afterAll","removeFiles","homePath","SpaceModel","getHomePath","it","expect","toBeDefined","createOrUpdateSpaceDto","transformAndValidate","CreateOrUpdateSpaceDto","alias","managers","SpaceMemberDto","id","type","MEMBER_TYPE","USER","toEqual","spaceRootFileDto","SpaceRootFileDto","path","spaceRootFileDto2","SPACE_REPOSITORY","FILES","SPACE_ALIAS","PERSONAL","personalSpace","spaceEnv","envPermissions","toBe","Object","values","SPACE_OPERATION","filter","p","DELETE","join","SPACE_PERMS_SEP","sharesSpace","repository","TRASH","SPACE_ALL_OPERATIONS","IsRealPathIsDirAndExists","realPath","rejects","toThrow","repoPath","getRepositoryPath","login","inTrashRepository","fs","mkdir","recursive","resolves","toBeUndefined","e","toBeInstanceOf","FileError","permissions","enabled","role","mockReturnValue","root","paths","externalPath","mockReturnValueOnce","rootPath","file","inTrash","owner","getFilesPath"],"mappings":"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"}