@sync-in/server 1.10.1 → 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 (1057) hide show
  1. package/CHANGELOG.md +47 -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 +18 -17
  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-U5E5H2DD.js → chunk-27ATUHBH.js} +1 -1
  940. package/static/{chunk-HZAB6F4Q.js → chunk-2CKLZ3FM.js} +1 -1
  941. package/static/{chunk-XZHWESIY.js → chunk-2QZPX7LO.js} +1 -1
  942. package/static/{chunk-UOK3LKSX.js → chunk-2R6IBBPZ.js} +1 -1
  943. package/static/{chunk-DVCN3P7Q.js → chunk-4FIGEBNL.js} +1 -1
  944. package/static/chunk-4P3JABAP.js +13 -0
  945. package/static/chunk-5CZOSAMZ.js +1 -0
  946. package/static/{chunk-RBTLSPYJ.js → chunk-677WUBCT.js} +1 -1
  947. package/static/{chunk-KEZNIIFH.js → chunk-74CAHBFM.js} +1 -1
  948. package/static/{chunk-WRK2FTKU.js → chunk-7GWW6MJO.js} +1 -1
  949. package/static/{chunk-EKWB5W72.js → chunk-7WOPGQXB.js} +1 -1
  950. package/static/{chunk-IMFO2MI7.js → chunk-A4UGPSWX.js} +1 -1
  951. package/static/{chunk-KDUAB76O.js → chunk-AHO37FKW.js} +1 -1
  952. package/static/chunk-AQCXMKP3.js +1 -0
  953. package/static/chunk-B6PDYCRO.js +3 -0
  954. package/static/{chunk-PPJCVBJH.js → chunk-CU76ATCF.js} +1 -1
  955. package/static/{chunk-ARS47O5X.js → chunk-CWYHOPOP.js} +1 -1
  956. package/static/{chunk-CSVPAZHK.js → chunk-E5WI5725.js} +1 -1
  957. package/static/{chunk-XX3JPJUM.js → chunk-FC5HTKVM.js} +1 -1
  958. package/static/{chunk-QGHNJVJ6.js → chunk-FOSM7EYI.js} +1 -1
  959. package/static/{chunk-JAJ7VXMB.js → chunk-GAZO25PI.js} +1 -1
  960. package/static/{chunk-IHS5LSJJ.js → chunk-GB7ABR5N.js} +1 -1
  961. package/static/{chunk-27V66YJV.js → chunk-GEHFKZQ5.js} +2 -2
  962. package/static/{chunk-3QTROEHV.js → chunk-GQFMWVFD.js} +1 -1
  963. package/static/{chunk-FWQJ4ZCD.js → chunk-GVNTC564.js} +1 -1
  964. package/static/{chunk-4NIYCYRS.js → chunk-HGL3NYP2.js} +2 -2
  965. package/static/chunk-HLIWPWRA.js +1 -0
  966. package/static/{chunk-3VRUIWQG.js → chunk-HNYB3M4S.js} +1 -1
  967. package/static/{chunk-7HJFIMNF.js → chunk-HUXAUQMN.js} +1 -1
  968. package/static/chunk-I2XA6PPK.js +1 -0
  969. package/static/{chunk-RJULB733.js → chunk-ISV3BO6R.js} +1 -1
  970. package/static/{chunk-R4VYKZVJ.js → chunk-IWWBV6EM.js} +1 -1
  971. package/static/{chunk-TTWMFWEC.js → chunk-JV3AGU5B.js} +1 -1
  972. package/static/{chunk-X7NHX5C7.js → chunk-K25E7YGG.js} +1 -1
  973. package/static/chunk-K46PUTZB.js +1 -0
  974. package/static/{chunk-D2MLAO5N.js → chunk-KERFLJ56.js} +1 -7
  975. package/static/{chunk-LZUHREOF.js → chunk-KJD3KFF3.js} +1 -1
  976. package/static/chunk-KPKSI23S.js +1 -0
  977. package/static/{chunk-CMNMPG6Z.js → chunk-KZS7CTNR.js} +1 -1
  978. package/static/{chunk-RNVPQQKT.js → chunk-L5IHUVXL.js} +1 -1
  979. package/static/{chunk-2GXOVGTD.js → chunk-L7RRX2M3.js} +1 -1
  980. package/static/{chunk-WFMEUST4.js → chunk-LGWJ2WKU.js} +1 -1
  981. package/static/{chunk-ZOMRIN3G.js → chunk-MLC7JK2H.js} +2 -2
  982. package/static/{chunk-76REYAEA.js → chunk-MOHNYW2A.js} +1 -1
  983. package/static/{chunk-ZHUBWKA2.js → chunk-MTRXBVWZ.js} +1 -1
  984. package/static/{chunk-QJ22N76V.js → chunk-MZQK6LNV.js} +1 -1
  985. package/static/{chunk-SDJNZULP.js → chunk-NCDUOVMW.js} +1 -1
  986. package/static/chunk-NGUAJIGI.js +1 -0
  987. package/static/chunk-NIPP6JDI.js +1 -0
  988. package/static/{chunk-VD5JHSDS.js → chunk-NMTBMHUL.js} +1 -1
  989. package/static/chunk-O4XXMZFX.js +4 -0
  990. package/static/{chunk-WZPF4LS2.js → chunk-OANZITPM.js} +1 -1
  991. package/static/{chunk-JNTNMIUH.js → chunk-OGE4SAHU.js} +1 -1
  992. package/static/{chunk-S6H2ELRY.js → chunk-OI3ME22C.js} +1 -1
  993. package/static/{chunk-7KAYOR3A.js → chunk-Q3EGCMF5.js} +1 -1
  994. package/static/chunk-QF2NSHZA.js +1 -0
  995. package/static/{chunk-3ZBAQTHJ.js → chunk-QIGUDEZF.js} +1 -1
  996. package/static/{chunk-76M3BMK6.js → chunk-QJVC3SRJ.js} +11 -11
  997. package/static/{chunk-VBTZDHZ3.js → chunk-QKN6LAAA.js} +1 -1
  998. package/static/{chunk-JRXG43AA.js → chunk-QRFESU5O.js} +2 -2
  999. package/static/chunk-QVRVFYJH.js +1 -0
  1000. package/static/{chunk-BCN4T5DO.js → chunk-RFJIPIOK.js} +2 -2
  1001. package/static/{chunk-2RWLNKZH.js → chunk-RLL634K4.js} +1 -1
  1002. package/static/{chunk-D5FQ72R4.js → chunk-RS2OFKWP.js} +1 -1
  1003. package/static/{chunk-CN5YVRFT.js → chunk-RWAAC3A4.js} +1 -1
  1004. package/static/{chunk-LWSCODLD.js → chunk-RWCNTCU5.js} +1 -1
  1005. package/static/{chunk-FTFEQDWH.js → chunk-S5Y64DDS.js} +1 -1
  1006. package/static/{chunk-J7474P3L.js → chunk-SLG5KDU6.js} +1 -1
  1007. package/static/chunk-TJ4CVFEL.js +1 -0
  1008. package/static/{chunk-KAUCN24H.js → chunk-TWCGKSYE.js} +1 -1
  1009. package/static/{chunk-PDG7DOEF.js → chunk-UMDRE4S7.js} +1 -1
  1010. package/static/chunk-VRIOLRYR.js +5 -0
  1011. package/static/chunk-VS4O2XDP.js +1 -0
  1012. package/static/{chunk-ZEJLIGAY.js → chunk-VSBFNFOM.js} +1 -1
  1013. package/static/{chunk-XSURUW7C.js → chunk-WN4WXCVK.js} +1 -1
  1014. package/static/{chunk-S44QIK3G.js → chunk-WX7RXW7K.js} +1 -1
  1015. package/static/{chunk-3ZLBVUCX.js → chunk-XC4POKR3.js} +2 -2
  1016. package/static/{chunk-TNCKNU6I.js → chunk-Y4AUYQTG.js} +1 -1
  1017. package/static/{chunk-3MVPXC3U.js → chunk-Y67J3BOL.js} +1 -1
  1018. package/static/{chunk-QTPIEEZW.js → chunk-YMIXHRJQ.js} +1 -7
  1019. package/static/{chunk-VZFZUI6D.js → chunk-ZUNKFAKP.js} +1 -1
  1020. package/static/index.html +3 -3
  1021. package/static/main-QN4UCOC5.js +5 -0
  1022. package/static/{styles-XLLEY5Y3.css → styles-46GLIE7Y.css} +1 -1
  1023. package/server/authentication/constants/auth-ldap.js.map +0 -1
  1024. package/server/authentication/dto/two-fa-verify.dto.js.map +0 -1
  1025. package/server/authentication/guards/auth-two-fa-guard.js.map +0 -1
  1026. package/server/authentication/interfaces/two-fa-setup.interface.js +0 -10
  1027. package/server/authentication/interfaces/two-fa-setup.interface.js.map +0 -1
  1028. package/server/authentication/models/auth-method.js +0 -18
  1029. package/server/authentication/models/auth-method.js.map +0 -1
  1030. package/server/authentication/services/auth-manager.service.js.map +0 -1
  1031. package/server/authentication/services/auth-manager.service.spec.js.map +0 -1
  1032. package/server/authentication/services/auth-methods/auth-method-database.service.js.map +0 -1
  1033. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +0 -1
  1034. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +0 -326
  1035. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +0 -1
  1036. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +0 -534
  1037. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +0 -1
  1038. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +0 -1
  1039. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +0 -1
  1040. package/static/chunk-2YQ4SX3A.js +0 -13
  1041. package/static/chunk-46TJLPJY.js +0 -1
  1042. package/static/chunk-6OEOADR6.js +0 -1
  1043. package/static/chunk-AALPWGPB.js +0 -3
  1044. package/static/chunk-CVXLHSO5.js +0 -1
  1045. package/static/chunk-G7RZN7HN.js +0 -1
  1046. package/static/chunk-LTJNLOX2.js +0 -1
  1047. package/static/chunk-NIKNG2FX.js +0 -1
  1048. package/static/chunk-NNZWSNAW.js +0 -1
  1049. package/static/chunk-NWKBB7J4.js +0 -1
  1050. package/static/chunk-PVYVY3GD.js +0 -1
  1051. package/static/chunk-Q5X5TPAG.js +0 -1
  1052. package/static/chunk-R4VMWCM5.js +0 -1
  1053. package/static/chunk-SNOOCDJD.js +0 -1
  1054. package/static/chunk-SPQH3ATC.js +0 -5
  1055. package/static/chunk-ZCSHU3D7.js +0 -1
  1056. package/static/chunk-ZU5MQTFN.js +0 -4
  1057. package/static/main-5O3KLGIR.js +0 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online-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 { HttpException, HttpStatus } from '@nestjs/common'\nimport { JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { FastifyReply } from 'fastify'\nimport fs from 'node:fs/promises'\nimport { Readable } from 'node:stream'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport { SPACE_OPERATION } from '../../../spaces/constants/spaces'\nimport type { SpaceEnv } from '../../../spaces/models/space-env.model'\nimport type { UserModel } from '../../../users/models/user.model'\nimport { DEPTH, LOCK_SCOPE } from '../../../webdav/constants/webdav'\nimport { FILE_MODE } from '../../constants/operations'\nimport { FileLockProps } from '../../interfaces/file-props.interface'\nimport { LockConflict } from '../../models/file-lock-error'\nimport { FilesLockManager } from '../../services/files-lock-manager.service'\nimport * as filesUtils from '../../utils/files'\nimport { CollaboraOnlineManager } from './collabora-online-manager.service'\nimport { COLLABORA_APP_LOCK, COLLABORA_HEADERS, COLLABORA_LOCK_ACTION } from './collabora-online.constants'\nimport type { FastifyCollaboraOnlineSpaceRequest } from './collabora-online.interface'\n\njest.mock('../../utils/files')\njest.mock('node:fs/promises')\njest.mock('../../../users/utils/avatar')\n\ndescribe(CollaboraOnlineManager.name, () => {\n let service: CollaboraOnlineManager\n let filesLockManager: FilesLockManager\n\n const mockUser: UserModel = {\n id: 1,\n login: 'testuser',\n email: 'test@example.com',\n fullName: 'Test User',\n language: 'en',\n role: 1,\n applications: []\n } as UserModel\n\n const mockSpace = {\n realPath: '/path/to/document.docx',\n url: '/files/document.docx',\n envPermissions: '',\n dbFile: {\n id: 1,\n path: '/document.docx',\n ownerId: 1,\n name: 'document.docx'\n }\n } as unknown as SpaceEnv\n\n beforeEach(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n CollaboraOnlineManager,\n {\n provide: ContextManager,\n useValue: {\n headerOriginUrl: jest.fn().mockReturnValue('https://domain.com')\n }\n },\n {\n provide: JwtService,\n useValue: {\n signAsync: jest.fn().mockResolvedValue('mock-jwt-token')\n }\n },\n {\n provide: FilesLockManager,\n useValue: {\n checkConflicts: jest.fn(),\n convertLockToFileLockProps: jest.fn(),\n create: jest.fn(),\n removeLock: jest.fn(),\n getLocksByPath: jest.fn(),\n isLockedWithToken: jest.fn(),\n refreshLockTimeout: jest.fn()\n }\n }\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<CollaboraOnlineManager>(CollaboraOnlineManager)\n filesLockManager = module.get<FilesLockManager>(FilesLockManager)\n })\n\n afterEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n\n describe('getSettings', () => {\n beforeEach(() => {\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(true)\n jest.spyOn(filesUtils, 'isPathIsDir').mockResolvedValue(false)\n jest.spyOn(filesUtils, 'genUniqHashFromFileDBProps').mockReturnValue('file-hash-123')\n })\n\n it('should return settings with edit mode when user has modify permissions and no lock conflicts', async () => {\n const spaceWithPermissions = {\n ...mockSpace,\n envPermissions: SPACE_OPERATION.MODIFY\n } as unknown as SpaceEnv\n\n jest.spyOn(filesLockManager, 'checkConflicts').mockResolvedValue(undefined)\n\n const result = await service.getSettings(mockUser, spaceWithPermissions)\n\n expect(result).toEqual({\n documentServerUrl: expect.stringContaining('file-hash-123'),\n mode: FILE_MODE.EDIT,\n hasLock: false\n })\n expect(filesLockManager.checkConflicts).toHaveBeenCalledWith(\n mockSpace.dbFile,\n DEPTH.RESOURCE,\n expect.objectContaining({\n userId: mockUser.id,\n app: COLLABORA_APP_LOCK,\n lockScope: LOCK_SCOPE.SHARED\n })\n )\n })\n\n it('should return settings with view mode when lock conflict exists', async () => {\n const spaceWithPermissions = {\n ...mockSpace,\n envPermissions: SPACE_OPERATION.MODIFY\n } as unknown as SpaceEnv\n\n const mockLock = { userId: 2, options: { lockToken: 'token-123' } }\n const mockFileLockProps: FileLockProps = {\n owner: {\n id: 2,\n login: 'otheruser',\n email: 'other@example.com',\n fullName: 'Other User'\n },\n app: COLLABORA_APP_LOCK,\n isExclusive: false\n }\n\n jest.spyOn(filesLockManager, 'checkConflicts').mockRejectedValue(new LockConflict(mockLock as any, 'conflict'))\n jest.spyOn(filesLockManager, 'convertLockToFileLockProps').mockReturnValue(mockFileLockProps)\n\n const result = await service.getSettings(mockUser, spaceWithPermissions)\n\n expect(result.mode).toBe(FILE_MODE.VIEW)\n expect(result.hasLock).toEqual(mockFileLockProps)\n })\n\n it('should return view mode when user does not have modify permissions', async () => {\n const spaceWithoutPermissions = {\n ...mockSpace,\n envPermissions: ''\n } as unknown as SpaceEnv\n\n const result = await service.getSettings(mockUser, spaceWithoutPermissions)\n\n expect(result.mode).toBe(FILE_MODE.VIEW)\n expect(filesLockManager.checkConflicts).not.toHaveBeenCalled()\n })\n\n it('should throw error when document extension is not supported', async () => {\n const spaceWithUnsupportedFile = {\n ...mockSpace,\n realPath: '/path/to/document.xyz'\n } as unknown as SpaceEnv\n\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(true)\n jest.spyOn(filesUtils, 'isPathIsDir').mockResolvedValue(false)\n\n await expect(service.getSettings(mockUser, spaceWithUnsupportedFile)).rejects.toThrow(\n new HttpException('Document not supported', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should throw error when document does not exist', async () => {\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(false)\n\n await expect(service.getSettings(mockUser, mockSpace)).rejects.toThrow(new HttpException('Document not found', HttpStatus.NOT_FOUND))\n })\n\n it('should throw error when path is a directory', async () => {\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(true)\n jest.spyOn(filesUtils, 'isPathIsDir').mockResolvedValue(true)\n\n await expect(service.getSettings(mockUser, mockSpace)).rejects.toThrow(new HttpException('Document must be a file', HttpStatus.BAD_REQUEST))\n })\n })\n\n describe('checkFileInfo', () => {\n it('should return file information', async () => {\n const mockStats = {\n size: 1024,\n mtime: new Date('2024-01-01T10:00:00Z')\n }\n\n const mockRequest = {\n user: mockUser,\n space: {\n ...mockSpace,\n envPermissions: SPACE_OPERATION.MODIFY\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(fs, 'stat').mockResolvedValue(mockStats as any)\n jest.spyOn(filesUtils, 'fileName').mockReturnValue('document.docx')\n jest.spyOn(filesUtils, 'genEtag').mockReturnValue('etag-123')\n const { getAvatarBase64 } = await import('../../../users/utils/avatar')\n ;(getAvatarBase64 as jest.Mock).mockResolvedValue('base64-avatar')\n\n const result = await service.checkFileInfo(mockRequest)\n\n expect(result).toEqual({\n BaseFileName: 'document.docx',\n Version: 'etag-123',\n OwnerId: '1',\n Size: 1024,\n LastModifiedTime: '2024-01-01T10:00:00.000Z',\n UserId: '1',\n UserFriendlyName: 'Test User (test@example.com)',\n ReadOnly: false,\n UserExtraInfo: { avatar: 'base64-avatar' },\n UserCanNotWriteRelative: true,\n UserCanWrite: true,\n UserCanRename: false,\n SupportsUpdate: true,\n SupportsRename: false,\n SupportsExport: true,\n SupportsCoauth: true,\n SupportsLocks: true,\n SupportsGetLock: true\n })\n })\n\n it('should set UserCanWrite to false when user does not have modify permissions', async () => {\n const mockStats = {\n size: 1024,\n mtime: new Date('2024-01-01T10:00:00Z')\n }\n\n const mockRequest = {\n user: mockUser,\n space: {\n ...mockSpace,\n envPermissions: ''\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(fs, 'stat').mockResolvedValue(mockStats as any)\n jest.spyOn(filesUtils, 'fileName').mockReturnValue('document.docx')\n jest.spyOn(filesUtils, 'genEtag').mockReturnValue('etag-123')\n const { getAvatarBase64 } = await import('../../../users/utils/avatar')\n ;(getAvatarBase64 as jest.Mock).mockResolvedValue('base64-avatar')\n\n const result = await service.checkFileInfo(mockRequest)\n\n expect(result.UserCanWrite).toBe(false)\n })\n })\n\n describe('saveDocument', () => {\n beforeEach(() => {\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(true)\n jest.spyOn(filesUtils, 'isPathIsDir').mockResolvedValue(false)\n jest.spyOn(filesUtils, 'fileName').mockReturnValue('document.docx')\n jest.spyOn(filesUtils, 'uniqueFilePathFromDir').mockResolvedValue('/tmp/document-unique.docx')\n jest.spyOn(filesUtils, 'writeFromStream').mockResolvedValue(undefined)\n jest.spyOn(filesUtils, 'copyFileContent').mockResolvedValue(undefined)\n jest.spyOn(filesUtils, 'removeFiles').mockResolvedValue(undefined)\n })\n\n it('should save document successfully', async () => {\n const mockStats = {\n mtime: new Date('2024-01-01T11:00:00Z')\n }\n\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n 'content-length': '1024'\n },\n raw: new Readable()\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(fs, 'stat').mockResolvedValue(mockStats as any)\n jest.spyOn(filesUtils, 'fileSize').mockResolvedValue(1024)\n\n const result = await service.saveDocument(mockRequest)\n\n expect(result).toEqual({\n LastModifiedTime: '2024-01-01T11:00:00.000Z'\n })\n expect(filesUtils.writeFromStream).toHaveBeenCalledWith('/tmp/document-unique.docx', mockRequest.raw)\n expect(filesUtils.copyFileContent).toHaveBeenCalledWith('/tmp/document-unique.docx', mockSpace.realPath)\n expect(filesUtils.removeFiles).toHaveBeenCalledWith('/tmp/document-unique.docx')\n })\n\n it('should throw error when document size mismatch', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n 'content-length': '1024',\n [COLLABORA_HEADERS.Timestamp]: '2024-01-01T10:00:00.000Z'\n },\n raw: new Readable()\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesUtils, 'fileSize').mockResolvedValue(512)\n jest.spyOn(fs, 'stat').mockResolvedValue({ mtime: new Date('2024-01-01T10:00:00.000Z') } as any)\n\n await expect(service.saveDocument(mockRequest)).rejects.toThrow(new HttpException('Size Mismatch', HttpStatus.BAD_REQUEST))\n })\n\n it('should throw error when timestamp mismatch', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n 'content-length': '1024',\n [COLLABORA_HEADERS.Timestamp]: '2024-01-01T10:00:00.000Z'\n },\n raw: new Readable()\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(fs, 'stat').mockResolvedValue({ mtime: new Date('2024-01-01T11:00:00.000Z') } as any)\n\n await expect(service.saveDocument(mockRequest)).rejects.toThrow(new HttpException({ LOOLStatusCode: 1010 }, HttpStatus.CONFLICT))\n })\n\n it('should throw error when document does not exist', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n 'content-length': '1024'\n },\n raw: new Readable()\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(false)\n\n await expect(service.saveDocument(mockRequest)).rejects.toThrow(new HttpException('Document not found', HttpStatus.NOT_FOUND))\n })\n })\n\n describe('manageLock', () => {\n const mockReply = {\n header: jest.fn().mockReturnThis()\n } as unknown as FastifyReply\n\n describe('LOCK action', () => {\n it('should create a new lock', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.LOCK,\n [COLLABORA_HEADERS.LockToken]: 'new-lock-token'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(null)\n jest.spyOn(filesLockManager, 'create').mockResolvedValue([true, {} as any])\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(filesLockManager.create).toHaveBeenCalledWith(\n mockUser,\n mockSpace.dbFile,\n COLLABORA_APP_LOCK,\n DEPTH.RESOURCE,\n expect.objectContaining({\n lockToken: 'new-lock-token',\n lockScope: LOCK_SCOPE.SHARED\n }),\n expect.any(Number)\n )\n })\n\n it('should refresh existing lock', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.LOCK,\n [COLLABORA_HEADERS.LockToken]: 'existing-lock-token'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n const existingLock = { key: 'lock-key', options: { lockToken: 'existing-lock-token' } }\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(existingLock as any)\n jest.spyOn(filesLockManager, 'refreshLockTimeout').mockResolvedValue(undefined)\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(filesLockManager.refreshLockTimeout).toHaveBeenCalledWith(existingLock, expect.any(Number))\n expect(filesLockManager.create).not.toHaveBeenCalled()\n })\n\n it('should throw conflict when lock creation fails', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.LOCK,\n [COLLABORA_HEADERS.LockToken]: 'new-lock-token'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n const conflictingLock = { options: { lockToken: 'conflicting-token' } }\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(null)\n jest.spyOn(filesLockManager, 'create').mockResolvedValue([false, conflictingLock as any])\n\n await expect(service.manageLock(mockRequest, mockReply)).rejects.toThrow(new HttpException('The file is locked', HttpStatus.CONFLICT))\n expect(mockReply.header).toHaveBeenCalledWith(COLLABORA_HEADERS.LockToken, 'conflicting-token')\n })\n\n it('should throw error when lock token is missing', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.LOCK\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n await expect(service.manageLock(mockRequest, mockReply)).rejects.toThrow(new HttpException('Lock token is required', HttpStatus.CONFLICT))\n })\n })\n\n describe('UNLOCK action', () => {\n it('should remove existing lock', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.UNLOCK,\n [COLLABORA_HEADERS.LockToken]: 'lock-token-to-remove'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n const existingLock = { key: 'lock-key', options: { lockToken: 'lock-token-to-remove' } }\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(existingLock as any)\n jest.spyOn(filesLockManager, 'removeLock').mockResolvedValue(undefined)\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(filesLockManager.removeLock).toHaveBeenCalledWith('lock-key')\n })\n\n it('should throw error when lock does not exist', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.UNLOCK,\n [COLLABORA_HEADERS.LockToken]: 'non-existent-token'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(null)\n\n await expect(service.manageLock(mockRequest, mockReply)).rejects.toThrow(new HttpException('Lock not found', HttpStatus.CONFLICT))\n })\n })\n\n describe('GET_LOCK action', () => {\n it('should return lock token when lock exists', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.GET_LOCK\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n const existingLock = { options: { lockToken: 'existing-lock-token' } }\n jest.spyOn(filesLockManager, 'getLocksByPath').mockResolvedValue([existingLock as any])\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(mockReply.header).toHaveBeenCalledWith(COLLABORA_HEADERS.LockToken, 'existing-lock-token')\n })\n\n it('should not set header when no lock exists', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.GET_LOCK\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesLockManager, 'getLocksByPath').mockResolvedValue([])\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(mockReply.header).not.toHaveBeenCalled()\n })\n })\n\n describe('REFRESH_LOCK action', () => {\n it('should refresh existing lock', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.REFRESH_LOCK,\n [COLLABORA_HEADERS.LockToken]: 'lock-token-to-refresh'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n const existingLock = { key: 'lock-key', options: { lockToken: 'lock-token-to-refresh' } }\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(existingLock as any)\n jest.spyOn(filesLockManager, 'refreshLockTimeout').mockResolvedValue(undefined)\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(filesLockManager.refreshLockTimeout).toHaveBeenCalledWith(existingLock, expect.any(Number))\n })\n\n it('should throw error when lock does not exist', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.REFRESH_LOCK,\n [COLLABORA_HEADERS.LockToken]: 'non-existent-token'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(null)\n\n await expect(service.manageLock(mockRequest, mockReply)).rejects.toThrow(new HttpException('Lock not found', HttpStatus.CONFLICT))\n })\n })\n\n describe('Unknown action', () => {\n it('should throw error for unknown lock action', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: 'UNKNOWN_ACTION'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n await expect(service.manageLock(mockRequest, mockReply)).rejects.toThrow(new HttpException('Unknown lock action', HttpStatus.BAD_REQUEST))\n })\n })\n })\n})\n"],"names":["jest","mock","describe","CollaboraOnlineManager","name","service","filesLockManager","mockUser","id","login","email","fullName","language","role","applications","mockSpace","realPath","url","envPermissions","dbFile","path","ownerId","beforeEach","module","Test","createTestingModule","providers","provide","ContextManager","useValue","headerOriginUrl","fn","mockReturnValue","JwtService","signAsync","mockResolvedValue","FilesLockManager","checkConflicts","convertLockToFileLockProps","create","removeLock","getLocksByPath","isLockedWithToken","refreshLockTimeout","compile","useLogger","get","afterEach","clearAllMocks","it","expect","toBeDefined","spyOn","filesUtils","spaceWithPermissions","SPACE_OPERATION","MODIFY","undefined","result","getSettings","toEqual","documentServerUrl","stringContaining","mode","FILE_MODE","EDIT","hasLock","toHaveBeenCalledWith","DEPTH","RESOURCE","objectContaining","userId","app","COLLABORA_APP_LOCK","lockScope","LOCK_SCOPE","SHARED","mockLock","options","lockToken","mockFileLockProps","owner","isExclusive","mockRejectedValue","LockConflict","toBe","VIEW","spaceWithoutPermissions","not","toHaveBeenCalled","spaceWithUnsupportedFile","rejects","toThrow","HttpException","HttpStatus","BAD_REQUEST","NOT_FOUND","mockStats","size","mtime","Date","mockRequest","user","space","fs","getAvatarBase64","checkFileInfo","BaseFileName","Version","OwnerId","Size","LastModifiedTime","UserId","UserFriendlyName","ReadOnly","UserExtraInfo","avatar","UserCanNotWriteRelative","UserCanWrite","UserCanRename","SupportsUpdate","SupportsRename","SupportsExport","SupportsCoauth","SupportsLocks","SupportsGetLock","headers","raw","Readable","saveDocument","writeFromStream","copyFileContent","removeFiles","COLLABORA_HEADERS","Timestamp","LOOLStatusCode","CONFLICT","mockReply","header","mockReturnThis","Action","COLLABORA_LOCK_ACTION","LOCK","LockToken","manageLock","any","Number","existingLock","key","conflictingLock","UNLOCK","GET_LOCK","REFRESH_LOCK"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online-manager.service.spec.ts"],"sourcesContent":["import { HttpException, HttpStatus } from '@nestjs/common'\nimport { JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { FastifyReply } from 'fastify'\nimport fs from 'node:fs/promises'\nimport { Readable } from 'node:stream'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport { SPACE_OPERATION } from '../../../spaces/constants/spaces'\nimport type { SpaceEnv } from '../../../spaces/models/space-env.model'\nimport type { UserModel } from '../../../users/models/user.model'\nimport { DEPTH, LOCK_SCOPE } from '../../../webdav/constants/webdav'\nimport { FILE_MODE } from '../../constants/operations'\nimport { FileLockProps } from '../../interfaces/file-props.interface'\nimport { LockConflict } from '../../models/file-lock-error'\nimport { FilesLockManager } from '../../services/files-lock-manager.service'\nimport * as filesUtils from '../../utils/files'\nimport { CollaboraOnlineManager } from './collabora-online-manager.service'\nimport { COLLABORA_APP_LOCK, COLLABORA_HEADERS, COLLABORA_LOCK_ACTION } from './collabora-online.constants'\nimport type { FastifyCollaboraOnlineSpaceRequest } from './collabora-online.interface'\n\njest.mock('../../utils/files')\njest.mock('node:fs/promises')\njest.mock('../../../users/utils/avatar')\n\ndescribe(CollaboraOnlineManager.name, () => {\n let service: CollaboraOnlineManager\n let filesLockManager: FilesLockManager\n\n const mockUser: UserModel = {\n id: 1,\n login: 'testuser',\n email: 'test@example.com',\n fullName: 'Test User',\n language: 'en',\n role: 1,\n applications: []\n } as UserModel\n\n const mockSpace = {\n realPath: '/path/to/document.docx',\n url: '/files/document.docx',\n envPermissions: '',\n dbFile: {\n id: 1,\n path: '/document.docx',\n ownerId: 1,\n name: 'document.docx'\n }\n } as unknown as SpaceEnv\n\n beforeEach(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n CollaboraOnlineManager,\n {\n provide: ContextManager,\n useValue: {\n headerOriginUrl: jest.fn().mockReturnValue('https://domain.com')\n }\n },\n {\n provide: JwtService,\n useValue: {\n signAsync: jest.fn().mockResolvedValue('mock-jwt-token')\n }\n },\n {\n provide: FilesLockManager,\n useValue: {\n checkConflicts: jest.fn(),\n convertLockToFileLockProps: jest.fn(),\n create: jest.fn(),\n removeLock: jest.fn(),\n getLocksByPath: jest.fn(),\n isLockedWithToken: jest.fn(),\n refreshLockTimeout: jest.fn()\n }\n }\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<CollaboraOnlineManager>(CollaboraOnlineManager)\n filesLockManager = module.get<FilesLockManager>(FilesLockManager)\n })\n\n afterEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n\n describe('getSettings', () => {\n beforeEach(() => {\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(true)\n jest.spyOn(filesUtils, 'isPathIsDir').mockResolvedValue(false)\n jest.spyOn(filesUtils, 'genUniqHashFromFileDBProps').mockReturnValue('file-hash-123')\n })\n\n it('should return settings with edit mode when user has modify permissions and no lock conflicts', async () => {\n const spaceWithPermissions = {\n ...mockSpace,\n envPermissions: SPACE_OPERATION.MODIFY\n } as unknown as SpaceEnv\n\n jest.spyOn(filesLockManager, 'checkConflicts').mockResolvedValue(undefined)\n\n const result = await service.getSettings(mockUser, spaceWithPermissions)\n\n expect(result).toEqual({\n documentServerUrl: expect.stringContaining('file-hash-123'),\n mode: FILE_MODE.EDIT,\n hasLock: false\n })\n expect(filesLockManager.checkConflicts).toHaveBeenCalledWith(\n mockSpace.dbFile,\n DEPTH.RESOURCE,\n expect.objectContaining({\n userId: mockUser.id,\n app: COLLABORA_APP_LOCK,\n lockScope: LOCK_SCOPE.SHARED\n })\n )\n })\n\n it('should return settings with view mode when lock conflict exists', async () => {\n const spaceWithPermissions = {\n ...mockSpace,\n envPermissions: SPACE_OPERATION.MODIFY\n } as unknown as SpaceEnv\n\n const mockLock = { userId: 2, options: { lockToken: 'token-123' } }\n const mockFileLockProps: FileLockProps = {\n owner: {\n id: 2,\n login: 'otheruser',\n email: 'other@example.com',\n fullName: 'Other User'\n },\n app: COLLABORA_APP_LOCK,\n isExclusive: false\n }\n\n jest.spyOn(filesLockManager, 'checkConflicts').mockRejectedValue(new LockConflict(mockLock as any, 'conflict'))\n jest.spyOn(filesLockManager, 'convertLockToFileLockProps').mockReturnValue(mockFileLockProps)\n\n const result = await service.getSettings(mockUser, spaceWithPermissions)\n\n expect(result.mode).toBe(FILE_MODE.VIEW)\n expect(result.hasLock).toEqual(mockFileLockProps)\n })\n\n it('should return view mode when user does not have modify permissions', async () => {\n const spaceWithoutPermissions = {\n ...mockSpace,\n envPermissions: ''\n } as unknown as SpaceEnv\n\n const result = await service.getSettings(mockUser, spaceWithoutPermissions)\n\n expect(result.mode).toBe(FILE_MODE.VIEW)\n expect(filesLockManager.checkConflicts).not.toHaveBeenCalled()\n })\n\n it('should throw error when document extension is not supported', async () => {\n const spaceWithUnsupportedFile = {\n ...mockSpace,\n realPath: '/path/to/document.xyz'\n } as unknown as SpaceEnv\n\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(true)\n jest.spyOn(filesUtils, 'isPathIsDir').mockResolvedValue(false)\n\n await expect(service.getSettings(mockUser, spaceWithUnsupportedFile)).rejects.toThrow(\n new HttpException('Document not supported', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should throw error when document does not exist', async () => {\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(false)\n\n await expect(service.getSettings(mockUser, mockSpace)).rejects.toThrow(new HttpException('Document not found', HttpStatus.NOT_FOUND))\n })\n\n it('should throw error when path is a directory', async () => {\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(true)\n jest.spyOn(filesUtils, 'isPathIsDir').mockResolvedValue(true)\n\n await expect(service.getSettings(mockUser, mockSpace)).rejects.toThrow(new HttpException('Document must be a file', HttpStatus.BAD_REQUEST))\n })\n })\n\n describe('checkFileInfo', () => {\n it('should return file information', async () => {\n const mockStats = {\n size: 1024,\n mtime: new Date('2024-01-01T10:00:00Z')\n }\n\n const mockRequest = {\n user: mockUser,\n space: {\n ...mockSpace,\n envPermissions: SPACE_OPERATION.MODIFY\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(fs, 'stat').mockResolvedValue(mockStats as any)\n jest.spyOn(filesUtils, 'fileName').mockReturnValue('document.docx')\n jest.spyOn(filesUtils, 'genEtag').mockReturnValue('etag-123')\n const { getAvatarBase64 } = await import('../../../users/utils/avatar')\n ;(getAvatarBase64 as jest.Mock).mockResolvedValue('base64-avatar')\n\n const result = await service.checkFileInfo(mockRequest)\n\n expect(result).toEqual({\n BaseFileName: 'document.docx',\n Version: 'etag-123',\n OwnerId: '1',\n Size: 1024,\n LastModifiedTime: '2024-01-01T10:00:00.000Z',\n UserId: '1',\n UserFriendlyName: 'Test User (test@example.com)',\n ReadOnly: false,\n UserExtraInfo: { avatar: 'base64-avatar' },\n UserCanNotWriteRelative: true,\n UserCanWrite: true,\n UserCanRename: false,\n SupportsUpdate: true,\n SupportsRename: false,\n SupportsExport: true,\n SupportsCoauth: true,\n SupportsLocks: true,\n SupportsGetLock: true\n })\n })\n\n it('should set UserCanWrite to false when user does not have modify permissions', async () => {\n const mockStats = {\n size: 1024,\n mtime: new Date('2024-01-01T10:00:00Z')\n }\n\n const mockRequest = {\n user: mockUser,\n space: {\n ...mockSpace,\n envPermissions: ''\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(fs, 'stat').mockResolvedValue(mockStats as any)\n jest.spyOn(filesUtils, 'fileName').mockReturnValue('document.docx')\n jest.spyOn(filesUtils, 'genEtag').mockReturnValue('etag-123')\n const { getAvatarBase64 } = await import('../../../users/utils/avatar')\n ;(getAvatarBase64 as jest.Mock).mockResolvedValue('base64-avatar')\n\n const result = await service.checkFileInfo(mockRequest)\n\n expect(result.UserCanWrite).toBe(false)\n })\n })\n\n describe('saveDocument', () => {\n beforeEach(() => {\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(true)\n jest.spyOn(filesUtils, 'isPathIsDir').mockResolvedValue(false)\n jest.spyOn(filesUtils, 'fileName').mockReturnValue('document.docx')\n jest.spyOn(filesUtils, 'uniqueFilePathFromDir').mockResolvedValue('/tmp/document-unique.docx')\n jest.spyOn(filesUtils, 'writeFromStream').mockResolvedValue(undefined)\n jest.spyOn(filesUtils, 'copyFileContent').mockResolvedValue(undefined)\n jest.spyOn(filesUtils, 'removeFiles').mockResolvedValue(undefined)\n })\n\n it('should save document successfully', async () => {\n const mockStats = {\n mtime: new Date('2024-01-01T11:00:00Z')\n }\n\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n 'content-length': '1024'\n },\n raw: new Readable()\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(fs, 'stat').mockResolvedValue(mockStats as any)\n jest.spyOn(filesUtils, 'fileSize').mockResolvedValue(1024)\n\n const result = await service.saveDocument(mockRequest)\n\n expect(result).toEqual({\n LastModifiedTime: '2024-01-01T11:00:00.000Z'\n })\n expect(filesUtils.writeFromStream).toHaveBeenCalledWith('/tmp/document-unique.docx', mockRequest.raw)\n expect(filesUtils.copyFileContent).toHaveBeenCalledWith('/tmp/document-unique.docx', mockSpace.realPath)\n expect(filesUtils.removeFiles).toHaveBeenCalledWith('/tmp/document-unique.docx')\n })\n\n it('should throw error when document size mismatch', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n 'content-length': '1024',\n [COLLABORA_HEADERS.Timestamp]: '2024-01-01T10:00:00.000Z'\n },\n raw: new Readable()\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesUtils, 'fileSize').mockResolvedValue(512)\n jest.spyOn(fs, 'stat').mockResolvedValue({ mtime: new Date('2024-01-01T10:00:00.000Z') } as any)\n\n await expect(service.saveDocument(mockRequest)).rejects.toThrow(new HttpException('Size Mismatch', HttpStatus.BAD_REQUEST))\n })\n\n it('should throw error when timestamp mismatch', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n 'content-length': '1024',\n [COLLABORA_HEADERS.Timestamp]: '2024-01-01T10:00:00.000Z'\n },\n raw: new Readable()\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(fs, 'stat').mockResolvedValue({ mtime: new Date('2024-01-01T11:00:00.000Z') } as any)\n\n await expect(service.saveDocument(mockRequest)).rejects.toThrow(new HttpException({ LOOLStatusCode: 1010 }, HttpStatus.CONFLICT))\n })\n\n it('should throw error when document does not exist', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n 'content-length': '1024'\n },\n raw: new Readable()\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesUtils, 'isPathExists').mockResolvedValue(false)\n\n await expect(service.saveDocument(mockRequest)).rejects.toThrow(new HttpException('Document not found', HttpStatus.NOT_FOUND))\n })\n })\n\n describe('manageLock', () => {\n const mockReply = {\n header: jest.fn().mockReturnThis()\n } as unknown as FastifyReply\n\n describe('LOCK action', () => {\n it('should create a new lock', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.LOCK,\n [COLLABORA_HEADERS.LockToken]: 'new-lock-token'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(null)\n jest.spyOn(filesLockManager, 'create').mockResolvedValue([true, {} as any])\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(filesLockManager.create).toHaveBeenCalledWith(\n mockUser,\n mockSpace.dbFile,\n COLLABORA_APP_LOCK,\n DEPTH.RESOURCE,\n expect.objectContaining({\n lockToken: 'new-lock-token',\n lockScope: LOCK_SCOPE.SHARED\n }),\n expect.any(Number)\n )\n })\n\n it('should refresh existing lock', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.LOCK,\n [COLLABORA_HEADERS.LockToken]: 'existing-lock-token'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n const existingLock = { key: 'lock-key', options: { lockToken: 'existing-lock-token' } }\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(existingLock as any)\n jest.spyOn(filesLockManager, 'refreshLockTimeout').mockResolvedValue(undefined)\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(filesLockManager.refreshLockTimeout).toHaveBeenCalledWith(existingLock, expect.any(Number))\n expect(filesLockManager.create).not.toHaveBeenCalled()\n })\n\n it('should throw conflict when lock creation fails', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.LOCK,\n [COLLABORA_HEADERS.LockToken]: 'new-lock-token'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n const conflictingLock = { options: { lockToken: 'conflicting-token' } }\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(null)\n jest.spyOn(filesLockManager, 'create').mockResolvedValue([false, conflictingLock as any])\n\n await expect(service.manageLock(mockRequest, mockReply)).rejects.toThrow(new HttpException('The file is locked', HttpStatus.CONFLICT))\n expect(mockReply.header).toHaveBeenCalledWith(COLLABORA_HEADERS.LockToken, 'conflicting-token')\n })\n\n it('should throw error when lock token is missing', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.LOCK\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n await expect(service.manageLock(mockRequest, mockReply)).rejects.toThrow(new HttpException('Lock token is required', HttpStatus.CONFLICT))\n })\n })\n\n describe('UNLOCK action', () => {\n it('should remove existing lock', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.UNLOCK,\n [COLLABORA_HEADERS.LockToken]: 'lock-token-to-remove'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n const existingLock = { key: 'lock-key', options: { lockToken: 'lock-token-to-remove' } }\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(existingLock as any)\n jest.spyOn(filesLockManager, 'removeLock').mockResolvedValue(undefined)\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(filesLockManager.removeLock).toHaveBeenCalledWith('lock-key')\n })\n\n it('should throw error when lock does not exist', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.UNLOCK,\n [COLLABORA_HEADERS.LockToken]: 'non-existent-token'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(null)\n\n await expect(service.manageLock(mockRequest, mockReply)).rejects.toThrow(new HttpException('Lock not found', HttpStatus.CONFLICT))\n })\n })\n\n describe('GET_LOCK action', () => {\n it('should return lock token when lock exists', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.GET_LOCK\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n const existingLock = { options: { lockToken: 'existing-lock-token' } }\n jest.spyOn(filesLockManager, 'getLocksByPath').mockResolvedValue([existingLock as any])\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(mockReply.header).toHaveBeenCalledWith(COLLABORA_HEADERS.LockToken, 'existing-lock-token')\n })\n\n it('should not set header when no lock exists', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.GET_LOCK\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesLockManager, 'getLocksByPath').mockResolvedValue([])\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(mockReply.header).not.toHaveBeenCalled()\n })\n })\n\n describe('REFRESH_LOCK action', () => {\n it('should refresh existing lock', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.REFRESH_LOCK,\n [COLLABORA_HEADERS.LockToken]: 'lock-token-to-refresh'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n const existingLock = { key: 'lock-key', options: { lockToken: 'lock-token-to-refresh' } }\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(existingLock as any)\n jest.spyOn(filesLockManager, 'refreshLockTimeout').mockResolvedValue(undefined)\n\n await service.manageLock(mockRequest, mockReply)\n\n expect(filesLockManager.refreshLockTimeout).toHaveBeenCalledWith(existingLock, expect.any(Number))\n })\n\n it('should throw error when lock does not exist', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: COLLABORA_LOCK_ACTION.REFRESH_LOCK,\n [COLLABORA_HEADERS.LockToken]: 'non-existent-token'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n jest.spyOn(filesLockManager, 'isLockedWithToken').mockResolvedValue(null)\n\n await expect(service.manageLock(mockRequest, mockReply)).rejects.toThrow(new HttpException('Lock not found', HttpStatus.CONFLICT))\n })\n })\n\n describe('Unknown action', () => {\n it('should throw error for unknown lock action', async () => {\n const mockRequest = {\n user: mockUser,\n space: mockSpace,\n headers: {\n [COLLABORA_HEADERS.Action]: 'UNKNOWN_ACTION'\n }\n } as unknown as FastifyCollaboraOnlineSpaceRequest\n\n await expect(service.manageLock(mockRequest, mockReply)).rejects.toThrow(new HttpException('Unknown lock action', HttpStatus.BAD_REQUEST))\n })\n })\n })\n})\n"],"names":["jest","mock","describe","CollaboraOnlineManager","name","service","filesLockManager","mockUser","id","login","email","fullName","language","role","applications","mockSpace","realPath","url","envPermissions","dbFile","path","ownerId","beforeEach","module","Test","createTestingModule","providers","provide","ContextManager","useValue","headerOriginUrl","fn","mockReturnValue","JwtService","signAsync","mockResolvedValue","FilesLockManager","checkConflicts","convertLockToFileLockProps","create","removeLock","getLocksByPath","isLockedWithToken","refreshLockTimeout","compile","useLogger","get","afterEach","clearAllMocks","it","expect","toBeDefined","spyOn","filesUtils","spaceWithPermissions","SPACE_OPERATION","MODIFY","undefined","result","getSettings","toEqual","documentServerUrl","stringContaining","mode","FILE_MODE","EDIT","hasLock","toHaveBeenCalledWith","DEPTH","RESOURCE","objectContaining","userId","app","COLLABORA_APP_LOCK","lockScope","LOCK_SCOPE","SHARED","mockLock","options","lockToken","mockFileLockProps","owner","isExclusive","mockRejectedValue","LockConflict","toBe","VIEW","spaceWithoutPermissions","not","toHaveBeenCalled","spaceWithUnsupportedFile","rejects","toThrow","HttpException","HttpStatus","BAD_REQUEST","NOT_FOUND","mockStats","size","mtime","Date","mockRequest","user","space","fs","getAvatarBase64","checkFileInfo","BaseFileName","Version","OwnerId","Size","LastModifiedTime","UserId","UserFriendlyName","ReadOnly","UserExtraInfo","avatar","UserCanNotWriteRelative","UserCanWrite","UserCanRename","SupportsUpdate","SupportsRename","SupportsExport","SupportsCoauth","SupportsLocks","SupportsGetLock","headers","raw","Readable","saveDocument","writeFromStream","copyFileContent","removeFiles","COLLABORA_HEADERS","Timestamp","LOOLStatusCode","CONFLICT","mockReply","header","mockReturnThis","Action","COLLABORA_LOCK_ACTION","LOCK","LockToken","manageLock","any","Number","existingLock","key","conflictingLock","UNLOCK","GET_LOCK","REFRESH_LOCK"],"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/files/modules/collabora-online/collabora-online.config.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 { IsBoolean, IsOptional, IsString } from 'class-validator'\n\nexport class CollaboraOnlineConfig {\n @IsBoolean()\n enabled = false\n\n @IsOptional()\n @IsString()\n externalServer: string = null\n}\n"],"names":["CollaboraOnlineConfig","enabled","externalServer"],"mappings":"AAAA;;;;CAIC;;;;+BAIYA;;;eAAAA;;;gCAFmC;;;;;;;;;;AAEzC,IAAA,AAAMA,wBAAN,MAAMA;;aAEXC,UAAU;aAIVC,iBAAyB;;AAC3B"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.config.ts"],"sourcesContent":["import { IsBoolean, IsOptional, IsString } from 'class-validator'\n\nexport class CollaboraOnlineConfig {\n @IsBoolean()\n enabled = false\n\n @IsOptional()\n @IsString()\n externalServer: string = null\n}\n"],"names":["CollaboraOnlineConfig","enabled","externalServer"],"mappings":";;;;+BAEaA;;;eAAAA;;;gCAFmC;;;;;;;;;;AAEzC,IAAA,AAAMA,wBAAN,MAAMA;;aAEXC,UAAU;aAIVC,iBAAyB;;AAC3B"}
@@ -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/files/modules/collabora-online/collabora-online.constants.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\nexport const COLLABORA_URI = 'browser/dist/cool.html'\nexport const COLLABORA_CONTEXT = 'CollaboraOnlineEnvironment' as const\nexport const COLLABORA_WOPI_SRC_QUERY_PARAM_NAME = 'WOPISrc' as const\nexport const COLLABORA_TOKEN_QUERY_PARAM_NAME = 'access_token' as const\nexport const COLLABORA_APP_LOCK = 'Collabora' as const\n\nexport const COLLABORA_HEADERS = {\n Action: 'x-wopi-override',\n LockToken: 'x-wopi-lock',\n Timestamp: 'x-cool-wopi-timestamp'\n} as const\n\nexport enum COLLABORA_LOCK_ACTION {\n LOCK = 'LOCK',\n UNLOCK = 'UNLOCK',\n GET_LOCK = 'GET_LOCK',\n REFRESH_LOCK = 'REFRESH_LOCK'\n}\n\nexport const COLLABORA_ONLINE_EXTENSIONS = new Set<string>([\n // ─────────────\n // WORD (Writer)\n // ─────────────\n 'doc',\n 'docx',\n 'docm',\n 'dot',\n 'dotx',\n 'dotm',\n 'odt',\n 'ott',\n 'rtf',\n 'fodt',\n\n // StarOffice / legacy\n 'sxw',\n 'stw',\n\n // ─────────────\n // CELL (Calc)\n // ─────────────\n 'xls',\n 'xlsx',\n 'xlsm',\n 'xlt',\n 'xltx',\n 'ods',\n 'ots',\n 'csv',\n 'fods',\n\n // StarOffice\n 'sxc',\n 'sdc',\n\n // ─────────────\n // SLIDE (Impress)\n // ─────────────\n 'ppt',\n 'pptx',\n 'pptm',\n 'pps',\n 'ppsx',\n 'odp',\n 'otp',\n 'fodp',\n\n // StarOffice\n 'sxi',\n 'sdd',\n\n // ─────────────\n // DRAW / DIAGRAM\n // ─────────────\n 'odg'\n])\n"],"names":["COLLABORA_APP_LOCK","COLLABORA_CONTEXT","COLLABORA_HEADERS","COLLABORA_LOCK_ACTION","COLLABORA_ONLINE_EXTENSIONS","COLLABORA_TOKEN_QUERY_PARAM_NAME","COLLABORA_URI","COLLABORA_WOPI_SRC_QUERY_PARAM_NAME","Action","LockToken","Timestamp","Set"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAMYA;eAAAA;;QAHAC;eAAAA;;QAKAC;eAAAA;;QAMDC;eAAAA;;QAOCC;eAAAA;;QAhBAC;eAAAA;;QAHAC;eAAAA;;QAEAC;eAAAA;;;AAFN,MAAMD,gBAAgB;AACtB,MAAML,oBAAoB;AAC1B,MAAMM,sCAAsC;AAC5C,MAAMF,mCAAmC;AACzC,MAAML,qBAAqB;AAE3B,MAAME,oBAAoB;IAC/BM,QAAQ;IACRC,WAAW;IACXC,WAAW;AACb;AAEO,IAAA,AAAKP,+CAAAA;;;;;WAAAA;;AAOL,MAAMC,8BAA8B,IAAIO,IAAY;IACzD,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA,sBAAsB;IACtB;IACA;IAEA,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA,aAAa;IACb;IACA;IAEA,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA,aAAa;IACb;IACA;IAEA,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB;CACD"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.constants.ts"],"sourcesContent":["export const COLLABORA_URI = 'browser/dist/cool.html'\nexport const COLLABORA_CONTEXT = 'CollaboraOnlineEnvironment' as const\nexport const COLLABORA_WOPI_SRC_QUERY_PARAM_NAME = 'WOPISrc' as const\nexport const COLLABORA_TOKEN_QUERY_PARAM_NAME = 'access_token' as const\nexport const COLLABORA_APP_LOCK = 'Collabora' as const\n\nexport const COLLABORA_HEADERS = {\n Action: 'x-wopi-override',\n LockToken: 'x-wopi-lock',\n Timestamp: 'x-cool-wopi-timestamp'\n} as const\n\nexport enum COLLABORA_LOCK_ACTION {\n LOCK = 'LOCK',\n UNLOCK = 'UNLOCK',\n GET_LOCK = 'GET_LOCK',\n REFRESH_LOCK = 'REFRESH_LOCK'\n}\n\nexport const COLLABORA_ONLINE_EXTENSIONS = new Set<string>([\n // ─────────────\n // WORD (Writer)\n // ─────────────\n 'doc',\n 'docx',\n 'docm',\n 'dot',\n 'dotx',\n 'dotm',\n 'odt',\n 'ott',\n 'rtf',\n 'fodt',\n\n // StarOffice / legacy\n 'sxw',\n 'stw',\n\n // ─────────────\n // CELL (Calc)\n // ─────────────\n 'xls',\n 'xlsx',\n 'xlsm',\n 'xlt',\n 'xltx',\n 'ods',\n 'ots',\n 'csv',\n 'fods',\n\n // StarOffice\n 'sxc',\n 'sdc',\n\n // ─────────────\n // SLIDE (Impress)\n // ─────────────\n 'ppt',\n 'pptx',\n 'pptm',\n 'pps',\n 'ppsx',\n 'odp',\n 'otp',\n 'fodp',\n\n // StarOffice\n 'sxi',\n 'sdd',\n\n // ─────────────\n // DRAW / DIAGRAM\n // ─────────────\n 'odg'\n])\n"],"names":["COLLABORA_APP_LOCK","COLLABORA_CONTEXT","COLLABORA_HEADERS","COLLABORA_LOCK_ACTION","COLLABORA_ONLINE_EXTENSIONS","COLLABORA_TOKEN_QUERY_PARAM_NAME","COLLABORA_URI","COLLABORA_WOPI_SRC_QUERY_PARAM_NAME","Action","LockToken","Timestamp","Set"],"mappings":";;;;;;;;;;;QAIaA;eAAAA;;QAHAC;eAAAA;;QAKAC;eAAAA;;QAMDC;eAAAA;;QAOCC;eAAAA;;QAhBAC;eAAAA;;QAHAC;eAAAA;;QAEAC;eAAAA;;;AAFN,MAAMD,gBAAgB;AACtB,MAAML,oBAAoB;AAC1B,MAAMM,sCAAsC;AAC5C,MAAMF,mCAAmC;AACzC,MAAML,qBAAqB;AAE3B,MAAME,oBAAoB;IAC/BM,QAAQ;IACRC,WAAW;IACXC,WAAW;AACb;AAEO,IAAA,AAAKP,+CAAAA;;;;;WAAAA;;AAOL,MAAMC,8BAA8B,IAAIO,IAAY;IACzD,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA,sBAAsB;IACtB;IACA;IAEA,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA,aAAa;IACb;IACA;IAEA,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA,aAAa;IACb;IACA;IAEA,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB;CACD"}
@@ -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/files/modules/collabora-online/collabora-online.controller.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 { Controller, Get, HttpCode, HttpStatus, Post, Request, Res, StreamableFile, UseInterceptors } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { ContextInterceptor } from '../../../../infrastructure/context/interceptors/context.interceptor'\nimport { SPACE_OPERATION } from '../../../spaces/constants/spaces'\nimport { OverrideSpacePermission } from '../../../spaces/decorators/space-override-permission.decorator'\nimport { FastifySpaceRequest } from '../../../spaces/interfaces/space-request.interface'\nimport { FilesMethods } from '../../services/files-methods.service'\nimport { CollaboraOnlineEnvironment } from './collabora-online-environment.decorator'\nimport { CollaboraOnlineManager } from './collabora-online-manager.service'\nimport { CollaboraOnlineReqDto, CollaboraSaveDocumentDto } from './collabora-online.dtos'\nimport type { CollaboraOnlineCheckFileInfo } from './collabora-online.interface'\nimport { COLLABORA_ONLINE_ROUTE } from './collabora-online.routes'\n\n@Controller(COLLABORA_ONLINE_ROUTE.BASE)\n@CollaboraOnlineEnvironment()\nexport class CollaboraOnlineController {\n constructor(\n private readonly filesMethods: FilesMethods,\n private readonly filesCollaboraOnlineService: CollaboraOnlineManager\n ) {}\n\n @Get(`${COLLABORA_ONLINE_ROUTE.SETTINGS}/*`)\n @UseInterceptors(ContextInterceptor)\n collaboraOnlineSettings(@Request() req: FastifySpaceRequest): Promise<CollaboraOnlineReqDto> {\n return this.filesCollaboraOnlineService.getSettings(req.user, req.space)\n }\n\n @Get(`${COLLABORA_ONLINE_ROUTE.FILES}/:dbFileHash/${COLLABORA_ONLINE_ROUTE.CONTENTS}`)\n collaboraOnlineGetDocumentContent(\n @Request() req: FastifySpaceRequest,\n @Res({ passthrough: true }) res: FastifyReply\n ): Promise<StreamableFile | CollaboraOnlineCheckFileInfo> {\n return this.filesMethods.headOrGet(req, res)\n }\n\n @Get(`${COLLABORA_ONLINE_ROUTE.FILES}/:dbFileHash`)\n collaboraOnlineGetDocumentInfo(@Request() req: FastifySpaceRequest): Promise<StreamableFile | CollaboraOnlineCheckFileInfo> {\n return this.filesCollaboraOnlineService.checkFileInfo(req)\n }\n\n @Post(`${COLLABORA_ONLINE_ROUTE.FILES}/:dbFileHash/${COLLABORA_ONLINE_ROUTE.CONTENTS}`)\n @OverrideSpacePermission(SPACE_OPERATION.MODIFY)\n @HttpCode(HttpStatus.OK)\n collaboraOnlineSaveDocument(@Request() req: FastifySpaceRequest): Promise<CollaboraSaveDocumentDto> {\n return this.filesCollaboraOnlineService.saveDocument(req)\n }\n\n @Post(`${COLLABORA_ONLINE_ROUTE.FILES}/:dbFileHash`)\n @OverrideSpacePermission(SPACE_OPERATION.MODIFY)\n @HttpCode(HttpStatus.OK)\n collaboraOnlineManageLockOnDocument(@Request() req: FastifySpaceRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<void> {\n return this.filesCollaboraOnlineService.manageLock(req, res)\n }\n}\n"],"names":["CollaboraOnlineController","collaboraOnlineSettings","req","filesCollaboraOnlineService","getSettings","user","space","collaboraOnlineGetDocumentContent","res","filesMethods","headOrGet","collaboraOnlineGetDocumentInfo","checkFileInfo","collaboraOnlineSaveDocument","saveDocument","collaboraOnlineManageLockOnDocument","manageLock","COLLABORA_ONLINE_ROUTE","SETTINGS","FILES","CONTENTS","passthrough","MODIFY","OK","BASE"],"mappings":"AAAA;;;;CAIC;;;;+BAiBYA;;;eAAAA;;;wBAf8F;yBAC9E;oCACM;wBACH;kDACQ;uCACJ;qCACP;qDACc;+CACJ;uCAGA;;;;;;;;;;;;;;;AAIhC,IAAA,AAAMA,4BAAN,MAAMA;IAQXC,wBAAwB,AAAWC,GAAwB,EAAkC;QAC3F,OAAO,IAAI,CAACC,2BAA2B,CAACC,WAAW,CAACF,IAAIG,IAAI,EAAEH,IAAII,KAAK;IACzE;IAGAC,kCACE,AAAWL,GAAwB,EACnC,AAA4BM,GAAiB,EACW;QACxD,OAAO,IAAI,CAACC,YAAY,CAACC,SAAS,CAACR,KAAKM;IAC1C;IAGAG,+BAA+B,AAAWT,GAAwB,EAA0D;QAC1H,OAAO,IAAI,CAACC,2BAA2B,CAACS,aAAa,CAACV;IACxD;IAKAW,4BAA4B,AAAWX,GAAwB,EAAqC;QAClG,OAAO,IAAI,CAACC,2BAA2B,CAACW,YAAY,CAACZ;IACvD;IAKAa,oCAAoC,AAAWb,GAAwB,EAAE,AAA4BM,GAAiB,EAAiB;QACrI,OAAO,IAAI,CAACL,2BAA2B,CAACa,UAAU,CAACd,KAAKM;IAC1D;IApCA,YACE,AAAiBC,YAA0B,EAC3C,AAAiBN,2BAAmD,CACpE;aAFiBM,eAAAA;aACAN,8BAAAA;IAChB;AAkCL;;wBAhCUc,6CAAsB,CAACC,QAAQ,CAAC,EAAE;;;;;;;;;;wBAMlCD,6CAAsB,CAACE,KAAK,CAAC,aAAa,EAAEF,6CAAsB,CAACG,QAAQ;;;QAG1EC,aAAa;;;;;;;;;;wBAKdJ,6CAAsB,CAACE,KAAK,CAAC,YAAY;;;;;;;;;yBAKxCF,6CAAsB,CAACE,KAAK,CAAC,aAAa,EAAEF,6CAAsB,CAACG,QAAQ;2FAC3CE;6CACpBC;;;;;;;;;yBAKZN,6CAAsB,CAACE,KAAK,CAAC,YAAY;2FACTG;6CACpBC;;;QAC2DF,aAAa;;;;;;;;;;0EArC5DG"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.controller.ts"],"sourcesContent":["import { Controller, Get, HttpCode, HttpStatus, Post, Request, Res, StreamableFile, UseInterceptors } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { ContextInterceptor } from '../../../../infrastructure/context/interceptors/context.interceptor'\nimport { SPACE_OPERATION } from '../../../spaces/constants/spaces'\nimport { OverrideSpacePermission } from '../../../spaces/decorators/space-override-permission.decorator'\nimport { FastifySpaceRequest } from '../../../spaces/interfaces/space-request.interface'\nimport { FilesMethods } from '../../services/files-methods.service'\nimport { CollaboraOnlineEnvironment } from './collabora-online-environment.decorator'\nimport { CollaboraOnlineManager } from './collabora-online-manager.service'\nimport { CollaboraOnlineReqDto, CollaboraSaveDocumentDto } from './collabora-online.dtos'\nimport type { CollaboraOnlineCheckFileInfo } from './collabora-online.interface'\nimport { COLLABORA_ONLINE_ROUTE } from './collabora-online.routes'\n\n@Controller(COLLABORA_ONLINE_ROUTE.BASE)\n@CollaboraOnlineEnvironment()\nexport class CollaboraOnlineController {\n constructor(\n private readonly filesMethods: FilesMethods,\n private readonly filesCollaboraOnlineService: CollaboraOnlineManager\n ) {}\n\n @Get(`${COLLABORA_ONLINE_ROUTE.SETTINGS}/*`)\n @UseInterceptors(ContextInterceptor)\n collaboraOnlineSettings(@Request() req: FastifySpaceRequest): Promise<CollaboraOnlineReqDto> {\n return this.filesCollaboraOnlineService.getSettings(req.user, req.space)\n }\n\n @Get(`${COLLABORA_ONLINE_ROUTE.FILES}/:dbFileHash/${COLLABORA_ONLINE_ROUTE.CONTENTS}`)\n collaboraOnlineGetDocumentContent(\n @Request() req: FastifySpaceRequest,\n @Res({ passthrough: true }) res: FastifyReply\n ): Promise<StreamableFile | CollaboraOnlineCheckFileInfo> {\n return this.filesMethods.headOrGet(req, res)\n }\n\n @Get(`${COLLABORA_ONLINE_ROUTE.FILES}/:dbFileHash`)\n collaboraOnlineGetDocumentInfo(@Request() req: FastifySpaceRequest): Promise<StreamableFile | CollaboraOnlineCheckFileInfo> {\n return this.filesCollaboraOnlineService.checkFileInfo(req)\n }\n\n @Post(`${COLLABORA_ONLINE_ROUTE.FILES}/:dbFileHash/${COLLABORA_ONLINE_ROUTE.CONTENTS}`)\n @OverrideSpacePermission(SPACE_OPERATION.MODIFY)\n @HttpCode(HttpStatus.OK)\n collaboraOnlineSaveDocument(@Request() req: FastifySpaceRequest): Promise<CollaboraSaveDocumentDto> {\n return this.filesCollaboraOnlineService.saveDocument(req)\n }\n\n @Post(`${COLLABORA_ONLINE_ROUTE.FILES}/:dbFileHash`)\n @OverrideSpacePermission(SPACE_OPERATION.MODIFY)\n @HttpCode(HttpStatus.OK)\n collaboraOnlineManageLockOnDocument(@Request() req: FastifySpaceRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<void> {\n return this.filesCollaboraOnlineService.manageLock(req, res)\n }\n}\n"],"names":["CollaboraOnlineController","collaboraOnlineSettings","req","filesCollaboraOnlineService","getSettings","user","space","collaboraOnlineGetDocumentContent","res","filesMethods","headOrGet","collaboraOnlineGetDocumentInfo","checkFileInfo","collaboraOnlineSaveDocument","saveDocument","collaboraOnlineManageLockOnDocument","manageLock","COLLABORA_ONLINE_ROUTE","SETTINGS","FILES","CONTENTS","passthrough","MODIFY","OK","BASE"],"mappings":";;;;+BAeaA;;;eAAAA;;;wBAf8F;yBAC9E;oCACM;wBACH;kDACQ;uCACJ;qCACP;qDACc;+CACJ;uCAGA;;;;;;;;;;;;;;;AAIhC,IAAA,AAAMA,4BAAN,MAAMA;IAQXC,wBAAwB,AAAWC,GAAwB,EAAkC;QAC3F,OAAO,IAAI,CAACC,2BAA2B,CAACC,WAAW,CAACF,IAAIG,IAAI,EAAEH,IAAII,KAAK;IACzE;IAGAC,kCACE,AAAWL,GAAwB,EACnC,AAA4BM,GAAiB,EACW;QACxD,OAAO,IAAI,CAACC,YAAY,CAACC,SAAS,CAACR,KAAKM;IAC1C;IAGAG,+BAA+B,AAAWT,GAAwB,EAA0D;QAC1H,OAAO,IAAI,CAACC,2BAA2B,CAACS,aAAa,CAACV;IACxD;IAKAW,4BAA4B,AAAWX,GAAwB,EAAqC;QAClG,OAAO,IAAI,CAACC,2BAA2B,CAACW,YAAY,CAACZ;IACvD;IAKAa,oCAAoC,AAAWb,GAAwB,EAAE,AAA4BM,GAAiB,EAAiB;QACrI,OAAO,IAAI,CAACL,2BAA2B,CAACa,UAAU,CAACd,KAAKM;IAC1D;IApCA,YACE,AAAiBC,YAA0B,EAC3C,AAAiBN,2BAAmD,CACpE;aAFiBM,eAAAA;aACAN,8BAAAA;IAChB;AAkCL;;wBAhCUc,6CAAsB,CAACC,QAAQ,CAAC,EAAE;;;;;;;;;;wBAMlCD,6CAAsB,CAACE,KAAK,CAAC,aAAa,EAAEF,6CAAsB,CAACG,QAAQ;;;QAG1EC,aAAa;;;;;;;;;;wBAKdJ,6CAAsB,CAACE,KAAK,CAAC,YAAY;;;;;;;;;yBAKxCF,6CAAsB,CAACE,KAAK,CAAC,aAAa,EAAEF,6CAAsB,CAACG,QAAQ;2FAC3CE;6CACpBC;;;;;;;;;yBAKZN,6CAAsB,CAACE,KAAK,CAAC,YAAY;2FACTG;6CACpBC;;;QAC2DF,aAAa;;;;;;;;;;0EArC5DG"}
@@ -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/files/modules/collabora-online/collabora-online.controller.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 { Test, TestingModule } from '@nestjs/testing'\nimport { ContextInterceptor } from '../../../../infrastructure/context/interceptors/context.interceptor'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport { SpacesManager } from '../../../spaces/services/spaces-manager.service'\nimport { FilesMethods } from '../../services/files-methods.service'\nimport { CollaboraOnlineManager } from './collabora-online-manager.service'\nimport { CollaboraOnlineController } from './collabora-online.controller'\n\ndescribe(CollaboraOnlineController.name, () => {\n let controller: CollaboraOnlineController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n controllers: [CollaboraOnlineController],\n providers: [\n ContextManager,\n ContextInterceptor,\n { provide: CollaboraOnlineManager, useValue: {} },\n { provide: FilesMethods, useValue: {} },\n { provide: SpacesManager, useValue: {} }\n ]\n }).compile()\n\n controller = module.get<CollaboraOnlineController>(CollaboraOnlineController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n})\n"],"names":["describe","CollaboraOnlineController","name","controller","beforeAll","module","Test","createTestingModule","controllers","providers","ContextManager","ContextInterceptor","provide","CollaboraOnlineManager","useValue","FilesMethods","SpacesManager","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;yBAEmC;oCACD;uCACJ;sCACD;qCACD;+CACU;2CACG;AAE1CA,SAASC,oDAAyB,CAACC,IAAI,EAAE;IACvC,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,aAAa;gBAACP,oDAAyB;aAAC;YACxCQ,WAAW;gBACTC,qCAAc;gBACdC,sCAAkB;gBAClB;oBAAEC,SAASC,qDAAsB;oBAAEC,UAAU,CAAC;gBAAE;gBAChD;oBAAEF,SAASG,iCAAY;oBAAED,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASI,mCAAa;oBAAEF,UAAU,CAAC;gBAAE;aACxC;QACH,GAAGG,OAAO;QAEVd,aAAaE,OAAOa,GAAG,CAA4BjB,oDAAyB;IAC9E;IAEAkB,GAAG,qBAAqB;QACtBC,OAAOjB,YAAYkB,WAAW;IAChC;AACF"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.controller.spec.ts"],"sourcesContent":["import { Test, TestingModule } from '@nestjs/testing'\nimport { ContextInterceptor } from '../../../../infrastructure/context/interceptors/context.interceptor'\nimport { ContextManager } from '../../../../infrastructure/context/services/context-manager.service'\nimport { SpacesManager } from '../../../spaces/services/spaces-manager.service'\nimport { FilesMethods } from '../../services/files-methods.service'\nimport { CollaboraOnlineManager } from './collabora-online-manager.service'\nimport { CollaboraOnlineController } from './collabora-online.controller'\n\ndescribe(CollaboraOnlineController.name, () => {\n let controller: CollaboraOnlineController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n controllers: [CollaboraOnlineController],\n providers: [\n ContextManager,\n ContextInterceptor,\n { provide: CollaboraOnlineManager, useValue: {} },\n { provide: FilesMethods, useValue: {} },\n { provide: SpacesManager, useValue: {} }\n ]\n }).compile()\n\n controller = module.get<CollaboraOnlineController>(CollaboraOnlineController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n})\n"],"names":["describe","CollaboraOnlineController","name","controller","beforeAll","module","Test","createTestingModule","controllers","providers","ContextManager","ContextInterceptor","provide","CollaboraOnlineManager","useValue","FilesMethods","SpacesManager","compile","get","it","expect","toBeDefined"],"mappings":";;;;yBAAoC;oCACD;uCACJ;sCACD;qCACD;+CACU;2CACG;AAE1CA,SAASC,oDAAyB,CAACC,IAAI,EAAE;IACvC,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,aAAa;gBAACP,oDAAyB;aAAC;YACxCQ,WAAW;gBACTC,qCAAc;gBACdC,sCAAkB;gBAClB;oBAAEC,SAASC,qDAAsB;oBAAEC,UAAU,CAAC;gBAAE;gBAChD;oBAAEF,SAASG,iCAAY;oBAAED,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASI,mCAAa;oBAAEF,UAAU,CAAC;gBAAE;aACxC;QACH,GAAGG,OAAO;QAEVd,aAAaE,OAAOa,GAAG,CAA4BjB,oDAAyB;IAC9E;IAEAkB,GAAG,qBAAqB;QACtBC,OAAOjB,YAAYkB,WAAW;IAChC;AACF"}
@@ -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/files/modules/collabora-online/collabora-online.dtos.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 type { FILE_MODE } from '../../constants/operations'\nimport type { FileLockProps } from '../../interfaces/file-props.interface'\n\nexport interface CollaboraOnlineReqDto {\n documentServerUrl: string\n mode: FILE_MODE\n hasLock: false | FileLockProps\n}\n\nexport interface CollaboraSaveDocumentDto {\n LastModifiedTime: string\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.dtos.ts"],"names":[],"mappings":""}
@@ -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/files/modules/collabora-online/collabora-online.guard.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 { ExecutionContext, Injectable, Logger } from '@nestjs/common'\nimport { AuthGuard, IAuthGuard } from '@nestjs/passport'\n\n@Injectable()\nexport class CollaboraOnlineGuard extends AuthGuard('filesCollaboraOnlineToken') implements IAuthGuard {\n private readonly logger = new Logger(CollaboraOnlineGuard.name)\n\n handleRequest<TUser = any>(err: any, user: any, info: Error, ctx: ExecutionContext, status?: any): TUser {\n const req = this.getRequest(ctx)\n req.raw.user = user?.login || 'unauthorized'\n if (info) {\n this.logger.warn(`<${req.raw.user}> <${req.ip}> ${info}`)\n }\n return super.handleRequest(err, user, info, ctx, status)\n }\n}\n"],"names":["CollaboraOnlineGuard","AuthGuard","handleRequest","err","user","info","ctx","status","req","getRequest","raw","login","logger","warn","ip","Logger","name"],"mappings":"AAAA;;;;CAIC;;;;+BAMYA;;;eAAAA;;;wBAJwC;0BACf;;;;;;;AAG/B,IAAA,AAAMA,uBAAN,MAAMA,6BAA6BC,IAAAA,mBAAS,EAAC;IAGlDC,cAA2BC,GAAQ,EAAEC,IAAS,EAAEC,IAAW,EAAEC,GAAqB,EAAEC,MAAY,EAAS;QACvG,MAAMC,MAAM,IAAI,CAACC,UAAU,CAACH;QAC5BE,IAAIE,GAAG,CAACN,IAAI,GAAGA,MAAMO,SAAS;QAC9B,IAAIN,MAAM;YACR,IAAI,CAACO,MAAM,CAACC,IAAI,CAAC,CAAC,CAAC,EAAEL,IAAIE,GAAG,CAACN,IAAI,CAAC,GAAG,EAAEI,IAAIM,EAAE,CAAC,EAAE,EAAET,MAAM;QAC1D;QACA,OAAO,KAAK,CAACH,cAAcC,KAAKC,MAAMC,MAAMC,KAAKC;IACnD;;QAVK,qBACYK,SAAS,IAAIG,cAAM,CAACf,qBAAqBgB,IAAI;;AAUhE"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.guard.ts"],"sourcesContent":["import { ExecutionContext, Injectable, Logger } from '@nestjs/common'\nimport { AuthGuard, IAuthGuard } from '@nestjs/passport'\n\n@Injectable()\nexport class CollaboraOnlineGuard extends AuthGuard('filesCollaboraOnlineToken') implements IAuthGuard {\n private readonly logger = new Logger(CollaboraOnlineGuard.name)\n\n handleRequest<TUser = any>(err: any, user: any, info: Error, ctx: ExecutionContext, status?: any): TUser {\n const req = this.getRequest(ctx)\n req.raw.user = user?.login || 'unauthorized'\n if (info) {\n this.logger.warn(`<${req.raw.user}> <${req.ip}> ${info}`)\n }\n return super.handleRequest(err, user, info, ctx, status)\n }\n}\n"],"names":["CollaboraOnlineGuard","AuthGuard","handleRequest","err","user","info","ctx","status","req","getRequest","raw","login","logger","warn","ip","Logger","name"],"mappings":";;;;+BAIaA;;;eAAAA;;;wBAJwC;0BACf;;;;;;;AAG/B,IAAA,AAAMA,uBAAN,MAAMA,6BAA6BC,IAAAA,mBAAS,EAAC;IAGlDC,cAA2BC,GAAQ,EAAEC,IAAS,EAAEC,IAAW,EAAEC,GAAqB,EAAEC,MAAY,EAAS;QACvG,MAAMC,MAAM,IAAI,CAACC,UAAU,CAACH;QAC5BE,IAAIE,GAAG,CAACN,IAAI,GAAGA,MAAMO,SAAS;QAC9B,IAAIN,MAAM;YACR,IAAI,CAACO,MAAM,CAACC,IAAI,CAAC,CAAC,CAAC,EAAEL,IAAIE,GAAG,CAACN,IAAI,CAAC,GAAG,EAAEI,IAAIM,EAAE,CAAC,EAAE,EAAET,MAAM;QAC1D;QACA,OAAO,KAAK,CAACH,cAAcC,KAAKC,MAAMC,MAAMC,KAAKC;IACnD;;QAVK,qBACYK,SAAS,IAAIG,cAAM,CAACf,qBAAqBgB,IAAI;;AAUhE"}
@@ -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/files/modules/collabora-online/collabora-online.guard.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 { createMock, DeepMocked } from '@golevelup/ts-jest'\nimport { ExecutionContext } from '@nestjs/common'\nimport { JwtModule, JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { PinoLogger } from 'nestjs-pino'\nimport { JwtPayload } from '../../../../authentication/interfaces/jwt-payload.interface'\nimport { configuration } from '../../../../configuration/config.environment'\nimport { COLLABORA_TOKEN_QUERY_PARAM_NAME } from './collabora-online.constants'\nimport { CollaboraOnlineGuard } from './collabora-online.guard'\nimport { API_COLLABORA_ONLINE_FILES } from './collabora-online.routes'\nimport { CollaboraOnlineStrategy } from './collabora-online.strategy'\n\ndescribe(CollaboraOnlineGuard.name, () => {\n let jwtService: JwtService\n let filesCollaboraGuard: CollaboraOnlineGuard\n let context: DeepMocked<ExecutionContext>\n let accessToken: string\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n imports: [JwtModule.register({ global: true })],\n providers: [\n CollaboraOnlineGuard,\n CollaboraOnlineStrategy,\n {\n provide: PinoLogger,\n useValue: {\n assign: () => undefined\n }\n }\n ]\n }).compile()\n\n jwtService = module.get<JwtService>(JwtService)\n filesCollaboraGuard = module.get<CollaboraOnlineGuard>(CollaboraOnlineGuard)\n context = createMock<ExecutionContext>()\n accessToken = await jwtService.signAsync({ identity: { id: 1, login: 'foo' } } as JwtPayload, {\n secret: configuration.auth.token.access.secret,\n expiresIn: 30\n })\n })\n\n it('should be defined', () => {\n expect(jwtService).toBeDefined()\n expect(filesCollaboraGuard).toBeDefined()\n expect(accessToken).toBeDefined()\n })\n\n it('should not pass without a valid token', async () => {\n context.switchToHttp().getRequest.mockReturnValue({\n url: `${API_COLLABORA_ONLINE_FILES}`,\n raw: { user: '' }\n })\n await expect(filesCollaboraGuard.canActivate(context)).rejects.toThrow('Unauthorized')\n })\n\n it('should pass with a (un)valid token', async () => {\n context.switchToHttp().getRequest.mockReturnValue({\n url: `${API_COLLABORA_ONLINE_FILES}?${COLLABORA_TOKEN_QUERY_PARAM_NAME}=${accessToken}`,\n raw: { user: '' }\n })\n expect(await filesCollaboraGuard.canActivate(context)).toBe(true)\n context.switchToHttp().getRequest.mockReturnValue({\n url: `${API_COLLABORA_ONLINE_FILES}?${COLLABORA_TOKEN_QUERY_PARAM_NAME}=unvalidToken`,\n raw: { user: '' }\n })\n await expect(filesCollaboraGuard.canActivate(context)).rejects.toThrow('Unauthorized')\n })\n})\n"],"names":["describe","CollaboraOnlineGuard","name","jwtService","filesCollaboraGuard","context","accessToken","beforeAll","module","Test","createTestingModule","imports","JwtModule","register","global","providers","CollaboraOnlineStrategy","provide","PinoLogger","useValue","assign","undefined","compile","get","JwtService","createMock","signAsync","identity","id","login","secret","configuration","auth","token","access","expiresIn","it","expect","toBeDefined","switchToHttp","getRequest","mockReturnValue","url","API_COLLABORA_ONLINE_FILES","raw","user","canActivate","rejects","toThrow","COLLABORA_TOKEN_QUERY_PARAM_NAME","toBe"],"mappings":"AAAA;;;;CAIC;;;;wBAEsC;qBAED;yBACF;4BACT;mCAEG;0CACmB;sCACZ;uCACM;yCACH;AAExCA,SAASC,0CAAoB,CAACC,IAAI,EAAE;IAClC,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,SAAS;gBAACC,cAAS,CAACC,QAAQ,CAAC;oBAAEC,QAAQ;gBAAK;aAAG;YAC/CC,WAAW;gBACTd,0CAAoB;gBACpBe,gDAAuB;gBACvB;oBACEC,SAASC,sBAAU;oBACnBC,UAAU;wBACRC,QAAQ,IAAMC;oBAChB;gBACF;aACD;QACH,GAAGC,OAAO;QAEVnB,aAAaK,OAAOe,GAAG,CAAaC,eAAU;QAC9CpB,sBAAsBI,OAAOe,GAAG,CAAuBtB,0CAAoB;QAC3EI,UAAUoB,IAAAA,kBAAU;QACpBnB,cAAc,MAAMH,WAAWuB,SAAS,CAAC;YAAEC,UAAU;gBAAEC,IAAI;gBAAGC,OAAO;YAAM;QAAE,GAAiB;YAC5FC,QAAQC,gCAAa,CAACC,IAAI,CAACC,KAAK,CAACC,MAAM,CAACJ,MAAM;YAC9CK,WAAW;QACb;IACF;IAEAC,GAAG,qBAAqB;QACtBC,OAAOlC,YAAYmC,WAAW;QAC9BD,OAAOjC,qBAAqBkC,WAAW;QACvCD,OAAO/B,aAAagC,WAAW;IACjC;IAEAF,GAAG,yCAAyC;QAC1C/B,QAAQkC,YAAY,GAAGC,UAAU,CAACC,eAAe,CAAC;YAChDC,KAAK,GAAGC,iDAA0B,EAAE;YACpCC,KAAK;gBAAEC,MAAM;YAAG;QAClB;QACA,MAAMR,OAAOjC,oBAAoB0C,WAAW,CAACzC,UAAU0C,OAAO,CAACC,OAAO,CAAC;IACzE;IAEAZ,GAAG,sCAAsC;QACvC/B,QAAQkC,YAAY,GAAGC,UAAU,CAACC,eAAe,CAAC;YAChDC,KAAK,GAAGC,iDAA0B,CAAC,CAAC,EAAEM,0DAAgC,CAAC,CAAC,EAAE3C,aAAa;YACvFsC,KAAK;gBAAEC,MAAM;YAAG;QAClB;QACAR,OAAO,MAAMjC,oBAAoB0C,WAAW,CAACzC,UAAU6C,IAAI,CAAC;QAC5D7C,QAAQkC,YAAY,GAAGC,UAAU,CAACC,eAAe,CAAC;YAChDC,KAAK,GAAGC,iDAA0B,CAAC,CAAC,EAAEM,0DAAgC,CAAC,aAAa,CAAC;YACrFL,KAAK;gBAAEC,MAAM;YAAG;QAClB;QACA,MAAMR,OAAOjC,oBAAoB0C,WAAW,CAACzC,UAAU0C,OAAO,CAACC,OAAO,CAAC;IACzE;AACF"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.guard.spec.ts"],"sourcesContent":["import { createMock, DeepMocked } from '@golevelup/ts-jest'\nimport { ExecutionContext } from '@nestjs/common'\nimport { JwtModule, JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { PinoLogger } from 'nestjs-pino'\nimport { JwtPayload } from '../../../../authentication/interfaces/jwt-payload.interface'\nimport { configuration } from '../../../../configuration/config.environment'\nimport { COLLABORA_TOKEN_QUERY_PARAM_NAME } from './collabora-online.constants'\nimport { CollaboraOnlineGuard } from './collabora-online.guard'\nimport { API_COLLABORA_ONLINE_FILES } from './collabora-online.routes'\nimport { CollaboraOnlineStrategy } from './collabora-online.strategy'\n\ndescribe(CollaboraOnlineGuard.name, () => {\n let jwtService: JwtService\n let filesCollaboraGuard: CollaboraOnlineGuard\n let context: DeepMocked<ExecutionContext>\n let accessToken: string\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n imports: [JwtModule.register({ global: true })],\n providers: [\n CollaboraOnlineGuard,\n CollaboraOnlineStrategy,\n {\n provide: PinoLogger,\n useValue: {\n assign: () => undefined\n }\n }\n ]\n }).compile()\n\n jwtService = module.get<JwtService>(JwtService)\n filesCollaboraGuard = module.get<CollaboraOnlineGuard>(CollaboraOnlineGuard)\n context = createMock<ExecutionContext>()\n accessToken = await jwtService.signAsync({ identity: { id: 1, login: 'foo' } } as JwtPayload, {\n secret: configuration.auth.token.access.secret,\n expiresIn: 30\n })\n })\n\n it('should be defined', () => {\n expect(jwtService).toBeDefined()\n expect(filesCollaboraGuard).toBeDefined()\n expect(accessToken).toBeDefined()\n })\n\n it('should not pass without a valid token', async () => {\n context.switchToHttp().getRequest.mockReturnValue({\n url: `${API_COLLABORA_ONLINE_FILES}`,\n raw: { user: '' }\n })\n await expect(filesCollaboraGuard.canActivate(context)).rejects.toThrow('Unauthorized')\n })\n\n it('should pass with a (un)valid token', async () => {\n context.switchToHttp().getRequest.mockReturnValue({\n url: `${API_COLLABORA_ONLINE_FILES}?${COLLABORA_TOKEN_QUERY_PARAM_NAME}=${accessToken}`,\n raw: { user: '' }\n })\n expect(await filesCollaboraGuard.canActivate(context)).toBe(true)\n context.switchToHttp().getRequest.mockReturnValue({\n url: `${API_COLLABORA_ONLINE_FILES}?${COLLABORA_TOKEN_QUERY_PARAM_NAME}=unvalidToken`,\n raw: { user: '' }\n })\n await expect(filesCollaboraGuard.canActivate(context)).rejects.toThrow('Unauthorized')\n })\n})\n"],"names":["describe","CollaboraOnlineGuard","name","jwtService","filesCollaboraGuard","context","accessToken","beforeAll","module","Test","createTestingModule","imports","JwtModule","register","global","providers","CollaboraOnlineStrategy","provide","PinoLogger","useValue","assign","undefined","compile","get","JwtService","createMock","signAsync","identity","id","login","secret","configuration","auth","token","access","expiresIn","it","expect","toBeDefined","switchToHttp","getRequest","mockReturnValue","url","API_COLLABORA_ONLINE_FILES","raw","user","canActivate","rejects","toThrow","COLLABORA_TOKEN_QUERY_PARAM_NAME","toBe"],"mappings":";;;;wBAAuC;qBAED;yBACF;4BACT;mCAEG;0CACmB;sCACZ;uCACM;yCACH;AAExCA,SAASC,0CAAoB,CAACC,IAAI,EAAE;IAClC,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,SAAS;gBAACC,cAAS,CAACC,QAAQ,CAAC;oBAAEC,QAAQ;gBAAK;aAAG;YAC/CC,WAAW;gBACTd,0CAAoB;gBACpBe,gDAAuB;gBACvB;oBACEC,SAASC,sBAAU;oBACnBC,UAAU;wBACRC,QAAQ,IAAMC;oBAChB;gBACF;aACD;QACH,GAAGC,OAAO;QAEVnB,aAAaK,OAAOe,GAAG,CAAaC,eAAU;QAC9CpB,sBAAsBI,OAAOe,GAAG,CAAuBtB,0CAAoB;QAC3EI,UAAUoB,IAAAA,kBAAU;QACpBnB,cAAc,MAAMH,WAAWuB,SAAS,CAAC;YAAEC,UAAU;gBAAEC,IAAI;gBAAGC,OAAO;YAAM;QAAE,GAAiB;YAC5FC,QAAQC,gCAAa,CAACC,IAAI,CAACC,KAAK,CAACC,MAAM,CAACJ,MAAM;YAC9CK,WAAW;QACb;IACF;IAEAC,GAAG,qBAAqB;QACtBC,OAAOlC,YAAYmC,WAAW;QAC9BD,OAAOjC,qBAAqBkC,WAAW;QACvCD,OAAO/B,aAAagC,WAAW;IACjC;IAEAF,GAAG,yCAAyC;QAC1C/B,QAAQkC,YAAY,GAAGC,UAAU,CAACC,eAAe,CAAC;YAChDC,KAAK,GAAGC,iDAA0B,EAAE;YACpCC,KAAK;gBAAEC,MAAM;YAAG;QAClB;QACA,MAAMR,OAAOjC,oBAAoB0C,WAAW,CAACzC,UAAU0C,OAAO,CAACC,OAAO,CAAC;IACzE;IAEAZ,GAAG,sCAAsC;QACvC/B,QAAQkC,YAAY,GAAGC,UAAU,CAACC,eAAe,CAAC;YAChDC,KAAK,GAAGC,iDAA0B,CAAC,CAAC,EAAEM,0DAAgC,CAAC,CAAC,EAAE3C,aAAa;YACvFsC,KAAK;gBAAEC,MAAM;YAAG;QAClB;QACAR,OAAO,MAAMjC,oBAAoB0C,WAAW,CAACzC,UAAU6C,IAAI,CAAC;QAC5D7C,QAAQkC,YAAY,GAAGC,UAAU,CAACC,eAAe,CAAC;YAChDC,KAAK,GAAGC,iDAA0B,CAAC,CAAC,EAAEM,0DAAgC,CAAC,aAAa,CAAC;YACrFL,KAAK;gBAAEC,MAAM;YAAG;QAClB;QACA,MAAMR,OAAOjC,oBAAoB0C,WAAW,CAACzC,UAAU0C,OAAO,CAACC,OAAO,CAAC;IACzE;AACF"}
@@ -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/files/modules/collabora-online/collabora-online.interface.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 type { JwtIdentityPayload } from '../../../../authentication/interfaces/jwt-payload.interface'\nimport type { FastifySpaceRequest } from '../../../spaces/interfaces/space-request.interface'\n\nexport interface JwtCollaboraOnlinePayload extends JwtIdentityPayload {\n spaceUrl: string\n dbFileHash: string\n}\n\nexport interface FastifyCollaboraOnlineSpaceRequest extends FastifySpaceRequest {\n user: FastifySpaceRequest['user'] & { spaceUrl?: string; dbFileHash?: string }\n params: FastifySpaceRequest['params'] & { dbFileHash?: string }\n}\n\nexport interface CollaboraOnlineCheckFileInfo {\n BaseFileName: string\n OwnerId: string\n UserId: string\n UserFriendlyName: string\n Version: string\n Size: number\n LastModifiedTime: string\n ReadOnly: false\n UserExtraInfo: { avatar: string }\n UserCanNotWriteRelative: true\n UserCanWrite: boolean\n UserCanRename: false\n SupportsRename: false\n SupportsUpdate: true\n SupportsExport: boolean\n SupportsCoauth: true\n SupportsLocks: true\n SupportsGetLock: true\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.interface.ts"],"names":[],"mappings":""}
@@ -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/files/modules/collabora-online/collabora-online.module.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 { Module } from '@nestjs/common'\nimport { CollaboraOnlineManager } from './collabora-online-manager.service'\nimport { CollaboraOnlineController } from './collabora-online.controller'\nimport { CollaboraOnlineGuard } from './collabora-online.guard'\nimport { CollaboraOnlineStrategy } from './collabora-online.strategy'\n\n@Module({\n controllers: [CollaboraOnlineController],\n providers: [CollaboraOnlineManager, CollaboraOnlineGuard, CollaboraOnlineStrategy]\n})\nexport class CollaboraOnlineModule {}\n"],"names":["CollaboraOnlineModule","controllers","CollaboraOnlineController","providers","CollaboraOnlineManager","CollaboraOnlineGuard","CollaboraOnlineStrategy"],"mappings":"AAAA;;;;CAIC;;;;+BAYYA;;;eAAAA;;;wBAVU;+CACgB;2CACG;sCACL;yCACG;;;;;;;AAMjC,IAAA,AAAMA,wBAAN,MAAMA;AAAuB;;;QAHlCC,aAAa;YAACC,oDAAyB;SAAC;QACxCC,WAAW;YAACC,qDAAsB;YAAEC,0CAAoB;YAAEC,gDAAuB;SAAC"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.module.ts"],"sourcesContent":["import { Module } from '@nestjs/common'\nimport { CollaboraOnlineManager } from './collabora-online-manager.service'\nimport { CollaboraOnlineController } from './collabora-online.controller'\nimport { CollaboraOnlineGuard } from './collabora-online.guard'\nimport { CollaboraOnlineStrategy } from './collabora-online.strategy'\n\n@Module({\n controllers: [CollaboraOnlineController],\n providers: [CollaboraOnlineManager, CollaboraOnlineGuard, CollaboraOnlineStrategy]\n})\nexport class CollaboraOnlineModule {}\n"],"names":["CollaboraOnlineModule","controllers","CollaboraOnlineController","providers","CollaboraOnlineManager","CollaboraOnlineGuard","CollaboraOnlineStrategy"],"mappings":";;;;+BAUaA;;;eAAAA;;;wBAVU;+CACgB;2CACG;sCACL;yCACG;;;;;;;AAMjC,IAAA,AAAMA,wBAAN,MAAMA;AAAuB;;;QAHlCC,aAAa;YAACC,oDAAyB;SAAC;QACxCC,WAAW;YAACC,qDAAsB;YAAEC,0CAAoB;YAAEC,gDAAuB;SAAC"}
@@ -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/files/modules/collabora-online/collabora-online.routes.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\nexport const COLLABORA_ONLINE_ROUTE = {\n BASE: '/wopi',\n FILES: 'files',\n CONTENTS: 'contents',\n SETTINGS: 'settings'\n} as const\n\nexport const API_COLLABORA_ONLINE_SETTINGS = `${COLLABORA_ONLINE_ROUTE.BASE}/${COLLABORA_ONLINE_ROUTE.SETTINGS}`\nexport const API_COLLABORA_ONLINE_FILES = `${COLLABORA_ONLINE_ROUTE.BASE}/${COLLABORA_ONLINE_ROUTE.FILES}`\n"],"names":["API_COLLABORA_ONLINE_FILES","API_COLLABORA_ONLINE_SETTINGS","COLLABORA_ONLINE_ROUTE","BASE","FILES","CONTENTS","SETTINGS"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAUYA;eAAAA;;QADAC;eAAAA;;QAPAC;eAAAA;;;AAAN,MAAMA,yBAAyB;IACpCC,MAAM;IACNC,OAAO;IACPC,UAAU;IACVC,UAAU;AACZ;AAEO,MAAML,gCAAgC,GAAGC,uBAAuBC,IAAI,CAAC,CAAC,EAAED,uBAAuBI,QAAQ,EAAE;AACzG,MAAMN,6BAA6B,GAAGE,uBAAuBC,IAAI,CAAC,CAAC,EAAED,uBAAuBE,KAAK,EAAE"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.routes.ts"],"sourcesContent":["export const COLLABORA_ONLINE_ROUTE = {\n BASE: '/wopi',\n FILES: 'files',\n CONTENTS: 'contents',\n SETTINGS: 'settings'\n} as const\n\nexport const API_COLLABORA_ONLINE_SETTINGS = `${COLLABORA_ONLINE_ROUTE.BASE}/${COLLABORA_ONLINE_ROUTE.SETTINGS}`\nexport const API_COLLABORA_ONLINE_FILES = `${COLLABORA_ONLINE_ROUTE.BASE}/${COLLABORA_ONLINE_ROUTE.FILES}`\n"],"names":["API_COLLABORA_ONLINE_FILES","API_COLLABORA_ONLINE_SETTINGS","COLLABORA_ONLINE_ROUTE","BASE","FILES","CONTENTS","SETTINGS"],"mappings":";;;;;;;;;;;QAQaA;eAAAA;;QADAC;eAAAA;;QAPAC;eAAAA;;;AAAN,MAAMA,yBAAyB;IACpCC,MAAM;IACNC,OAAO;IACPC,UAAU;IACVC,UAAU;AACZ;AAEO,MAAML,gCAAgC,GAAGC,uBAAuBC,IAAI,CAAC,CAAC,EAAED,uBAAuBI,QAAQ,EAAE;AACzG,MAAMN,6BAA6B,GAAGE,uBAAuBC,IAAI,CAAC,CAAC,EAAED,uBAAuBE,KAAK,EAAE"}
@@ -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/files/modules/collabora-online/collabora-online.strategy.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 { Injectable } from '@nestjs/common'\nimport { AbstractStrategy, PassportStrategy } from '@nestjs/passport'\nimport { PinoLogger } from 'nestjs-pino'\nimport { ExtractJwt, Strategy } from 'passport-jwt'\nimport { AuthTokenAccessStrategy } from '../../../../authentication/guards/auth-token-access.strategy'\nimport { JwtPayload } from '../../../../authentication/interfaces/jwt-payload.interface'\nimport { configuration } from '../../../../configuration/config.environment'\nimport { UserModel } from '../../../users/models/user.model'\nimport { COLLABORA_TOKEN_QUERY_PARAM_NAME } from './collabora-online.constants'\n\n@Injectable()\nexport class CollaboraOnlineStrategy extends PassportStrategy(Strategy, 'filesCollaboraOnlineToken') implements AbstractStrategy {\n constructor(private readonly logger: PinoLogger) {\n super({\n jwtFromRequest: ExtractJwt.fromExtractors([\n AuthTokenAccessStrategy.extractJWTFromCookie,\n ExtractJwt.fromUrlQueryParameter(COLLABORA_TOKEN_QUERY_PARAM_NAME)\n ]),\n secretOrKey: configuration.auth.token.access.secret,\n ignoreExpiration: false,\n passReqToCallback: false\n })\n }\n\n validate(jwtPayload: JwtPayload): UserModel {\n this.logger.assign({ user: jwtPayload.identity.login })\n return new UserModel(jwtPayload.identity)\n }\n}\n"],"names":["CollaboraOnlineStrategy","PassportStrategy","Strategy","validate","jwtPayload","logger","assign","user","identity","login","UserModel","jwtFromRequest","ExtractJwt","fromExtractors","AuthTokenAccessStrategy","extractJWTFromCookie","fromUrlQueryParameter","COLLABORA_TOKEN_QUERY_PARAM_NAME","secretOrKey","configuration","auth","token","access","secret","ignoreExpiration","passReqToCallback"],"mappings":"AAAA;;;;CAIC;;;;+BAaYA;;;eAAAA;;;wBAXc;0BACwB;4BACxB;6BACU;yCACG;mCAEV;2BACJ;0CACuB;;;;;;;;;;AAG1C,IAAA,AAAMA,0BAAN,MAAMA,gCAAgCC,IAAAA,0BAAgB,EAACC,qBAAQ,EAAE;IAatEC,SAASC,UAAsB,EAAa;QAC1C,IAAI,CAACC,MAAM,CAACC,MAAM,CAAC;YAAEC,MAAMH,WAAWI,QAAQ,CAACC,KAAK;QAAC;QACrD,OAAO,IAAIC,oBAAS,CAACN,WAAWI,QAAQ;IAC1C;IAfA,YAAY,AAAiBH,MAAkB,CAAE;QAC/C,KAAK,CAAC;YACJM,gBAAgBC,uBAAU,CAACC,cAAc,CAAC;gBACxCC,gDAAuB,CAACC,oBAAoB;gBAC5CH,uBAAU,CAACI,qBAAqB,CAACC,0DAAgC;aAClE;YACDC,aAAaC,gCAAa,CAACC,IAAI,CAACC,KAAK,CAACC,MAAM,CAACC,MAAM;YACnDC,kBAAkB;YAClBC,mBAAmB;QACrB,SAT2BpB,SAAAA;IAU7B;AAMF"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.strategy.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common'\nimport { AbstractStrategy, PassportStrategy } from '@nestjs/passport'\nimport { PinoLogger } from 'nestjs-pino'\nimport { ExtractJwt, Strategy } from 'passport-jwt'\nimport { AuthTokenAccessStrategy } from '../../../../authentication/guards/auth-token-access.strategy'\nimport { JwtPayload } from '../../../../authentication/interfaces/jwt-payload.interface'\nimport { configuration } from '../../../../configuration/config.environment'\nimport { UserModel } from '../../../users/models/user.model'\nimport { COLLABORA_TOKEN_QUERY_PARAM_NAME } from './collabora-online.constants'\n\n@Injectable()\nexport class CollaboraOnlineStrategy extends PassportStrategy(Strategy, 'filesCollaboraOnlineToken') implements AbstractStrategy {\n constructor(private readonly logger: PinoLogger) {\n super({\n jwtFromRequest: ExtractJwt.fromExtractors([\n AuthTokenAccessStrategy.extractJWTFromCookie,\n ExtractJwt.fromUrlQueryParameter(COLLABORA_TOKEN_QUERY_PARAM_NAME)\n ]),\n secretOrKey: configuration.auth.token.access.secret,\n ignoreExpiration: false,\n passReqToCallback: false\n })\n }\n\n validate(jwtPayload: JwtPayload): UserModel {\n this.logger.assign({ user: jwtPayload.identity.login })\n return new UserModel(jwtPayload.identity)\n }\n}\n"],"names":["CollaboraOnlineStrategy","PassportStrategy","Strategy","validate","jwtPayload","logger","assign","user","identity","login","UserModel","jwtFromRequest","ExtractJwt","fromExtractors","AuthTokenAccessStrategy","extractJWTFromCookie","fromUrlQueryParameter","COLLABORA_TOKEN_QUERY_PARAM_NAME","secretOrKey","configuration","auth","token","access","secret","ignoreExpiration","passReqToCallback"],"mappings":";;;;+BAWaA;;;eAAAA;;;wBAXc;0BACwB;4BACxB;6BACU;yCACG;mCAEV;2BACJ;0CACuB;;;;;;;;;;AAG1C,IAAA,AAAMA,0BAAN,MAAMA,gCAAgCC,IAAAA,0BAAgB,EAACC,qBAAQ,EAAE;IAatEC,SAASC,UAAsB,EAAa;QAC1C,IAAI,CAACC,MAAM,CAACC,MAAM,CAAC;YAAEC,MAAMH,WAAWI,QAAQ,CAACC,KAAK;QAAC;QACrD,OAAO,IAAIC,oBAAS,CAACN,WAAWI,QAAQ;IAC1C;IAfA,YAAY,AAAiBH,MAAkB,CAAE;QAC/C,KAAK,CAAC;YACJM,gBAAgBC,uBAAU,CAACC,cAAc,CAAC;gBACxCC,gDAAuB,CAACC,oBAAoB;gBAC5CH,uBAAU,CAACI,qBAAqB,CAACC,0DAAgC;aAClE;YACDC,aAAaC,gCAAa,CAACC,IAAI,CAACC,KAAK,CAACC,MAAM,CAACC,MAAM;YACnDC,kBAAkB;YAClBC,mBAAmB;QACrB,SAT2BpB,SAAAA;IAU7B;AAMF"}
@@ -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/files/modules/collabora-online/collabora-online.utils.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 { PATH_TO_SPACE_SEGMENTS } from '../../../spaces/utils/routes'\nimport type { FastifyCollaboraOnlineSpaceRequest } from './collabora-online.interface'\n\nexport function COLLABORA_ONLINE_TO_SPACE_SEGMENTS(req: FastifyCollaboraOnlineSpaceRequest): string[] {\n if (req.user.spaceUrl) {\n // `spaceUrl` and `dbFileHash` are set when the authentication token is provided via a query parameter by the Collabora Server\n if (req.user.dbFileHash === req.params.dbFileHash) {\n return req.user.spaceUrl.split('/')\n }\n throw new Error('Collabora Online - DB File Hash mismatch')\n } else {\n return PATH_TO_SPACE_SEGMENTS(req.params['*'])\n }\n}\n"],"names":["COLLABORA_ONLINE_TO_SPACE_SEGMENTS","req","user","spaceUrl","dbFileHash","params","split","Error","PATH_TO_SPACE_SEGMENTS"],"mappings":"AAAA;;;;CAIC;;;;+BAKeA;;;eAAAA;;;wBAHuB;AAGhC,SAASA,mCAAmCC,GAAuC;IACxF,IAAIA,IAAIC,IAAI,CAACC,QAAQ,EAAE;QACrB,8HAA8H;QAC9H,IAAIF,IAAIC,IAAI,CAACE,UAAU,KAAKH,IAAII,MAAM,CAACD,UAAU,EAAE;YACjD,OAAOH,IAAIC,IAAI,CAACC,QAAQ,CAACG,KAAK,CAAC;QACjC;QACA,MAAM,IAAIC,MAAM;IAClB,OAAO;QACL,OAAOC,IAAAA,8BAAsB,EAACP,IAAII,MAAM,CAAC,IAAI;IAC/C;AACF"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online.utils.ts"],"sourcesContent":["import { PATH_TO_SPACE_SEGMENTS } from '../../../spaces/utils/routes'\nimport type { FastifyCollaboraOnlineSpaceRequest } from './collabora-online.interface'\n\nexport function COLLABORA_ONLINE_TO_SPACE_SEGMENTS(req: FastifyCollaboraOnlineSpaceRequest): string[] {\n if (req.user.spaceUrl) {\n // `spaceUrl` and `dbFileHash` are set when the authentication token is provided via a query parameter by the Collabora Server\n if (req.user.dbFileHash === req.params.dbFileHash) {\n return req.user.spaceUrl.split('/')\n }\n throw new Error('Collabora Online - DB File Hash mismatch')\n } else {\n return PATH_TO_SPACE_SEGMENTS(req.params['*'])\n }\n}\n"],"names":["COLLABORA_ONLINE_TO_SPACE_SEGMENTS","req","user","spaceUrl","dbFileHash","params","split","Error","PATH_TO_SPACE_SEGMENTS"],"mappings":";;;;+BAGgBA;;;eAAAA;;;wBAHuB;AAGhC,SAASA,mCAAmCC,GAAuC;IACxF,IAAIA,IAAIC,IAAI,CAACC,QAAQ,EAAE;QACrB,8HAA8H;QAC9H,IAAIF,IAAIC,IAAI,CAACE,UAAU,KAAKH,IAAII,MAAM,CAACD,UAAU,EAAE;YACjD,OAAOH,IAAIC,IAAI,CAACC,QAAQ,CAACG,KAAK,CAAC;QACjC;QACA,MAAM,IAAIC,MAAM;IAClB,OAAO;QACL,OAAOC,IAAAA,8BAAsB,EAACP,IAAII,MAAM,CAAC,IAAI;IAC/C;AACF"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+
6
+ //# sourceMappingURL=file-editor-providers.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/modules/file-editor-providers.interface.ts"],"names":[],"mappings":""}
@@ -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/files/modules/only-office/only-office-environment.decorator.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 { applyDecorators, SetMetadata, UseGuards } from '@nestjs/common'\nimport { SpaceGuard } from '../../../spaces/guards/space.guard'\nimport { ONLY_OFFICE_CONTEXT } from './only-office.constants'\nimport { OnlyOfficeGuard } from './only-office.guard'\n\nexport const OnlyOfficeContext = () => SetMetadata(ONLY_OFFICE_CONTEXT, true)\nexport const OnlyOfficeEnvironment = () => {\n return applyDecorators(OnlyOfficeContext(), UseGuards(OnlyOfficeGuard, SpaceGuard))\n}\n"],"names":["OnlyOfficeContext","OnlyOfficeEnvironment","SetMetadata","ONLY_OFFICE_CONTEXT","applyDecorators","UseGuards","OnlyOfficeGuard","SpaceGuard"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAOYA;eAAAA;;QACAC;eAAAA;;;wBAN2C;4BAC7B;qCACS;iCACJ;AAEzB,MAAMD,oBAAoB,IAAME,IAAAA,mBAAW,EAACC,wCAAmB,EAAE;AACjE,MAAMF,wBAAwB;IACnC,OAAOG,IAAAA,uBAAe,EAACJ,qBAAqBK,IAAAA,iBAAS,EAACC,gCAAe,EAAEC,sBAAU;AACnF"}
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/only-office/only-office-environment.decorator.ts"],"sourcesContent":["import { applyDecorators, SetMetadata, UseGuards } from '@nestjs/common'\nimport { SpaceGuard } from '../../../spaces/guards/space.guard'\nimport { ONLY_OFFICE_CONTEXT } from './only-office.constants'\nimport { OnlyOfficeGuard } from './only-office.guard'\n\nexport const OnlyOfficeContext = () => SetMetadata(ONLY_OFFICE_CONTEXT, true)\nexport const OnlyOfficeEnvironment = () => {\n return applyDecorators(OnlyOfficeContext(), UseGuards(OnlyOfficeGuard, SpaceGuard))\n}\n"],"names":["OnlyOfficeContext","OnlyOfficeEnvironment","SetMetadata","ONLY_OFFICE_CONTEXT","applyDecorators","UseGuards","OnlyOfficeGuard","SpaceGuard"],"mappings":";;;;;;;;;;;QAKaA;eAAAA;;QACAC;eAAAA;;;wBAN2C;4BAC7B;qCACS;iCACJ;AAEzB,MAAMD,oBAAoB,IAAME,IAAAA,mBAAW,EAACC,wCAAmB,EAAE;AACjE,MAAMF,wBAAwB;IACnC,OAAOG,IAAAA,uBAAe,EAACJ,qBAAqBK,IAAAA,iBAAS,EAACC,gCAAe,EAAEC,sBAAU;AACnF"}