@sync-in/server 1.9.6 → 1.10.1

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 (367) hide show
  1. package/CHANGELOG.md +38 -4
  2. package/README.md +2 -2
  3. package/environment/environment.dist.yaml +15 -5
  4. package/package.json +14 -16
  5. package/server/app.bootstrap.js +4 -23
  6. package/server/app.bootstrap.js.map +1 -1
  7. package/server/app.constants.js +3 -2
  8. package/server/app.constants.js.map +1 -1
  9. package/server/applications/comments/services/comments-queries.service.js +5 -9
  10. package/server/applications/comments/services/comments-queries.service.js.map +1 -1
  11. package/server/applications/files/constants/cache.js +2 -5
  12. package/server/applications/files/constants/cache.js.map +1 -1
  13. package/server/applications/files/constants/files.js +4 -0
  14. package/server/applications/files/constants/files.js.map +1 -1
  15. package/server/applications/files/constants/operations.js +4 -0
  16. package/server/applications/files/constants/operations.js.map +1 -1
  17. package/server/applications/files/constants/routes.js +1 -26
  18. package/server/applications/files/constants/routes.js.map +1 -1
  19. package/server/applications/files/files.config.js +15 -39
  20. package/server/applications/files/files.config.js.map +1 -1
  21. package/server/applications/files/files.controller.js +4 -4
  22. package/server/applications/files/files.controller.js.map +1 -1
  23. package/server/applications/files/files.module.js +12 -9
  24. package/server/applications/files/files.module.js.map +1 -1
  25. package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
  26. package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
  27. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +32 -0
  28. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -0
  29. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +280 -0
  30. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -0
  31. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +552 -0
  32. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -0
  33. package/server/applications/files/modules/collabora-online/collabora-online.config.js +40 -0
  34. package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -0
  35. package/server/applications/files/modules/collabora-online/collabora-online.constants.js +110 -0
  36. package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -0
  37. package/server/applications/files/modules/collabora-online/collabora-online.controller.js +128 -0
  38. package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -0
  39. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +47 -0
  40. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -0
  41. package/server/applications/files/{interfaces/only-office-config.interface.js → modules/collabora-online/collabora-online.dtos.js} +1 -1
  42. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -0
  43. package/server/applications/files/{guards/files-only-office.guard.js → modules/collabora-online/collabora-online.guard.js} +7 -21
  44. package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -0
  45. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +86 -0
  46. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -0
  47. package/server/applications/files/modules/collabora-online/collabora-online.interface.js +10 -0
  48. package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -0
  49. package/server/applications/files/modules/collabora-online/collabora-online.module.js +41 -0
  50. package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -0
  51. package/server/applications/files/modules/collabora-online/collabora-online.routes.js +35 -0
  52. package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -0
  53. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +59 -0
  54. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -0
  55. package/server/applications/files/modules/collabora-online/collabora-online.utils.js +28 -0
  56. package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -0
  57. package/server/applications/files/{decorators → modules/only-office}/only-office-environment.decorator.js +5 -5
  58. package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -0
  59. package/server/applications/files/{services/files-only-office-manager.service.js → modules/only-office/only-office-manager.service.js} +101 -97
  60. package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -0
  61. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +477 -0
  62. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -0
  63. package/server/applications/files/modules/only-office/only-office.config.js +51 -0
  64. package/server/applications/files/modules/only-office/only-office.config.js.map +1 -0
  65. package/server/applications/files/modules/only-office/only-office.constants.js +417 -0
  66. package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -0
  67. package/server/applications/files/{files-only-office.controller.js → modules/only-office/only-office.controller.js} +35 -52
  68. package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -0
  69. package/server/applications/files/{files-only-office.controller.spec.js → modules/only-office/only-office.controller.spec.js} +24 -21
  70. package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -0
  71. package/server/applications/files/modules/only-office/only-office.dtos.js +10 -0
  72. package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -0
  73. package/server/applications/files/modules/only-office/only-office.guard.js +40 -0
  74. package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -0
  75. package/server/applications/files/{guards/files-only-office.guard.spec.js → modules/only-office/only-office.guard.spec.js} +15 -21
  76. package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -0
  77. package/server/applications/files/modules/only-office/only-office.interface.js +10 -0
  78. package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -0
  79. package/server/applications/files/modules/only-office/only-office.module.js +41 -0
  80. package/server/applications/files/modules/only-office/only-office.module.js.map +1 -0
  81. package/server/applications/files/modules/only-office/only-office.routes.js +45 -0
  82. package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -0
  83. package/server/applications/files/{guards/files-only-office.strategy.js → modules/only-office/only-office.strategy.js} +11 -11
  84. package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -0
  85. package/server/applications/files/services/files-lock-manager.service.js +25 -33
  86. package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
  87. package/server/applications/files/services/files-manager.service.js +17 -16
  88. package/server/applications/files/services/files-manager.service.js.map +1 -1
  89. package/server/applications/files/services/files-methods.service.js +2 -2
  90. package/server/applications/files/services/files-methods.service.js.map +1 -1
  91. package/server/applications/files/services/files-methods.service.spec.js +3 -1
  92. package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
  93. package/server/applications/files/services/files-scheduler.service.js +2 -2
  94. package/server/applications/files/services/files-scheduler.service.js.map +1 -1
  95. package/server/applications/files/utils/files.js +10 -2
  96. package/server/applications/files/utils/files.js.map +1 -1
  97. package/server/applications/links/constants/routes.js +5 -0
  98. package/server/applications/links/constants/routes.js.map +1 -1
  99. package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
  100. package/server/applications/links/links.controller.js +25 -5
  101. package/server/applications/links/links.controller.js.map +1 -1
  102. package/server/applications/links/services/links-manager.service.js +43 -21
  103. package/server/applications/links/services/links-manager.service.js.map +1 -1
  104. package/server/applications/links/services/links-manager.service.spec.js +4 -3
  105. package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
  106. package/server/applications/links/services/links-queries.service.js +9 -2
  107. package/server/applications/links/services/links-queries.service.js.map +1 -1
  108. package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
  109. package/server/applications/shares/services/shares-manager.service.js +3 -0
  110. package/server/applications/shares/services/shares-manager.service.js.map +1 -1
  111. package/server/applications/shares/services/shares-manager.service.spec.js +2 -1
  112. package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
  113. package/server/applications/shares/services/shares-queries.service.js +1 -0
  114. package/server/applications/shares/services/shares-queries.service.js.map +1 -1
  115. package/server/applications/spaces/constants/spaces.js +2 -2
  116. package/server/applications/spaces/constants/spaces.js.map +1 -1
  117. package/server/applications/spaces/decorators/space-override-permission.decorator.js +18 -0
  118. package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -0
  119. package/server/applications/spaces/guards/space.guard.js +40 -33
  120. package/server/applications/spaces/guards/space.guard.js.map +1 -1
  121. package/server/applications/spaces/guards/space.guard.spec.js +10 -15
  122. package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
  123. package/server/applications/users/users.e2e-spec.js +0 -1
  124. package/server/applications/users/users.e2e-spec.js.map +1 -1
  125. package/server/applications/webdav/constants/webdav.js +11 -0
  126. package/server/applications/webdav/constants/webdav.js.map +1 -1
  127. package/server/applications/webdav/guards/webdav-protocol.guard.js +9 -8
  128. package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
  129. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +1 -1
  130. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
  131. package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
  132. package/server/applications/webdav/services/webdav-methods.service.js +40 -17
  133. package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
  134. package/server/applications/webdav/services/webdav-methods.service.spec.js +2157 -1289
  135. package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
  136. package/server/applications/webdav/utils/bootstrap.js +45 -0
  137. package/server/applications/webdav/utils/bootstrap.js.map +1 -0
  138. package/server/applications/webdav/utils/webdav.js +8 -4
  139. package/server/applications/webdav/utils/webdav.js.map +1 -1
  140. package/server/applications/webdav/webdav.controller.js +5 -5
  141. package/server/applications/webdav/webdav.controller.js.map +1 -1
  142. package/server/applications/webdav/webdav.e2e-spec.js +131 -2
  143. package/server/applications/webdav/webdav.e2e-spec.js.map +1 -1
  144. package/server/authentication/auth.e2e-spec.js +12 -6
  145. package/server/authentication/auth.e2e-spec.js.map +1 -1
  146. package/server/authentication/guards/auth-basic.guard.spec.js +23 -0
  147. package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
  148. package/server/authentication/guards/auth-basic.strategy.js +3 -3
  149. package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
  150. package/server/authentication/guards/auth-digest.strategy.js +32 -11
  151. package/server/authentication/guards/auth-digest.strategy.js.map +1 -1
  152. package/server/authentication/guards/auth-token-access.guard.js +8 -3
  153. package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
  154. package/server/authentication/guards/implementations/http-basic.strategy.js +76 -0
  155. package/server/authentication/guards/implementations/http-basic.strategy.js.map +1 -0
  156. package/server/authentication/guards/implementations/http-digest.strategy.js +155 -0
  157. package/server/authentication/guards/implementations/http-digest.strategy.js.map +1 -0
  158. package/server/authentication/services/auth-manager.service.js +1 -2
  159. package/server/authentication/services/auth-manager.service.js.map +1 -1
  160. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js +1 -1
  161. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +1 -1
  162. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js +350 -4
  163. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +1 -1
  164. package/server/configuration/config.environment.js +5 -1
  165. package/server/configuration/config.environment.js.map +1 -1
  166. package/server/configuration/config.interfaces.js.map +1 -1
  167. package/static/3rdpartylicenses.txt +507 -507
  168. package/static/assets/pdfjs/build/pdf.mjs +93 -33
  169. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  170. package/static/assets/pdfjs/build/pdf.sandbox.mjs +3 -3
  171. package/static/assets/pdfjs/build/pdf.sandbox.mjs.map +1 -1
  172. package/static/assets/pdfjs/build/pdf.worker.mjs +166 -54
  173. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  174. package/static/assets/pdfjs/version +1 -1
  175. package/static/assets/pdfjs/web/images/checkmark.svg +5 -0
  176. package/static/assets/pdfjs/web/images/pages_closeButton.svg +3 -0
  177. package/static/assets/pdfjs/web/images/pages_selected.svg +7 -0
  178. package/static/assets/pdfjs/web/images/pages_viewArrow.svg +3 -0
  179. package/static/assets/pdfjs/web/images/pages_viewButton.svg +3 -0
  180. package/static/assets/pdfjs/web/locale/be/viewer.ftl +0 -2
  181. package/static/assets/pdfjs/web/locale/bs/viewer.ftl +0 -5
  182. package/static/assets/pdfjs/web/locale/cs/viewer.ftl +4 -6
  183. package/static/assets/pdfjs/web/locale/cy/viewer.ftl +0 -2
  184. package/static/assets/pdfjs/web/locale/da/viewer.ftl +0 -2
  185. package/static/assets/pdfjs/web/locale/de/viewer.ftl +0 -2
  186. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +0 -2
  187. package/static/assets/pdfjs/web/locale/el/viewer.ftl +0 -2
  188. package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +6 -2
  189. package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +0 -2
  190. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +82 -17
  191. package/static/assets/pdfjs/web/locale/eo/viewer.ftl +0 -2
  192. package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +0 -2
  193. package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +0 -2
  194. package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +0 -2
  195. package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +0 -2
  196. package/static/assets/pdfjs/web/locale/eu/viewer.ftl +0 -2
  197. package/static/assets/pdfjs/web/locale/fi/viewer.ftl +0 -2
  198. package/static/assets/pdfjs/web/locale/fr/viewer.ftl +0 -2
  199. package/static/assets/pdfjs/web/locale/fur/viewer.ftl +0 -5
  200. package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +3 -5
  201. package/static/assets/pdfjs/web/locale/gn/viewer.ftl +0 -2
  202. package/static/assets/pdfjs/web/locale/he/viewer.ftl +0 -2
  203. package/static/assets/pdfjs/web/locale/hr/viewer.ftl +66 -0
  204. package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +0 -2
  205. package/static/assets/pdfjs/web/locale/hu/viewer.ftl +0 -2
  206. package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +3 -8
  207. package/static/assets/pdfjs/web/locale/ia/viewer.ftl +0 -2
  208. package/static/assets/pdfjs/web/locale/id/viewer.ftl +0 -5
  209. package/static/assets/pdfjs/web/locale/is/viewer.ftl +0 -5
  210. package/static/assets/pdfjs/web/locale/it/viewer.ftl +0 -2
  211. package/static/assets/pdfjs/web/locale/ja/viewer.ftl +0 -14
  212. package/static/assets/pdfjs/web/locale/ka/viewer.ftl +4 -6
  213. package/static/assets/pdfjs/web/locale/kab/viewer.ftl +0 -5
  214. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +0 -2
  215. package/static/assets/pdfjs/web/locale/ko/viewer.ftl +0 -2
  216. package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +1 -3
  217. package/static/assets/pdfjs/web/locale/nl/viewer.ftl +0 -2
  218. package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +4 -2
  219. package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +0 -2
  220. package/static/assets/pdfjs/web/locale/pl/viewer.ftl +0 -2
  221. package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +0 -2
  222. package/static/assets/pdfjs/web/locale/pt-PT/viewer.ftl +35 -0
  223. package/static/assets/pdfjs/web/locale/rm/viewer.ftl +0 -5
  224. package/static/assets/pdfjs/web/locale/ro/viewer.ftl +4 -6
  225. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -5
  226. package/static/assets/pdfjs/web/locale/sk/viewer.ftl +0 -2
  227. package/static/assets/pdfjs/web/locale/sl/viewer.ftl +0 -2
  228. package/static/assets/pdfjs/web/locale/sq/viewer.ftl +0 -2
  229. package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +0 -2
  230. package/static/assets/pdfjs/web/locale/tg/viewer.ftl +0 -2
  231. package/static/assets/pdfjs/web/locale/th/viewer.ftl +2 -2
  232. package/static/assets/pdfjs/web/locale/tr/viewer.ftl +0 -2
  233. package/static/assets/pdfjs/web/locale/vi/viewer.ftl +0 -2
  234. package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +0 -2
  235. package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +0 -2
  236. package/static/assets/pdfjs/web/viewer.css +1778 -835
  237. package/static/assets/pdfjs/web/viewer.html +167 -86
  238. package/static/assets/pdfjs/web/viewer.mjs +1106 -801
  239. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  240. package/static/chunk-27V66YJV.js +2 -0
  241. package/static/{chunk-2F42MZQ5.js → chunk-2GXOVGTD.js} +1 -1
  242. package/static/{chunk-HLKZCMKV.js → chunk-2RWLNKZH.js} +1 -1
  243. package/static/chunk-2YQ4SX3A.js +13 -0
  244. package/static/{chunk-LFAQLJZK.js → chunk-3MVPXC3U.js} +1 -1
  245. package/static/chunk-3QTROEHV.js +1 -0
  246. package/static/{chunk-JYHTSSKW.js → chunk-3VRUIWQG.js} +1 -1
  247. package/static/{chunk-2CAAJBRO.js → chunk-3ZBAQTHJ.js} +1 -1
  248. package/static/chunk-3ZLBVUCX.js +2 -0
  249. package/static/chunk-46TJLPJY.js +1 -0
  250. package/static/chunk-4NIYCYRS.js +2 -0
  251. package/static/chunk-6OEOADR6.js +1 -0
  252. package/static/{chunk-BJARRIS6.js → chunk-76M3BMK6.js} +11 -11
  253. package/static/{chunk-ANH4VNOS.js → chunk-76REYAEA.js} +1 -1
  254. package/static/{chunk-7HL5Z6PF.js → chunk-7HJFIMNF.js} +1 -1
  255. package/static/{chunk-XIQXRSZ2.js → chunk-7KAYOR3A.js} +1 -1
  256. package/static/chunk-AALPWGPB.js +3 -0
  257. package/static/{chunk-Z2KBIZ5D.js → chunk-ARS47O5X.js} +1 -1
  258. package/static/chunk-BCN4T5DO.js +2 -0
  259. package/static/{chunk-DU4Q4RWJ.js → chunk-CMNMPG6Z.js} +1 -1
  260. package/static/{chunk-UO7ATVQG.js → chunk-CN5YVRFT.js} +1 -1
  261. package/static/{chunk-BX3QZ7IL.js → chunk-CSVPAZHK.js} +1 -1
  262. package/static/chunk-CVXLHSO5.js +1 -0
  263. package/static/{chunk-O233BXWK.js → chunk-D2MLAO5N.js} +1 -1
  264. package/static/{chunk-NHMYAVJK.js → chunk-D5FQ72R4.js} +1 -1
  265. package/static/{chunk-IBC7CFBQ.js → chunk-DVCN3P7Q.js} +1 -1
  266. package/static/{chunk-25PWAXTJ.js → chunk-EKWB5W72.js} +1 -1
  267. package/static/{chunk-ZCOEP4O2.js → chunk-FTFEQDWH.js} +1 -1
  268. package/static/{chunk-EPDWJEPD.js → chunk-FWQJ4ZCD.js} +1 -1
  269. package/static/chunk-G7RZN7HN.js +1 -0
  270. package/static/{chunk-X5UDV4ZB.js → chunk-HZAB6F4Q.js} +1 -1
  271. package/static/{chunk-FEQUP26G.js → chunk-IHS5LSJJ.js} +1 -1
  272. package/static/{chunk-DQAQUSVW.js → chunk-IMFO2MI7.js} +1 -1
  273. package/static/{chunk-ODAQRAPO.js → chunk-J7474P3L.js} +1 -1
  274. package/static/{chunk-DK2LAJEL.js → chunk-JAJ7VXMB.js} +1 -1
  275. package/static/{chunk-AYYJZMBE.js → chunk-JNTNMIUH.js} +1 -1
  276. package/static/chunk-JRXG43AA.js +2 -0
  277. package/static/{chunk-3AR5VNJE.js → chunk-KAUCN24H.js} +1 -1
  278. package/static/{chunk-3WS72A6C.js → chunk-KDUAB76O.js} +1 -1
  279. package/static/chunk-KEZNIIFH.js +1 -0
  280. package/static/chunk-LTJNLOX2.js +1 -0
  281. package/static/chunk-LWSCODLD.js +1 -0
  282. package/static/{chunk-GRV44RYI.js → chunk-LZUHREOF.js} +1 -1
  283. package/static/chunk-NIKNG2FX.js +1 -0
  284. package/static/chunk-NNZWSNAW.js +1 -0
  285. package/static/chunk-NWKBB7J4.js +1 -0
  286. package/static/{chunk-B4TDS6AQ.js → chunk-PDG7DOEF.js} +1 -1
  287. package/static/{chunk-NQCKX2AD.js → chunk-PPJCVBJH.js} +1 -1
  288. package/static/chunk-PVYVY3GD.js +1 -0
  289. package/static/chunk-Q5X5TPAG.js +1 -0
  290. package/static/chunk-QGHNJVJ6.js +1 -0
  291. package/static/{chunk-5HYSNQR4.js → chunk-QJ22N76V.js} +1 -1
  292. package/static/{chunk-TOCCCZP2.js → chunk-QTPIEEZW.js} +1 -1
  293. package/static/{chunk-D6QWQHWE.js → chunk-R4VMWCM5.js} +1 -1
  294. package/static/{chunk-7H5O4BLV.js → chunk-R4VYKZVJ.js} +1 -1
  295. package/static/{chunk-QKMN3S4M.js → chunk-RBTLSPYJ.js} +1 -1
  296. package/static/chunk-RJULB733.js +1 -0
  297. package/static/{chunk-E5C4QRNQ.js → chunk-RNVPQQKT.js} +5 -5
  298. package/static/chunk-RTNEBRKJ.js +1 -0
  299. package/static/{chunk-IIKL33TV.js → chunk-S44QIK3G.js} +1 -1
  300. package/static/{chunk-SF6Q6VRC.js → chunk-S6H2ELRY.js} +1 -1
  301. package/static/{chunk-4GBA6EJ4.js → chunk-SDJNZULP.js} +1 -1
  302. package/static/chunk-SNOOCDJD.js +1 -0
  303. package/static/chunk-SPQH3ATC.js +5 -0
  304. package/static/{chunk-5KVI243T.js → chunk-TNCKNU6I.js} +1 -1
  305. package/static/{chunk-7QYALK5T.js → chunk-TTWMFWEC.js} +1 -1
  306. package/static/{chunk-OVUMPMVM.js → chunk-U5E5H2DD.js} +1 -1
  307. package/static/{chunk-5NFH4E2B.js → chunk-UOK3LKSX.js} +1 -1
  308. package/static/{chunk-5ATJIR5S.js → chunk-VBTZDHZ3.js} +1 -1
  309. package/static/{chunk-CHMDM2ZW.js → chunk-VD5JHSDS.js} +1 -1
  310. package/static/chunk-VZFZUI6D.js +1 -0
  311. package/static/{chunk-GYYJ4FWN.js → chunk-WFMEUST4.js} +1 -1
  312. package/static/{chunk-BVKDW5XO.js → chunk-WRK2FTKU.js} +1 -1
  313. package/static/{chunk-GLPKRULI.js → chunk-WZPF4LS2.js} +1 -1
  314. package/static/chunk-X7NHX5C7.js +1 -0
  315. package/static/{chunk-FSGT46LM.js → chunk-XSURUW7C.js} +1 -1
  316. package/static/{chunk-KAAFVHYE.js → chunk-XX3JPJUM.js} +1 -1
  317. package/static/{chunk-C5T7RZSD.js → chunk-XZHWESIY.js} +1 -1
  318. package/static/chunk-ZCSHU3D7.js +1 -0
  319. package/static/{chunk-QUUQOBTF.js → chunk-ZEJLIGAY.js} +1 -1
  320. package/static/{chunk-GENTF6JM.js → chunk-ZHUBWKA2.js} +1 -1
  321. package/static/chunk-ZOMRIN3G.js +2 -0
  322. package/static/{chunk-2U5VKTML.js → chunk-ZU5MQTFN.js} +1 -1
  323. package/static/index.html +2 -2
  324. package/static/main-5O3KLGIR.js +11 -0
  325. package/static/{styles-S5HVK4H5.css → styles-XLLEY5Y3.css} +1 -1
  326. package/server/applications/files/constants/only-office.js +0 -531
  327. package/server/applications/files/constants/only-office.js.map +0 -1
  328. package/server/applications/files/decorators/only-office-environment.decorator.js.map +0 -1
  329. package/server/applications/files/files-only-office.controller.js.map +0 -1
  330. package/server/applications/files/files-only-office.controller.spec.js.map +0 -1
  331. package/server/applications/files/guards/files-only-office.guard.js.map +0 -1
  332. package/server/applications/files/guards/files-only-office.guard.spec.js.map +0 -1
  333. package/server/applications/files/guards/files-only-office.strategy.js.map +0 -1
  334. package/server/applications/files/interfaces/only-office-config.interface.js.map +0 -1
  335. package/server/applications/files/services/files-only-office-manager.service.js.map +0 -1
  336. package/server/applications/files/services/files-only-office-manager.service.spec.js +0 -58
  337. package/server/applications/files/services/files-only-office-manager.service.spec.js.map +0 -1
  338. package/static/chunk-42L6C5MT.js +0 -1
  339. package/static/chunk-4ZKAVMB4.js +0 -1
  340. package/static/chunk-5GIWZKNS.js +0 -1
  341. package/static/chunk-5WCQBTXW.js +0 -1
  342. package/static/chunk-B2A4HNDC.js +0 -1
  343. package/static/chunk-BSB4VROD.js +0 -2
  344. package/static/chunk-CUC7R6C2.js +0 -1
  345. package/static/chunk-DHFQIFOF.js +0 -1
  346. package/static/chunk-DRHPEERW.js +0 -2
  347. package/static/chunk-FCGTI42I.js +0 -1
  348. package/static/chunk-FCR5AEHR.js +0 -3
  349. package/static/chunk-HB5DC7RJ.js +0 -1
  350. package/static/chunk-ITVA26X2.js +0 -2
  351. package/static/chunk-KWKZN53T.js +0 -1
  352. package/static/chunk-LBXOAKBD.js +0 -1
  353. package/static/chunk-LZKI5P5T.js +0 -1
  354. package/static/chunk-MGMDT4VN.js +0 -1
  355. package/static/chunk-MWUUM2NK.js +0 -13
  356. package/static/chunk-MYM43ENO.js +0 -1
  357. package/static/chunk-NAH4V2R6.js +0 -2
  358. package/static/chunk-PCFH5HCI.js +0 -2
  359. package/static/chunk-Q6B4OVER.js +0 -5
  360. package/static/chunk-QV5LQKTS.js +0 -1
  361. package/static/chunk-S4UTSOPV.js +0 -1
  362. package/static/chunk-SRBOO7AO.js +0 -1
  363. package/static/chunk-VZPCXSRG.js +0 -2
  364. package/static/chunk-XKEBQNQJ.js +0 -1
  365. package/static/chunk-YYTDPI5S.js +0 -1
  366. package/static/main-ODUA232E.js +0 -11
  367. /package/static/assets/pdfjs/web/images/{toolbarButton-sidebarToggle.svg → toolbarButton-viewsManagerToggle.svg} +0 -0
@@ -6,22 +6,16 @@
6
6
  Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
- function _export(target, all) {
10
- for(var name in all)Object.defineProperty(target, name, {
11
- enumerable: true,
12
- get: Object.getOwnPropertyDescriptor(all, name).get
13
- });
14
- }
15
- _export(exports, {
16
- get FilesConfig () {
9
+ Object.defineProperty(exports, "FilesConfig", {
10
+ enumerable: true,
11
+ get: function() {
17
12
  return FilesConfig;
18
- },
19
- get FilesOnlyOfficeConfig () {
20
- return FilesOnlyOfficeConfig;
21
13
  }
22
14
  });
23
15
  const _classtransformer = require("class-transformer");
24
16
  const _classvalidator = require("class-validator");
17
+ const _collaboraonlineconfig = require("./modules/collabora-online/collabora-online.config");
18
+ const _onlyofficeconfig = require("./modules/only-office/only-office.config");
25
19
  function _ts_decorate(decorators, target, key, desc) {
26
20
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27
21
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -31,37 +25,13 @@ function _ts_decorate(decorators, target, key, desc) {
31
25
  function _ts_metadata(k, v) {
32
26
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
27
  }
34
- let FilesOnlyOfficeConfig = class FilesOnlyOfficeConfig {
35
- constructor(){
36
- this.enabled = false;
37
- this.externalServer = null;
38
- this.verifySSL = false;
39
- }
40
- };
41
- _ts_decorate([
42
- (0, _classvalidator.IsBoolean)()
43
- ], FilesOnlyOfficeConfig.prototype, "enabled", void 0);
44
- _ts_decorate([
45
- (0, _classvalidator.IsOptional)(),
46
- (0, _classvalidator.IsString)(),
47
- _ts_metadata("design:type", String)
48
- ], FilesOnlyOfficeConfig.prototype, "externalServer", void 0);
49
- _ts_decorate([
50
- (0, _classvalidator.ValidateIf)((o)=>o.enabled),
51
- (0, _classvalidator.IsString)(),
52
- (0, _classvalidator.IsNotEmpty)(),
53
- _ts_metadata("design:type", String)
54
- ], FilesOnlyOfficeConfig.prototype, "secret", void 0);
55
- _ts_decorate([
56
- (0, _classvalidator.IsBoolean)(),
57
- _ts_metadata("design:type", Boolean)
58
- ], FilesOnlyOfficeConfig.prototype, "verifySSL", void 0);
59
28
  let FilesConfig = class FilesConfig {
60
29
  constructor(){
61
30
  this.maxUploadSize = 5368709120; // 5 GB
62
31
  this.contentIndexing = true;
63
32
  this.showHiddenFiles = false;
64
- this.onlyoffice = new FilesOnlyOfficeConfig();
33
+ this.onlyoffice = new _onlyofficeconfig.OnlyOfficeConfig();
34
+ this.collabora = new _collaboraonlineconfig.CollaboraOnlineConfig();
65
35
  }
66
36
  };
67
37
  _ts_decorate([
@@ -99,8 +69,14 @@ _ts_decorate([
99
69
  _ts_decorate([
100
70
  (0, _classvalidator.IsNotEmptyObject)(),
101
71
  (0, _classvalidator.ValidateNested)(),
102
- (0, _classtransformer.Type)(()=>FilesOnlyOfficeConfig),
103
- _ts_metadata("design:type", typeof FilesOnlyOfficeConfig === "undefined" ? Object : FilesOnlyOfficeConfig)
72
+ (0, _classtransformer.Type)(()=>_onlyofficeconfig.OnlyOfficeConfig),
73
+ _ts_metadata("design:type", typeof _onlyofficeconfig.OnlyOfficeConfig === "undefined" ? Object : _onlyofficeconfig.OnlyOfficeConfig)
104
74
  ], FilesConfig.prototype, "onlyoffice", void 0);
75
+ _ts_decorate([
76
+ (0, _classvalidator.IsNotEmptyObject)(),
77
+ (0, _classvalidator.ValidateNested)(),
78
+ (0, _classtransformer.Type)(()=>_collaboraonlineconfig.CollaboraOnlineConfig),
79
+ _ts_metadata("design:type", typeof _collaboraonlineconfig.CollaboraOnlineConfig === "undefined" ? Object : _collaboraonlineconfig.CollaboraOnlineConfig)
80
+ ], FilesConfig.prototype, "collabora", void 0);
105
81
 
106
82
  //# sourceMappingURL=files.config.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/files/files.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 { Type } from 'class-transformer'\nimport { IsBoolean, IsInt, IsNotEmpty, IsNotEmptyObject, IsOptional, IsString, ValidateIf, ValidateNested } from 'class-validator'\n\nexport class FilesOnlyOfficeConfig {\n @IsBoolean()\n enabled = false\n\n @IsOptional()\n @IsString()\n externalServer: string = null\n\n @ValidateIf((o: FilesOnlyOfficeConfig) => o.enabled)\n @IsString()\n @IsNotEmpty()\n secret: string\n\n @IsBoolean()\n verifySSL: boolean = false\n}\n\nexport class FilesConfig {\n @IsNotEmpty()\n @IsString()\n dataPath: string\n\n @IsNotEmpty()\n @IsString()\n usersPath: string\n\n @IsNotEmpty()\n @IsString()\n spacesPath: string\n\n @IsNotEmpty()\n @IsString()\n tmpPath: string\n\n @IsInt()\n maxUploadSize: number = 5368709120 // 5 GB\n\n @IsBoolean()\n contentIndexing: boolean = true\n\n @IsBoolean()\n showHiddenFiles: boolean = false\n\n @IsNotEmptyObject()\n @ValidateNested()\n @Type(() => FilesOnlyOfficeConfig)\n onlyoffice: FilesOnlyOfficeConfig = new FilesOnlyOfficeConfig()\n}\n"],"names":["FilesConfig","FilesOnlyOfficeConfig","enabled","externalServer","verifySSL","o","maxUploadSize","contentIndexing","showHiddenFiles","onlyoffice"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsBYA;eAAAA;;QAjBAC;eAAAA;;;kCAHQ;gCAC4F;;;;;;;;;;AAE1G,IAAA,AAAMA,wBAAN,MAAMA;;aAEXC,UAAU;aAIVC,iBAAyB;aAQzBC,YAAqB;;AACvB;;;;;;;;;;qCAPeC,IAA6BA,EAAEH,OAAO;;;;;;;;;AAS9C,IAAA,AAAMF,cAAN,MAAMA;;aAkBXM,gBAAwB,YAAW,OAAO;aAG1CC,kBAA2B;aAG3BC,kBAA2B;aAK3BC,aAAoC,IAAIR;;AAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAFcA"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/files/files.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 { Type } from 'class-transformer'\nimport { IsBoolean, IsInt, IsNotEmpty, IsNotEmptyObject, IsString, ValidateNested } from 'class-validator'\nimport { CollaboraOnlineConfig } from './modules/collabora-online/collabora-online.config'\nimport { OnlyOfficeConfig } from './modules/only-office/only-office.config'\n\nexport class FilesConfig {\n @IsNotEmpty()\n @IsString()\n dataPath: string\n\n @IsNotEmpty()\n @IsString()\n usersPath: string\n\n @IsNotEmpty()\n @IsString()\n spacesPath: string\n\n @IsNotEmpty()\n @IsString()\n tmpPath: string\n\n @IsInt()\n maxUploadSize: number = 5368709120 // 5 GB\n\n @IsBoolean()\n contentIndexing: boolean = true\n\n @IsBoolean()\n showHiddenFiles: boolean = false\n\n @IsNotEmptyObject()\n @ValidateNested()\n @Type(() => OnlyOfficeConfig)\n onlyoffice: OnlyOfficeConfig = new OnlyOfficeConfig()\n\n @IsNotEmptyObject()\n @ValidateNested()\n @Type(() => CollaboraOnlineConfig)\n collabora: CollaboraOnlineConfig = new CollaboraOnlineConfig()\n}\n"],"names":["FilesConfig","maxUploadSize","contentIndexing","showHiddenFiles","onlyoffice","OnlyOfficeConfig","collabora","CollaboraOnlineConfig"],"mappings":"AAAA;;;;CAIC;;;;+BAOYA;;;eAAAA;;;kCALQ;gCACoE;uCACnD;kCACL;;;;;;;;;;AAE1B,IAAA,AAAMA,cAAN,MAAMA;;aAkBXC,gBAAwB,YAAW,OAAO;aAG1CC,kBAA2B;aAG3BC,kBAA2B;aAK3BC,aAA+B,IAAIC,kCAAgB;aAKnDC,YAAmC,IAAIC,4CAAqB;;AAC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAPcF,kCAAgB;;;;;;oCAKhBE,4CAAqB"}
@@ -83,8 +83,8 @@ let FilesController = class FilesController {
83
83
  async lock(user, space) {
84
84
  return this.filesMethods.lock(user, space);
85
85
  }
86
- async unlock(user, space, forceAsOwner) {
87
- return this.filesMethods.unlock(user, space, forceAsOwner);
86
+ async unlock(user, space, forceAsFileOwner) {
87
+ return this.filesMethods.unlock(user, space, forceAsFileOwner);
88
88
  }
89
89
  async unlockRequest(user, space) {
90
90
  return this.filesMethods.unlockRequest(user, space);
@@ -98,7 +98,7 @@ let FilesController = class FilesController {
98
98
  }
99
99
  async compressAsTask(req, compressFileDto) {
100
100
  if (compressFileDto.compressInDirectory) {
101
- _spaceguard.SpaceGuard.checkPermissions(req, this.logger);
101
+ await _spaceguard.SpaceGuard.checkPermissions(req, this.logger);
102
102
  }
103
103
  return this.filesTasksManager.createTask(_operations.FILE_OPERATION.COMPRESS, req.user, req.space, compressFileDto, this.filesMethods.compress.name);
104
104
  }
@@ -263,7 +263,7 @@ _ts_decorate([
263
263
  (0, _common.Unlock)(`${_routes.FILES_ROUTE.OPERATION}/*`),
264
264
  _ts_param(0, (0, _userdecorator.GetUser)()),
265
265
  _ts_param(1, (0, _spacedecorator.GetSpace)()),
266
- _ts_param(2, (0, _common.Query)('forceAsOwner', new _common.ParseBoolPipe({
266
+ _ts_param(2, (0, _common.Query)(_operations.FORCE_AS_FILE_OWNER, new _common.ParseBoolPipe({
267
267
  optional: true
268
268
  }))),
269
269
  _ts_metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/files/files.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 {\n Body,\n Controller,\n Copy,\n Delete,\n Get,\n Head,\n Lock,\n Logger,\n Move,\n ParseBoolPipe,\n ParseIntPipe,\n Patch,\n Post,\n Put,\n Query,\n Req,\n Res,\n Search,\n StreamableFile,\n Unlock,\n UseGuards,\n UseInterceptors\n} from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { webpMimeType } from '../../common/image'\nimport { ContextInterceptor } from '../../infrastructure/context/interceptors/context.interceptor'\nimport { SkipSpaceGuard } from '../spaces/decorators/space-skip-guard.decorator'\nimport { SkipSpacePermissionsCheck } from '../spaces/decorators/space-skip-permissions.decorator'\nimport { GetSpace } from '../spaces/decorators/space.decorator'\nimport { SpaceGuard } from '../spaces/guards/space.guard'\nimport { FastifySpaceRequest } from '../spaces/interfaces/space-request.interface'\nimport { SpaceEnv } from '../spaces/models/space-env.model'\nimport { GetUser } from '../users/decorators/user.decorator'\nimport { UserModel } from '../users/models/user.model'\nimport { FILE_OPERATION } from './constants/operations'\nimport { FILES_ROUTE } from './constants/routes'\nimport { CompressFileDto, CopyMoveFileDto, DownloadFileDto, MakeFileDto, SearchFilesDto } from './dto/file-operations.dto'\nimport { FileLockProps } from './interfaces/file-props.interface'\nimport { FileTask } from './models/file-task'\nimport { FileContent } from './schemas/file-content.interface'\nimport { FileRecent } from './schemas/file-recent.interface'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesRecents } from './services/files-recents.service'\nimport { FilesSearchManager } from './services/files-search-manager.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\n@Controller(FILES_ROUTE.BASE)\n@UseGuards(SpaceGuard)\nexport class FilesController {\n private readonly logger = new Logger(FilesController.name)\n\n constructor(\n private readonly filesMethods: FilesMethods,\n private readonly filesTasksManager: FilesTasksManager,\n private readonly filesRecents: FilesRecents,\n private readonly filesSearch: FilesSearchManager\n ) {}\n\n // OPERATIONS\n\n @Head(`${FILES_ROUTE.OPERATION}/*`)\n async head(@Req() req: FastifySpaceRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<StreamableFile> {\n return this.filesMethods.headOrGet(req, res)\n }\n\n @Get(`${FILES_ROUTE.OPERATION}/*`)\n async download(@Req() req: FastifySpaceRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<StreamableFile> {\n return this.filesMethods.headOrGet(req, res)\n }\n\n @Post(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.MAKE}/*`)\n async make(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv, @Body() makeFileDto: MakeFileDto): Promise<void> {\n return this.filesMethods.make(user, space, makeFileDto)\n }\n\n @Post(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.UPLOAD}/*`)\n async uploadCreate(@Req() req: FastifySpaceRequest): Promise<void> {\n return this.filesMethods.upload(req)\n }\n\n @Put(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.UPLOAD}/*`)\n async uploadOverwrite(@Req() req: FastifySpaceRequest): Promise<void> {\n return this.filesMethods.upload(req)\n }\n\n @Patch(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.UPLOAD}/*`)\n async uploadContent(@Req() req: FastifySpaceRequest): Promise<void> {\n return this.filesMethods.upload(req)\n }\n\n @Copy(`${FILES_ROUTE.OPERATION}/*`)\n async copy(\n @GetUser() user: UserModel,\n @GetSpace() space: SpaceEnv,\n @Body() copyMoveFileDto: CopyMoveFileDto\n ): Promise<{\n path: string\n name: string\n }> {\n return this.filesMethods.copy(user, space, copyMoveFileDto)\n }\n\n @Move(`${FILES_ROUTE.OPERATION}/*`)\n async move(\n @GetUser() user: UserModel,\n @GetSpace() space: SpaceEnv,\n @Body() copyMoveFileDto: CopyMoveFileDto\n ): Promise<{\n path: string\n name: string\n }> {\n return this.filesMethods.move(user, space, copyMoveFileDto)\n }\n\n @Delete(`${FILES_ROUTE.OPERATION}/*`)\n async delete(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv): Promise<void> {\n return this.filesMethods.delete(user, space)\n }\n\n @Get(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.THUMBNAIL}/*`)\n async genThumbnail(\n @GetSpace() space: SpaceEnv,\n @Query('size', new ParseIntPipe({ optional: true })) size = 256,\n @Res() res: FastifyReply\n ): Promise<StreamableFile> {\n if (size > 1024) size = 1024\n const thumb = await this.filesMethods.genThumbnail(space, size)\n res.type(webpMimeType)\n return res.send(thumb)\n }\n\n @Lock(`${FILES_ROUTE.OPERATION}/*`)\n async lock(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv): Promise<FileLockProps> {\n return this.filesMethods.lock(user, space)\n }\n\n @Unlock(`${FILES_ROUTE.OPERATION}/*`)\n async unlock(\n @GetUser() user: UserModel,\n @GetSpace() space: SpaceEnv,\n @Query('forceAsOwner', new ParseBoolPipe({ optional: true })) forceAsOwner?: boolean\n ): Promise<void> {\n return this.filesMethods.unlock(user, space, forceAsOwner)\n }\n\n @Unlock(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.UNLOCK_REQUEST}/*`)\n @UseInterceptors(ContextInterceptor)\n async unlockRequest(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv): Promise<void> {\n return this.filesMethods.unlockRequest(user, space)\n }\n\n @Get(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.GET_SIZE}/*`)\n async getSize(@GetSpace() space: SpaceEnv): Promise<{ size: number }> {\n return this.filesMethods.getSize(space)\n }\n\n // TASKS OPERATIONS\n\n @Post(`${FILES_ROUTE.TASK_OPERATION}/${FILE_OPERATION.DOWNLOAD}/*`)\n async downloadFromUrlAsTask(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv, @Body() downloadFileDto: DownloadFileDto): Promise<FileTask> {\n return this.filesTasksManager.createTask(FILE_OPERATION.DOWNLOAD, user, space, downloadFileDto, this.filesMethods.downloadFromUrl.name)\n }\n\n @Post(`${FILES_ROUTE.TASK_OPERATION}/${FILE_OPERATION.COMPRESS}/*`)\n @SkipSpacePermissionsCheck()\n // Compression could be used to download files, permission is checked later\n async compressAsTask(@Req() req: FastifySpaceRequest, @Body() compressFileDto: CompressFileDto): Promise<FileTask> {\n if (compressFileDto.compressInDirectory) {\n SpaceGuard.checkPermissions(req, this.logger)\n }\n return this.filesTasksManager.createTask(FILE_OPERATION.COMPRESS, req.user, req.space, compressFileDto, this.filesMethods.compress.name)\n }\n\n @Post(`${FILES_ROUTE.TASK_OPERATION}/${FILE_OPERATION.DECOMPRESS}/*`)\n async decompressAsTask(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv): Promise<FileTask> {\n return this.filesTasksManager.createTask(FILE_OPERATION.DECOMPRESS, user, space, null, this.filesMethods.decompress.name)\n }\n\n @Copy(`${FILES_ROUTE.TASK_OPERATION}/*`)\n async copyAsTask(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv, @Body() copyMoveFileDto: CopyMoveFileDto): Promise<FileTask> {\n return this.filesTasksManager.createTask(FILE_OPERATION.COPY, user, space, copyMoveFileDto, this.filesMethods.copy.name)\n }\n\n @Move(`${FILES_ROUTE.TASK_OPERATION}/*`)\n async moveAsTask(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv, @Body() copyMoveFileDto: CopyMoveFileDto): Promise<FileTask> {\n return this.filesTasksManager.createTask(FILE_OPERATION.MOVE, user, space, copyMoveFileDto, this.filesMethods.move.name)\n }\n\n @Delete(`${FILES_ROUTE.TASK_OPERATION}/*`)\n async deleteAsTask(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv): Promise<FileTask> {\n return this.filesTasksManager.createTask(FILE_OPERATION.DELETE, user, space, null, this.filesMethods.delete.name)\n }\n\n // RECENT FILES\n\n @Get(FILES_ROUTE.RECENTS)\n @SkipSpaceGuard()\n getRecents(@GetUser() user: UserModel, @Query('limit') limit: number = 10): Promise<FileRecent[]> {\n return this.filesRecents.getRecents(user, limit)\n }\n\n // SEARCH FILES\n\n @Search(FILES_ROUTE.SEARCH)\n @SkipSpaceGuard()\n search(@GetUser() user: UserModel, @Body() search: SearchFilesDto): Promise<FileContent[]> {\n return this.filesSearch.search(user, search)\n }\n}\n"],"names":["FilesController","head","req","res","filesMethods","headOrGet","download","make","user","space","makeFileDto","uploadCreate","upload","uploadOverwrite","uploadContent","copy","copyMoveFileDto","move","delete","genThumbnail","size","thumb","type","webpMimeType","send","lock","unlock","forceAsOwner","unlockRequest","getSize","downloadFromUrlAsTask","downloadFileDto","filesTasksManager","createTask","FILE_OPERATION","DOWNLOAD","downloadFromUrl","name","compressAsTask","compressFileDto","compressInDirectory","SpaceGuard","checkPermissions","logger","COMPRESS","compress","decompressAsTask","DECOMPRESS","decompress","copyAsTask","COPY","moveAsTask","MOVE","deleteAsTask","DELETE","getRecents","limit","filesRecents","search","filesSearch","Logger","FILES_ROUTE","OPERATION","passthrough","MAKE","UPLOAD","THUMBNAIL","ParseIntPipe","optional","ParseBoolPipe","UNLOCK_REQUEST","GET_SIZE","TASK_OPERATION","RECENTS","SEARCH","BASE"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/files/files.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 {\n Body,\n Controller,\n Copy,\n Delete,\n Get,\n Head,\n Lock,\n Logger,\n Move,\n ParseBoolPipe,\n ParseIntPipe,\n Patch,\n Post,\n Put,\n Query,\n Req,\n Res,\n Search,\n StreamableFile,\n Unlock,\n UseGuards,\n UseInterceptors\n} from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { webpMimeType } from '../../common/image'\nimport { ContextInterceptor } from '../../infrastructure/context/interceptors/context.interceptor'\nimport { SkipSpaceGuard } from '../spaces/decorators/space-skip-guard.decorator'\nimport { SkipSpacePermissionsCheck } from '../spaces/decorators/space-skip-permissions.decorator'\nimport { GetSpace } from '../spaces/decorators/space.decorator'\nimport { SpaceGuard } from '../spaces/guards/space.guard'\nimport { FastifySpaceRequest } from '../spaces/interfaces/space-request.interface'\nimport { SpaceEnv } from '../spaces/models/space-env.model'\nimport { GetUser } from '../users/decorators/user.decorator'\nimport { UserModel } from '../users/models/user.model'\nimport { FILE_OPERATION, FORCE_AS_FILE_OWNER } from './constants/operations'\nimport { FILES_ROUTE } from './constants/routes'\nimport { CompressFileDto, CopyMoveFileDto, DownloadFileDto, MakeFileDto, SearchFilesDto } from './dto/file-operations.dto'\nimport { FileLockProps } from './interfaces/file-props.interface'\nimport { FileTask } from './models/file-task'\nimport { FileContent } from './schemas/file-content.interface'\nimport { FileRecent } from './schemas/file-recent.interface'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesRecents } from './services/files-recents.service'\nimport { FilesSearchManager } from './services/files-search-manager.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\n@Controller(FILES_ROUTE.BASE)\n@UseGuards(SpaceGuard)\nexport class FilesController {\n private readonly logger = new Logger(FilesController.name)\n\n constructor(\n private readonly filesMethods: FilesMethods,\n private readonly filesTasksManager: FilesTasksManager,\n private readonly filesRecents: FilesRecents,\n private readonly filesSearch: FilesSearchManager\n ) {}\n\n // OPERATIONS\n\n @Head(`${FILES_ROUTE.OPERATION}/*`)\n async head(@Req() req: FastifySpaceRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<StreamableFile> {\n return this.filesMethods.headOrGet(req, res)\n }\n\n @Get(`${FILES_ROUTE.OPERATION}/*`)\n async download(@Req() req: FastifySpaceRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<StreamableFile> {\n return this.filesMethods.headOrGet(req, res)\n }\n\n @Post(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.MAKE}/*`)\n async make(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv, @Body() makeFileDto: MakeFileDto): Promise<void> {\n return this.filesMethods.make(user, space, makeFileDto)\n }\n\n @Post(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.UPLOAD}/*`)\n async uploadCreate(@Req() req: FastifySpaceRequest): Promise<void> {\n return this.filesMethods.upload(req)\n }\n\n @Put(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.UPLOAD}/*`)\n async uploadOverwrite(@Req() req: FastifySpaceRequest): Promise<void> {\n return this.filesMethods.upload(req)\n }\n\n @Patch(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.UPLOAD}/*`)\n async uploadContent(@Req() req: FastifySpaceRequest): Promise<void> {\n return this.filesMethods.upload(req)\n }\n\n @Copy(`${FILES_ROUTE.OPERATION}/*`)\n async copy(\n @GetUser() user: UserModel,\n @GetSpace() space: SpaceEnv,\n @Body() copyMoveFileDto: CopyMoveFileDto\n ): Promise<{\n path: string\n name: string\n }> {\n return this.filesMethods.copy(user, space, copyMoveFileDto)\n }\n\n @Move(`${FILES_ROUTE.OPERATION}/*`)\n async move(\n @GetUser() user: UserModel,\n @GetSpace() space: SpaceEnv,\n @Body() copyMoveFileDto: CopyMoveFileDto\n ): Promise<{\n path: string\n name: string\n }> {\n return this.filesMethods.move(user, space, copyMoveFileDto)\n }\n\n @Delete(`${FILES_ROUTE.OPERATION}/*`)\n async delete(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv): Promise<void> {\n return this.filesMethods.delete(user, space)\n }\n\n @Get(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.THUMBNAIL}/*`)\n async genThumbnail(\n @GetSpace() space: SpaceEnv,\n @Query('size', new ParseIntPipe({ optional: true })) size = 256,\n @Res() res: FastifyReply\n ): Promise<StreamableFile> {\n if (size > 1024) size = 1024\n const thumb = await this.filesMethods.genThumbnail(space, size)\n res.type(webpMimeType)\n return res.send(thumb)\n }\n\n @Lock(`${FILES_ROUTE.OPERATION}/*`)\n async lock(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv): Promise<FileLockProps> {\n return this.filesMethods.lock(user, space)\n }\n\n @Unlock(`${FILES_ROUTE.OPERATION}/*`)\n async unlock(\n @GetUser() user: UserModel,\n @GetSpace() space: SpaceEnv,\n @Query(FORCE_AS_FILE_OWNER, new ParseBoolPipe({ optional: true })) forceAsFileOwner?: boolean\n ): Promise<void> {\n return this.filesMethods.unlock(user, space, forceAsFileOwner)\n }\n\n @Unlock(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.UNLOCK_REQUEST}/*`)\n @UseInterceptors(ContextInterceptor)\n async unlockRequest(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv): Promise<void> {\n return this.filesMethods.unlockRequest(user, space)\n }\n\n @Get(`${FILES_ROUTE.OPERATION}/${FILE_OPERATION.GET_SIZE}/*`)\n async getSize(@GetSpace() space: SpaceEnv): Promise<{ size: number }> {\n return this.filesMethods.getSize(space)\n }\n\n // TASKS OPERATIONS\n\n @Post(`${FILES_ROUTE.TASK_OPERATION}/${FILE_OPERATION.DOWNLOAD}/*`)\n async downloadFromUrlAsTask(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv, @Body() downloadFileDto: DownloadFileDto): Promise<FileTask> {\n return this.filesTasksManager.createTask(FILE_OPERATION.DOWNLOAD, user, space, downloadFileDto, this.filesMethods.downloadFromUrl.name)\n }\n\n @Post(`${FILES_ROUTE.TASK_OPERATION}/${FILE_OPERATION.COMPRESS}/*`)\n @SkipSpacePermissionsCheck()\n // Can be used to create or download an archive of files; permissions are checked later\n async compressAsTask(@Req() req: FastifySpaceRequest, @Body() compressFileDto: CompressFileDto): Promise<FileTask> {\n if (compressFileDto.compressInDirectory) {\n await SpaceGuard.checkPermissions(req, this.logger)\n }\n return this.filesTasksManager.createTask(FILE_OPERATION.COMPRESS, req.user, req.space, compressFileDto, this.filesMethods.compress.name)\n }\n\n @Post(`${FILES_ROUTE.TASK_OPERATION}/${FILE_OPERATION.DECOMPRESS}/*`)\n async decompressAsTask(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv): Promise<FileTask> {\n return this.filesTasksManager.createTask(FILE_OPERATION.DECOMPRESS, user, space, null, this.filesMethods.decompress.name)\n }\n\n @Copy(`${FILES_ROUTE.TASK_OPERATION}/*`)\n async copyAsTask(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv, @Body() copyMoveFileDto: CopyMoveFileDto): Promise<FileTask> {\n return this.filesTasksManager.createTask(FILE_OPERATION.COPY, user, space, copyMoveFileDto, this.filesMethods.copy.name)\n }\n\n @Move(`${FILES_ROUTE.TASK_OPERATION}/*`)\n async moveAsTask(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv, @Body() copyMoveFileDto: CopyMoveFileDto): Promise<FileTask> {\n return this.filesTasksManager.createTask(FILE_OPERATION.MOVE, user, space, copyMoveFileDto, this.filesMethods.move.name)\n }\n\n @Delete(`${FILES_ROUTE.TASK_OPERATION}/*`)\n async deleteAsTask(@GetUser() user: UserModel, @GetSpace() space: SpaceEnv): Promise<FileTask> {\n return this.filesTasksManager.createTask(FILE_OPERATION.DELETE, user, space, null, this.filesMethods.delete.name)\n }\n\n // RECENT FILES\n\n @Get(FILES_ROUTE.RECENTS)\n @SkipSpaceGuard()\n getRecents(@GetUser() user: UserModel, @Query('limit') limit: number = 10): Promise<FileRecent[]> {\n return this.filesRecents.getRecents(user, limit)\n }\n\n // SEARCH FILES\n\n @Search(FILES_ROUTE.SEARCH)\n @SkipSpaceGuard()\n search(@GetUser() user: UserModel, @Body() search: SearchFilesDto): Promise<FileContent[]> {\n return this.filesSearch.search(user, search)\n }\n}\n"],"names":["FilesController","head","req","res","filesMethods","headOrGet","download","make","user","space","makeFileDto","uploadCreate","upload","uploadOverwrite","uploadContent","copy","copyMoveFileDto","move","delete","genThumbnail","size","thumb","type","webpMimeType","send","lock","unlock","forceAsFileOwner","unlockRequest","getSize","downloadFromUrlAsTask","downloadFileDto","filesTasksManager","createTask","FILE_OPERATION","DOWNLOAD","downloadFromUrl","name","compressAsTask","compressFileDto","compressInDirectory","SpaceGuard","checkPermissions","logger","COMPRESS","compress","decompressAsTask","DECOMPRESS","decompress","copyAsTask","COPY","moveAsTask","MOVE","deleteAsTask","DELETE","getRecents","limit","filesRecents","search","filesSearch","Logger","FILES_ROUTE","OPERATION","passthrough","MAKE","UPLOAD","THUMBNAIL","ParseIntPipe","optional","ParseBoolPipe","UNLOCK_REQUEST","GET_SIZE","TASK_OPERATION","RECENTS","SEARCH","BASE"],"mappings":"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"}
@@ -13,18 +13,17 @@ Object.defineProperty(exports, "FilesModule", {
13
13
  }
14
14
  });
15
15
  const _common = require("@nestjs/common");
16
+ const _configenvironment = require("../../configuration/config.environment");
16
17
  const _filesindexermysqlservice = require("./adapters/files-indexer-mysql.service");
17
- const _filesonlyofficecontroller = require("./files-only-office.controller");
18
18
  const _filestaskscontroller = require("./files-tasks.controller");
19
19
  const _filescontroller = require("./files.controller");
20
- const _filesonlyofficeguard = require("./guards/files-only-office.guard");
21
- const _filesonlyofficestrategy = require("./guards/files-only-office.strategy");
22
20
  const _filesindexer = require("./models/files-indexer");
21
+ const _collaboraonlinemodule = require("./modules/collabora-online/collabora-online.module");
22
+ const _onlyofficemodule = require("./modules/only-office/only-office.module");
23
23
  const _filescontentmanagerservice = require("./services/files-content-manager.service");
24
24
  const _fileslockmanagerservice = require("./services/files-lock-manager.service");
25
25
  const _filesmanagerservice = require("./services/files-manager.service");
26
26
  const _filesmethodsservice = require("./services/files-methods.service");
27
- const _filesonlyofficemanagerservice = require("./services/files-only-office-manager.service");
28
27
  const _filesparserservice = require("./services/files-parser.service");
29
28
  const _filesqueriesservice = require("./services/files-queries.service");
30
29
  const _filesrecentsservice = require("./services/files-recents.service");
@@ -41,10 +40,17 @@ let FilesModule = class FilesModule {
41
40
  };
42
41
  FilesModule = _ts_decorate([
43
42
  (0, _common.Module)({
43
+ imports: [
44
+ ..._configenvironment.configuration.applications.files.onlyoffice.enabled ? [
45
+ _onlyofficemodule.OnlyOfficeModule
46
+ ] : [],
47
+ ..._configenvironment.configuration.applications.files.collabora.enabled ? [
48
+ _collaboraonlinemodule.CollaboraOnlineModule
49
+ ] : []
50
+ ],
44
51
  controllers: [
45
52
  _filescontroller.FilesController,
46
- _filestaskscontroller.FilesTasksController,
47
- _filesonlyofficecontroller.FilesOnlyOfficeController
53
+ _filestaskscontroller.FilesTasksController
48
54
  ],
49
55
  providers: [
50
56
  _filesmethodsservice.FilesMethods,
@@ -54,9 +60,6 @@ FilesModule = _ts_decorate([
54
60
  _filestasksmanagerservice.FilesTasksManager,
55
61
  _filesschedulerservice.FilesScheduler,
56
62
  _filesrecentsservice.FilesRecents,
57
- _filesonlyofficemanagerservice.FilesOnlyOfficeManager,
58
- _filesonlyofficeguard.FilesOnlyOfficeGuard,
59
- _filesonlyofficestrategy.FilesOnlyOfficeStrategy,
60
63
  _filesparserservice.FilesParser,
61
64
  _filescontentmanagerservice.FilesContentManager,
62
65
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/files/files.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 { FilesIndexerMySQL } from './adapters/files-indexer-mysql.service'\nimport { FilesOnlyOfficeController } from './files-only-office.controller'\nimport { FilesTasksController } from './files-tasks.controller'\nimport { FilesController } from './files.controller'\nimport { FilesOnlyOfficeGuard } from './guards/files-only-office.guard'\nimport { FilesOnlyOfficeStrategy } from './guards/files-only-office.strategy'\nimport { FilesIndexer } from './models/files-indexer'\nimport { FilesContentManager } from './services/files-content-manager.service'\nimport { FilesLockManager } from './services/files-lock-manager.service'\nimport { FilesManager } from './services/files-manager.service'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesOnlyOfficeManager } from './services/files-only-office-manager.service'\nimport { FilesParser } from './services/files-parser.service'\nimport { FilesQueries } from './services/files-queries.service'\nimport { FilesRecents } from './services/files-recents.service'\nimport { FilesScheduler } from './services/files-scheduler.service'\nimport { FilesSearchManager } from './services/files-search-manager.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\n@Module({\n controllers: [FilesController, FilesTasksController, FilesOnlyOfficeController],\n providers: [\n FilesMethods,\n FilesManager,\n FilesQueries,\n FilesLockManager,\n FilesTasksManager,\n FilesScheduler,\n FilesRecents,\n FilesOnlyOfficeManager,\n FilesOnlyOfficeGuard,\n FilesOnlyOfficeStrategy,\n FilesParser,\n FilesContentManager,\n { provide: FilesIndexer, useClass: FilesIndexerMySQL },\n FilesSearchManager\n ],\n exports: [FilesManager, FilesQueries, FilesLockManager, FilesMethods, FilesRecents]\n})\nexport class FilesModule {}\n"],"names":["FilesModule","controllers","FilesController","FilesTasksController","FilesOnlyOfficeController","providers","FilesMethods","FilesManager","FilesQueries","FilesLockManager","FilesTasksManager","FilesScheduler","FilesRecents","FilesOnlyOfficeManager","FilesOnlyOfficeGuard","FilesOnlyOfficeStrategy","FilesParser","FilesContentManager","provide","FilesIndexer","useClass","FilesIndexerMySQL","FilesSearchManager","exports"],"mappings":"AAAA;;;;CAIC;;;;+BA0CYA;;;eAAAA;;;wBAxCU;0CACW;2CACQ;sCACL;iCACL;sCACK;yCACG;8BACX;4CACO;yCACH;qCACJ;qCACA;+CACU;oCACX;qCACC;qCACA;uCACE;2CACI;0CACD;;;;;;;AAsB3B,IAAA,AAAMA,cAAN,MAAMA;AAAa;;;QAnBxBC,aAAa;YAACC,gCAAe;YAAEC,0CAAoB;YAAEC,oDAAyB;SAAC;QAC/EC,WAAW;YACTC,iCAAY;YACZC,iCAAY;YACZC,iCAAY;YACZC,yCAAgB;YAChBC,2CAAiB;YACjBC,qCAAc;YACdC,iCAAY;YACZC,qDAAsB;YACtBC,0CAAoB;YACpBC,gDAAuB;YACvBC,+BAAW;YACXC,+CAAmB;YACnB;gBAAEC,SAASC,0BAAY;gBAAEC,UAAUC,2CAAiB;YAAC;YACrDC,6CAAkB;SACnB;QACDC,SAAS;YAAChB,iCAAY;YAAEC,iCAAY;YAAEC,yCAAgB;YAAEH,iCAAY;YAAEM,iCAAY;SAAC"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/files/files.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 { configuration } from '../../configuration/config.environment'\nimport { FilesIndexerMySQL } from './adapters/files-indexer-mysql.service'\nimport { FilesTasksController } from './files-tasks.controller'\nimport { FilesController } from './files.controller'\nimport { FilesIndexer } from './models/files-indexer'\nimport { CollaboraOnlineModule } from './modules/collabora-online/collabora-online.module'\nimport { OnlyOfficeModule } from './modules/only-office/only-office.module'\nimport { FilesContentManager } from './services/files-content-manager.service'\nimport { FilesLockManager } from './services/files-lock-manager.service'\nimport { FilesManager } from './services/files-manager.service'\nimport { FilesMethods } from './services/files-methods.service'\nimport { FilesParser } from './services/files-parser.service'\nimport { FilesQueries } from './services/files-queries.service'\nimport { FilesRecents } from './services/files-recents.service'\nimport { FilesScheduler } from './services/files-scheduler.service'\nimport { FilesSearchManager } from './services/files-search-manager.service'\nimport { FilesTasksManager } from './services/files-tasks-manager.service'\n\n@Module({\n imports: [\n ...(configuration.applications.files.onlyoffice.enabled ? [OnlyOfficeModule] : []),\n ...(configuration.applications.files.collabora.enabled ? [CollaboraOnlineModule] : [])\n ],\n controllers: [FilesController, FilesTasksController],\n providers: [\n FilesMethods,\n FilesManager,\n FilesQueries,\n FilesLockManager,\n FilesTasksManager,\n FilesScheduler,\n FilesRecents,\n FilesParser,\n FilesContentManager,\n { provide: FilesIndexer, useClass: FilesIndexerMySQL },\n FilesSearchManager\n ],\n exports: [FilesManager, FilesQueries, FilesLockManager, FilesMethods, FilesRecents]\n})\nexport class FilesModule {}\n"],"names":["FilesModule","imports","configuration","applications","files","onlyoffice","enabled","OnlyOfficeModule","collabora","CollaboraOnlineModule","controllers","FilesController","FilesTasksController","providers","FilesMethods","FilesManager","FilesQueries","FilesLockManager","FilesTasksManager","FilesScheduler","FilesRecents","FilesParser","FilesContentManager","provide","FilesIndexer","useClass","FilesIndexerMySQL","FilesSearchManager","exports"],"mappings":"AAAA;;;;CAIC;;;;+BA0CYA;;;eAAAA;;;wBAxCU;mCACO;0CACI;sCACG;iCACL;8BACH;uCACS;kCACL;4CACG;yCACH;qCACJ;qCACA;oCACD;qCACC;qCACA;uCACE;2CACI;0CACD;;;;;;;AAuB3B,IAAA,AAAMA,cAAN,MAAMA;AAAa;;;QApBxBC,SAAS;eACHC,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACC,UAAU,CAACC,OAAO,GAAG;gBAACC,kCAAgB;aAAC,GAAG,EAAE;eAC7EL,gCAAa,CAACC,YAAY,CAACC,KAAK,CAACI,SAAS,CAACF,OAAO,GAAG;gBAACG,4CAAqB;aAAC,GAAG,EAAE;SACtF;QACDC,aAAa;YAACC,gCAAe;YAAEC,0CAAoB;SAAC;QACpDC,WAAW;YACTC,iCAAY;YACZC,iCAAY;YACZC,iCAAY;YACZC,yCAAgB;YAChBC,2CAAiB;YACjBC,qCAAc;YACdC,iCAAY;YACZC,+BAAW;YACXC,+CAAmB;YACnB;gBAAEC,SAASC,0BAAY;gBAAEC,UAAUC,2CAAiB;YAAC;YACrDC,6CAAkB;SACnB;QACDC,SAAS;YAACb,iCAAY;YAAEC,iCAAY;YAAEC,yCAAgB;YAAEH,iCAAY;YAAEM,iCAAY;SAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-lock.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 { Owner } from '../../users/interfaces/owner.interface'\nimport { LOCK_DEPTH } from '../../webdav/constants/webdav'\nimport { WebDAVLock } from '../../webdav/interfaces/webdav.interface'\n\nexport interface FileLock {\n owner: Owner\n dbFilePath: string\n key: string\n depth: LOCK_DEPTH\n expiration: number\n davLock?: WebDAVLock\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-lock.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 { SERVER_NAME } from '../../../common/shared'\nimport { Owner } from '../../users/interfaces/owner.interface'\nimport { LOCK_DEPTH, LOCK_SCOPE, WEBDAV_APP_LOCK } from '../../webdav/constants/webdav'\nimport { COLLABORA_APP_LOCK } from '../modules/collabora-online/collabora-online.constants'\nimport { ONLY_OFFICE_APP_LOCK } from '../modules/only-office/only-office.constants'\n\nexport type LOCK_APP = typeof WEBDAV_APP_LOCK | typeof COLLABORA_APP_LOCK | typeof ONLY_OFFICE_APP_LOCK | typeof SERVER_NAME\n\n// Optional lock parameters\nexport interface FileLockOptions {\n // Only locktype write is currently implemented in RFC\n lockRoot: string // Used with webdav (uri)\n lockToken: string\n lockScope: LOCK_SCOPE\n lockInfo?: string // Provided by some WebDAV clients to identify the locking application.\n}\n\nexport interface FileLock {\n owner: Owner\n dbFilePath: string\n key: string\n depth: LOCK_DEPTH\n expiration: number\n app: LOCK_APP // Known application (internal)\n options?: FileLockOptions\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-props.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 { Share } from '../../shares/schemas/share.interface'\nimport type { SpaceRoot } from '../../spaces/schemas/space-root.interface'\nimport type { Space } from '../../spaces/schemas/space.interface'\nimport type { SyncPath } from '../../sync/schemas/sync-path.interface'\nimport type { Owner } from '../../users/interfaces/owner.interface'\nimport type { File } from '../schemas/file.interface'\n\nexport interface FileLockProps {\n owner: string\n ownerLogin: string\n isExclusive: boolean\n}\n\nexport interface FileProps extends Omit<File, 'ownerId' | 'spaceId' | 'spaceExternalRootId' | 'shareExternalId' | 'inTrash'> {\n id: number\n name: string\n path: string\n isDir: boolean\n size: number\n ctime: number\n mtime: number\n mime: string\n inTrash?: boolean\n // used with shares\n origin?: {\n ownerId: number\n ownerLogin: string\n spaceId: number\n spaceAlias: string\n spaceExternalRootId: number\n spaceRootExternalPath: string\n shareExternalId: number\n }\n // root can be a share or a space root\n // enabled, and description are only used for shares\n root?: Pick<SpaceRoot, 'id' | 'alias' | 'permissions'> &\n Partial<Pick<SpaceRoot, 'name' | 'externalPath'>> &\n Partial<Pick<Share, 'enabled' | 'description'>> & {\n owner: Owner\n }\n lock?: FileLockProps\n // used by the file browser to enrich files\n spaces?: Pick<Space, 'id' | 'alias' | 'name'>[]\n shares?: Pick<Share, 'id' | 'alias' | 'name' | 'type'>[]\n syncs?: Pick<SyncPath, 'clientId' | 'id'> & { clientName: string }[]\n hasComments?: boolean\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/files/interfaces/file-props.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 { Share } from '../../shares/schemas/share.interface'\nimport type { SpaceRoot } from '../../spaces/schemas/space-root.interface'\nimport type { Space } from '../../spaces/schemas/space.interface'\nimport type { SyncPath } from '../../sync/schemas/sync-path.interface'\nimport type { Owner } from '../../users/interfaces/owner.interface'\nimport type { File } from '../schemas/file.interface'\n\nexport interface FileLockProps {\n owner: Owner\n app: string\n info?: string\n isExclusive: boolean\n}\n\nexport interface FileProps extends Omit<File, 'ownerId' | 'spaceId' | 'spaceExternalRootId' | 'shareExternalId' | 'inTrash'> {\n id: number\n name: string\n path: string\n isDir: boolean\n size: number\n ctime: number\n mtime: number\n mime: string\n inTrash?: boolean\n // used with shares\n origin?: {\n ownerId: number\n ownerLogin: string\n spaceId: number\n spaceAlias: string\n spaceExternalRootId: number\n spaceRootExternalPath: string\n shareExternalId: number\n }\n // root can be a share or a space root\n // enabled, and description are only used for shares\n root?: Pick<SpaceRoot, 'id' | 'alias' | 'permissions'> &\n Partial<Pick<SpaceRoot, 'name' | 'externalPath'>> &\n Partial<Pick<Share, 'enabled' | 'description'>> & {\n owner: Owner\n }\n lock?: FileLockProps\n // used by the file browser to enrich files\n spaces?: Pick<Space, 'id' | 'alias' | 'name'>[]\n shares?: Pick<Share, 'id' | 'alias' | 'name' | 'type'>[]\n syncs?: Pick<SyncPath, 'clientId' | 'id'> & { clientName: string }[]\n hasComments?: boolean\n}\n"],"names":[],"mappings":"AAAA;;;;CAIC"}
@@ -0,0 +1,32 @@
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";
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ function _export(target, all) {
10
+ for(var name in all)Object.defineProperty(target, name, {
11
+ enumerable: true,
12
+ get: Object.getOwnPropertyDescriptor(all, name).get
13
+ });
14
+ }
15
+ _export(exports, {
16
+ get CollaboraOnlineContext () {
17
+ return CollaboraOnlineContext;
18
+ },
19
+ get CollaboraOnlineEnvironment () {
20
+ return CollaboraOnlineEnvironment;
21
+ }
22
+ });
23
+ const _common = require("@nestjs/common");
24
+ const _spaceguard = require("../../../spaces/guards/space.guard");
25
+ const _collaboraonlineconstants = require("./collabora-online.constants");
26
+ const _collaboraonlineguard = require("./collabora-online.guard");
27
+ const CollaboraOnlineContext = ()=>(0, _common.SetMetadata)(_collaboraonlineconstants.COLLABORA_CONTEXT, true);
28
+ const CollaboraOnlineEnvironment = ()=>{
29
+ return (0, _common.applyDecorators)(CollaboraOnlineContext(), (0, _common.UseGuards)(_collaboraonlineguard.CollaboraOnlineGuard, _spaceguard.SpaceGuard));
30
+ };
31
+
32
+ //# sourceMappingURL=collabora-online-environment.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../backend/src/applications/files/modules/collabora-online/collabora-online-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 { COLLABORA_CONTEXT } from './collabora-online.constants'\nimport { CollaboraOnlineGuard } from './collabora-online.guard'\n\nexport const CollaboraOnlineContext = () => SetMetadata(COLLABORA_CONTEXT, true)\nexport const CollaboraOnlineEnvironment = () => {\n return applyDecorators(CollaboraOnlineContext(), UseGuards(CollaboraOnlineGuard, SpaceGuard))\n}\n"],"names":["CollaboraOnlineContext","CollaboraOnlineEnvironment","SetMetadata","COLLABORA_CONTEXT","applyDecorators","UseGuards","CollaboraOnlineGuard","SpaceGuard"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAOYA;eAAAA;;QACAC;eAAAA;;;wBAN2C;4BAC7B;0CACO;sCACG;AAE9B,MAAMD,yBAAyB,IAAME,IAAAA,mBAAW,EAACC,2CAAiB,EAAE;AACpE,MAAMF,6BAA6B;IACxC,OAAOG,IAAAA,uBAAe,EAACJ,0BAA0BK,IAAAA,iBAAS,EAACC,0CAAoB,EAAEC,sBAAU;AAC7F"}
@@ -0,0 +1,280 @@
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";
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ Object.defineProperty(exports, "CollaboraOnlineManager", {
10
+ enumerable: true,
11
+ get: function() {
12
+ return CollaboraOnlineManager;
13
+ }
14
+ });
15
+ const _common = require("@nestjs/common");
16
+ const _jwt = require("@nestjs/jwt");
17
+ const _promises = /*#__PURE__*/ _interop_require_default(require("node:fs/promises"));
18
+ const _nodeos = /*#__PURE__*/ _interop_require_default(require("node:os"));
19
+ const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
20
+ const _functions = require("../../../../common/functions");
21
+ const _configenvironment = require("../../../../configuration/config.environment");
22
+ const _contextmanagerservice = require("../../../../infrastructure/context/services/context-manager.service");
23
+ const _spaces = require("../../../spaces/constants/spaces");
24
+ const _permissions = require("../../../spaces/utils/permissions");
25
+ const _avatar = require("../../../users/utils/avatar");
26
+ const _webdav = require("../../../webdav/constants/webdav");
27
+ const _operations = require("../../constants/operations");
28
+ const _filelockerror = require("../../models/file-lock-error");
29
+ const _fileslockmanagerservice = require("../../services/files-lock-manager.service");
30
+ const _files = require("../../utils/files");
31
+ const _collaboraonlineconstants = require("./collabora-online.constants");
32
+ const _collaboraonlineroutes = require("./collabora-online.routes");
33
+ function _interop_require_default(obj) {
34
+ return obj && obj.__esModule ? obj : {
35
+ default: obj
36
+ };
37
+ }
38
+ function _ts_decorate(decorators, target, key, desc) {
39
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
40
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
41
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
42
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
43
+ }
44
+ function _ts_metadata(k, v) {
45
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
46
+ }
47
+ let CollaboraOnlineManager = class CollaboraOnlineManager {
48
+ async getSettings(user, space) {
49
+ await this.checkSpace(space);
50
+ const fileExtension = _nodepath.default.extname(space.realPath).slice(1);
51
+ if (!_collaboraonlineconstants.COLLABORA_ONLINE_EXTENSIONS.has(fileExtension)) {
52
+ throw new _common.HttpException('Document not supported', _common.HttpStatus.BAD_REQUEST);
53
+ }
54
+ let hasLock = false;
55
+ let mode = (0, _permissions.haveSpaceEnvPermissions)(space, _spaces.SPACE_OPERATION.MODIFY) ? _operations.FILE_MODE.EDIT : _operations.FILE_MODE.VIEW;
56
+ if (mode === _operations.FILE_MODE.EDIT) {
57
+ // Check lock conflicts
58
+ try {
59
+ await this.filesLockManager.checkConflicts(space.dbFile, _webdav.DEPTH.RESOURCE, {
60
+ userId: user.id,
61
+ app: _collaboraonlineconstants.COLLABORA_APP_LOCK,
62
+ lockScope: _webdav.LOCK_SCOPE.SHARED
63
+ });
64
+ } catch (e) {
65
+ if (e instanceof _filelockerror.LockConflict) {
66
+ hasLock = this.filesLockManager.convertLockToFileLockProps(e.lock);
67
+ mode = _operations.FILE_MODE.VIEW;
68
+ } else {
69
+ this.logger.error(`${this.getSettings.name} - ${e}`);
70
+ throw new _common.HttpException('Unable to check file lock', _common.HttpStatus.INTERNAL_SERVER_ERROR);
71
+ }
72
+ }
73
+ }
74
+ const dbFileHash = (0, _files.genUniqHashFromFileDBProps)(space.dbFile);
75
+ const authToken = await this.genAuthToken(user, space, dbFileHash);
76
+ return {
77
+ documentServerUrl: this.getDocumentUrl(dbFileHash, authToken),
78
+ mode: mode,
79
+ hasLock: hasLock
80
+ };
81
+ }
82
+ async checkFileInfo(req) {
83
+ const fStats = await _promises.default.stat(req.space.realPath);
84
+ return {
85
+ BaseFileName: (0, _files.fileName)(req.space.realPath),
86
+ Version: (0, _files.genEtag)(null, req.space.realPath, false),
87
+ OwnerId: `${req.space.dbFile.ownerId || req.user.id}`,
88
+ Size: fStats.size,
89
+ LastModifiedTime: fStats.mtime.toISOString(),
90
+ UserId: `${req.user.id}`,
91
+ UserFriendlyName: `${req.user.fullName} (${req.user.email})`,
92
+ ReadOnly: false,
93
+ UserExtraInfo: {
94
+ avatar: await (0, _avatar.getAvatarBase64)(req.user.login)
95
+ },
96
+ UserCanNotWriteRelative: true,
97
+ UserCanWrite: (0, _permissions.haveSpaceEnvPermissions)(req.space, _spaces.SPACE_OPERATION.MODIFY),
98
+ UserCanRename: false,
99
+ SupportsUpdate: true,
100
+ SupportsRename: false,
101
+ SupportsExport: true,
102
+ SupportsCoauth: true,
103
+ SupportsLocks: true,
104
+ SupportsGetLock: true
105
+ };
106
+ }
107
+ async saveDocument(req) {
108
+ await this.checkSpace(req.space);
109
+ await this.checkTimeStampFromHeaders(req);
110
+ const tmpFilePath = await (0, _files.uniqueFilePathFromDir)(_nodepath.default.join(_nodeos.default.tmpdir(), (0, _files.fileName)(req.space.realPath)));
111
+ try {
112
+ await (0, _files.writeFromStream)(tmpFilePath, req.raw);
113
+ } catch (e) {
114
+ throw new Error(`unable to save document : ${e.message}`);
115
+ }
116
+ // try to verify the downloaded size
117
+ const contentLength = parseInt(req.headers['content-length'], 10);
118
+ if (!isNaN(contentLength) && contentLength !== 0) {
119
+ const tmpFileSize = await (0, _files.fileSize)(tmpFilePath);
120
+ if (tmpFileSize !== contentLength) {
121
+ this.logger.error(`${this.saveDocument.name} - document size differs (${tmpFileSize} != ${contentLength})`);
122
+ throw new _common.HttpException('Size Mismatch', _common.HttpStatus.BAD_REQUEST);
123
+ }
124
+ } else if (contentLength === 0) {
125
+ this.logger.warn(`${this.saveDocument.name} - content length is 0 : ${req.space.url}`);
126
+ }
127
+ // copy contents to avoid inode changes (dbFileHash in some cases)
128
+ try {
129
+ // todo: versioning
130
+ await (0, _files.copyFileContent)(tmpFilePath, req.space.realPath);
131
+ await (0, _files.removeFiles)(tmpFilePath);
132
+ const fStats = await _promises.default.stat(req.space.realPath);
133
+ return {
134
+ LastModifiedTime: fStats.mtime.toISOString()
135
+ };
136
+ } catch (e) {
137
+ this.logger.error(`${this.saveDocument.name} - unable to save document: ${e}`);
138
+ throw new _common.HttpException('Unable to save document', _common.HttpStatus.INTERNAL_SERVER_ERROR);
139
+ }
140
+ }
141
+ async manageLock(req, res) {
142
+ const lockAction = req.headers[_collaboraonlineconstants.COLLABORA_HEADERS.Action];
143
+ switch(lockAction){
144
+ case _collaboraonlineconstants.COLLABORA_LOCK_ACTION.LOCK:
145
+ {
146
+ const reqLockToken = this.lockTokenFromHeaders(req);
147
+ const currentLock = await this.filesLockManager.isLockedWithToken(reqLockToken, req.space.dbFile.path);
148
+ if (currentLock) {
149
+ await this.filesLockManager.refreshLockTimeout(currentLock, this.expiration);
150
+ break;
151
+ }
152
+ const [ok, fileLock] = await this.filesLockManager.create(req.user, req.space.dbFile, _collaboraonlineconstants.COLLABORA_APP_LOCK, _webdav.DEPTH.RESOURCE, {
153
+ lockRoot: null,
154
+ lockToken: reqLockToken,
155
+ lockScope: _webdav.LOCK_SCOPE.SHARED // Collabora uses one lock for the session
156
+ }, this.expiration);
157
+ if (!ok) {
158
+ this.lockConflict(res, fileLock.options.lockToken);
159
+ return;
160
+ }
161
+ break;
162
+ }
163
+ case _collaboraonlineconstants.COLLABORA_LOCK_ACTION.UNLOCK:
164
+ {
165
+ const reqLockToken = this.lockTokenFromHeaders(req);
166
+ const currentLock = await this.filesLockManager.isLockedWithToken(reqLockToken, req.space.dbFile.path);
167
+ if (currentLock) {
168
+ await this.filesLockManager.removeLock(currentLock.key);
169
+ } else {
170
+ throw new _common.HttpException('Lock not found', _common.HttpStatus.CONFLICT);
171
+ }
172
+ break;
173
+ }
174
+ case _collaboraonlineconstants.COLLABORA_LOCK_ACTION.GET_LOCK:
175
+ {
176
+ const lock = await this.filesLockManager.getLocksByPath(req.space.dbFile);
177
+ if (lock.length) {
178
+ res.header(_collaboraonlineconstants.COLLABORA_HEADERS.LockToken, lock[0].options.lockToken);
179
+ }
180
+ break;
181
+ }
182
+ case _collaboraonlineconstants.COLLABORA_LOCK_ACTION.REFRESH_LOCK:
183
+ {
184
+ const reqLockToken = this.lockTokenFromHeaders(req);
185
+ const currentLock = await this.filesLockManager.isLockedWithToken(reqLockToken, req.space.dbFile.path);
186
+ if (currentLock) {
187
+ await this.filesLockManager.refreshLockTimeout(currentLock, this.expiration);
188
+ } else {
189
+ throw new _common.HttpException('Lock not found', _common.HttpStatus.CONFLICT);
190
+ }
191
+ break;
192
+ }
193
+ default:
194
+ this.logger.warn(`${this.manageLock.name} - Unknown lock action: ${lockAction}`);
195
+ throw new _common.HttpException('Unknown lock action', _common.HttpStatus.BAD_REQUEST);
196
+ }
197
+ }
198
+ getDocumentUrl(dbFileHash, token) {
199
+ const collaboraBase = this.externalCollaboraOnlineServer || this.contextManager.headerOriginUrl();
200
+ // Example:
201
+ // - external: https://collabora.domain.com
202
+ // - internal (via nginx proxy): https://domain.com/*
203
+ const editorUrl = new URL(_collaboraonlineconstants.COLLABORA_URI, collaboraBase);
204
+ // → /browser/dist/cool.html
205
+ const wopiSrcUrl = new URL(`${_collaboraonlineroutes.API_COLLABORA_ONLINE_FILES}/${dbFileHash}`, this.contextManager.headerOriginUrl());
206
+ // → https://domain.com/wopi/files/888
207
+ editorUrl.searchParams.set(_collaboraonlineconstants.COLLABORA_WOPI_SRC_QUERY_PARAM_NAME, wopiSrcUrl.toString());
208
+ editorUrl.searchParams.set(_collaboraonlineconstants.COLLABORA_TOKEN_QUERY_PARAM_NAME, token);
209
+ return editorUrl.toString();
210
+ }
211
+ genAuthToken(user, space, dbFileHash) {
212
+ // use refresh expiration to allow long sessions
213
+ return this.jwt.signAsync({
214
+ identity: {
215
+ id: user.id,
216
+ login: user.login,
217
+ email: user.email,
218
+ fullName: user.fullName,
219
+ language: user.language,
220
+ role: user.role,
221
+ applications: user.applications,
222
+ spaceUrl: space.url,
223
+ dbFileHash: dbFileHash
224
+ }
225
+ }, {
226
+ secret: _configenvironment.configuration.auth.token.access.secret,
227
+ expiresIn: this.expiration
228
+ });
229
+ }
230
+ lockTokenFromHeaders(req) {
231
+ const lockToken = req.headers[_collaboraonlineconstants.COLLABORA_HEADERS.LockToken];
232
+ if (!lockToken) {
233
+ throw new _common.HttpException('Lock token is required', _common.HttpStatus.CONFLICT);
234
+ }
235
+ return lockToken;
236
+ }
237
+ lockConflict(res, currentLockToken) {
238
+ res.header(_collaboraonlineconstants.COLLABORA_HEADERS.LockToken, currentLockToken);
239
+ throw new _common.HttpException('The file is locked', _common.HttpStatus.CONFLICT);
240
+ }
241
+ async checkTimeStampFromHeaders(req) {
242
+ const timestamp = req.headers[_collaboraonlineconstants.COLLABORA_HEADERS.Timestamp];
243
+ if (!timestamp) {
244
+ return;
245
+ }
246
+ const fStats = await _promises.default.stat(req.space.realPath);
247
+ if (fStats.mtime.toISOString() !== timestamp) {
248
+ throw new _common.HttpException({
249
+ LOOLStatusCode: 1010
250
+ }, _common.HttpStatus.CONFLICT);
251
+ }
252
+ }
253
+ async checkSpace(space) {
254
+ if (!await (0, _files.isPathExists)(space.realPath)) {
255
+ throw new _common.HttpException('Document not found', _common.HttpStatus.NOT_FOUND);
256
+ }
257
+ if (await (0, _files.isPathIsDir)(space.realPath)) {
258
+ throw new _common.HttpException('Document must be a file', _common.HttpStatus.BAD_REQUEST);
259
+ }
260
+ }
261
+ constructor(contextManager, jwt, filesLockManager){
262
+ this.contextManager = contextManager;
263
+ this.jwt = jwt;
264
+ this.filesLockManager = filesLockManager;
265
+ this.logger = new _common.Logger(CollaboraOnlineManager.name);
266
+ this.externalCollaboraOnlineServer = _configenvironment.configuration.applications.files.collabora.externalServer || null;
267
+ this.expiration = (0, _functions.convertHumanTimeToSeconds)(_configenvironment.configuration.auth.token.refresh.expiration);
268
+ }
269
+ };
270
+ CollaboraOnlineManager = _ts_decorate([
271
+ (0, _common.Injectable)(),
272
+ _ts_metadata("design:type", Function),
273
+ _ts_metadata("design:paramtypes", [
274
+ typeof _contextmanagerservice.ContextManager === "undefined" ? Object : _contextmanagerservice.ContextManager,
275
+ typeof _jwt.JwtService === "undefined" ? Object : _jwt.JwtService,
276
+ typeof _fileslockmanagerservice.FilesLockManager === "undefined" ? Object : _fileslockmanagerservice.FilesLockManager
277
+ ])
278
+ ], CollaboraOnlineManager);
279
+
280
+ //# sourceMappingURL=collabora-online-manager.service.js.map