@sync-in/server 1.8.0 → 1.9.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 (611) hide show
  1. package/CHANGELOG.md +64 -10
  2. package/environment/environment.dist.yaml +29 -26
  3. package/package.json +18 -17
  4. package/server/app.bootstrap.js +4 -2
  5. package/server/app.bootstrap.js.map +1 -1
  6. package/server/app.constants.js +9 -0
  7. package/server/app.constants.js.map +1 -1
  8. package/server/app.module.js +4 -0
  9. package/server/app.module.js.map +1 -1
  10. package/server/applications/admin/admin.module.js +6 -1
  11. package/server/applications/admin/admin.module.js.map +1 -1
  12. package/server/applications/{notifications/interfaces/user-mail-notification.js → admin/interfaces/check-update.interfaces.js} +1 -1
  13. package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -0
  14. package/server/applications/admin/services/admin-scheduler.service.js +53 -0
  15. package/server/applications/admin/services/admin-scheduler.service.js.map +1 -0
  16. package/server/applications/admin/services/admin.service.js +102 -0
  17. package/server/applications/admin/services/admin.service.js.map +1 -0
  18. package/server/applications/admin/services/admin.service.spec.js +46 -0
  19. package/server/applications/admin/services/admin.service.spec.js.map +1 -0
  20. package/server/applications/admin/utils/check-update.js +28 -0
  21. package/server/applications/admin/utils/check-update.js.map +1 -0
  22. package/server/applications/comments/services/comments-manager.service.js +1 -1
  23. package/server/applications/comments/services/comments-manager.service.js.map +1 -1
  24. package/server/applications/comments/services/comments-manager.service.spec.js +1 -1
  25. package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
  26. package/server/applications/comments/services/comments-queries.service.js.map +1 -1
  27. package/server/applications/files/constants/cache.js +10 -1
  28. package/server/applications/files/constants/cache.js.map +1 -1
  29. package/server/applications/files/constants/only-office.js +0 -25
  30. package/server/applications/files/constants/only-office.js.map +1 -1
  31. package/server/applications/files/constants/operations.js +20 -3
  32. package/server/applications/files/constants/operations.js.map +1 -1
  33. package/server/applications/files/dto/file-operations.dto.js +7 -0
  34. package/server/applications/files/dto/file-operations.dto.js.map +1 -1
  35. package/server/applications/files/files-only-office.controller.js +3 -2
  36. package/server/applications/files/files-only-office.controller.js.map +1 -1
  37. package/server/applications/files/files-only-office.controller.spec.js +6 -5
  38. package/server/applications/files/files-only-office.controller.spec.js.map +1 -1
  39. package/server/applications/files/files.controller.js +100 -12
  40. package/server/applications/files/files.controller.js.map +1 -1
  41. package/server/applications/files/files.controller.spec.js +29 -8
  42. package/server/applications/files/files.controller.spec.js.map +1 -1
  43. package/server/applications/files/guards/files-only-office.guard.js +6 -0
  44. package/server/applications/files/guards/files-only-office.guard.js.map +1 -1
  45. package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
  46. package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
  47. package/server/applications/files/interfaces/only-office-config.interface.js.map +1 -1
  48. package/server/applications/files/services/files-content-manager.service.js +3 -3
  49. package/server/applications/files/services/files-content-manager.service.js.map +1 -1
  50. package/server/applications/files/services/files-lock-manager.service.js +61 -22
  51. package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
  52. package/server/applications/files/services/files-manager.service.js +122 -24
  53. package/server/applications/files/services/files-manager.service.js.map +1 -1
  54. package/server/applications/files/services/files-manager.service.spec.js +15 -0
  55. package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
  56. package/server/applications/files/services/files-methods.service.js +39 -14
  57. package/server/applications/files/services/files-methods.service.js.map +1 -1
  58. package/server/applications/files/services/files-only-office-manager.service.js +12 -12
  59. package/server/applications/files/services/files-only-office-manager.service.js.map +1 -1
  60. package/server/applications/files/services/files-parser.service.js +1 -1
  61. package/server/applications/files/services/files-parser.service.js.map +1 -1
  62. package/server/applications/files/services/files-queries.service.js +10 -0
  63. package/server/applications/files/services/files-queries.service.js.map +1 -1
  64. package/server/applications/files/utils/doc-textify/adapters/pdf.js +5 -16
  65. package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
  66. package/server/applications/files/utils/files.js +1 -1
  67. package/server/applications/files/utils/files.js.map +1 -1
  68. package/server/applications/files/utils/send-file.js +3 -2
  69. package/server/applications/files/utils/send-file.js.map +1 -1
  70. package/server/applications/links/services/links-queries.service.js +1 -1
  71. package/server/applications/links/services/links-queries.service.js.map +1 -1
  72. package/server/applications/notifications/constants/notifications.js +5 -1
  73. package/server/applications/notifications/constants/notifications.js.map +1 -1
  74. package/server/applications/notifications/i18n/de.js +8 -2
  75. package/server/applications/notifications/i18n/de.js.map +1 -1
  76. package/server/applications/notifications/i18n/es.js +8 -2
  77. package/server/applications/notifications/i18n/es.js.map +1 -1
  78. package/server/applications/notifications/i18n/fr.js +8 -2
  79. package/server/applications/notifications/i18n/fr.js.map +1 -1
  80. package/server/applications/notifications/i18n/hi.js +8 -2
  81. package/server/applications/notifications/i18n/hi.js.map +1 -1
  82. package/server/applications/notifications/i18n/it.js +8 -2
  83. package/server/applications/notifications/i18n/it.js.map +1 -1
  84. package/server/applications/notifications/i18n/ja.js +8 -2
  85. package/server/applications/notifications/i18n/ja.js.map +1 -1
  86. package/server/applications/notifications/i18n/ko.js +8 -2
  87. package/server/applications/notifications/i18n/ko.js.map +1 -1
  88. package/server/applications/notifications/i18n/pl.js +8 -2
  89. package/server/applications/notifications/i18n/pl.js.map +1 -1
  90. package/server/applications/notifications/i18n/pt.js +8 -2
  91. package/server/applications/notifications/i18n/pt.js.map +1 -1
  92. package/server/applications/notifications/i18n/pt_br.js +8 -2
  93. package/server/applications/notifications/i18n/pt_br.js.map +1 -1
  94. package/server/applications/notifications/i18n/ru.js +8 -2
  95. package/server/applications/notifications/i18n/ru.js.map +1 -1
  96. package/server/applications/notifications/i18n/tr.js +8 -2
  97. package/server/applications/notifications/i18n/tr.js.map +1 -1
  98. package/server/applications/notifications/i18n/zh.js +8 -2
  99. package/server/applications/notifications/i18n/zh.js.map +1 -1
  100. package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
  101. package/server/applications/notifications/interfaces/user-mail-notification.interface.js +10 -0
  102. package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -0
  103. package/server/applications/notifications/mails/models.js +38 -3
  104. package/server/applications/notifications/mails/models.js.map +1 -1
  105. package/server/applications/notifications/mails/templates.js +1 -1
  106. package/server/applications/notifications/mails/templates.js.map +1 -1
  107. package/server/applications/notifications/services/notifications-manager.service.js +8 -1
  108. package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
  109. package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
  110. package/server/applications/shares/services/shares-manager.service.js +17 -10
  111. package/server/applications/shares/services/shares-manager.service.js.map +1 -1
  112. package/server/applications/shares/services/shares-manager.service.spec.js +10 -3
  113. package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
  114. package/server/applications/shares/services/shares-queries.service.js +11 -1
  115. package/server/applications/shares/services/shares-queries.service.js.map +1 -1
  116. package/server/applications/spaces/guards/space.guard.spec.js +2 -2
  117. package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
  118. package/server/applications/spaces/services/spaces-browser.service.js +31 -11
  119. package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
  120. package/server/applications/spaces/services/spaces-manager.service.js +2 -2
  121. package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
  122. package/server/applications/spaces/services/spaces-queries.service.js +6 -2
  123. package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
  124. package/server/applications/spaces/utils/permissions.js +2 -2
  125. package/server/applications/spaces/utils/permissions.js.map +1 -1
  126. package/server/applications/sync/services/sync-manager.service.js +1 -0
  127. package/server/applications/sync/services/sync-manager.service.js.map +1 -1
  128. package/server/applications/sync/services/sync-paths-manager.service.js +1 -1
  129. package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
  130. package/server/applications/sync/services/sync-paths-manager.service.spec.js +1 -1
  131. package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
  132. package/server/applications/users/constants/user.js +1 -1
  133. package/server/applications/users/constants/user.js.map +1 -1
  134. package/server/applications/users/services/admin-users-queries.service.js +8 -0
  135. package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
  136. package/server/applications/users/services/users-manager.service.js +1 -2
  137. package/server/applications/users/services/users-manager.service.js.map +1 -1
  138. package/server/applications/users/services/users-queries.service.js +67 -68
  139. package/server/applications/users/services/users-queries.service.js.map +1 -1
  140. package/server/applications/users/users.gateway.js +6 -0
  141. package/server/applications/users/users.gateway.js.map +1 -1
  142. package/server/applications/users/users.module.js +2 -1
  143. package/server/applications/users/users.module.js.map +1 -1
  144. package/server/applications/webdav/guards/webdav-protocol.guard.js +4 -4
  145. package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
  146. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +6 -6
  147. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
  148. package/server/applications/webdav/services/webdav-methods.service.js +3 -2
  149. package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
  150. package/server/applications/webdav/services/webdav-methods.service.spec.js +2 -2
  151. package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
  152. package/server/authentication/constants/auth-ldap.js +2 -0
  153. package/server/authentication/constants/auth-ldap.js.map +1 -1
  154. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +34 -21
  155. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +1 -1
  156. package/server/common/functions.js +0 -8
  157. package/server/common/functions.js.map +1 -1
  158. package/server/common/image.js +63 -58
  159. package/server/common/image.js.map +1 -1
  160. package/server/common/shared.js +18 -1
  161. package/server/common/shared.js.map +1 -1
  162. package/server/infrastructure/context/services/context-manager.service.js +3 -0
  163. package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
  164. package/server/infrastructure/websocket/adapters/cluster.adapter.js +4 -4
  165. package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
  166. package/static/3rdpartylicenses.txt +1380 -57
  167. package/static/assets/favicon.svg +2 -25
  168. package/static/assets/logo-dark.svg +2 -32
  169. package/static/assets/logo.svg +2 -32
  170. package/static/assets/mimes/application-sql.svg +29 -1
  171. package/static/assets/mimes/application-x-sql.svg +29 -0
  172. package/static/assets/mimes/image-bmp.svg +12 -0
  173. package/static/assets/pdfjs/build/pdf.mjs +4869 -4454
  174. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  175. package/static/assets/pdfjs/build/pdf.sandbox.mjs +3 -3
  176. package/static/assets/pdfjs/build/pdf.sandbox.mjs.map +1 -1
  177. package/static/assets/pdfjs/build/pdf.worker.mjs +885 -596
  178. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  179. package/static/assets/pdfjs/version +1 -1
  180. package/static/assets/pdfjs/web/locale/be/viewer.ftl +40 -0
  181. package/static/assets/pdfjs/web/locale/bg/viewer.ftl +2 -0
  182. package/static/assets/pdfjs/web/locale/cs/viewer.ftl +41 -0
  183. package/static/assets/pdfjs/web/locale/cy/viewer.ftl +43 -0
  184. package/static/assets/pdfjs/web/locale/da/viewer.ftl +39 -0
  185. package/static/assets/pdfjs/web/locale/de/viewer.ftl +41 -0
  186. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +43 -0
  187. package/static/assets/pdfjs/web/locale/el/viewer.ftl +39 -0
  188. package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +35 -0
  189. package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +41 -0
  190. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +2 -2
  191. package/static/assets/pdfjs/web/locale/eo/viewer.ftl +39 -0
  192. package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +41 -0
  193. package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +39 -0
  194. package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +72 -0
  195. package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +120 -0
  196. package/static/assets/pdfjs/web/locale/eu/viewer.ftl +41 -0
  197. package/static/assets/pdfjs/web/locale/fi/viewer.ftl +41 -0
  198. package/static/assets/pdfjs/web/locale/fr/viewer.ftl +41 -0
  199. package/static/assets/pdfjs/web/locale/fur/viewer.ftl +77 -0
  200. package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +41 -0
  201. package/static/assets/pdfjs/web/locale/gn/viewer.ftl +39 -0
  202. package/static/assets/pdfjs/web/locale/he/viewer.ftl +41 -0
  203. package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +43 -0
  204. package/static/assets/pdfjs/web/locale/hu/viewer.ftl +41 -0
  205. package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +1 -1
  206. package/static/assets/pdfjs/web/locale/ia/viewer.ftl +41 -0
  207. package/static/assets/pdfjs/web/locale/it/viewer.ftl +41 -0
  208. package/static/assets/pdfjs/web/locale/ja/viewer.ftl +32 -0
  209. package/static/assets/pdfjs/web/locale/ka/viewer.ftl +41 -0
  210. package/static/assets/pdfjs/web/locale/kab/viewer.ftl +73 -0
  211. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +21 -0
  212. package/static/assets/pdfjs/web/locale/ko/viewer.ftl +38 -1
  213. package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +39 -0
  214. package/static/assets/pdfjs/web/locale/nl/viewer.ftl +41 -0
  215. package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +37 -0
  216. package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +37 -0
  217. package/static/assets/pdfjs/web/locale/pl/viewer.ftl +39 -0
  218. package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +39 -0
  219. package/static/assets/pdfjs/web/locale/rm/viewer.ftl +73 -0
  220. package/static/assets/pdfjs/web/locale/ro/viewer.ftl +41 -0
  221. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +42 -0
  222. package/static/assets/pdfjs/web/locale/sc/viewer.ftl +6 -0
  223. package/static/assets/pdfjs/web/locale/sk/viewer.ftl +43 -0
  224. package/static/assets/pdfjs/web/locale/sl/viewer.ftl +42 -1
  225. package/static/assets/pdfjs/web/locale/sq/viewer.ftl +77 -0
  226. package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +41 -0
  227. package/static/assets/pdfjs/web/locale/tg/viewer.ftl +39 -0
  228. package/static/assets/pdfjs/web/locale/th/viewer.ftl +35 -0
  229. package/static/assets/pdfjs/web/locale/tr/viewer.ftl +39 -0
  230. package/static/assets/pdfjs/web/locale/vi/viewer.ftl +42 -5
  231. package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +35 -0
  232. package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +37 -0
  233. package/static/assets/pdfjs/web/viewer.css +141 -110
  234. package/static/assets/pdfjs/web/viewer.html +7 -7
  235. package/static/assets/pdfjs/web/viewer.mjs +97 -14
  236. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  237. package/static/chunk-22DWHRCL.js +1 -0
  238. package/static/chunk-23UUFZSR.js +1 -0
  239. package/static/{chunk-VM4YX6Q7.js → chunk-24Q7OUU2.js} +1 -1
  240. package/static/chunk-25QTY2GI.js +1 -0
  241. package/static/chunk-2E7IJZLL.js +1 -0
  242. package/static/chunk-2FC5EKS5.js +1 -0
  243. package/static/chunk-2FOWUJQF.js +1 -0
  244. package/static/chunk-2XPHUNYN.js +1 -0
  245. package/static/chunk-32L7RG2G.js +1 -0
  246. package/static/chunk-3IISSX63.js +1 -0
  247. package/static/chunk-3OHSTP3R.js +1 -0
  248. package/static/chunk-42L6C5MT.js +1 -0
  249. package/static/chunk-4AGQL5GV.js +1 -0
  250. package/static/chunk-4BPSQMI2.js +1 -0
  251. package/static/chunk-4FDRWZWT.js +1 -0
  252. package/static/chunk-4FJUCMEG.js +1 -0
  253. package/static/chunk-4GCCF6PF.js +1 -0
  254. package/static/chunk-4ORP3SBY.js +1 -0
  255. package/static/chunk-4QBOHIC3.js +1 -0
  256. package/static/chunk-4YT6K5KY.js +1 -0
  257. package/static/chunk-556I6YIW.js +1 -0
  258. package/static/chunk-5DPIGJU4.js +1 -0
  259. package/static/chunk-5HNQLBSW.js +3 -0
  260. package/static/chunk-5IL7C45D.js +1 -0
  261. package/static/chunk-5KJXGMKR.js +1 -0
  262. package/static/chunk-5SPGSHKL.js +1 -0
  263. package/static/chunk-5WCQBTXW.js +1 -0
  264. package/static/chunk-5XUIPWOH.js +1 -0
  265. package/static/chunk-62WT7PI3.js +1 -0
  266. package/static/chunk-6F6OMQ5H.js +1 -0
  267. package/static/chunk-6I5BGQHT.js +1 -0
  268. package/static/chunk-6NOS45DG.js +1 -0
  269. package/static/chunk-6OKLPRCD.js +1 -0
  270. package/static/chunk-6VEJCG43.js +1 -0
  271. package/static/chunk-77SS36Z2.js +1 -0
  272. package/static/chunk-7AXEPO3G.js +1 -0
  273. package/static/chunk-7CFSJ4BO.js +1 -0
  274. package/static/chunk-7CKHC72R.js +1 -0
  275. package/static/chunk-7DUTYOJG.js +1 -0
  276. package/static/chunk-7HKFYRPF.js +1 -0
  277. package/static/chunk-7NZJZATZ.js +1 -0
  278. package/static/chunk-AADK5D2H.js +1 -0
  279. package/static/chunk-ACUF7IKP.js +1 -0
  280. package/static/chunk-AGREZPV4.js +1 -0
  281. package/static/chunk-ATBJWFA3.js +1 -0
  282. package/static/chunk-ATXLZN2B.js +1 -0
  283. package/static/chunk-AZ5TF5Y3.js +1 -0
  284. package/static/chunk-BBHYIURC.js +1 -0
  285. package/static/chunk-BHZEPHRI.js +13 -0
  286. package/static/chunk-BQZWSZNN.js +1 -0
  287. package/static/chunk-BSB4VROD.js +2 -0
  288. package/static/chunk-BYWSTP3P.js +1 -0
  289. package/static/chunk-C3AAEQKW.js +1 -0
  290. package/static/chunk-CCGGCHGN.js +1 -0
  291. package/static/chunk-CFTKW432.js +1 -0
  292. package/static/chunk-CNOVT6KU.js +1 -0
  293. package/static/chunk-D56H3XE2.js +1 -0
  294. package/static/chunk-DFOOSIIA.js +1 -0
  295. package/static/chunk-DHFQIFOF.js +1 -0
  296. package/static/{chunk-3GMLWAFZ.js → chunk-DIC2MVRI.js} +1 -1
  297. package/static/chunk-DJDRX53V.js +2 -0
  298. package/static/chunk-DKGXUMLT.js +1 -0
  299. package/static/chunk-DRHPEERW.js +2 -0
  300. package/static/chunk-DWYP6ZGG.js +1 -0
  301. package/static/chunk-EDJAISWO.js +13 -0
  302. package/static/chunk-EIYRBM4J.js +1 -0
  303. package/static/chunk-EKEGRXCV.js +7 -0
  304. package/static/chunk-EL6QL4TP.js +1 -0
  305. package/static/chunk-ERDZ7IVF.js +1 -0
  306. package/static/chunk-EVQKKVUZ.js +1 -0
  307. package/static/chunk-F2XG7EWI.js +1 -0
  308. package/static/chunk-F672FY5I.js +1 -0
  309. package/static/chunk-F6V37MKG.js +1 -0
  310. package/static/chunk-F7TXTNZC.js +1 -0
  311. package/static/chunk-FCGTI42I.js +1 -0
  312. package/static/chunk-FQHOSSCO.js +1 -0
  313. package/static/chunk-FTSIPHMG.js +1 -0
  314. package/static/chunk-GAGHHYLF.js +1 -0
  315. package/static/{chunk-JPT5WEAT.js → chunk-GOJYWL2M.js} +1 -1
  316. package/static/chunk-H6WOTGQ5.js +1 -0
  317. package/static/{chunk-CHJ64RJM.js → chunk-H6ZXFINQ.js} +1 -1
  318. package/static/chunk-HC7F57NA.js +1 -0
  319. package/static/chunk-HHWXIK2M.js +7 -0
  320. package/static/chunk-HKRGIRKB.js +3 -0
  321. package/static/chunk-HNMGPG72.js +1 -0
  322. package/static/chunk-HS4S6BV3.js +1 -0
  323. package/static/chunk-IJ7K7ATQ.js +1 -0
  324. package/static/chunk-IOIBQGHN.js +562 -0
  325. package/static/chunk-ITVA26X2.js +2 -0
  326. package/static/chunk-J6YSFHLZ.js +1 -0
  327. package/static/chunk-JAEJ6IMV.js +1 -0
  328. package/static/chunk-JB5R6V33.js +1 -0
  329. package/static/chunk-JF6WIV6M.js +1 -0
  330. package/static/chunk-JGB4LLUT.js +1 -0
  331. package/static/chunk-JGXVTKLG.js +1 -0
  332. package/static/chunk-JMYAD7E2.js +1 -0
  333. package/static/chunk-JSE63Q5X.js +1 -0
  334. package/static/chunk-JVV3ZL6L.js +1 -0
  335. package/static/chunk-JXZCNFW7.js +1 -0
  336. package/static/chunk-KAVP6UXH.js +1 -0
  337. package/static/{chunk-WLMNXRBS.js → chunk-KDEEERWZ.js} +1 -1
  338. package/static/chunk-KHRF67SG.js +1 -0
  339. package/static/chunk-KLOUBIO4.js +1 -0
  340. package/static/chunk-KMF3ZRAO.js +1 -0
  341. package/static/chunk-KNZ3AQPR.js +1 -0
  342. package/static/chunk-KT3TWCST.js +1 -0
  343. package/static/chunk-L6SYG23T.js +1 -0
  344. package/static/chunk-LJSVNPPQ.js +1 -0
  345. package/static/{chunk-LNTUR3GU.js → chunk-LRDKG274.js} +1 -1
  346. package/static/chunk-LRQSPCYZ.js +1 -0
  347. package/static/chunk-LUSVISM6.js +1 -0
  348. package/static/chunk-LXQGVNU2.js +1 -0
  349. package/static/{chunk-BIKLW4YS.js → chunk-LYZGJZNP.js} +1 -1
  350. package/static/chunk-LZKI5P5T.js +1 -0
  351. package/static/chunk-M4XL3JN5.js +6 -0
  352. package/static/{chunk-UNCPXHHT.js → chunk-MGWG7OD7.js} +1 -1
  353. package/static/chunk-MKUUWY6Y.js +1 -0
  354. package/static/{chunk-HAS5ZOTR.js → chunk-MNNCSSHN.js} +1 -1
  355. package/static/chunk-MR3U7TKQ.js +1 -0
  356. package/static/chunk-MRF3CNLZ.js +1 -0
  357. package/static/chunk-MRMSMTWD.js +1 -0
  358. package/static/chunk-MVZJSG5R.js +1 -0
  359. package/static/chunk-MYM43ENO.js +1 -0
  360. package/static/chunk-N3P6P6GW.js +7 -0
  361. package/static/chunk-NAH4V2R6.js +2 -0
  362. package/static/chunk-NBBDVVUF.js +1 -0
  363. package/static/chunk-NMF2ZFBE.js +1 -0
  364. package/static/chunk-NN4ONTOT.js +1 -0
  365. package/static/chunk-NOPACN4F.js +1 -0
  366. package/static/chunk-NYJPOP4L.js +1 -0
  367. package/static/chunk-OJCAIKUK.js +1 -0
  368. package/static/chunk-OQRWXCLY.js +1 -0
  369. package/static/chunk-PCFH5HCI.js +2 -0
  370. package/static/chunk-PG54TWBO.js +4 -0
  371. package/static/chunk-PJF5XUTO.js +1 -0
  372. package/static/{chunk-FJE6BOFL.js → chunk-PSUAQBYM.js} +1 -1
  373. package/static/chunk-PTLYIUFW.js +1 -0
  374. package/static/chunk-PZGLDZZM.js +1 -0
  375. package/static/chunk-Q4VNZGFI.js +1 -0
  376. package/static/chunk-Q556XB3S.js +1 -0
  377. package/static/{chunk-PB4AIT7O.js → chunk-Q7IXRPOO.js} +1 -1
  378. package/static/chunk-Q7U2VPIS.js +1 -0
  379. package/static/chunk-QM6CQMEX.js +1 -0
  380. package/static/chunk-QMHUIHSR.js +1 -0
  381. package/static/chunk-QNFNXDSX.js +1 -0
  382. package/static/chunk-QVFPHTOH.js +1 -0
  383. package/static/chunk-R4MI25E2.js +1 -0
  384. package/static/chunk-R7JRAR3P.js +1 -0
  385. package/static/chunk-R7PNKQU2.js +1 -0
  386. package/static/chunk-RCAORRB7.js +1 -0
  387. package/static/chunk-RK7XRDNB.js +1 -0
  388. package/static/chunk-RO7SAOLK.js +1 -0
  389. package/static/chunk-RQUUINHV.js +1 -0
  390. package/static/chunk-RT3K6DZR.js +1 -0
  391. package/static/chunk-RUN556VW.js +1 -0
  392. package/static/chunk-RX3YQ67K.js +1 -0
  393. package/static/chunk-S6EVLDHA.js +5 -0
  394. package/static/chunk-S7S5M3AZ.js +1 -0
  395. package/static/chunk-SBLNYV74.js +1 -0
  396. package/static/chunk-SIZCHHUA.js +1 -0
  397. package/static/chunk-SRBOO7AO.js +1 -0
  398. package/static/{chunk-PVDHBQRM.js → chunk-STA7NTYL.js} +1 -1
  399. package/static/chunk-T3YI3BSS.js +1 -0
  400. package/static/chunk-T74SMT7I.js +1 -0
  401. package/static/chunk-TAL3RTTQ.js +1 -0
  402. package/static/chunk-TJZKTNNS.js +1 -0
  403. package/static/chunk-UJTFWZEC.js +1 -0
  404. package/static/chunk-UPGVU5LG.js +1 -0
  405. package/static/chunk-UQ6O3I6W.js +1 -0
  406. package/static/{chunk-5NMSIIQB.js → chunk-V43RGNXA.js} +1 -1
  407. package/static/chunk-VWIRXLNE.js +1 -0
  408. package/static/chunk-VZMVGIVW.js +1 -0
  409. package/static/chunk-VZPCXSRG.js +2 -0
  410. package/static/chunk-WR3MA3L3.js +1 -0
  411. package/static/chunk-XCLK7NJL.js +1 -0
  412. package/static/{chunk-DSWEWLXJ.js → chunk-XCPDPB5G.js} +1 -1
  413. package/static/chunk-XEGHEUP5.js +1 -0
  414. package/static/chunk-XKEBQNQJ.js +1 -0
  415. package/static/chunk-XOF4UW3S.js +1 -0
  416. package/static/chunk-XOTKK2NJ.js +1 -0
  417. package/static/chunk-XX7JXKA6.js +1 -0
  418. package/static/chunk-Y2I36A4K.js +1 -0
  419. package/static/chunk-Y44XDRM5.js +1 -0
  420. package/static/{chunk-QO6BTONN.js → chunk-Y4MAPE2C.js} +1 -1
  421. package/static/chunk-Y5RLD72B.js +1 -0
  422. package/static/{chunk-DPUVSXRB.js → chunk-Y5XTRCFK.js} +1 -1
  423. package/static/chunk-Y63UUJGJ.js +1 -0
  424. package/static/chunk-YBNAC7QM.js +1 -0
  425. package/static/chunk-YCTCESL4.js +1 -0
  426. package/static/chunk-YMAN4LIU.js +1 -0
  427. package/static/chunk-YTDE6SXT.js +1 -0
  428. package/static/chunk-YZPIUJB3.js +1 -0
  429. package/static/chunk-ZCOWBVOT.js +1 -0
  430. package/static/chunk-ZHRYYMYE.js +1 -0
  431. package/static/chunk-ZNXTOQFG.js +1 -0
  432. package/static/{chunk-URHTCJ7G.js → chunk-ZQLBPLXI.js} +1 -1
  433. package/static/favicon.ico +0 -0
  434. package/static/index.html +2 -2
  435. package/static/main-3PLRDZTO.js +11 -0
  436. package/static/styles-Q4OZOSSK.css +1 -0
  437. package/server/applications/notifications/interfaces/user-mail-notification.js.map +0 -1
  438. package/static/assets/codemirror/mode/apl/apl.js +0 -174
  439. package/static/assets/codemirror/mode/asciiarmor/asciiarmor.js +0 -74
  440. package/static/assets/codemirror/mode/asn.1/asn.1.js +0 -204
  441. package/static/assets/codemirror/mode/asterisk/asterisk.js +0 -220
  442. package/static/assets/codemirror/mode/brainfuck/brainfuck.js +0 -85
  443. package/static/assets/codemirror/mode/clike/clike.js +0 -942
  444. package/static/assets/codemirror/mode/clojure/clojure.js +0 -293
  445. package/static/assets/codemirror/mode/cmake/cmake.js +0 -97
  446. package/static/assets/codemirror/mode/cobol/cobol.js +0 -255
  447. package/static/assets/codemirror/mode/coffeescript/coffeescript.js +0 -359
  448. package/static/assets/codemirror/mode/commonlisp/commonlisp.js +0 -125
  449. package/static/assets/codemirror/mode/crystal/crystal.js +0 -433
  450. package/static/assets/codemirror/mode/css/css.js +0 -862
  451. package/static/assets/codemirror/mode/cypher/cypher.js +0 -152
  452. package/static/assets/codemirror/mode/d/d.js +0 -223
  453. package/static/assets/codemirror/mode/dart/dart.js +0 -168
  454. package/static/assets/codemirror/mode/diff/diff.js +0 -47
  455. package/static/assets/codemirror/mode/django/django.js +0 -356
  456. package/static/assets/codemirror/mode/dockerfile/dockerfile.js +0 -211
  457. package/static/assets/codemirror/mode/dtd/dtd.js +0 -142
  458. package/static/assets/codemirror/mode/dylan/dylan.js +0 -352
  459. package/static/assets/codemirror/mode/ebnf/ebnf.js +0 -195
  460. package/static/assets/codemirror/mode/ecl/ecl.js +0 -206
  461. package/static/assets/codemirror/mode/eiffel/eiffel.js +0 -160
  462. package/static/assets/codemirror/mode/elm/elm.js +0 -245
  463. package/static/assets/codemirror/mode/erlang/erlang.js +0 -619
  464. package/static/assets/codemirror/mode/factor/factor.js +0 -85
  465. package/static/assets/codemirror/mode/fcl/fcl.js +0 -173
  466. package/static/assets/codemirror/mode/forth/forth.js +0 -180
  467. package/static/assets/codemirror/mode/fortran/fortran.js +0 -188
  468. package/static/assets/codemirror/mode/gas/gas.js +0 -355
  469. package/static/assets/codemirror/mode/gfm/gfm.js +0 -129
  470. package/static/assets/codemirror/mode/gherkin/gherkin.js +0 -194
  471. package/static/assets/codemirror/mode/go/go.js +0 -187
  472. package/static/assets/codemirror/mode/groovy/groovy.js +0 -245
  473. package/static/assets/codemirror/mode/haml/haml.js +0 -161
  474. package/static/assets/codemirror/mode/handlebars/handlebars.js +0 -70
  475. package/static/assets/codemirror/mode/haskell/haskell.js +0 -268
  476. package/static/assets/codemirror/mode/haskell-literate/haskell-literate.js +0 -43
  477. package/static/assets/codemirror/mode/haxe/haxe.js +0 -515
  478. package/static/assets/codemirror/mode/htmlembedded/htmlembedded.js +0 -37
  479. package/static/assets/codemirror/mode/htmlmixed/htmlmixed.js +0 -153
  480. package/static/assets/codemirror/mode/http/http.js +0 -113
  481. package/static/assets/codemirror/mode/idl/idl.js +0 -290
  482. package/static/assets/codemirror/mode/javascript/javascript.js +0 -960
  483. package/static/assets/codemirror/mode/jinja2/jinja2.js +0 -193
  484. package/static/assets/codemirror/mode/jsx/jsx.js +0 -149
  485. package/static/assets/codemirror/mode/julia/julia.js +0 -390
  486. package/static/assets/codemirror/mode/livescript/livescript.js +0 -280
  487. package/static/assets/codemirror/mode/lua/lua.js +0 -160
  488. package/static/assets/codemirror/mode/markdown/markdown.js +0 -886
  489. package/static/assets/codemirror/mode/mathematica/mathematica.js +0 -176
  490. package/static/assets/codemirror/mode/mbox/mbox.js +0 -129
  491. package/static/assets/codemirror/mode/meta.js +0 -221
  492. package/static/assets/codemirror/mode/mirc/mirc.js +0 -193
  493. package/static/assets/codemirror/mode/mllike/mllike.js +0 -359
  494. package/static/assets/codemirror/mode/modelica/modelica.js +0 -245
  495. package/static/assets/codemirror/mode/mscgen/mscgen.js +0 -175
  496. package/static/assets/codemirror/mode/mumps/mumps.js +0 -148
  497. package/static/assets/codemirror/mode/nginx/nginx.js +0 -178
  498. package/static/assets/codemirror/mode/nsis/nsis.js +0 -95
  499. package/static/assets/codemirror/mode/ntriples/ntriples.js +0 -195
  500. package/static/assets/codemirror/mode/octave/octave.js +0 -139
  501. package/static/assets/codemirror/mode/oz/oz.js +0 -252
  502. package/static/assets/codemirror/mode/pascal/pascal.js +0 -136
  503. package/static/assets/codemirror/mode/pegjs/pegjs.js +0 -111
  504. package/static/assets/codemirror/mode/perl/perl.js +0 -836
  505. package/static/assets/codemirror/mode/php/php.js +0 -234
  506. package/static/assets/codemirror/mode/pig/pig.js +0 -178
  507. package/static/assets/codemirror/mode/powershell/powershell.js +0 -398
  508. package/static/assets/codemirror/mode/properties/properties.js +0 -78
  509. package/static/assets/codemirror/mode/protobuf/protobuf.js +0 -72
  510. package/static/assets/codemirror/mode/pug/pug.js +0 -591
  511. package/static/assets/codemirror/mode/puppet/puppet.js +0 -220
  512. package/static/assets/codemirror/mode/python/python.js +0 -402
  513. package/static/assets/codemirror/mode/q/q.js +0 -139
  514. package/static/assets/codemirror/mode/r/r.js +0 -190
  515. package/static/assets/codemirror/mode/rpm/changes/index.html +0 -66
  516. package/static/assets/codemirror/mode/rpm/rpm.js +0 -109
  517. package/static/assets/codemirror/mode/rst/rst.js +0 -557
  518. package/static/assets/codemirror/mode/ruby/ruby.js +0 -303
  519. package/static/assets/codemirror/mode/rust/rust.js +0 -72
  520. package/static/assets/codemirror/mode/sas/sas.js +0 -303
  521. package/static/assets/codemirror/mode/sass/sass.js +0 -459
  522. package/static/assets/codemirror/mode/scheme/scheme.js +0 -284
  523. package/static/assets/codemirror/mode/shell/shell.js +0 -168
  524. package/static/assets/codemirror/mode/sieve/sieve.js +0 -193
  525. package/static/assets/codemirror/mode/slim/slim.js +0 -575
  526. package/static/assets/codemirror/mode/smalltalk/smalltalk.js +0 -168
  527. package/static/assets/codemirror/mode/smarty/smarty.js +0 -225
  528. package/static/assets/codemirror/mode/solr/solr.js +0 -104
  529. package/static/assets/codemirror/mode/soy/soy.js +0 -665
  530. package/static/assets/codemirror/mode/sparql/sparql.js +0 -184
  531. package/static/assets/codemirror/mode/spreadsheet/spreadsheet.js +0 -112
  532. package/static/assets/codemirror/mode/sql/sql.js +0 -529
  533. package/static/assets/codemirror/mode/stex/stex.js +0 -264
  534. package/static/assets/codemirror/mode/stylus/stylus.js +0 -775
  535. package/static/assets/codemirror/mode/swift/swift.js +0 -221
  536. package/static/assets/codemirror/mode/tcl/tcl.js +0 -140
  537. package/static/assets/codemirror/mode/textile/textile.js +0 -469
  538. package/static/assets/codemirror/mode/tiddlywiki/tiddlywiki.css +0 -14
  539. package/static/assets/codemirror/mode/tiddlywiki/tiddlywiki.js +0 -308
  540. package/static/assets/codemirror/mode/tiki/tiki.css +0 -26
  541. package/static/assets/codemirror/mode/tiki/tiki.js +0 -312
  542. package/static/assets/codemirror/mode/toml/toml.js +0 -88
  543. package/static/assets/codemirror/mode/tornado/tornado.js +0 -68
  544. package/static/assets/codemirror/mode/troff/troff.js +0 -84
  545. package/static/assets/codemirror/mode/ttcn/ttcn.js +0 -283
  546. package/static/assets/codemirror/mode/ttcn-cfg/ttcn-cfg.js +0 -214
  547. package/static/assets/codemirror/mode/turtle/turtle.js +0 -162
  548. package/static/assets/codemirror/mode/twig/twig.js +0 -141
  549. package/static/assets/codemirror/mode/vb/vb.js +0 -275
  550. package/static/assets/codemirror/mode/vbscript/vbscript.js +0 -350
  551. package/static/assets/codemirror/mode/velocity/velocity.js +0 -202
  552. package/static/assets/codemirror/mode/verilog/verilog.js +0 -781
  553. package/static/assets/codemirror/mode/vhdl/vhdl.js +0 -189
  554. package/static/assets/codemirror/mode/vue/vue.js +0 -77
  555. package/static/assets/codemirror/mode/wast/wast.js +0 -132
  556. package/static/assets/codemirror/mode/webidl/webidl.js +0 -195
  557. package/static/assets/codemirror/mode/xml/xml.js +0 -417
  558. package/static/assets/codemirror/mode/xquery/xquery.js +0 -448
  559. package/static/assets/codemirror/mode/yacas/yacas.js +0 -204
  560. package/static/assets/codemirror/mode/yaml/yaml.js +0 -120
  561. package/static/assets/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js +0 -72
  562. package/static/assets/codemirror/mode/z80/z80.js +0 -116
  563. package/static/chunk-2KLC4T2Z.js +0 -1
  564. package/static/chunk-373XVRXW.js +0 -1
  565. package/static/chunk-3XVM35O2.js +0 -1
  566. package/static/chunk-3YVRP3VM.js +0 -2
  567. package/static/chunk-AF24EYXU.js +0 -1
  568. package/static/chunk-AKQVEHO6.js +0 -2
  569. package/static/chunk-AY2SZ3G6.js +0 -1
  570. package/static/chunk-BCVX464U.js +0 -2
  571. package/static/chunk-C36MW4ME.js +0 -562
  572. package/static/chunk-DKSEQTMX.js +0 -1
  573. package/static/chunk-FZ3JPGYZ.js +0 -1
  574. package/static/chunk-GUGNR5TF.js +0 -3
  575. package/static/chunk-H6NE33VX.js +0 -1
  576. package/static/chunk-HNQRZALS.js +0 -1
  577. package/static/chunk-JSWCNGXJ.js +0 -1
  578. package/static/chunk-KFJIQIGR.js +0 -1
  579. package/static/chunk-LVM4QB22.js +0 -1
  580. package/static/chunk-M3XVNQZQ.js +0 -1
  581. package/static/chunk-MFLIJH6T.js +0 -1
  582. package/static/chunk-MSUHTBB2.js +0 -1
  583. package/static/chunk-N3U6637P.js +0 -1
  584. package/static/chunk-NNV4OXSB.js +0 -1
  585. package/static/chunk-NO2LTNW3.js +0 -1
  586. package/static/chunk-OOGP4WSH.js +0 -2
  587. package/static/chunk-PCWDQPOM.js +0 -2
  588. package/static/chunk-PGZZP5W3.js +0 -1
  589. package/static/chunk-Q5KM7LTX.js +0 -1
  590. package/static/chunk-QHC6ZPQ4.js +0 -1
  591. package/static/chunk-QZU2S5CV.js +0 -1
  592. package/static/chunk-SBZ572Q4.js +0 -2
  593. package/static/chunk-SHIVUDP3.js +0 -1
  594. package/static/chunk-SLHTEGRU.js +0 -1
  595. package/static/chunk-SSFF27P2.js +0 -24
  596. package/static/chunk-TPYBFZS5.js +0 -1
  597. package/static/chunk-UEQCWMXD.js +0 -1
  598. package/static/chunk-UG5DMXYO.js +0 -1
  599. package/static/chunk-UJPPR4MX.js +0 -1
  600. package/static/chunk-V3AT2BKP.js +0 -1
  601. package/static/chunk-VKK5BSLX.js +0 -1
  602. package/static/chunk-WJW7CT6G.js +0 -27
  603. package/static/chunk-X5XGK6T7.js +0 -4
  604. package/static/chunk-YEKR5OPO.js +0 -1
  605. package/static/chunk-YW57T2PF.js +0 -1
  606. package/static/chunk-Z5J5F5SX.js +0 -1
  607. package/static/chunk-ZPF2DSQV.js +0 -1
  608. package/static/chunk-ZTCRGJ6Y.js +0 -7
  609. package/static/main-VOL6OMJ5.js +0 -9
  610. package/static/scripts-WRDOQIU5.js +0 -24
  611. package/static/styles-2C2UNCNB.css +0 -1
@@ -16,8 +16,8 @@ _export(exports, {
16
16
  get auth2FaMail () {
17
17
  return auth2FaMail;
18
18
  },
19
- get authLocked () {
20
- return authLocked;
19
+ get authLockedMail () {
20
+ return authLockedMail;
21
21
  },
22
22
  get commentMail () {
23
23
  return commentMail;
@@ -25,6 +25,12 @@ _export(exports, {
25
25
  get linkMail () {
26
26
  return linkMail;
27
27
  },
28
+ get requestUnlockMail () {
29
+ return requestUnlockMail;
30
+ },
31
+ get serverUpdateAvailableMail () {
32
+ return serverUpdateAvailableMail;
33
+ },
28
34
  get shareMail () {
29
35
  return shareMail;
30
36
  },
@@ -152,7 +158,7 @@ function auth2FaMail(language, notification) {
152
158
  (0, _templates.mailTemplate)(content, footer)
153
159
  ];
154
160
  }
155
- function authLocked(language, notification) {
161
+ function authLockedMail(language, notification) {
156
162
  const tr = (0, _i18n.translateObject)(language, {
157
163
  title: 'Security notification',
158
164
  footer: 'This security notification concerns your Sync-in account. Please contact an administrator to perform the analysis and unlock your account.',
@@ -166,5 +172,34 @@ function authLocked(language, notification) {
166
172
  (0, _templates.mailTemplate)(content, footer)
167
173
  ];
168
174
  }
175
+ function requestUnlockMail(language, notification, options) {
176
+ const tr = (0, _i18n.translateObject)(language, {
177
+ title: 'Unlock Request',
178
+ defaultFooter: _templates.defaultFooter,
179
+ footer: 'You receive this notification because you have a lock on this file.',
180
+ urlText: 'Access it from',
181
+ event: notification.event
182
+ });
183
+ const content = `${options.author ? (0, _templates.mailAuthor)(options.author) : ''}${(0, _templates.mailEventOnElement)(tr.event, notification.element)}`;
184
+ const footer = `<br>${tr.urlText}&nbsp;<a href="${(0, _urls.urlFromSpaceFile)(options.currentUrl, notification)}">${_shared.SERVER_NAME}</a><br>${tr.footer}<br>${tr.defaultFooter}`;
185
+ return [
186
+ `${tr.title}: ${(0, _shared.capitalizeString)(notification.element)}`,
187
+ (0, _templates.mailTemplate)(content, footer)
188
+ ];
189
+ }
190
+ function serverUpdateAvailableMail(language, notification) {
191
+ const tr = (0, _i18n.translateObject)(language, {
192
+ title: 'New Version Available',
193
+ defaultFooter: _templates.defaultFooter,
194
+ footer: 'You receive this notification because you are the administrator of this server.',
195
+ event: notification.event
196
+ });
197
+ const content = `${tr.event}:&nbsp;<b><a href="${notification.externalUrl}" target="_blank" rel="noopener">${notification.element}</a></b>`;
198
+ const footer = `<br>${tr.footer}<br>${tr.defaultFooter}`;
199
+ return [
200
+ `${_shared.SERVER_NAME} - ${tr.title}`,
201
+ (0, _templates.mailTemplate)(content, footer)
202
+ ];
203
+ }
169
204
 
170
205
  //# sourceMappingURL=models.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/notifications/mails/models.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 { ACTION } from '../../../common/constants'\nimport { i18nLocale } from '../../../common/i18n'\nimport { capitalizeString, SERVER_NAME } from '../../../common/shared'\nimport { fileName } from '../../files/utils/files'\nimport { UserModel } from '../../users/models/user.model'\nimport { translateObject } from '../i18n'\nimport { NotificationContent } from '../interfaces/notification-properties.interface'\nimport { defaultFooter, mailAuthor, mailEventOnElement, mailItalicContent, mailTemplate } from './templates'\nimport { urlFromLink, urlFromSpace, urlFromSpaceFile, urlFromSync } from './urls'\n\nexport function commentMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n content: string\n currentUrl: string\n author: UserModel\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Comment',\n defaultFooter: defaultFooter,\n footer: 'You receive this notification if you are the owner of the file or if you have also commented on this file',\n urlText: 'Access it from',\n event: notification.event\n })\n\n const content = `${mailAuthor(options.author)}${mailEventOnElement(tr.event, notification.element)}${mailItalicContent(options.content)}`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${urlFromSpaceFile(options.currentUrl, notification)}\">${SERVER_NAME}</a><br>${tr.footer}<br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function spaceMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n action: ACTION\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Space',\n defaultFooter: defaultFooter,\n urlText: options.action === ACTION.ADD ? 'Access it from' : 'Access your spaces from',\n event: notification.event\n })\n\n const spaceUrl = urlFromSpace(options.currentUrl, options.action === ACTION.ADD ? notification.element : undefined)\n\n const content = `${mailEventOnElement(tr.event, notification.element)}`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${spaceUrl}\">${SERVER_NAME}</a><br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function spaceRootMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n author: UserModel\n action: ACTION\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Space',\n defaultFooter: defaultFooter,\n urlText: options.action === ACTION.ADD ? 'Access it from' : 'Access this space from',\n event: notification.event,\n originEvent: options.action === ACTION.ADD ? 'to the space' : 'from the space'\n })\n\n const spaceName = fileName(notification.url)\n const spaceRootUrl =\n options.action === ACTION.ADD ? urlFromSpaceFile(options.currentUrl, notification) : urlFromSpace(options.currentUrl, spaceName)\n\n const content = `${mailAuthor(options.author)}${mailEventOnElement(tr.event, notification.element)}&nbsp;${tr.originEvent}&nbsp;<b>${spaceName}</b>`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${spaceRootUrl}\">${SERVER_NAME}</a><br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(spaceName)}`, mailTemplate(content, footer)]\n}\n\nexport function shareMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n author: UserModel\n action: ACTION\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Share',\n defaultFooter: defaultFooter,\n urlText: options.action === ACTION.ADD ? 'Access it from' : 'Access your shares from',\n event: notification.event\n })\n\n const content = `${options.author ? mailAuthor(options.author) : ''}${mailEventOnElement(tr.event, notification.element)}`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${urlFromSpaceFile(options.currentUrl, notification)}\">${SERVER_NAME}</a><br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function linkMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n author: UserModel\n action: ACTION\n linkUUID: string\n linkPassword: string\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: options.action === ACTION.ADD ? 'Share' : 'Space',\n passwordText: 'Access password',\n urlText: 'Access it from',\n event: notification.event\n })\n\n let content = `${options.author ? mailAuthor(options.author) : ''}${mailEventOnElement(tr.event, notification.element)}`\n\n if (options.linkPassword) {\n content += `<br><br>${tr.passwordText}:&nbsp;<div style=\"border:1px solid #000; padding:8px; display:inline-block;\">${options.linkPassword}</div>`\n }\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${urlFromLink(options.currentUrl, options.linkUUID)}\">${SERVER_NAME}</a>`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function syncMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n action: ACTION\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Sync',\n defaultFooter: defaultFooter,\n urlText: options.action === ACTION.ADD ? 'Access it from' : 'Access your syncs from',\n event: notification.event\n })\n\n const syncUrl = urlFromSync(options.currentUrl)\n\n const content = `${mailEventOnElement(tr.event, notification.element)}`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${syncUrl}\">${SERVER_NAME}</a><br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function auth2FaMail(language: i18nLocale, notification: NotificationContent): [string, string] {\n const tr = translateObject(language, {\n title: 'Security notification',\n footer:\n 'You received this notification because the security of your Sync-in account has changed. If you think this was a mistake, please review your security settings or contact your administrator.',\n event: notification.event,\n addressIp: 'Address IP',\n browser: 'Browser'\n })\n\n const content = `${tr.event}<br><br>${tr.addressIp}:&nbsp;${notification.url}<br>${tr.browser}:&nbsp;${notification.element}`\n\n const footer = `<br>${tr.footer}<br>`\n\n return [tr.title, mailTemplate(content, footer)]\n}\n\nexport function authLocked(language: i18nLocale, notification: NotificationContent): [string, string] {\n const tr = translateObject(language, {\n title: 'Security notification',\n footer:\n 'This security notification concerns your Sync-in account. Please contact an administrator to perform the analysis and unlock your account.',\n event: notification.event,\n addressIp: 'Address IP'\n })\n\n const content = `${tr.event}<br><br>${tr.addressIp}:&nbsp;${notification.url}<br>`\n\n const footer = `<br>${tr.footer}<br>`\n\n return [tr.title, mailTemplate(content, footer)]\n}\n"],"names":["auth2FaMail","authLocked","commentMail","linkMail","shareMail","spaceMail","spaceRootMail","syncMail","language","notification","options","tr","translateObject","title","defaultFooter","footer","urlText","event","content","mailAuthor","author","mailEventOnElement","element","mailItalicContent","urlFromSpaceFile","currentUrl","SERVER_NAME","capitalizeString","mailTemplate","action","ACTION","ADD","spaceUrl","urlFromSpace","undefined","originEvent","spaceName","fileName","url","spaceRootUrl","passwordText","linkPassword","urlFromLink","linkUUID","syncUrl","urlFromSync","addressIp","browser"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/notifications/mails/models.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 { ACTION } from '../../../common/constants'\nimport { i18nLocale } from '../../../common/i18n'\nimport { capitalizeString, SERVER_NAME } from '../../../common/shared'\nimport { fileName } from '../../files/utils/files'\nimport { UserModel } from '../../users/models/user.model'\nimport { translateObject } from '../i18n'\nimport { NotificationContent } from '../interfaces/notification-properties.interface'\nimport { defaultFooter, mailAuthor, mailEventOnElement, mailItalicContent, mailTemplate } from './templates'\nimport { urlFromLink, urlFromSpace, urlFromSpaceFile, urlFromSync } from './urls'\n\nexport function commentMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n content: string\n currentUrl: string\n author: UserModel\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Comment',\n defaultFooter: defaultFooter,\n footer: 'You receive this notification if you are the owner of the file or if you have also commented on this file',\n urlText: 'Access it from',\n event: notification.event\n })\n\n const content = `${mailAuthor(options.author)}${mailEventOnElement(tr.event, notification.element)}${mailItalicContent(options.content)}`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${urlFromSpaceFile(options.currentUrl, notification)}\">${SERVER_NAME}</a><br>${tr.footer}<br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function spaceMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n action: ACTION\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Space',\n defaultFooter: defaultFooter,\n urlText: options.action === ACTION.ADD ? 'Access it from' : 'Access your spaces from',\n event: notification.event\n })\n\n const spaceUrl = urlFromSpace(options.currentUrl, options.action === ACTION.ADD ? notification.element : undefined)\n\n const content = `${mailEventOnElement(tr.event, notification.element)}`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${spaceUrl}\">${SERVER_NAME}</a><br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function spaceRootMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n author: UserModel\n action: ACTION\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Space',\n defaultFooter: defaultFooter,\n urlText: options.action === ACTION.ADD ? 'Access it from' : 'Access this space from',\n event: notification.event,\n originEvent: options.action === ACTION.ADD ? 'to the space' : 'from the space'\n })\n\n const spaceName = fileName(notification.url)\n const spaceRootUrl =\n options.action === ACTION.ADD ? urlFromSpaceFile(options.currentUrl, notification) : urlFromSpace(options.currentUrl, spaceName)\n\n const content = `${mailAuthor(options.author)}${mailEventOnElement(tr.event, notification.element)}&nbsp;${tr.originEvent}&nbsp;<b>${spaceName}</b>`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${spaceRootUrl}\">${SERVER_NAME}</a><br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(spaceName)}`, mailTemplate(content, footer)]\n}\n\nexport function shareMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n author: UserModel\n action: ACTION\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Share',\n defaultFooter: defaultFooter,\n urlText: options.action === ACTION.ADD ? 'Access it from' : 'Access your shares from',\n event: notification.event\n })\n\n const content = `${options.author ? mailAuthor(options.author) : ''}${mailEventOnElement(tr.event, notification.element)}`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${urlFromSpaceFile(options.currentUrl, notification)}\">${SERVER_NAME}</a><br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function linkMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n author: UserModel\n action: ACTION\n linkUUID: string\n linkPassword: string\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: options.action === ACTION.ADD ? 'Share' : 'Space',\n passwordText: 'Access password',\n urlText: 'Access it from',\n event: notification.event\n })\n\n let content = `${options.author ? mailAuthor(options.author) : ''}${mailEventOnElement(tr.event, notification.element)}`\n\n if (options.linkPassword) {\n content += `<br><br>${tr.passwordText}:&nbsp;<div style=\"border:1px solid #000; padding:8px; display:inline-block;\">${options.linkPassword}</div>`\n }\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${urlFromLink(options.currentUrl, options.linkUUID)}\">${SERVER_NAME}</a>`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function syncMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n action: ACTION\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Sync',\n defaultFooter: defaultFooter,\n urlText: options.action === ACTION.ADD ? 'Access it from' : 'Access your syncs from',\n event: notification.event\n })\n\n const syncUrl = urlFromSync(options.currentUrl)\n\n const content = `${mailEventOnElement(tr.event, notification.element)}`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${syncUrl}\">${SERVER_NAME}</a><br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function auth2FaMail(language: i18nLocale, notification: NotificationContent): [string, string] {\n const tr = translateObject(language, {\n title: 'Security notification',\n footer:\n 'You received this notification because the security of your Sync-in account has changed. If you think this was a mistake, please review your security settings or contact your administrator.',\n event: notification.event,\n addressIp: 'Address IP',\n browser: 'Browser'\n })\n\n const content = `${tr.event}<br><br>${tr.addressIp}:&nbsp;${notification.url}<br>${tr.browser}:&nbsp;${notification.element}`\n\n const footer = `<br>${tr.footer}<br>`\n\n return [tr.title, mailTemplate(content, footer)]\n}\n\nexport function authLockedMail(language: i18nLocale, notification: NotificationContent): [string, string] {\n const tr = translateObject(language, {\n title: 'Security notification',\n footer:\n 'This security notification concerns your Sync-in account. Please contact an administrator to perform the analysis and unlock your account.',\n event: notification.event,\n addressIp: 'Address IP'\n })\n\n const content = `${tr.event}<br><br>${tr.addressIp}:&nbsp;${notification.url}<br>`\n\n const footer = `<br>${tr.footer}<br>`\n\n return [tr.title, mailTemplate(content, footer)]\n}\n\nexport function requestUnlockMail(\n language: i18nLocale,\n notification: NotificationContent,\n options: {\n currentUrl: string\n author: UserModel\n }\n): [string, string] {\n const tr = translateObject(language, {\n title: 'Unlock Request',\n defaultFooter: defaultFooter,\n footer: 'You receive this notification because you have a lock on this file.',\n urlText: 'Access it from',\n event: notification.event\n })\n\n const content = `${options.author ? mailAuthor(options.author) : ''}${mailEventOnElement(tr.event, notification.element)}`\n\n const footer = `<br>${tr.urlText}&nbsp;<a href=\"${urlFromSpaceFile(options.currentUrl, notification)}\">${SERVER_NAME}</a><br>${tr.footer}<br>${tr.defaultFooter}`\n\n return [`${tr.title}: ${capitalizeString(notification.element)}`, mailTemplate(content, footer)]\n}\n\nexport function serverUpdateAvailableMail(language: i18nLocale, notification: NotificationContent): [string, string] {\n const tr = translateObject(language, {\n title: 'New Version Available',\n defaultFooter: defaultFooter,\n footer: 'You receive this notification because you are the administrator of this server.',\n event: notification.event\n })\n\n const content = `${tr.event}:&nbsp;<b><a href=\"${notification.externalUrl}\" target=\"_blank\" rel=\"noopener\">${notification.element}</a></b>`\n\n const footer = `<br>${tr.footer}<br>${tr.defaultFooter}`\n\n return [`${SERVER_NAME} - ${tr.title}`, mailTemplate(content, footer)]\n}\n"],"names":["auth2FaMail","authLockedMail","commentMail","linkMail","requestUnlockMail","serverUpdateAvailableMail","shareMail","spaceMail","spaceRootMail","syncMail","language","notification","options","tr","translateObject","title","defaultFooter","footer","urlText","event","content","mailAuthor","author","mailEventOnElement","element","mailItalicContent","urlFromSpaceFile","currentUrl","SERVER_NAME","capitalizeString","mailTemplate","action","ACTION","ADD","spaceUrl","urlFromSpace","undefined","originEvent","spaceName","fileName","url","spaceRootUrl","passwordText","linkPassword","urlFromLink","linkUUID","syncUrl","urlFromSync","addressIp","browser","externalUrl"],"mappings":"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"}
@@ -30,7 +30,7 @@ _export(exports, {
30
30
  }
31
31
  });
32
32
  const _shared = require("../../../common/shared");
33
- const defaultFooter = 'If you no longer wish to receive notifications, change your preferences directly from your user space';
33
+ const defaultFooter = 'If you no longer wish to receive notifications, change your preferences directly from your user space.';
34
34
  const mailTemplate = (content, footer)=>`
35
35
  <html lang="en">
36
36
  <meta charset="utf-8"/>
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/notifications/mails/templates.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 { capitalizeString } from '../../../common/shared'\nimport { UserModel } from '../../users/models/user.model'\n\nexport const defaultFooter = 'If you no longer wish to receive notifications, change your preferences directly from your user space'\n\nexport const mailTemplate = (content: string, footer: string) => `\n<html lang=\"en\">\n<meta charset=\"utf-8\"/>\n<body>\n<div>\n${content}\n</div>\n<small style=\"color:#666\">\n--\n${footer}\n</small>\n</body\n</html>`\n\nexport const mailAuthor = (author: UserModel) =>\n `<img style=\"border-radius: 50% !important; vertical-align: middle; object-fit: cover;\" height=\"40\" width=\"40\" src=\"${author.avatarBase64}\" alt=\"avatar\">&nbsp;<b>${author.fullName}</b>&nbsp;`\n\nexport const mailEventOnElement = (event: string, element: string) => `${event}:&nbsp;<b>${capitalizeString(element)}</b>`\n\nexport const mailItalicContent = (content: string) => `<p><i>${content}</i></p>`\n"],"names":["defaultFooter","mailAuthor","mailEventOnElement","mailItalicContent","mailTemplate","content","footer","author","avatarBase64","fullName","event","element","capitalizeString"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAKYA;eAAAA;;QAgBAC;eAAAA;;QAGAC;eAAAA;;QAEAC;eAAAA;;QAnBAC;eAAAA;;;wBALoB;AAG1B,MAAMJ,gBAAgB;AAEtB,MAAMI,eAAe,CAACC,SAAiBC,SAAmB,CAAC;;;;;AAKlE,EAAED,QAAQ;;;;AAIV,EAAEC,OAAO;;;OAGF,CAAC;AAED,MAAML,aAAa,CAACM,SACzB,CAAC,mHAAmH,EAAEA,OAAOC,YAAY,CAAC,wBAAwB,EAAED,OAAOE,QAAQ,CAAC,UAAU,CAAC;AAE1L,MAAMP,qBAAqB,CAACQ,OAAeC,UAAoB,GAAGD,MAAM,UAAU,EAAEE,IAAAA,wBAAgB,EAACD,SAAS,IAAI,CAAC;AAEnH,MAAMR,oBAAoB,CAACE,UAAoB,CAAC,MAAM,EAAEA,QAAQ,QAAQ,CAAC"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/notifications/mails/templates.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 { capitalizeString } from '../../../common/shared'\nimport { UserModel } from '../../users/models/user.model'\n\nexport const defaultFooter = 'If you no longer wish to receive notifications, change your preferences directly from your user space.'\n\nexport const mailTemplate = (content: string, footer: string) => `\n<html lang=\"en\">\n<meta charset=\"utf-8\"/>\n<body>\n<div>\n${content}\n</div>\n<small style=\"color:#666\">\n--\n${footer}\n</small>\n</body\n</html>`\n\nexport const mailAuthor = (author: UserModel) =>\n `<img style=\"border-radius: 50% !important; vertical-align: middle; object-fit: cover;\" height=\"40\" width=\"40\" src=\"${author.avatarBase64}\" alt=\"avatar\">&nbsp;<b>${author.fullName}</b>&nbsp;`\n\nexport const mailEventOnElement = (event: string, element: string) => `${event}:&nbsp;<b>${capitalizeString(element)}</b>`\n\nexport const mailItalicContent = (content: string) => `<p><i>${content}</i></p>`\n"],"names":["defaultFooter","mailAuthor","mailEventOnElement","mailItalicContent","mailTemplate","content","footer","author","avatarBase64","fullName","event","element","capitalizeString"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAKYA;eAAAA;;QAgBAC;eAAAA;;QAGAC;eAAAA;;QAEAC;eAAAA;;QAnBAC;eAAAA;;;wBALoB;AAG1B,MAAMJ,gBAAgB;AAEtB,MAAMI,eAAe,CAACC,SAAiBC,SAAmB,CAAC;;;;;AAKlE,EAAED,QAAQ;;;;AAIV,EAAEC,OAAO;;;OAGF,CAAC;AAED,MAAML,aAAa,CAACM,SACzB,CAAC,mHAAmH,EAAEA,OAAOC,YAAY,CAAC,wBAAwB,EAAED,OAAOE,QAAQ,CAAC,UAAU,CAAC;AAE1L,MAAMP,qBAAqB,CAACQ,OAAeC,UAAoB,GAAGD,MAAM,UAAU,EAAEE,IAAAA,wBAAgB,EAACD,SAAS,IAAI,CAAC;AAEnH,MAAMR,oBAAoB,CAACE,UAAoB,CAAC,MAAM,EAAEA,QAAQ,QAAQ,CAAC"}
@@ -121,7 +121,14 @@ let NotificationsManager = class NotificationsManager {
121
121
  case _notifications.NOTIFICATION_APP.AUTH_2FA:
122
122
  return (0, _models.auth2FaMail)(language, content);
123
123
  case _notifications.NOTIFICATION_APP.AUTH_LOCKED:
124
- return (0, _models.authLocked)(language, content);
124
+ return (0, _models.authLockedMail)(language, content);
125
+ case _notifications.NOTIFICATION_APP.UNLOCK_REQUEST:
126
+ return (0, _models.requestUnlockMail)(language, content, {
127
+ currentUrl: options.currentUrl,
128
+ author: options.author
129
+ });
130
+ case _notifications.NOTIFICATION_APP.UPDATE_AVAILABLE:
131
+ return (0, _models.serverUpdateAvailableMail)(language, content);
125
132
  default:
126
133
  this.logger.error(`${this.genMail.name} - case not handled : ${content.app}`);
127
134
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/notifications/services/notifications-manager.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Injectable, Logger } from '@nestjs/common'\nimport { i18nLocale } from '../../../common/i18n'\nimport { MailProps } from '../../../infrastructure/mailer/interfaces/mail.interface'\nimport { Mailer } from '../../../infrastructure/mailer/mailer.service'\nimport { USER_NOTIFICATION } from '../../users/constants/user'\nimport { UserModel } from '../../users/models/user.model'\nimport { getAvatarBase64 } from '../../users/utils/avatar'\nimport { NOTIFICATION_APP } from '../constants/notifications'\nimport { NOTIFICATIONS_WS } from '../constants/websocket'\nimport type { NotificationContent, NotificationFromUser, NotificationOptions } from '../interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../interfaces/user-mail-notification'\nimport { auth2FaMail, authLocked, commentMail, linkMail, shareMail, spaceMail, spaceRootMail, syncMail } from '../mails/models'\nimport { WebSocketNotifications } from '../notifications.gateway'\nimport { NotificationsQueries } from './notifications-queries.service'\n\n@Injectable()\nexport class NotificationsManager {\n private readonly logger = new Logger(NotificationsManager.name)\n\n constructor(\n private readonly mailer: Mailer,\n private readonly notificationsQueries: NotificationsQueries,\n private readonly webSocketNotifications: WebSocketNotifications\n ) {}\n\n list(user: UserModel, onlyUnread: boolean = false): Promise<NotificationFromUser[]> {\n return this.notificationsQueries.list(user.id, onlyUnread)\n }\n\n async create(toUsers: UserMailNotification[] | number[], content: NotificationContent, options?: NotificationOptions): Promise<void> {\n // store it in db\n const isArrayOfUsers: boolean = typeof toUsers[0] === 'object'\n const toUserIds = isArrayOfUsers ? (toUsers as UserMailNotification[]).map((m) => m.id) : (toUsers as number[])\n this.storeNotification(toUserIds, content, options?.author?.id).catch((e: Error) => this.logger.error(`${this.create.name} - ${e}`))\n\n // send websocket notification\n this.webSocketNotifications.sendMessageToUsers(toUserIds, NOTIFICATIONS_WS.EVENTS.NOTIFICATION, 'check')\n\n // send emails\n if (this.mailer.available) {\n const usersNotifiedByEmail: UserMailNotification[] = isArrayOfUsers\n ? (toUsers as UserMailNotification[]).filter((u) => u.notification === USER_NOTIFICATION.APPLICATION_EMAIL)\n : await this.notificationsQueries.usersNotifiedByEmail(toUsers as number[])\n if (!usersNotifiedByEmail.length) {\n return\n }\n this.sendEmailNotification(usersNotifiedByEmail, content, options).catch((e: Error) => this.logger.error(`${this.create.name} - ${e}`))\n }\n }\n\n wasRead(user: UserModel, notificationId?: number): void {\n this.notificationsQueries.wasRead(user.id, notificationId).catch((e: Error) => this.logger.error(`${this.wasRead.name} - ${e}`))\n }\n\n async delete(user: UserModel, notificationId?: number): Promise<void> {\n return this.notificationsQueries.delete(user.id, notificationId)\n }\n\n async sendEmailNotification(toUsers: UserMailNotification[], content: NotificationContent, options?: NotificationOptions): Promise<void> {\n if (!this.mailer.available) {\n return\n }\n if (options?.author) {\n options.author.avatarBase64 = await getAvatarBase64(options.author.login)\n }\n this.mailer\n .sendMails(\n await Promise.all(\n toUsers.map(async (m) => {\n const [title, html] = this.genMail(m.language as i18nLocale, content, options)\n return {\n to: m.email,\n subject: title,\n html: html\n } satisfies MailProps\n })\n )\n )\n .catch((e: Error) => this.logger.error(`${this.sendEmailNotification.name} - ${e}`))\n }\n\n private async storeNotification(toUserIds: number[], content: NotificationContent, authorId?: number): Promise<void> {\n // store it in db\n try {\n await this.notificationsQueries.create(authorId || null, toUserIds, content)\n } catch (e) {\n this.logger.error(`${this.create.name} - ${e}`)\n }\n }\n\n private genMail(language: i18nLocale, content: NotificationContent, options?: NotificationOptions): [string, string] {\n switch (content.app) {\n case NOTIFICATION_APP.COMMENTS:\n return commentMail(language, content, { content: options.content, currentUrl: options.currentUrl, author: options.author })\n case NOTIFICATION_APP.SPACES:\n return spaceMail(language, content, { currentUrl: options.currentUrl, action: options.action })\n case NOTIFICATION_APP.SPACE_ROOTS:\n return spaceRootMail(language, content, { currentUrl: options.currentUrl, author: options.author, action: options.action })\n case NOTIFICATION_APP.SHARES:\n return shareMail(language, content, { currentUrl: options.currentUrl, author: options.author, action: options.action })\n case NOTIFICATION_APP.LINKS:\n return linkMail(language, content, {\n currentUrl: options.currentUrl,\n author: options.author,\n linkUUID: options.linkUUID,\n linkPassword: options.linkPassword,\n action: options.action\n })\n case NOTIFICATION_APP.SYNC:\n return syncMail(language, content, { currentUrl: options.currentUrl, action: options.action })\n case NOTIFICATION_APP.AUTH_2FA:\n return auth2FaMail(language, content)\n case NOTIFICATION_APP.AUTH_LOCKED:\n return authLocked(language, content)\n default:\n this.logger.error(`${this.genMail.name} - case not handled : ${content.app}`)\n }\n }\n}\n"],"names":["NotificationsManager","list","user","onlyUnread","notificationsQueries","id","create","toUsers","content","options","isArrayOfUsers","toUserIds","map","m","storeNotification","author","catch","e","logger","error","name","webSocketNotifications","sendMessageToUsers","NOTIFICATIONS_WS","EVENTS","NOTIFICATION","mailer","available","usersNotifiedByEmail","filter","u","notification","USER_NOTIFICATION","APPLICATION_EMAIL","length","sendEmailNotification","wasRead","notificationId","delete","avatarBase64","getAvatarBase64","login","sendMails","Promise","all","title","html","genMail","language","to","email","subject","authorId","app","NOTIFICATION_APP","COMMENTS","commentMail","currentUrl","SPACES","spaceMail","action","SPACE_ROOTS","spaceRootMail","SHARES","shareMail","LINKS","linkMail","linkUUID","linkPassword","SYNC","syncMail","AUTH_2FA","auth2FaMail","AUTH_LOCKED","authLocked","Logger"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/notifications/services/notifications-manager.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Injectable, Logger } from '@nestjs/common'\nimport { i18nLocale } from '../../../common/i18n'\nimport { MailProps } from '../../../infrastructure/mailer/interfaces/mail.interface'\nimport { Mailer } from '../../../infrastructure/mailer/mailer.service'\nimport { USER_NOTIFICATION } from '../../users/constants/user'\nimport { UserModel } from '../../users/models/user.model'\nimport { getAvatarBase64 } from '../../users/utils/avatar'\nimport { NOTIFICATION_APP } from '../constants/notifications'\nimport { NOTIFICATIONS_WS } from '../constants/websocket'\nimport type { NotificationContent, NotificationFromUser, NotificationOptions } from '../interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../interfaces/user-mail-notification.interface'\nimport {\n auth2FaMail,\n authLockedMail,\n commentMail,\n linkMail,\n requestUnlockMail,\n serverUpdateAvailableMail,\n shareMail,\n spaceMail,\n spaceRootMail,\n syncMail\n} from '../mails/models'\nimport { WebSocketNotifications } from '../notifications.gateway'\nimport { NotificationsQueries } from './notifications-queries.service'\n\n@Injectable()\nexport class NotificationsManager {\n private readonly logger = new Logger(NotificationsManager.name)\n\n constructor(\n private readonly mailer: Mailer,\n private readonly notificationsQueries: NotificationsQueries,\n private readonly webSocketNotifications: WebSocketNotifications\n ) {}\n\n list(user: UserModel, onlyUnread: boolean = false): Promise<NotificationFromUser[]> {\n return this.notificationsQueries.list(user.id, onlyUnread)\n }\n\n async create(toUsers: UserMailNotification[] | number[], content: NotificationContent, options?: NotificationOptions): Promise<void> {\n // store it in db\n const isArrayOfUsers: boolean = typeof toUsers[0] === 'object'\n const toUserIds = isArrayOfUsers ? (toUsers as UserMailNotification[]).map((m) => m.id) : (toUsers as number[])\n this.storeNotification(toUserIds, content, options?.author?.id).catch((e: Error) => this.logger.error(`${this.create.name} - ${e}`))\n\n // send websocket notification\n this.webSocketNotifications.sendMessageToUsers(toUserIds, NOTIFICATIONS_WS.EVENTS.NOTIFICATION, 'check')\n\n // send emails\n if (this.mailer.available) {\n const usersNotifiedByEmail: UserMailNotification[] = isArrayOfUsers\n ? (toUsers as UserMailNotification[]).filter((u) => u.notification === USER_NOTIFICATION.APPLICATION_EMAIL)\n : await this.notificationsQueries.usersNotifiedByEmail(toUsers as number[])\n if (!usersNotifiedByEmail.length) {\n return\n }\n this.sendEmailNotification(usersNotifiedByEmail, content, options).catch((e: Error) => this.logger.error(`${this.create.name} - ${e}`))\n }\n }\n\n wasRead(user: UserModel, notificationId?: number): void {\n this.notificationsQueries.wasRead(user.id, notificationId).catch((e: Error) => this.logger.error(`${this.wasRead.name} - ${e}`))\n }\n\n async delete(user: UserModel, notificationId?: number): Promise<void> {\n return this.notificationsQueries.delete(user.id, notificationId)\n }\n\n async sendEmailNotification(toUsers: UserMailNotification[], content: NotificationContent, options?: NotificationOptions): Promise<void> {\n if (!this.mailer.available) {\n return\n }\n if (options?.author) {\n options.author.avatarBase64 = await getAvatarBase64(options.author.login)\n }\n this.mailer\n .sendMails(\n await Promise.all(\n toUsers.map(async (m) => {\n const [title, html] = this.genMail(m.language as i18nLocale, content, options)\n return {\n to: m.email,\n subject: title,\n html: html\n } satisfies MailProps\n })\n )\n )\n .catch((e: Error) => this.logger.error(`${this.sendEmailNotification.name} - ${e}`))\n }\n\n private async storeNotification(toUserIds: number[], content: NotificationContent, authorId?: number): Promise<void> {\n // store it in db\n try {\n await this.notificationsQueries.create(authorId || null, toUserIds, content)\n } catch (e) {\n this.logger.error(`${this.create.name} - ${e}`)\n }\n }\n\n private genMail(language: i18nLocale, content: NotificationContent, options?: NotificationOptions): [string, string] {\n switch (content.app) {\n case NOTIFICATION_APP.COMMENTS:\n return commentMail(language, content, { content: options.content, currentUrl: options.currentUrl, author: options.author })\n case NOTIFICATION_APP.SPACES:\n return spaceMail(language, content, { currentUrl: options.currentUrl, action: options.action })\n case NOTIFICATION_APP.SPACE_ROOTS:\n return spaceRootMail(language, content, { currentUrl: options.currentUrl, author: options.author, action: options.action })\n case NOTIFICATION_APP.SHARES:\n return shareMail(language, content, { currentUrl: options.currentUrl, author: options.author, action: options.action })\n case NOTIFICATION_APP.LINKS:\n return linkMail(language, content, {\n currentUrl: options.currentUrl,\n author: options.author,\n linkUUID: options.linkUUID,\n linkPassword: options.linkPassword,\n action: options.action\n })\n case NOTIFICATION_APP.SYNC:\n return syncMail(language, content, { currentUrl: options.currentUrl, action: options.action })\n case NOTIFICATION_APP.AUTH_2FA:\n return auth2FaMail(language, content)\n case NOTIFICATION_APP.AUTH_LOCKED:\n return authLockedMail(language, content)\n case NOTIFICATION_APP.UNLOCK_REQUEST:\n return requestUnlockMail(language, content, { currentUrl: options.currentUrl, author: options.author })\n case NOTIFICATION_APP.UPDATE_AVAILABLE:\n return serverUpdateAvailableMail(language, content)\n default:\n this.logger.error(`${this.genMail.name} - case not handled : ${content.app}`)\n }\n }\n}\n"],"names":["NotificationsManager","list","user","onlyUnread","notificationsQueries","id","create","toUsers","content","options","isArrayOfUsers","toUserIds","map","m","storeNotification","author","catch","e","logger","error","name","webSocketNotifications","sendMessageToUsers","NOTIFICATIONS_WS","EVENTS","NOTIFICATION","mailer","available","usersNotifiedByEmail","filter","u","notification","USER_NOTIFICATION","APPLICATION_EMAIL","length","sendEmailNotification","wasRead","notificationId","delete","avatarBase64","getAvatarBase64","login","sendMails","Promise","all","title","html","genMail","language","to","email","subject","authorId","app","NOTIFICATION_APP","COMMENTS","commentMail","currentUrl","SPACES","spaceMail","action","SPACE_ROOTS","spaceRootMail","SHARES","shareMail","LINKS","linkMail","linkUUID","linkPassword","SYNC","syncMail","AUTH_2FA","auth2FaMail","AUTH_LOCKED","authLockedMail","UNLOCK_REQUEST","requestUnlockMail","UPDATE_AVAILABLE","serverUpdateAvailableMail","Logger"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/notifications/services/notifications-queries.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Inject, Injectable } from '@nestjs/common'\nimport { and, desc, eq, inArray, SelectedFields, SQL } from 'drizzle-orm'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { dbCheckAffectedRows } from '../../../infrastructure/database/utils'\nimport { USER_NOTIFICATION } from '../../users/constants/user'\nimport { userFullNameSQL, users } from '../../users/schemas/users.schema'\nimport type { NotificationContent, NotificationFromUser } from '../interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../interfaces/user-mail-notification'\nimport { Notification } from '../schemas/notification.interface'\nimport { notifications } from '../schemas/notifications.schema'\n\n@Injectable()\nexport class NotificationsQueries {\n constructor(@Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema) {}\n\n list(userId: number, onlyUnread: boolean = false): Promise<NotificationFromUser[]> {\n const where: SQL[] = [eq(notifications.toUserId, userId), ...(onlyUnread ? [eq(notifications.wasRead, false)] : [])]\n return this.db\n .select({\n id: notifications.id,\n fromUser: { id: users.id, login: users.login, email: users.email, fullName: userFullNameSQL(users) },\n content: notifications.content,\n wasRead: notifications.wasRead,\n createdAt: notifications.createdAt\n } satisfies NotificationFromUser | SelectedFields<any, any>)\n .from(notifications)\n .leftJoin(users, eq(users.id, notifications.fromUserId))\n .where(and(...where))\n .orderBy(desc(notifications.id))\n }\n\n async create(fromUserId: number, toUserIds: number[], content: NotificationContent): Promise<void> {\n dbCheckAffectedRows(\n await this.db.insert(notifications).values(\n toUserIds.map((toUserId: number) => ({\n fromUserId: fromUserId,\n toUserId: toUserId,\n content: content\n }))\n ),\n toUserIds.length\n )\n }\n\n async wasRead(userId: number, notificationId: number): Promise<void> {\n await this.db\n .update(notifications)\n .set({ wasRead: true } as Notification)\n .where(and(eq(notifications.toUserId, userId), eq(notifications.id, notificationId), eq(notifications.wasRead, false)))\n }\n\n async delete(userId: number, notificationId?: number): Promise<void> {\n const where: SQL[] = [eq(notifications.toUserId, userId), ...(notificationId ? [eq(notifications.id, notificationId)] : [])]\n await this.db.delete(notifications).where(and(...where))\n }\n\n usersNotifiedByEmail(userIds: number[]): Promise<UserMailNotification[]> {\n return this.db\n .select({\n id: users.id,\n email: users.email,\n language: users.language,\n notification: users.notification\n } satisfies UserMailNotification | SelectedFields<any, any>)\n .from(users)\n .where(and(inArray(users.id, userIds), eq(users.notification, USER_NOTIFICATION.APPLICATION_EMAIL)))\n }\n}\n"],"names":["NotificationsQueries","list","userId","onlyUnread","where","eq","notifications","toUserId","wasRead","db","select","id","fromUser","users","login","email","fullName","userFullNameSQL","content","createdAt","from","leftJoin","fromUserId","and","orderBy","desc","create","toUserIds","dbCheckAffectedRows","insert","values","map","length","notificationId","update","set","delete","usersNotifiedByEmail","userIds","language","notification","inArray","USER_NOTIFICATION","APPLICATION_EMAIL"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/notifications/services/notifications-queries.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Inject, Injectable } from '@nestjs/common'\nimport { and, desc, eq, inArray, SelectedFields, SQL } from 'drizzle-orm'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { dbCheckAffectedRows } from '../../../infrastructure/database/utils'\nimport { USER_NOTIFICATION } from '../../users/constants/user'\nimport { userFullNameSQL, users } from '../../users/schemas/users.schema'\nimport type { NotificationContent, NotificationFromUser } from '../interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../interfaces/user-mail-notification.interface'\nimport { Notification } from '../schemas/notification.interface'\nimport { notifications } from '../schemas/notifications.schema'\n\n@Injectable()\nexport class NotificationsQueries {\n constructor(@Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema) {}\n\n list(userId: number, onlyUnread: boolean = false): Promise<NotificationFromUser[]> {\n const where: SQL[] = [eq(notifications.toUserId, userId), ...(onlyUnread ? [eq(notifications.wasRead, false)] : [])]\n return this.db\n .select({\n id: notifications.id,\n fromUser: { id: users.id, login: users.login, email: users.email, fullName: userFullNameSQL(users) },\n content: notifications.content,\n wasRead: notifications.wasRead,\n createdAt: notifications.createdAt\n } satisfies NotificationFromUser | SelectedFields<any, any>)\n .from(notifications)\n .leftJoin(users, eq(users.id, notifications.fromUserId))\n .where(and(...where))\n .orderBy(desc(notifications.id))\n }\n\n async create(fromUserId: number, toUserIds: number[], content: NotificationContent): Promise<void> {\n dbCheckAffectedRows(\n await this.db.insert(notifications).values(\n toUserIds.map((toUserId: number) => ({\n fromUserId: fromUserId,\n toUserId: toUserId,\n content: content\n }))\n ),\n toUserIds.length\n )\n }\n\n async wasRead(userId: number, notificationId: number): Promise<void> {\n await this.db\n .update(notifications)\n .set({ wasRead: true } as Notification)\n .where(and(eq(notifications.toUserId, userId), eq(notifications.id, notificationId), eq(notifications.wasRead, false)))\n }\n\n async delete(userId: number, notificationId?: number): Promise<void> {\n const where: SQL[] = [eq(notifications.toUserId, userId), ...(notificationId ? [eq(notifications.id, notificationId)] : [])]\n await this.db.delete(notifications).where(and(...where))\n }\n\n usersNotifiedByEmail(userIds: number[]): Promise<UserMailNotification[]> {\n return this.db\n .select({\n id: users.id,\n email: users.email,\n language: users.language,\n notification: users.notification\n } satisfies UserMailNotification | SelectedFields<any, any>)\n .from(users)\n .where(and(inArray(users.id, userIds), eq(users.notification, USER_NOTIFICATION.APPLICATION_EMAIL)))\n }\n}\n"],"names":["NotificationsQueries","list","userId","onlyUnread","where","eq","notifications","toUserId","wasRead","db","select","id","fromUser","users","login","email","fullName","userFullNameSQL","content","createdAt","from","leftJoin","fromUserId","and","orderBy","desc","create","toUserIds","dbCheckAffectedRows","insert","values","map","length","notificationId","update","set","delete","usersNotifiedByEmail","userIds","language","notification","inArray","USER_NOTIFICATION","APPLICATION_EMAIL"],"mappings":"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"}
@@ -16,6 +16,7 @@ const _common = require("@nestjs/common");
16
16
  const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
17
17
  const _constants = require("../../../common/constants");
18
18
  const _functions = require("../../../common/functions");
19
+ const _shared = require("../../../common/shared");
19
20
  const _contextmanagerservice = require("../../../infrastructure/context/services/context-manager.service");
20
21
  const _fileerror = require("../../files/models/file-error");
21
22
  const _files = require("../../files/utils/files");
@@ -127,6 +128,12 @@ let SharesManager = class SharesManager {
127
128
  share.ownerId = user.id;
128
129
  if (createOrUpdateShareDto.file.ownerId) {
129
130
  /* PERSONAL SPACE CASE */ // check file
131
+ if (createOrUpdateShareDto.file.ownerId === user.id && createOrUpdateShareDto.file.id > 0) {
132
+ // When a user shares a root space they own, it is recommended to create the share from their personal space.
133
+ // `file.path` come from a root space with a custom name (invalid in the personal space context); if so, retrieve the original path.
134
+ const f = await this.spacesQueries.getUserFile(user.id, createOrUpdateShareDto.file.id);
135
+ if (f) createOrUpdateShareDto.file.path = f.path;
136
+ }
130
137
  const realPath = _nodepath.default.join(user.filesPath, createOrUpdateShareDto.file.path);
131
138
  if (!await (0, _files.isPathExists)(realPath)) {
132
139
  this.logger.warn(`${this.createShare.name} - location does not exist : ${realPath}`);
@@ -147,11 +154,11 @@ let SharesManager = class SharesManager {
147
154
  space.setPermissions(true);
148
155
  // intersect space permissions for members
149
156
  for (const m of createOrUpdateShareDto.members){
150
- m.permissions = (0, _functions.intersectPermissions)(space.envPermissions, m.permissions);
157
+ m.permissions = (0, _shared.intersectPermissions)(space.envPermissions, m.permissions);
151
158
  }
152
159
  // intersect space permissions for links
153
160
  for (const l of createOrUpdateShareDto.links){
154
- l.permissions = (0, _functions.intersectPermissions)(space.envPermissions, l.permissions);
161
+ l.permissions = (0, _shared.intersectPermissions)(space.envPermissions, l.permissions);
155
162
  }
156
163
  // check file
157
164
  try {
@@ -187,7 +194,7 @@ let SharesManager = class SharesManager {
187
194
  }
188
195
  // create share
189
196
  share.id = await this.sharesQueries.createShare(share);
190
- // check & update members
197
+ // check and update members
191
198
  await this.createOrUpdateLinksAsMembers(user, share, _links.LINK_TYPE.SHARE, createOrUpdateShareDto.links);
192
199
  await this.updateMembers(user, share, [], createOrUpdateShareDto.members);
193
200
  return this.getShareWithMembers(user, share.id);
@@ -224,11 +231,11 @@ let SharesManager = class SharesManager {
224
231
  const linkMembers = await this.createOrUpdateLinksAsMembers(user, share, _links.LINK_TYPE.SHARE, createOrUpdateShareDto.links);
225
232
  // intersect share permissions for members
226
233
  for (const m of createOrUpdateShareDto.members){
227
- m.permissions = (0, _functions.intersectPermissions)(share.file.permissions, m.permissions);
234
+ m.permissions = (0, _shared.intersectPermissions)(share.file.permissions, m.permissions);
228
235
  }
229
236
  // intersect share permissions for links
230
237
  for (const l of linkMembers){
231
- l.permissions = (0, _functions.intersectPermissions)(share.file.permissions, l.permissions);
238
+ l.permissions = (0, _shared.intersectPermissions)(share.file.permissions, l.permissions);
232
239
  }
233
240
  await this.updateMembers(user, share, share.members, [
234
241
  ...createOrUpdateShareDto.members,
@@ -342,11 +349,11 @@ let SharesManager = class SharesManager {
342
349
  share.id = await this.sharesQueries.createShare(share);
343
350
  // intersect parent share permissions for members
344
351
  for (const m of createOrUpdateShareDto.members){
345
- m.permissions = (0, _functions.intersectPermissions)(pSharePermissions.permissions, m.permissions);
352
+ m.permissions = (0, _shared.intersectPermissions)(pSharePermissions.permissions, m.permissions);
346
353
  }
347
354
  // intersect parent share permissions for links
348
355
  for (const l of createOrUpdateShareDto.links){
349
- l.permissions = (0, _functions.intersectPermissions)(pSharePermissions.permissions, l.permissions);
356
+ l.permissions = (0, _shared.intersectPermissions)(pSharePermissions.permissions, l.permissions);
350
357
  }
351
358
  // check & update members
352
359
  await this.createOrUpdateLinksAsMembers(user, share, _links.LINK_TYPE.SHARE, createOrUpdateShareDto.links);
@@ -547,7 +554,7 @@ let SharesManager = class SharesManager {
547
554
  // permissions are only present if the share type is link
548
555
  // intersect permissions to ensure that the user does not attempt to exceed his rights
549
556
  const shareLink = await this.getShareLink(user, spaceOrShareId);
550
- updateMember.permissions = (0, _functions.intersectPermissions)(shareLink.file.permissions, v);
557
+ updateMember.permissions = (0, _shared.intersectPermissions)(shareLink.file.permissions, v);
551
558
  }
552
559
  break;
553
560
  case 'language':
@@ -984,7 +991,7 @@ let SharesManager = class SharesManager {
984
991
  url: _spaces.SPACE_REPOSITORY.SHARES
985
992
  };
986
993
  this.notificationsManager.create(memberIds, notification, {
987
- currentUrl: this.contextManager.get('headerOriginUrl'),
994
+ currentUrl: this.contextManager.headerOriginUrl(),
988
995
  author: user,
989
996
  action: action
990
997
  }).catch((e)=>this.logger.error(`${this.clearCachePermissionsAndOrNotify.name} - ${e}`));
@@ -1010,7 +1017,7 @@ let SharesManager = class SharesManager {
1010
1017
  author: user,
1011
1018
  linkUUID: link.linkSettings.uuid,
1012
1019
  linkPassword: link.linkSettings.password,
1013
- currentUrl: this.contextManager.get('headerOriginUrl'),
1020
+ currentUrl: this.contextManager.headerOriginUrl(),
1014
1021
  action: action
1015
1022
  }).catch((e)=>this.logger.error(`${this.notifyGuestLink.name} - ${e}`));
1016
1023
  }