@sync-in/server 1.11.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1040) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +1 -1
  3. package/README.md +3 -11
  4. package/environment/environment.dist.min.yaml +1 -1
  5. package/environment/environment.dist.yaml +173 -28
  6. package/package.json +17 -16
  7. package/server/app.bootstrap.js +1 -5
  8. package/server/app.bootstrap.js.map +1 -1
  9. package/server/app.constants.js +1 -5
  10. package/server/app.constants.js.map +1 -1
  11. package/server/app.e2e-spec.js +1 -5
  12. package/server/app.e2e-spec.js.map +1 -1
  13. package/server/app.functions.js +1 -5
  14. package/server/app.functions.js.map +1 -1
  15. package/server/app.module.js +1 -5
  16. package/server/app.module.js.map +1 -1
  17. package/server/app.service.js +1 -5
  18. package/server/app.service.js.map +1 -1
  19. package/server/app.service.spec.js +2 -6
  20. package/server/app.service.spec.js.map +1 -1
  21. package/server/applications/admin/admin.module.js +1 -5
  22. package/server/applications/admin/admin.module.js.map +1 -1
  23. package/server/applications/admin/constants/routes.js +1 -5
  24. package/server/applications/admin/constants/routes.js.map +1 -1
  25. package/server/applications/admin/interfaces/check-update.interfaces.js +1 -5
  26. package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -1
  27. package/server/applications/admin/services/admin-scheduler.service.js +1 -5
  28. package/server/applications/admin/services/admin-scheduler.service.js.map +1 -1
  29. package/server/applications/admin/services/admin.service.js +13 -8
  30. package/server/applications/admin/services/admin.service.js.map +1 -1
  31. package/server/applications/admin/services/admin.service.spec.js +1 -5
  32. package/server/applications/admin/services/admin.service.spec.js.map +1 -1
  33. package/server/applications/admin/utils/check-update.js +1 -5
  34. package/server/applications/admin/utils/check-update.js.map +1 -1
  35. package/server/applications/applications.config.js +1 -5
  36. package/server/applications/applications.config.js.map +1 -1
  37. package/server/applications/applications.constants.js +5 -5
  38. package/server/applications/applications.constants.js.map +1 -1
  39. package/server/applications/applications.module.js +1 -5
  40. package/server/applications/applications.module.js.map +1 -1
  41. package/server/applications/comments/comments.controller.js +1 -5
  42. package/server/applications/comments/comments.controller.js.map +1 -1
  43. package/server/applications/comments/comments.controller.spec.js +1 -5
  44. package/server/applications/comments/comments.controller.spec.js.map +1 -1
  45. package/server/applications/comments/comments.module.js +1 -5
  46. package/server/applications/comments/comments.module.js.map +1 -1
  47. package/server/applications/comments/constants/routes.js +1 -5
  48. package/server/applications/comments/constants/routes.js.map +1 -1
  49. package/server/applications/comments/dto/comment.dto.js +1 -5
  50. package/server/applications/comments/dto/comment.dto.js.map +1 -1
  51. package/server/applications/comments/interfaces/comment-recent.interface.js +1 -5
  52. package/server/applications/comments/interfaces/comment-recent.interface.js.map +1 -1
  53. package/server/applications/comments/schemas/comment.interface.js +1 -5
  54. package/server/applications/comments/schemas/comment.interface.js.map +1 -1
  55. package/server/applications/comments/schemas/comments.schema.js +1 -5
  56. package/server/applications/comments/schemas/comments.schema.js.map +1 -1
  57. package/server/applications/comments/services/comments-manager.service.js +9 -7
  58. package/server/applications/comments/services/comments-manager.service.js.map +1 -1
  59. package/server/applications/comments/services/comments-manager.service.spec.js +10 -8
  60. package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
  61. package/server/applications/comments/services/comments-queries.service.js +1 -5
  62. package/server/applications/comments/services/comments-queries.service.js.map +1 -1
  63. package/server/applications/files/adapters/files-indexer-mysql.service.js +29 -12
  64. package/server/applications/files/adapters/files-indexer-mysql.service.js.map +1 -1
  65. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js +1 -5
  66. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js.map +1 -1
  67. package/server/applications/files/constants/cache.js +1 -5
  68. package/server/applications/files/constants/cache.js.map +1 -1
  69. package/server/applications/files/constants/compress.js +1 -5
  70. package/server/applications/files/constants/compress.js.map +1 -1
  71. package/server/applications/files/constants/files.js +1 -5
  72. package/server/applications/files/constants/files.js.map +1 -1
  73. package/server/applications/files/constants/indexing.js +1 -5
  74. package/server/applications/files/constants/indexing.js.map +1 -1
  75. package/server/applications/files/constants/operations.js +1 -5
  76. package/server/applications/files/constants/operations.js.map +1 -1
  77. package/server/applications/files/constants/routes.js +1 -5
  78. package/server/applications/files/constants/routes.js.map +1 -1
  79. package/server/applications/files/constants/samples.js +1 -5
  80. package/server/applications/files/constants/samples.js.map +1 -1
  81. package/server/applications/files/dto/file-operations.dto.js +1 -5
  82. package/server/applications/files/dto/file-operations.dto.js.map +1 -1
  83. package/server/applications/files/events/file-task-event.js +1 -5
  84. package/server/applications/files/events/file-task-event.js.map +1 -1
  85. package/server/applications/files/files-tasks.controller.js +1 -5
  86. package/server/applications/files/files-tasks.controller.js.map +1 -1
  87. package/server/applications/files/files-tasks.controller.spec.js +1 -5
  88. package/server/applications/files/files-tasks.controller.spec.js.map +1 -1
  89. package/server/applications/files/files.config.js +1 -5
  90. package/server/applications/files/files.config.js.map +1 -1
  91. package/server/applications/files/files.controller.js +1 -5
  92. package/server/applications/files/files.controller.js.map +1 -1
  93. package/server/applications/files/files.controller.spec.js +1 -5
  94. package/server/applications/files/files.controller.spec.js.map +1 -1
  95. package/server/applications/files/files.module.js +1 -5
  96. package/server/applications/files/files.module.js.map +1 -1
  97. package/server/applications/files/interfaces/file-db-props.interface.js +1 -5
  98. package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
  99. package/server/applications/files/interfaces/file-lock.interface.js +1 -5
  100. package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
  101. package/server/applications/files/interfaces/file-parse-index.js +1 -5
  102. package/server/applications/files/interfaces/file-parse-index.js.map +1 -1
  103. package/server/applications/files/interfaces/file-props.interface.js +1 -5
  104. package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
  105. package/server/applications/files/interfaces/file-recent-location.interface.js +1 -5
  106. package/server/applications/files/interfaces/file-recent-location.interface.js.map +1 -1
  107. package/server/applications/files/interfaces/file-space.interface.js +1 -5
  108. package/server/applications/files/interfaces/file-space.interface.js.map +1 -1
  109. package/server/applications/files/interfaces/file-tree.interface.js +1 -5
  110. package/server/applications/files/interfaces/file-tree.interface.js.map +1 -1
  111. package/server/applications/files/models/file-error.js +1 -5
  112. package/server/applications/files/models/file-error.js.map +1 -1
  113. package/server/applications/files/models/file-lock-error.js +1 -5
  114. package/server/applications/files/models/file-lock-error.js.map +1 -1
  115. package/server/applications/files/models/file-task.js +1 -5
  116. package/server/applications/files/models/file-task.js.map +1 -1
  117. package/server/applications/files/models/files-indexer.js +1 -5
  118. package/server/applications/files/models/files-indexer.js.map +1 -1
  119. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +1 -5
  120. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -1
  121. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +21 -10
  122. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -1
  123. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +1 -5
  124. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -1
  125. package/server/applications/files/modules/collabora-online/collabora-online.config.js +1 -5
  126. package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -1
  127. package/server/applications/files/modules/collabora-online/collabora-online.constants.js +1 -5
  128. package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -1
  129. package/server/applications/files/modules/collabora-online/collabora-online.controller.js +1 -5
  130. package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -1
  131. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +1 -5
  132. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -1
  133. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js +1 -5
  134. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -1
  135. package/server/applications/files/modules/collabora-online/collabora-online.guard.js +1 -5
  136. package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -1
  137. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +1 -5
  138. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -1
  139. package/server/applications/files/modules/collabora-online/collabora-online.interface.js +1 -5
  140. package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -1
  141. package/server/applications/files/modules/collabora-online/collabora-online.module.js +1 -5
  142. package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -1
  143. package/server/applications/files/modules/collabora-online/collabora-online.routes.js +1 -5
  144. package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -1
  145. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +1 -5
  146. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -1
  147. package/server/applications/files/modules/collabora-online/collabora-online.utils.js +1 -5
  148. package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -1
  149. package/server/applications/files/modules/file-editor-providers.interface.js +6 -0
  150. package/server/applications/files/modules/file-editor-providers.interface.js.map +1 -0
  151. package/server/applications/files/modules/only-office/only-office-environment.decorator.js +1 -5
  152. package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -1
  153. package/server/applications/files/modules/only-office/only-office-manager.service.js +57 -19
  154. package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -1
  155. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +1 -5
  156. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -1
  157. package/server/applications/files/modules/only-office/only-office.config.js +1 -5
  158. package/server/applications/files/modules/only-office/only-office.config.js.map +1 -1
  159. package/server/applications/files/modules/only-office/only-office.constants.js +1 -5
  160. package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -1
  161. package/server/applications/files/modules/only-office/only-office.controller.js +1 -5
  162. package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -1
  163. package/server/applications/files/modules/only-office/only-office.controller.spec.js +1 -5
  164. package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -1
  165. package/server/applications/files/modules/only-office/only-office.dtos.js +1 -5
  166. package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -1
  167. package/server/applications/files/modules/only-office/only-office.guard.js +1 -5
  168. package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -1
  169. package/server/applications/files/modules/only-office/only-office.guard.spec.js +1 -5
  170. package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -1
  171. package/server/applications/files/modules/only-office/only-office.interface.js +1 -5
  172. package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -1
  173. package/server/applications/files/modules/only-office/only-office.module.js +1 -5
  174. package/server/applications/files/modules/only-office/only-office.module.js.map +1 -1
  175. package/server/applications/files/modules/only-office/only-office.routes.js +1 -5
  176. package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -1
  177. package/server/applications/files/modules/only-office/only-office.strategy.js +1 -5
  178. package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -1
  179. package/server/applications/files/schemas/file-content.interface.js +1 -5
  180. package/server/applications/files/schemas/file-content.interface.js.map +1 -1
  181. package/server/applications/files/schemas/file-recent.interface.js +1 -5
  182. package/server/applications/files/schemas/file-recent.interface.js.map +1 -1
  183. package/server/applications/files/schemas/file.interface.js +1 -5
  184. package/server/applications/files/schemas/file.interface.js.map +1 -1
  185. package/server/applications/files/schemas/files-content.schema.js +1 -5
  186. package/server/applications/files/schemas/files-content.schema.js.map +1 -1
  187. package/server/applications/files/schemas/files-recents.schema.js +1 -5
  188. package/server/applications/files/schemas/files-recents.schema.js.map +1 -1
  189. package/server/applications/files/schemas/files.schema.js +1 -5
  190. package/server/applications/files/schemas/files.schema.js.map +1 -1
  191. package/server/applications/files/services/files-content-manager.service.js +45 -16
  192. package/server/applications/files/services/files-content-manager.service.js.map +1 -1
  193. package/server/applications/files/services/files-lock-manager.service.js +53 -18
  194. package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
  195. package/server/applications/files/services/files-lock-manager.service.spec.js +1 -5
  196. package/server/applications/files/services/files-lock-manager.service.spec.js.map +1 -1
  197. package/server/applications/files/services/files-manager.service.js +77 -24
  198. package/server/applications/files/services/files-manager.service.js.map +1 -1
  199. package/server/applications/files/services/files-manager.service.spec.js +1 -5
  200. package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
  201. package/server/applications/files/services/files-methods.service.js +5 -6
  202. package/server/applications/files/services/files-methods.service.js.map +1 -1
  203. package/server/applications/files/services/files-methods.service.spec.js +1 -5
  204. package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
  205. package/server/applications/files/services/files-parser.service.js +13 -8
  206. package/server/applications/files/services/files-parser.service.js.map +1 -1
  207. package/server/applications/files/services/files-parser.service.spec.js +1 -5
  208. package/server/applications/files/services/files-parser.service.spec.js.map +1 -1
  209. package/server/applications/files/services/files-queries.service.js +29 -12
  210. package/server/applications/files/services/files-queries.service.js.map +1 -1
  211. package/server/applications/files/services/files-recents.service.js +1 -5
  212. package/server/applications/files/services/files-recents.service.js.map +1 -1
  213. package/server/applications/files/services/files-recents.service.spec.js +1 -5
  214. package/server/applications/files/services/files-recents.service.spec.js.map +1 -1
  215. package/server/applications/files/services/files-scheduler.service.js +77 -24
  216. package/server/applications/files/services/files-scheduler.service.js.map +1 -1
  217. package/server/applications/files/services/files-search-manager.service.js +9 -7
  218. package/server/applications/files/services/files-search-manager.service.js.map +1 -1
  219. package/server/applications/files/services/files-search-manager.service.spec.js +1 -5
  220. package/server/applications/files/services/files-search-manager.service.spec.js.map +1 -1
  221. package/server/applications/files/services/files-tasks-manager.service.js +77 -24
  222. package/server/applications/files/services/files-tasks-manager.service.js.map +1 -1
  223. package/server/applications/files/services/files-tasks-manager.service.spec.js +1 -5
  224. package/server/applications/files/services/files-tasks-manager.service.spec.js.map +1 -1
  225. package/server/applications/files/utils/doc-textify/adapters/excel.js +1 -5
  226. package/server/applications/files/utils/doc-textify/adapters/excel.js.map +1 -1
  227. package/server/applications/files/utils/doc-textify/adapters/html.js +1 -5
  228. package/server/applications/files/utils/doc-textify/adapters/html.js.map +1 -1
  229. package/server/applications/files/utils/doc-textify/adapters/open-office.js +1 -5
  230. package/server/applications/files/utils/doc-textify/adapters/open-office.js.map +1 -1
  231. package/server/applications/files/utils/doc-textify/adapters/pdf.js +1 -5
  232. package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
  233. package/server/applications/files/utils/doc-textify/adapters/power-point.js +1 -5
  234. package/server/applications/files/utils/doc-textify/adapters/power-point.js.map +1 -1
  235. package/server/applications/files/utils/doc-textify/adapters/text.js +1 -5
  236. package/server/applications/files/utils/doc-textify/adapters/text.js.map +1 -1
  237. package/server/applications/files/utils/doc-textify/adapters/word.js +1 -5
  238. package/server/applications/files/utils/doc-textify/adapters/word.js.map +1 -1
  239. package/server/applications/files/utils/doc-textify/doc-textify.js +1 -5
  240. package/server/applications/files/utils/doc-textify/doc-textify.js.map +1 -1
  241. package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js +1 -5
  242. package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js.map +1 -1
  243. package/server/applications/files/utils/doc-textify/utils/clean.js +1 -5
  244. package/server/applications/files/utils/doc-textify/utils/clean.js.map +1 -1
  245. package/server/applications/files/utils/files-search.js +1 -5
  246. package/server/applications/files/utils/files-search.js.map +1 -1
  247. package/server/applications/files/utils/files-tree.js +1 -5
  248. package/server/applications/files/utils/files-tree.js.map +1 -1
  249. package/server/applications/files/utils/files.js +1 -5
  250. package/server/applications/files/utils/files.js.map +1 -1
  251. package/server/applications/files/utils/send-file.js +1 -5
  252. package/server/applications/files/utils/send-file.js.map +1 -1
  253. package/server/applications/files/utils/unzip-file.js +1 -5
  254. package/server/applications/files/utils/unzip-file.js.map +1 -1
  255. package/server/applications/files/utils/url-file.js +1 -5
  256. package/server/applications/files/utils/url-file.js.map +1 -1
  257. package/server/applications/links/constants/cache.js +1 -5
  258. package/server/applications/links/constants/cache.js.map +1 -1
  259. package/server/applications/links/constants/links.js +1 -5
  260. package/server/applications/links/constants/links.js.map +1 -1
  261. package/server/applications/links/constants/routes.js +1 -5
  262. package/server/applications/links/constants/routes.js.map +1 -1
  263. package/server/applications/links/dto/create-or-update-link.dto.js +1 -5
  264. package/server/applications/links/dto/create-or-update-link.dto.js.map +1 -1
  265. package/server/applications/links/interfaces/link-guest.interface.js +1 -5
  266. package/server/applications/links/interfaces/link-guest.interface.js.map +1 -1
  267. package/server/applications/links/interfaces/link-space.interface.js +1 -5
  268. package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
  269. package/server/applications/links/links.controller.js +1 -5
  270. package/server/applications/links/links.controller.js.map +1 -1
  271. package/server/applications/links/links.controller.spec.js +1 -5
  272. package/server/applications/links/links.controller.spec.js.map +1 -1
  273. package/server/applications/links/schemas/link.interface.js +1 -5
  274. package/server/applications/links/schemas/link.interface.js.map +1 -1
  275. package/server/applications/links/schemas/links.schema.js +1 -5
  276. package/server/applications/links/schemas/links.schema.js.map +1 -1
  277. package/server/applications/links/services/links-manager.service.js +55 -20
  278. package/server/applications/links/services/links-manager.service.js.map +1 -1
  279. package/server/applications/links/services/links-manager.service.spec.js +3 -7
  280. package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
  281. package/server/applications/links/services/links-queries.service.js +1 -5
  282. package/server/applications/links/services/links-queries.service.js.map +1 -1
  283. package/server/applications/notifications/constants/notifications.js +1 -5
  284. package/server/applications/notifications/constants/notifications.js.map +1 -1
  285. package/server/applications/notifications/constants/routes.js +1 -5
  286. package/server/applications/notifications/constants/routes.js.map +1 -1
  287. package/server/applications/notifications/constants/websocket.js +1 -5
  288. package/server/applications/notifications/constants/websocket.js.map +1 -1
  289. package/server/applications/notifications/i18n/de.js +1 -9
  290. package/server/applications/notifications/i18n/de.js.map +1 -1
  291. package/server/applications/notifications/i18n/es.js +1 -5
  292. package/server/applications/notifications/i18n/es.js.map +1 -1
  293. package/server/applications/notifications/i18n/fr.js +1 -5
  294. package/server/applications/notifications/i18n/fr.js.map +1 -1
  295. package/server/applications/notifications/i18n/hi.js +1 -5
  296. package/server/applications/notifications/i18n/hi.js.map +1 -1
  297. package/server/applications/notifications/i18n/index.js +1 -5
  298. package/server/applications/notifications/i18n/index.js.map +1 -1
  299. package/server/applications/notifications/i18n/it.js +1 -5
  300. package/server/applications/notifications/i18n/it.js.map +1 -1
  301. package/server/applications/notifications/i18n/ja.js +1 -5
  302. package/server/applications/notifications/i18n/ja.js.map +1 -1
  303. package/server/applications/notifications/i18n/ko.js +1 -5
  304. package/server/applications/notifications/i18n/ko.js.map +1 -1
  305. package/server/applications/notifications/i18n/pl.js +1 -5
  306. package/server/applications/notifications/i18n/pl.js.map +1 -1
  307. package/server/applications/notifications/i18n/pt.js +1 -5
  308. package/server/applications/notifications/i18n/pt.js.map +1 -1
  309. package/server/applications/notifications/i18n/pt_br.js +1 -5
  310. package/server/applications/notifications/i18n/pt_br.js.map +1 -1
  311. package/server/applications/notifications/i18n/ru.js +1 -5
  312. package/server/applications/notifications/i18n/ru.js.map +1 -1
  313. package/server/applications/notifications/i18n/tr.js +1 -5
  314. package/server/applications/notifications/i18n/tr.js.map +1 -1
  315. package/server/applications/notifications/i18n/zh.js +1 -5
  316. package/server/applications/notifications/i18n/zh.js.map +1 -1
  317. package/server/applications/notifications/interfaces/notification-properties.interface.js +1 -5
  318. package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
  319. package/server/applications/notifications/interfaces/user-mail-notification.interface.js +1 -5
  320. package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -1
  321. package/server/applications/notifications/mails/models.js +1 -5
  322. package/server/applications/notifications/mails/models.js.map +1 -1
  323. package/server/applications/notifications/mails/templates.js +1 -5
  324. package/server/applications/notifications/mails/templates.js.map +1 -1
  325. package/server/applications/notifications/mails/urls.js +1 -5
  326. package/server/applications/notifications/mails/urls.js.map +1 -1
  327. package/server/applications/notifications/notifications.controller.js +1 -5
  328. package/server/applications/notifications/notifications.controller.js.map +1 -1
  329. package/server/applications/notifications/notifications.controller.spec.js +1 -5
  330. package/server/applications/notifications/notifications.controller.spec.js.map +1 -1
  331. package/server/applications/notifications/notifications.gateway.js +1 -5
  332. package/server/applications/notifications/notifications.gateway.js.map +1 -1
  333. package/server/applications/notifications/notifications.module.js +1 -5
  334. package/server/applications/notifications/notifications.module.js.map +1 -1
  335. package/server/applications/notifications/schemas/notification.interface.js +1 -5
  336. package/server/applications/notifications/schemas/notification.interface.js.map +1 -1
  337. package/server/applications/notifications/schemas/notifications.schema.js +1 -5
  338. package/server/applications/notifications/schemas/notifications.schema.js.map +1 -1
  339. package/server/applications/notifications/services/notifications-manager.service.js +25 -11
  340. package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
  341. package/server/applications/notifications/services/notifications-manager.service.spec.js +20 -11
  342. package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
  343. package/server/applications/notifications/services/notifications-queries.service.js +1 -5
  344. package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
  345. package/server/applications/shares/constants/routes.js +1 -5
  346. package/server/applications/shares/constants/routes.js.map +1 -1
  347. package/server/applications/shares/constants/shares.js +1 -5
  348. package/server/applications/shares/constants/shares.js.map +1 -1
  349. package/server/applications/shares/dto/create-or-update-share.dto.js +1 -5
  350. package/server/applications/shares/dto/create-or-update-share.dto.js.map +1 -1
  351. package/server/applications/shares/interfaces/share-child.interface.js +1 -5
  352. package/server/applications/shares/interfaces/share-child.interface.js.map +1 -1
  353. package/server/applications/shares/interfaces/share-env.interface.js +1 -5
  354. package/server/applications/shares/interfaces/share-env.interface.js.map +1 -1
  355. package/server/applications/shares/interfaces/share-file.interface.js +1 -5
  356. package/server/applications/shares/interfaces/share-file.interface.js.map +1 -1
  357. package/server/applications/shares/interfaces/share-link.interface.js +1 -5
  358. package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
  359. package/server/applications/shares/interfaces/share-props.interface.js +1 -5
  360. package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
  361. package/server/applications/shares/models/share-child.model.js +1 -5
  362. package/server/applications/shares/models/share-child.model.js.map +1 -1
  363. package/server/applications/shares/schemas/share-members.interface.js +1 -5
  364. package/server/applications/shares/schemas/share-members.interface.js.map +1 -1
  365. package/server/applications/shares/schemas/share.interface.js +1 -5
  366. package/server/applications/shares/schemas/share.interface.js.map +1 -1
  367. package/server/applications/shares/schemas/shares-members.schema.js +1 -5
  368. package/server/applications/shares/schemas/shares-members.schema.js.map +1 -1
  369. package/server/applications/shares/schemas/shares.schema.js +1 -5
  370. package/server/applications/shares/schemas/shares.schema.js.map +1 -1
  371. package/server/applications/shares/services/shares-manager.service.js +214 -68
  372. package/server/applications/shares/services/shares-manager.service.js.map +1 -1
  373. package/server/applications/shares/services/shares-manager.service.spec.js +1 -5
  374. package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
  375. package/server/applications/shares/services/shares-queries.service.js +49 -17
  376. package/server/applications/shares/services/shares-queries.service.js.map +1 -1
  377. package/server/applications/shares/shares.controller.js +1 -5
  378. package/server/applications/shares/shares.controller.js.map +1 -1
  379. package/server/applications/shares/shares.controller.spec.js +1 -5
  380. package/server/applications/shares/shares.controller.spec.js.map +1 -1
  381. package/server/applications/shares/shares.module.js +1 -5
  382. package/server/applications/shares/shares.module.js.map +1 -1
  383. package/server/applications/spaces/constants/cache.js +1 -5
  384. package/server/applications/spaces/constants/cache.js.map +1 -1
  385. package/server/applications/spaces/constants/routes.js +1 -5
  386. package/server/applications/spaces/constants/routes.js.map +1 -1
  387. package/server/applications/spaces/constants/spaces.js +1 -5
  388. package/server/applications/spaces/constants/spaces.js.map +1 -1
  389. package/server/applications/spaces/decorators/space-override-permission.decorator.js +1 -5
  390. package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -1
  391. package/server/applications/spaces/decorators/space-skip-guard.decorator.js +1 -5
  392. package/server/applications/spaces/decorators/space-skip-guard.decorator.js.map +1 -1
  393. package/server/applications/spaces/decorators/space-skip-permissions.decorator.js +1 -5
  394. package/server/applications/spaces/decorators/space-skip-permissions.decorator.js.map +1 -1
  395. package/server/applications/spaces/decorators/space.decorator.js +1 -5
  396. package/server/applications/spaces/decorators/space.decorator.js.map +1 -1
  397. package/server/applications/spaces/dto/create-or-update-space.dto.js +1 -5
  398. package/server/applications/spaces/dto/create-or-update-space.dto.js.map +1 -1
  399. package/server/applications/spaces/dto/delete-space.dto.js +1 -5
  400. package/server/applications/spaces/dto/delete-space.dto.js.map +1 -1
  401. package/server/applications/spaces/dto/search-space.dto.js +1 -5
  402. package/server/applications/spaces/dto/search-space.dto.js.map +1 -1
  403. package/server/applications/spaces/dto/space-roots.dto.js +1 -5
  404. package/server/applications/spaces/dto/space-roots.dto.js.map +1 -1
  405. package/server/applications/spaces/guards/space.guard.js +17 -9
  406. package/server/applications/spaces/guards/space.guard.js.map +1 -1
  407. package/server/applications/spaces/guards/space.guard.spec.js +1 -5
  408. package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
  409. package/server/applications/spaces/interfaces/space-diff.interface.js +1 -5
  410. package/server/applications/spaces/interfaces/space-diff.interface.js.map +1 -1
  411. package/server/applications/spaces/interfaces/space-files.interface.js +1 -5
  412. package/server/applications/spaces/interfaces/space-files.interface.js.map +1 -1
  413. package/server/applications/spaces/interfaces/space-request.interface.js +1 -5
  414. package/server/applications/spaces/interfaces/space-request.interface.js.map +1 -1
  415. package/server/applications/spaces/interfaces/space-trash.interface.js +1 -5
  416. package/server/applications/spaces/interfaces/space-trash.interface.js.map +1 -1
  417. package/server/applications/spaces/models/space-env.model.js +1 -5
  418. package/server/applications/spaces/models/space-env.model.js.map +1 -1
  419. package/server/applications/spaces/models/space-props.model.js +1 -5
  420. package/server/applications/spaces/models/space-props.model.js.map +1 -1
  421. package/server/applications/spaces/models/space-root-props.model.js +1 -5
  422. package/server/applications/spaces/models/space-root-props.model.js.map +1 -1
  423. package/server/applications/spaces/models/space.model.js +1 -5
  424. package/server/applications/spaces/models/space.model.js.map +1 -1
  425. package/server/applications/spaces/schemas/space-members.interface.js +1 -5
  426. package/server/applications/spaces/schemas/space-members.interface.js.map +1 -1
  427. package/server/applications/spaces/schemas/space-root.interface.js +1 -5
  428. package/server/applications/spaces/schemas/space-root.interface.js.map +1 -1
  429. package/server/applications/spaces/schemas/space.interface.js +1 -5
  430. package/server/applications/spaces/schemas/space.interface.js.map +1 -1
  431. package/server/applications/spaces/schemas/spaces-members.schema.js +1 -5
  432. package/server/applications/spaces/schemas/spaces-members.schema.js.map +1 -1
  433. package/server/applications/spaces/schemas/spaces-roots.schema.js +1 -5
  434. package/server/applications/spaces/schemas/spaces-roots.schema.js.map +1 -1
  435. package/server/applications/spaces/schemas/spaces.schema.js +1 -5
  436. package/server/applications/spaces/schemas/spaces.schema.js.map +1 -1
  437. package/server/applications/spaces/services/spaces-browser.service.js +77 -24
  438. package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
  439. package/server/applications/spaces/services/spaces-browser.service.spec.js +1 -5
  440. package/server/applications/spaces/services/spaces-browser.service.spec.js.map +1 -1
  441. package/server/applications/spaces/services/spaces-manager.service.js +193 -53
  442. package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
  443. package/server/applications/spaces/services/spaces-manager.service.spec.js +1 -5
  444. package/server/applications/spaces/services/spaces-manager.service.spec.js.map +1 -1
  445. package/server/applications/spaces/services/spaces-queries.service.js +65 -21
  446. package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
  447. package/server/applications/spaces/services/spaces-scheduler.service.js +49 -17
  448. package/server/applications/spaces/services/spaces-scheduler.service.js.map +1 -1
  449. package/server/applications/spaces/spaces.controller.js +1 -5
  450. package/server/applications/spaces/spaces.controller.js.map +1 -1
  451. package/server/applications/spaces/spaces.controller.spec.js +1 -5
  452. package/server/applications/spaces/spaces.controller.spec.js.map +1 -1
  453. package/server/applications/spaces/spaces.module.js +1 -5
  454. package/server/applications/spaces/spaces.module.js.map +1 -1
  455. package/server/applications/spaces/utils/paths.js +1 -5
  456. package/server/applications/spaces/utils/paths.js.map +1 -1
  457. package/server/applications/spaces/utils/permissions.js +1 -5
  458. package/server/applications/spaces/utils/permissions.js.map +1 -1
  459. package/server/applications/spaces/utils/routes.js +1 -5
  460. package/server/applications/spaces/utils/routes.js.map +1 -1
  461. package/server/applications/sync/constants/auth.js +1 -5
  462. package/server/applications/sync/constants/auth.js.map +1 -1
  463. package/server/applications/sync/constants/routes.js +6 -5
  464. package/server/applications/sync/constants/routes.js.map +1 -1
  465. package/server/applications/sync/constants/store.js +1 -9
  466. package/server/applications/sync/constants/store.js.map +1 -1
  467. package/server/applications/sync/constants/sync.js +2 -6
  468. package/server/applications/sync/constants/sync.js.map +1 -1
  469. package/server/applications/sync/decorators/sync-context.decorator.js +1 -5
  470. package/server/applications/sync/decorators/sync-context.decorator.js.map +1 -1
  471. package/server/applications/sync/decorators/sync-environment.decorator.js +1 -5
  472. package/server/applications/sync/decorators/sync-environment.decorator.js.map +1 -1
  473. package/server/applications/sync/dtos/sync-client-auth.dto.js +12 -8
  474. package/server/applications/sync/dtos/sync-client-auth.dto.js.map +1 -1
  475. package/server/applications/sync/dtos/sync-client-info.dto.js +49 -0
  476. package/server/applications/sync/dtos/sync-client-info.dto.js.map +1 -0
  477. package/server/applications/sync/dtos/sync-client-registration.dto.js +34 -11
  478. package/server/applications/sync/dtos/sync-client-registration.dto.js.map +1 -1
  479. package/server/applications/sync/dtos/sync-operations.dto.js +1 -5
  480. package/server/applications/sync/dtos/sync-operations.dto.js.map +1 -1
  481. package/server/applications/sync/dtos/sync-path.dto.js +1 -5
  482. package/server/applications/sync/dtos/sync-path.dto.js.map +1 -1
  483. package/server/applications/sync/dtos/sync-upload.dto.js +1 -5
  484. package/server/applications/sync/dtos/sync-upload.dto.js.map +1 -1
  485. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js +1 -5
  486. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js.map +1 -1
  487. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js +1 -5
  488. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js.map +1 -1
  489. package/server/applications/sync/interfaces/store-manifest.interface.js +1 -5
  490. package/server/applications/sync/interfaces/store-manifest.interface.js.map +1 -1
  491. package/server/applications/sync/interfaces/sync-client-auth.interface.js +1 -25
  492. package/server/applications/sync/interfaces/sync-client-auth.interface.js.map +1 -1
  493. package/server/applications/sync/interfaces/sync-client-paths.interface.js +1 -5
  494. package/server/applications/sync/interfaces/sync-client-paths.interface.js.map +1 -1
  495. package/server/applications/sync/interfaces/sync-client.interface.js +1 -5
  496. package/server/applications/sync/interfaces/sync-client.interface.js.map +1 -1
  497. package/server/applications/sync/interfaces/sync-diff.interface.js +1 -5
  498. package/server/applications/sync/interfaces/sync-diff.interface.js.map +1 -1
  499. package/server/applications/sync/interfaces/sync-path.interface.js +1 -5
  500. package/server/applications/sync/interfaces/sync-path.interface.js.map +1 -1
  501. package/server/applications/sync/schemas/sync-client.interface.js +1 -5
  502. package/server/applications/sync/schemas/sync-client.interface.js.map +1 -1
  503. package/server/applications/sync/schemas/sync-clients.schema.js +1 -5
  504. package/server/applications/sync/schemas/sync-clients.schema.js.map +1 -1
  505. package/server/applications/sync/schemas/sync-path.interface.js +1 -5
  506. package/server/applications/sync/schemas/sync-path.interface.js.map +1 -1
  507. package/server/applications/sync/schemas/sync-paths.schema.js +1 -5
  508. package/server/applications/sync/schemas/sync-paths.schema.js.map +1 -1
  509. package/server/applications/sync/services/sync-clients-manager.service.js +108 -44
  510. package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
  511. package/server/applications/sync/services/sync-clients-manager.service.spec.js +14 -17
  512. package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
  513. package/server/applications/sync/services/sync-manager.service.js +29 -12
  514. package/server/applications/sync/services/sync-manager.service.js.map +1 -1
  515. package/server/applications/sync/services/sync-manager.service.spec.js +1 -5
  516. package/server/applications/sync/services/sync-manager.service.spec.js.map +1 -1
  517. package/server/applications/sync/services/sync-paths-manager.service.js +27 -17
  518. package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
  519. package/server/applications/sync/services/sync-paths-manager.service.spec.js +11 -15
  520. package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
  521. package/server/applications/sync/services/sync-queries.service.js +1 -5
  522. package/server/applications/sync/services/sync-queries.service.js.map +1 -1
  523. package/server/applications/sync/sync.config.js +1 -5
  524. package/server/applications/sync/sync.config.js.map +1 -1
  525. package/server/applications/sync/sync.controller.js +21 -6
  526. package/server/applications/sync/sync.controller.js.map +1 -1
  527. package/server/applications/sync/sync.controller.spec.js +1 -5
  528. package/server/applications/sync/sync.controller.spec.js.map +1 -1
  529. package/server/applications/sync/sync.module.js +1 -5
  530. package/server/applications/sync/sync.module.js.map +1 -1
  531. package/server/applications/sync/utils/functions.js +1 -5
  532. package/server/applications/sync/utils/functions.js.map +1 -1
  533. package/server/applications/sync/utils/normalizedMap.js +1 -5
  534. package/server/applications/sync/utils/normalizedMap.js.map +1 -1
  535. package/server/applications/sync/utils/routes.js +1 -5
  536. package/server/applications/sync/utils/routes.js.map +1 -1
  537. package/server/applications/users/admin-users.controller.js +2 -6
  538. package/server/applications/users/admin-users.controller.js.map +1 -1
  539. package/server/applications/users/admin-users.controller.spec.js +6 -10
  540. package/server/applications/users/admin-users.controller.spec.js.map +1 -1
  541. package/server/applications/users/constants/group.js +1 -5
  542. package/server/applications/users/constants/group.js.map +1 -1
  543. package/server/applications/users/constants/member.js +1 -5
  544. package/server/applications/users/constants/member.js.map +1 -1
  545. package/server/applications/users/constants/routes.js +1 -5
  546. package/server/applications/users/constants/routes.js.map +1 -1
  547. package/server/applications/users/constants/user.js +1 -5
  548. package/server/applications/users/constants/user.js.map +1 -1
  549. package/server/applications/users/constants/websocket.js +1 -5
  550. package/server/applications/users/constants/websocket.js.map +1 -1
  551. package/server/applications/users/decorators/permissions.decorator.js +1 -5
  552. package/server/applications/users/decorators/permissions.decorator.js.map +1 -1
  553. package/server/applications/users/decorators/roles.decorator.js +1 -5
  554. package/server/applications/users/decorators/roles.decorator.js.map +1 -1
  555. package/server/applications/users/decorators/user.decorator.js +1 -5
  556. package/server/applications/users/decorators/user.decorator.js.map +1 -1
  557. package/server/applications/users/dto/create-or-update-group.dto.js +1 -5
  558. package/server/applications/users/dto/create-or-update-group.dto.js.map +1 -1
  559. package/server/applications/users/dto/create-or-update-user.dto.js +1 -5
  560. package/server/applications/users/dto/create-or-update-user.dto.js.map +1 -1
  561. package/server/applications/users/dto/delete-user.dto.js +1 -5
  562. package/server/applications/users/dto/delete-user.dto.js.map +1 -1
  563. package/server/applications/users/dto/search-members.dto.js +1 -5
  564. package/server/applications/users/dto/search-members.dto.js.map +1 -1
  565. package/server/applications/users/dto/user-properties.dto.js +1 -5
  566. package/server/applications/users/dto/user-properties.dto.js.map +1 -1
  567. package/server/applications/users/guards/permissions.guard.js +1 -5
  568. package/server/applications/users/guards/permissions.guard.js.map +1 -1
  569. package/server/applications/users/guards/permissions.guard.spec.js +1 -5
  570. package/server/applications/users/guards/permissions.guard.spec.js.map +1 -1
  571. package/server/applications/users/guards/roles.guard.js +1 -5
  572. package/server/applications/users/guards/roles.guard.js.map +1 -1
  573. package/server/applications/users/guards/roles.guard.spec.js +1 -5
  574. package/server/applications/users/guards/roles.guard.spec.js.map +1 -1
  575. package/server/applications/users/interfaces/admin-group.interface.js +1 -5
  576. package/server/applications/users/interfaces/admin-group.interface.js.map +1 -1
  577. package/server/applications/users/interfaces/admin-user.interface.js +1 -5
  578. package/server/applications/users/interfaces/admin-user.interface.js.map +1 -1
  579. package/server/applications/users/interfaces/group-browse.interface.js +1 -5
  580. package/server/applications/users/interfaces/group-browse.interface.js.map +1 -1
  581. package/server/applications/users/interfaces/group-member.js +1 -5
  582. package/server/applications/users/interfaces/group-member.js.map +1 -1
  583. package/server/applications/users/interfaces/guest-user.interface.js +1 -5
  584. package/server/applications/users/interfaces/guest-user.interface.js.map +1 -1
  585. package/server/applications/users/interfaces/member.interface.js +1 -5
  586. package/server/applications/users/interfaces/member.interface.js.map +1 -1
  587. package/server/applications/users/interfaces/owner.interface.js +1 -5
  588. package/server/applications/users/interfaces/owner.interface.js.map +1 -1
  589. package/server/applications/users/interfaces/user-secrets.interface.js +1 -5
  590. package/server/applications/users/interfaces/user-secrets.interface.js.map +1 -1
  591. package/server/applications/users/interfaces/websocket.interface.js +1 -5
  592. package/server/applications/users/interfaces/websocket.interface.js.map +1 -1
  593. package/server/applications/users/models/user.model.js +1 -5
  594. package/server/applications/users/models/user.model.js.map +1 -1
  595. package/server/applications/users/schemas/group.interface.js +1 -5
  596. package/server/applications/users/schemas/group.interface.js.map +1 -1
  597. package/server/applications/users/schemas/groups.schema.js +1 -5
  598. package/server/applications/users/schemas/groups.schema.js.map +1 -1
  599. package/server/applications/users/schemas/user-group.interface.js +1 -5
  600. package/server/applications/users/schemas/user-group.interface.js.map +1 -1
  601. package/server/applications/users/schemas/user.interface.js +1 -5
  602. package/server/applications/users/schemas/user.interface.js.map +1 -1
  603. package/server/applications/users/schemas/users-groups.schema.js +1 -5
  604. package/server/applications/users/schemas/users-groups.schema.js.map +1 -1
  605. package/server/applications/users/schemas/users-guests.schema.js +1 -5
  606. package/server/applications/users/schemas/users-guests.schema.js.map +1 -1
  607. package/server/applications/users/schemas/users.schema.js +1 -5
  608. package/server/applications/users/schemas/users.schema.js.map +1 -1
  609. package/server/applications/users/services/admin-users-manager.service.js +67 -23
  610. package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
  611. package/server/applications/users/services/admin-users-manager.service.spec.js +3 -7
  612. package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
  613. package/server/applications/users/services/admin-users-queries.service.js +65 -21
  614. package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
  615. package/server/applications/users/services/users-manager.service.js +81 -25
  616. package/server/applications/users/services/users-manager.service.js.map +1 -1
  617. package/server/applications/users/services/users-manager.service.spec.js +14 -12
  618. package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
  619. package/server/applications/users/services/users-queries.service.js +49 -17
  620. package/server/applications/users/services/users-queries.service.js.map +1 -1
  621. package/server/applications/users/users.controller.js +2 -6
  622. package/server/applications/users/users.controller.js.map +1 -1
  623. package/server/applications/users/users.controller.spec.js +5 -9
  624. package/server/applications/users/users.controller.spec.js.map +1 -1
  625. package/server/applications/users/users.e2e-spec.js +3 -7
  626. package/server/applications/users/users.e2e-spec.js.map +1 -1
  627. package/server/applications/users/users.gateway.js +29 -12
  628. package/server/applications/users/users.gateway.js.map +1 -1
  629. package/server/applications/users/users.gateway.spec.js +1 -5
  630. package/server/applications/users/users.gateway.spec.js.map +1 -1
  631. package/server/applications/users/users.module.js +1 -5
  632. package/server/applications/users/users.module.js.map +1 -1
  633. package/server/applications/users/utils/avatar.js +1 -5
  634. package/server/applications/users/utils/avatar.js.map +1 -1
  635. package/server/applications/users/utils/test.js +1 -5
  636. package/server/applications/users/utils/test.js.map +1 -1
  637. package/server/applications/webdav/constants/routes.js +1 -5
  638. package/server/applications/webdav/constants/routes.js.map +1 -1
  639. package/server/applications/webdav/constants/webdav.js +1 -5
  640. package/server/applications/webdav/constants/webdav.js.map +1 -1
  641. package/server/applications/webdav/decorators/if-header.decorator.js +1 -5
  642. package/server/applications/webdav/decorators/if-header.decorator.js.map +1 -1
  643. package/server/applications/webdav/decorators/webdav-context.decorator.js +1 -5
  644. package/server/applications/webdav/decorators/webdav-context.decorator.js.map +1 -1
  645. package/server/applications/webdav/filters/webdav.filter.js +1 -5
  646. package/server/applications/webdav/filters/webdav.filter.js.map +1 -1
  647. package/server/applications/webdav/filters/webdav.filter.spec.js +1 -5
  648. package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -1
  649. package/server/applications/webdav/guards/webdav-protocol.guard.js +54 -20
  650. package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
  651. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +54 -0
  652. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
  653. package/server/applications/webdav/interfaces/if-header.interface.js +1 -5
  654. package/server/applications/webdav/interfaces/if-header.interface.js.map +1 -1
  655. package/server/applications/webdav/interfaces/webdav.interface.js +1 -5
  656. package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
  657. package/server/applications/webdav/models/webdav-file.model.js +1 -5
  658. package/server/applications/webdav/models/webdav-file.model.js.map +1 -1
  659. package/server/applications/webdav/services/webdav-methods.service.js +74 -26
  660. package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
  661. package/server/applications/webdav/services/webdav-methods.service.spec.js +15 -18
  662. package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
  663. package/server/applications/webdav/services/webdav-spaces.service.js +17 -9
  664. package/server/applications/webdav/services/webdav-spaces.service.js.map +1 -1
  665. package/server/applications/webdav/services/webdav-spaces.service.spec.js +1 -5
  666. package/server/applications/webdav/services/webdav-spaces.service.spec.js.map +1 -1
  667. package/server/applications/webdav/utils/bootstrap.js +1 -5
  668. package/server/applications/webdav/utils/bootstrap.js.map +1 -1
  669. package/server/applications/webdav/utils/if-header.js +1 -5
  670. package/server/applications/webdav/utils/if-header.js.map +1 -1
  671. package/server/applications/webdav/utils/routes.js +1 -5
  672. package/server/applications/webdav/utils/routes.js.map +1 -1
  673. package/server/applications/webdav/utils/webdav.js +1 -5
  674. package/server/applications/webdav/utils/webdav.js.map +1 -1
  675. package/server/applications/webdav/utils/xml.js +1 -5
  676. package/server/applications/webdav/utils/xml.js.map +1 -1
  677. package/server/applications/webdav/webdav.controller.js +1 -5
  678. package/server/applications/webdav/webdav.controller.js.map +1 -1
  679. package/server/applications/webdav/webdav.controller.spec.js +1 -5
  680. package/server/applications/webdav/webdav.controller.spec.js.map +1 -1
  681. package/server/applications/webdav/webdav.e2e-spec.js +1 -5
  682. package/server/applications/webdav/webdav.e2e-spec.js.map +1 -1
  683. package/server/applications/webdav/webdav.module.js +1 -5
  684. package/server/applications/webdav/webdav.module.js.map +1 -1
  685. package/server/authentication/auth.config.js +23 -123
  686. package/server/authentication/auth.config.js.map +1 -1
  687. package/server/authentication/auth.controller.js +27 -21
  688. package/server/authentication/auth.controller.js.map +1 -1
  689. package/server/authentication/auth.controller.spec.js +6 -10
  690. package/server/authentication/auth.controller.spec.js.map +1 -1
  691. package/server/authentication/auth.e2e-spec.js +1 -5
  692. package/server/authentication/auth.e2e-spec.js.map +1 -1
  693. package/server/authentication/auth.module.js +17 -20
  694. package/server/authentication/auth.module.js.map +1 -1
  695. package/server/authentication/{services/auth-manager.service.js → auth.service.js} +41 -18
  696. package/server/authentication/auth.service.js.map +1 -0
  697. package/server/authentication/{services/auth-manager.service.spec.js → auth.service.spec.js} +6 -10
  698. package/server/authentication/auth.service.spec.js.map +1 -0
  699. package/server/authentication/constants/auth.js +1 -5
  700. package/server/authentication/constants/auth.js.map +1 -1
  701. package/server/authentication/constants/routes.js +41 -30
  702. package/server/authentication/constants/routes.js.map +1 -1
  703. package/server/authentication/constants/scope.js +2 -5
  704. package/server/authentication/constants/scope.js.map +1 -1
  705. package/server/authentication/decorators/auth-token-optional.decorator.js +1 -5
  706. package/server/authentication/decorators/auth-token-optional.decorator.js.map +1 -1
  707. package/server/authentication/decorators/auth-token-skip.decorator.js +1 -5
  708. package/server/authentication/decorators/auth-token-skip.decorator.js.map +1 -1
  709. package/server/authentication/dto/login-response.dto.js +1 -10
  710. package/server/authentication/dto/login-response.dto.js.map +1 -1
  711. package/server/authentication/dto/token-response.dto.js +1 -5
  712. package/server/authentication/dto/token-response.dto.js.map +1 -1
  713. package/server/authentication/guards/auth-anonymous.guard.js +1 -5
  714. package/server/authentication/guards/auth-anonymous.guard.js.map +1 -1
  715. package/server/authentication/guards/auth-anonymous.guard.spec.js +1 -5
  716. package/server/authentication/guards/auth-anonymous.guard.spec.js.map +1 -1
  717. package/server/authentication/guards/auth-anonymous.strategy.js +1 -5
  718. package/server/authentication/guards/auth-anonymous.strategy.js.map +1 -1
  719. package/server/authentication/guards/auth-basic.guard.js +1 -5
  720. package/server/authentication/guards/auth-basic.guard.js.map +1 -1
  721. package/server/authentication/guards/auth-basic.guard.spec.js +13 -14
  722. package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
  723. package/server/authentication/guards/auth-basic.strategy.js +10 -11
  724. package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
  725. package/server/authentication/guards/auth-digest.guard.js +1 -5
  726. package/server/authentication/guards/auth-digest.guard.js.map +1 -1
  727. package/server/authentication/guards/auth-digest.strategy.js +1 -5
  728. package/server/authentication/guards/auth-digest.strategy.js.map +1 -1
  729. package/server/authentication/guards/auth-local.guard.js +1 -5
  730. package/server/authentication/guards/auth-local.guard.js.map +1 -1
  731. package/server/authentication/guards/auth-local.guard.spec.js +9 -13
  732. package/server/authentication/guards/auth-local.guard.spec.js.map +1 -1
  733. package/server/authentication/guards/auth-local.strategy.js +6 -10
  734. package/server/authentication/guards/auth-local.strategy.js.map +1 -1
  735. package/server/authentication/guards/auth-token-access.guard.js +1 -5
  736. package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
  737. package/server/authentication/guards/auth-token-access.guard.spec.js +3 -7
  738. package/server/authentication/guards/auth-token-access.guard.spec.js.map +1 -1
  739. package/server/authentication/guards/auth-token-access.strategy.js +3 -7
  740. package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
  741. package/server/authentication/guards/auth-token-refresh.guard.js +1 -5
  742. package/server/authentication/guards/auth-token-refresh.guard.js.map +1 -1
  743. package/server/authentication/guards/auth-token-refresh.guard.spec.js +3 -7
  744. package/server/authentication/guards/auth-token-refresh.guard.spec.js.map +1 -1
  745. package/server/authentication/guards/auth-token-refresh.strategy.js +3 -7
  746. package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
  747. package/server/authentication/guards/implementations/http-basic.strategy.js +1 -5
  748. package/server/authentication/guards/implementations/http-basic.strategy.js.map +1 -1
  749. package/server/authentication/guards/implementations/http-digest.strategy.js +1 -5
  750. package/server/authentication/guards/implementations/http-digest.strategy.js.map +1 -1
  751. package/server/authentication/interfaces/auth-request.interface.js +1 -5
  752. package/server/authentication/interfaces/auth-request.interface.js.map +1 -1
  753. package/server/authentication/interfaces/jwt-payload.interface.js +1 -5
  754. package/server/authentication/interfaces/jwt-payload.interface.js.map +1 -1
  755. package/server/authentication/interfaces/token.interface.js +1 -5
  756. package/server/authentication/interfaces/token.interface.js.map +1 -1
  757. package/server/authentication/providers/auth-providers.constants.js +18 -0
  758. package/server/authentication/providers/auth-providers.constants.js.map +1 -0
  759. package/server/authentication/providers/auth-providers.models.js +14 -0
  760. package/server/authentication/providers/auth-providers.models.js.map +1 -0
  761. package/server/authentication/providers/auth-providers.utils.js +42 -0
  762. package/server/authentication/providers/auth-providers.utils.js.map +1 -0
  763. package/server/authentication/providers/ldap/auth-ldap.config.js +143 -0
  764. package/server/authentication/providers/ldap/auth-ldap.config.js.map +1 -0
  765. package/server/authentication/{constants/auth-ldap.js → providers/ldap/auth-ldap.constants.js} +12 -6
  766. package/server/authentication/providers/ldap/auth-ldap.constants.js.map +1 -0
  767. package/server/authentication/providers/ldap/auth-provider-ldap.service.js +506 -0
  768. package/server/authentication/providers/ldap/auth-provider-ldap.service.js.map +1 -0
  769. package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js +674 -0
  770. package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js.map +1 -0
  771. package/server/authentication/{services/auth-methods/auth-method-database.service.js → providers/mysql/auth-provider-mysql.service.js} +16 -14
  772. package/server/authentication/providers/mysql/auth-provider-mysql.service.js.map +1 -0
  773. package/server/authentication/{services/auth-methods/auth-method-database.service.spec.js → providers/mysql/auth-provider-mysql.service.spec.js} +15 -19
  774. package/server/authentication/providers/mysql/auth-provider-mysql.service.spec.js.map +1 -0
  775. package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js +30 -0
  776. package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js.map +1 -0
  777. package/server/authentication/providers/oidc/auth-oidc.config.js +149 -0
  778. package/server/authentication/providers/oidc/auth-oidc.config.js.map +1 -0
  779. package/server/authentication/providers/oidc/auth-oidc.constants.js +39 -0
  780. package/server/authentication/providers/oidc/auth-oidc.constants.js.map +1 -0
  781. package/server/authentication/providers/oidc/auth-oidc.controller.js +83 -0
  782. package/server/authentication/providers/oidc/auth-oidc.controller.js.map +1 -0
  783. package/server/authentication/providers/oidc/auth-oidc.interfaces.js +6 -0
  784. package/server/authentication/providers/oidc/auth-oidc.interfaces.js.map +1 -0
  785. package/server/authentication/providers/oidc/auth-provider-oidc.module.js +36 -0
  786. package/server/authentication/providers/oidc/auth-provider-oidc.module.js.map +1 -0
  787. package/server/authentication/providers/oidc/auth-provider-oidc.service.js +373 -0
  788. package/server/authentication/providers/oidc/auth-provider-oidc.service.js.map +1 -0
  789. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js +270 -0
  790. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js.map +1 -0
  791. package/server/authentication/{services/auth-methods/auth-method-two-fa.service.js → providers/two-fa/auth-provider-two-fa.service.js} +56 -38
  792. package/server/authentication/providers/two-fa/auth-provider-two-fa.service.js.map +1 -0
  793. package/server/authentication/{services/auth-methods/auth-method-two-fa.service.spec.js → providers/two-fa/auth-provider-two-fa.service.spec.js} +6 -10
  794. package/server/authentication/providers/two-fa/auth-provider-two-fa.service.spec.js.map +1 -0
  795. package/server/authentication/{guards → providers/two-fa}/auth-two-fa-guard.js +10 -14
  796. package/server/authentication/providers/two-fa/auth-two-fa-guard.js.map +1 -0
  797. package/server/authentication/providers/two-fa/auth-two-fa.config.js +57 -0
  798. package/server/authentication/providers/two-fa/auth-two-fa.config.js.map +1 -0
  799. package/server/authentication/{dto/two-fa-verify.dto.js → providers/two-fa/auth-two-fa.dtos.js} +8 -6
  800. package/server/authentication/providers/two-fa/auth-two-fa.dtos.js.map +1 -0
  801. package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js +6 -0
  802. package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js.map +1 -0
  803. package/server/authentication/utils/crypt-secret.js +1 -5
  804. package/server/authentication/utils/crypt-secret.js.map +1 -1
  805. package/server/common/constants.js +1 -5
  806. package/server/common/constants.js.map +1 -1
  807. package/server/common/decorators.js +1 -5
  808. package/server/common/decorators.js.map +1 -1
  809. package/server/common/functions.js +25 -9
  810. package/server/common/functions.js.map +1 -1
  811. package/server/common/i18n.js +1 -5
  812. package/server/common/i18n.js.map +1 -1
  813. package/server/common/image.js +1 -5
  814. package/server/common/image.js.map +1 -1
  815. package/server/common/interfaces.js +1 -5
  816. package/server/common/interfaces.js.map +1 -1
  817. package/server/common/qrcode.js +1 -5
  818. package/server/common/qrcode.js.map +1 -1
  819. package/server/common/shared.js +6 -6
  820. package/server/common/shared.js.map +1 -1
  821. package/server/configuration/config.constants.js +1 -5
  822. package/server/configuration/config.constants.js.map +1 -1
  823. package/server/configuration/config.environment.js +2 -6
  824. package/server/configuration/config.environment.js.map +1 -1
  825. package/server/configuration/config.interfaces.js +1 -5
  826. package/server/configuration/config.interfaces.js.map +1 -1
  827. package/server/configuration/config.loader.js +1 -5
  828. package/server/configuration/config.loader.js.map +1 -1
  829. package/server/configuration/config.logger.js +4 -8
  830. package/server/configuration/config.logger.js.map +1 -1
  831. package/server/configuration/config.validation.js +7 -5
  832. package/server/configuration/config.validation.js.map +1 -1
  833. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +9 -7
  834. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
  835. package/server/infrastructure/cache/adapters/redis-cache.adapter.js +1 -5
  836. package/server/infrastructure/cache/adapters/redis-cache.adapter.js.map +1 -1
  837. package/server/infrastructure/cache/cache.config.js +1 -5
  838. package/server/infrastructure/cache/cache.config.js.map +1 -1
  839. package/server/infrastructure/cache/cache.decorator.js +9 -7
  840. package/server/infrastructure/cache/cache.decorator.js.map +1 -1
  841. package/server/infrastructure/cache/cache.e2e-spec.js +1 -5
  842. package/server/infrastructure/cache/cache.e2e-spec.js.map +1 -1
  843. package/server/infrastructure/cache/cache.module.js +1 -5
  844. package/server/infrastructure/cache/cache.module.js.map +1 -1
  845. package/server/infrastructure/cache/schemas/mysql-cache.interface.js +1 -5
  846. package/server/infrastructure/cache/schemas/mysql-cache.interface.js.map +1 -1
  847. package/server/infrastructure/cache/schemas/mysql-cache.schema.js +1 -5
  848. package/server/infrastructure/cache/schemas/mysql-cache.schema.js.map +1 -1
  849. package/server/infrastructure/cache/services/cache.service.js +1 -5
  850. package/server/infrastructure/cache/services/cache.service.js.map +1 -1
  851. package/server/infrastructure/context/context.module.js +1 -5
  852. package/server/infrastructure/context/context.module.js.map +1 -1
  853. package/server/infrastructure/context/interceptors/context.interceptor.js +1 -5
  854. package/server/infrastructure/context/interceptors/context.interceptor.js.map +1 -1
  855. package/server/infrastructure/context/interceptors/context.interceptor.spec.js +2 -6
  856. package/server/infrastructure/context/interceptors/context.interceptor.spec.js.map +1 -1
  857. package/server/infrastructure/context/interfaces/context-store.interface.js +1 -5
  858. package/server/infrastructure/context/interfaces/context-store.interface.js.map +1 -1
  859. package/server/infrastructure/context/services/context-manager.service.js +1 -5
  860. package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
  861. package/server/infrastructure/context/services/context-manager.service.spec.js +1 -5
  862. package/server/infrastructure/context/services/context-manager.service.spec.js.map +1 -1
  863. package/server/infrastructure/database/columns.js +1 -5
  864. package/server/infrastructure/database/columns.js.map +1 -1
  865. package/server/infrastructure/database/configuration.js +1 -5
  866. package/server/infrastructure/database/configuration.js.map +1 -1
  867. package/server/infrastructure/database/constants.js +2 -6
  868. package/server/infrastructure/database/constants.js.map +1 -1
  869. package/server/infrastructure/database/database.config.js +1 -5
  870. package/server/infrastructure/database/database.config.js.map +1 -1
  871. package/server/infrastructure/database/database.logger.js +1 -5
  872. package/server/infrastructure/database/database.logger.js.map +1 -1
  873. package/server/infrastructure/database/database.module.js +1 -5
  874. package/server/infrastructure/database/database.module.js.map +1 -1
  875. package/server/infrastructure/database/interfaces/database.interface.js +1 -5
  876. package/server/infrastructure/database/interfaces/database.interface.js.map +1 -1
  877. package/server/infrastructure/database/schema.js +1 -5
  878. package/server/infrastructure/database/schema.js.map +1 -1
  879. package/server/infrastructure/database/scripts/create-user.js +1 -5
  880. package/server/infrastructure/database/scripts/create-user.js.map +1 -1
  881. package/server/infrastructure/database/scripts/db.js +1 -5
  882. package/server/infrastructure/database/scripts/db.js.map +1 -1
  883. package/server/infrastructure/database/scripts/seed/main.js +1 -5
  884. package/server/infrastructure/database/scripts/seed/main.js.map +1 -1
  885. package/server/infrastructure/database/scripts/seed/usersgroups.js +1 -5
  886. package/server/infrastructure/database/scripts/seed/usersgroups.js.map +1 -1
  887. package/server/infrastructure/database/utils.js +1 -5
  888. package/server/infrastructure/database/utils.js.map +1 -1
  889. package/server/infrastructure/mailer/interfaces/mail.interface.js +1 -5
  890. package/server/infrastructure/mailer/interfaces/mail.interface.js.map +1 -1
  891. package/server/infrastructure/mailer/mailer.config.js +1 -5
  892. package/server/infrastructure/mailer/mailer.config.js.map +1 -1
  893. package/server/infrastructure/mailer/mailer.module.js +1 -5
  894. package/server/infrastructure/mailer/mailer.module.js.map +1 -1
  895. package/server/infrastructure/mailer/mailer.service.js +1 -5
  896. package/server/infrastructure/mailer/mailer.service.js.map +1 -1
  897. package/server/infrastructure/mailer/mailer.service.spec.js +2 -6
  898. package/server/infrastructure/mailer/mailer.service.spec.js.map +1 -1
  899. package/server/infrastructure/scheduler/scheduler.constants.js +1 -5
  900. package/server/infrastructure/scheduler/scheduler.constants.js.map +1 -1
  901. package/server/infrastructure/scheduler/scheduler.module.js +1 -5
  902. package/server/infrastructure/scheduler/scheduler.module.js.map +1 -1
  903. package/server/infrastructure/websocket/adapters/cluster.adapter.js +1 -5
  904. package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
  905. package/server/infrastructure/websocket/adapters/redis.adapter.js +1 -5
  906. package/server/infrastructure/websocket/adapters/redis.adapter.js.map +1 -1
  907. package/server/infrastructure/websocket/adapters/web-socket.adapter.js +1 -5
  908. package/server/infrastructure/websocket/adapters/web-socket.adapter.js.map +1 -1
  909. package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js +1 -5
  910. package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js.map +1 -1
  911. package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js +1 -5
  912. package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js.map +1 -1
  913. package/server/infrastructure/websocket/utils.js +1 -5
  914. package/server/infrastructure/websocket/utils.js.map +1 -1
  915. package/server/infrastructure/websocket/web-socket.config.js +1 -5
  916. package/server/infrastructure/websocket/web-socket.config.js.map +1 -1
  917. package/server/main.js +5 -0
  918. package/server/main.js.map +1 -1
  919. package/static/assets/pdfjs/build/pdf.mjs +724 -745
  920. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  921. package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
  922. package/static/assets/pdfjs/build/pdf.worker.mjs +706 -193
  923. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  924. package/static/assets/pdfjs/version +1 -1
  925. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +5 -5
  926. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +1 -0
  927. package/static/assets/pdfjs/web/locale/fur/viewer.ftl +5 -0
  928. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +28 -0
  929. package/static/assets/pdfjs/web/locale/ml/viewer.ftl +4 -0
  930. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -3
  931. package/static/assets/pdfjs/web/viewer.css +207 -65
  932. package/static/assets/pdfjs/web/viewer.html +11 -10
  933. package/static/assets/pdfjs/web/viewer.mjs +850 -270
  934. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  935. package/static/assets/pdfjs/web/wasm/LICENSE_JBIG2 +196 -0
  936. package/static/assets/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  937. package/static/assets/pdfjs/web/wasm/jbig2.wasm +0 -0
  938. package/static/chunk-22TZP6HW.js +1 -0
  939. package/static/{chunk-G7TLKY5X.js → chunk-27ATUHBH.js} +1 -1
  940. package/static/{chunk-CQOQXVYG.js → chunk-2CKLZ3FM.js} +1 -1
  941. package/static/{chunk-FVFOX6OP.js → chunk-2QZPX7LO.js} +1 -1
  942. package/static/{chunk-32AVRWC3.js → chunk-2R6IBBPZ.js} +1 -1
  943. package/static/{chunk-76JDXKD7.js → chunk-4FIGEBNL.js} +1 -1
  944. package/static/{chunk-ACCGBDUZ.js → chunk-4P3JABAP.js} +4 -4
  945. package/static/chunk-5CZOSAMZ.js +1 -0
  946. package/static/{chunk-2PDTP6N4.js → chunk-677WUBCT.js} +1 -1
  947. package/static/{chunk-K5VO5XTG.js → chunk-74CAHBFM.js} +1 -1
  948. package/static/{chunk-WTWGBCFO.js → chunk-7GWW6MJO.js} +1 -1
  949. package/static/{chunk-JXZOYX4N.js → chunk-A4UGPSWX.js} +1 -1
  950. package/static/{chunk-44D7RWET.js → chunk-AHO37FKW.js} +1 -1
  951. package/static/{chunk-WB2DECOA.js → chunk-AQCXMKP3.js} +1 -1
  952. package/static/chunk-B6PDYCRO.js +3 -0
  953. package/static/{chunk-JVGN5V5E.js → chunk-CU76ATCF.js} +1 -1
  954. package/static/{chunk-Q5K4ZUHK.js → chunk-CWYHOPOP.js} +1 -1
  955. package/static/{chunk-IOX3ANJR.js → chunk-E5WI5725.js} +1 -1
  956. package/static/{chunk-NUG54Y65.js → chunk-FC5HTKVM.js} +1 -1
  957. package/static/{chunk-LRK6RNPR.js → chunk-FOSM7EYI.js} +1 -1
  958. package/static/{chunk-B4UP2EQM.js → chunk-GAZO25PI.js} +1 -1
  959. package/static/{chunk-3WBCGTYW.js → chunk-GB7ABR5N.js} +1 -1
  960. package/static/{chunk-XFZ37WVK.js → chunk-GEHFKZQ5.js} +1 -1
  961. package/static/{chunk-4CQLN5HL.js → chunk-GQFMWVFD.js} +1 -1
  962. package/static/{chunk-YBEH442D.js → chunk-GVNTC564.js} +1 -1
  963. package/static/{chunk-WO6GBHBZ.js → chunk-HGL3NYP2.js} +2 -2
  964. package/static/{chunk-IAWRRL6J.js → chunk-HLIWPWRA.js} +1 -1
  965. package/static/{chunk-6LHJBXUE.js → chunk-HNYB3M4S.js} +1 -1
  966. package/static/{chunk-5WTIUYFF.js → chunk-HUXAUQMN.js} +1 -1
  967. package/static/{chunk-VBH3Y2M5.js → chunk-I2XA6PPK.js} +1 -1
  968. package/static/{chunk-I3XI72AV.js → chunk-ISV3BO6R.js} +1 -1
  969. package/static/{chunk-P7X53PEP.js → chunk-JV3AGU5B.js} +1 -1
  970. package/static/{chunk-ZFAXICUH.js → chunk-K25E7YGG.js} +1 -1
  971. package/static/{chunk-CAD3RHAY.js → chunk-K46PUTZB.js} +1 -1
  972. package/static/{chunk-GYFLVCFN.js → chunk-KERFLJ56.js} +1 -7
  973. package/static/{chunk-WSTGWBVW.js → chunk-KJD3KFF3.js} +1 -1
  974. package/static/{chunk-R4P4NBUL.js → chunk-KPKSI23S.js} +1 -1
  975. package/static/{chunk-M7IFVC5D.js → chunk-KZS7CTNR.js} +1 -1
  976. package/static/{chunk-P2IJCGWD.js → chunk-L5IHUVXL.js} +1 -1
  977. package/static/{chunk-DXESTGOH.js → chunk-L7RRX2M3.js} +1 -1
  978. package/static/{chunk-WE3ISL7O.js → chunk-LGWJ2WKU.js} +1 -1
  979. package/static/{chunk-OKI3N5AI.js → chunk-MLC7JK2H.js} +2 -2
  980. package/static/{chunk-NG7QWUFM.js → chunk-MOHNYW2A.js} +1 -1
  981. package/static/{chunk-SQYWQUL4.js → chunk-NCDUOVMW.js} +1 -1
  982. package/static/chunk-NGUAJIGI.js +1 -0
  983. package/static/{chunk-OYPJUVD6.js → chunk-NIPP6JDI.js} +1 -1
  984. package/static/{chunk-Y433XOAJ.js → chunk-NMTBMHUL.js} +1 -1
  985. package/static/chunk-O4XXMZFX.js +4 -0
  986. package/static/{chunk-IOP3ON2H.js → chunk-OANZITPM.js} +1 -1
  987. package/static/{chunk-WJFKUJJX.js → chunk-OGE4SAHU.js} +1 -1
  988. package/static/{chunk-7EHP6HO3.js → chunk-OI3ME22C.js} +1 -1
  989. package/static/{chunk-D4XDSS6P.js → chunk-Q3EGCMF5.js} +1 -1
  990. package/static/{chunk-TQBCGNFG.js → chunk-QF2NSHZA.js} +1 -1
  991. package/static/{chunk-RBBMH2FM.js → chunk-QKN6LAAA.js} +1 -1
  992. package/static/{chunk-J45SD6RC.js → chunk-QRFESU5O.js} +2 -2
  993. package/static/chunk-QVRVFYJH.js +1 -0
  994. package/static/{chunk-BAHNSFET.js → chunk-RFJIPIOK.js} +1 -1
  995. package/static/{chunk-IZ7TCHUW.js → chunk-RLL634K4.js} +1 -1
  996. package/static/{chunk-MOWL3ILT.js → chunk-RS2OFKWP.js} +1 -1
  997. package/static/{chunk-WM56LPJ3.js → chunk-RWAAC3A4.js} +1 -1
  998. package/static/{chunk-F3GMI6OL.js → chunk-S5Y64DDS.js} +1 -1
  999. package/static/{chunk-VNNLMUK7.js → chunk-SLG5KDU6.js} +1 -1
  1000. package/static/chunk-TJ4CVFEL.js +1 -0
  1001. package/static/{chunk-SAN35XTD.js → chunk-TWCGKSYE.js} +1 -1
  1002. package/static/{chunk-EUKVDBBK.js → chunk-UMDRE4S7.js} +1 -1
  1003. package/static/{chunk-YKCUUBZP.js → chunk-VRIOLRYR.js} +4 -4
  1004. package/static/chunk-VS4O2XDP.js +1 -0
  1005. package/static/{chunk-2MRTBCSV.js → chunk-VSBFNFOM.js} +1 -1
  1006. package/static/{chunk-CTPKDDVI.js → chunk-WN4WXCVK.js} +1 -1
  1007. package/static/{chunk-2AA3WMW5.js → chunk-WX7RXW7K.js} +1 -1
  1008. package/static/{chunk-J2BUPRCZ.js → chunk-XC4POKR3.js} +2 -2
  1009. package/static/{chunk-AXLDYLIO.js → chunk-Y4AUYQTG.js} +1 -1
  1010. package/static/{chunk-RPHWIW7S.js → chunk-YMIXHRJQ.js} +1 -7
  1011. package/static/{chunk-AFNUBQMD.js → chunk-ZUNKFAKP.js} +1 -1
  1012. package/static/index.html +3 -3
  1013. package/static/main-QN4UCOC5.js +5 -0
  1014. package/static/{styles-PD6764CP.css → styles-46GLIE7Y.css} +1 -1
  1015. package/server/authentication/constants/auth-ldap.js.map +0 -1
  1016. package/server/authentication/dto/two-fa-verify.dto.js.map +0 -1
  1017. package/server/authentication/guards/auth-two-fa-guard.js.map +0 -1
  1018. package/server/authentication/interfaces/two-fa-setup.interface.js +0 -10
  1019. package/server/authentication/interfaces/two-fa-setup.interface.js.map +0 -1
  1020. package/server/authentication/models/auth-method.js +0 -18
  1021. package/server/authentication/models/auth-method.js.map +0 -1
  1022. package/server/authentication/services/auth-manager.service.js.map +0 -1
  1023. package/server/authentication/services/auth-manager.service.spec.js.map +0 -1
  1024. package/server/authentication/services/auth-methods/auth-method-database.service.js.map +0 -1
  1025. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +0 -1
  1026. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +0 -326
  1027. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +0 -1
  1028. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +0 -534
  1029. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +0 -1
  1030. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +0 -1
  1031. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +0 -1
  1032. package/static/chunk-3I6NPM62.js +0 -1
  1033. package/static/chunk-GCPX3EFC.js +0 -1
  1034. package/static/chunk-KBUIDMCK.js +0 -1
  1035. package/static/chunk-KY6MNZLC.js +0 -1
  1036. package/static/chunk-MPWD4VMY.js +0 -1
  1037. package/static/chunk-QQAF3MLL.js +0 -1
  1038. package/static/chunk-VHZKPUWE.js +0 -4
  1039. package/static/chunk-YWLMFOB4.js +0 -3
  1040. package/static/main-ZXEMCBMI.js +0 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/links/links.controller.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { StreamableFile } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { LinksController } from './links.controller'\nimport { LinksManager } from './services/links-manager.service'\n\ndescribe(LinksController.name, () => {\n let controller: LinksController\n let linksManager: {\n linkValidation: jest.Mock\n linkAccess: jest.Mock\n linkAuthentication: jest.Mock\n }\n\n beforeAll(async () => {\n linksManager = {\n linkValidation: jest.fn(),\n linkAccess: jest.fn(),\n linkAuthentication: jest.fn()\n }\n\n const module: TestingModule = await Test.createTestingModule({\n controllers: [LinksController],\n providers: [{ provide: LinksManager, useValue: linksManager }]\n }).compile()\n\n controller = module.get<LinksController>(LinksController)\n })\n\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n\n describe('linkValidation', () => {\n it('should call LinksManager.linkValidation with provided user and uuid and return its result', async () => {\n const user = { id: 123, login: 'john' } as any\n const uuid = 'test-uuid-1'\n const expected = {\n error: true,\n ok: true,\n link: { id: 1, uuid, name: 'My Link' }\n } as any\n\n linksManager.linkValidation.mockResolvedValue(expected)\n\n const result = await controller.linkValidation(user, uuid)\n\n expect(linksManager.linkValidation).toHaveBeenCalledTimes(1)\n expect(linksManager.linkValidation).toHaveBeenCalledWith(user, uuid)\n expect(result).toBe(expected)\n })\n })\n\n describe('linkAccess', () => {\n it('should forward to LinksManager.linkAccess and return a StreamableFile', async () => {\n const user = { id: 42 } as any\n const uuid = 'test-uuid-2'\n const req = {} as any\n const res = {} as any\n const file = new StreamableFile(Buffer.from('data'))\n\n linksManager.linkAccess.mockResolvedValue(file)\n\n const result = await controller.linkAccess(user, uuid, req, res)\n\n expect(linksManager.linkAccess).toHaveBeenCalledTimes(1)\n expect(linksManager.linkAccess).toHaveBeenCalledWith(user, uuid, req, res)\n expect(result).toBe(file)\n })\n\n it('should forward to LinksManager.linkAccess and return a LoginResponseDto', async () => {\n const user = { id: 43 } as any\n const uuid = 'test-uuid-3'\n const req = {} as any\n const res = {} as any\n const loginResponse = { accessToken: 'token', refreshToken: 'refresh' } as any\n\n linksManager.linkAccess.mockResolvedValue(loginResponse)\n\n const result = await controller.linkAccess(user, uuid, req, res)\n\n expect(linksManager.linkAccess).toHaveBeenCalledTimes(1)\n expect(linksManager.linkAccess).toHaveBeenCalledWith(user, uuid, req, res)\n expect(result).toBe(loginResponse)\n })\n })\n\n describe('linkAuthentication', () => {\n it('should call LinksManager.linkAuthentication with provided params and return its result', async () => {\n const user = { id: 7 } as any\n const uuid = 'test-uuid-4'\n const body = { password: 'secret' } as any\n const req = {} as any\n const res = {} as any\n const expectedLogin = { accessToken: 'acc', refreshToken: 'ref' } as any\n\n linksManager.linkAuthentication.mockResolvedValue(expectedLogin)\n\n const result = await controller.linkAuthentication(user, uuid, body, req, res)\n\n expect(linksManager.linkAuthentication).toHaveBeenCalledTimes(1)\n expect(linksManager.linkAuthentication).toHaveBeenCalledWith(user, uuid, body, req, res)\n expect(result).toBe(expectedLogin)\n })\n })\n})\n"],"names":["describe","LinksController","name","controller","linksManager","beforeAll","linkValidation","jest","fn","linkAccess","linkAuthentication","module","Test","createTestingModule","controllers","providers","provide","LinksManager","useValue","compile","get","beforeEach","clearAllMocks","it","expect","toBeDefined","user","id","login","uuid","expected","error","ok","link","mockResolvedValue","result","toHaveBeenCalledTimes","toHaveBeenCalledWith","toBe","req","res","file","StreamableFile","Buffer","from","loginResponse","accessToken","refreshToken","body","password","expectedLogin"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/links/links.controller.spec.ts"],"sourcesContent":["import { StreamableFile } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { LinksController } from './links.controller'\nimport { LinksManager } from './services/links-manager.service'\n\ndescribe(LinksController.name, () => {\n let controller: LinksController\n let linksManager: {\n linkValidation: jest.Mock\n linkAccess: jest.Mock\n linkAuthentication: jest.Mock\n }\n\n beforeAll(async () => {\n linksManager = {\n linkValidation: jest.fn(),\n linkAccess: jest.fn(),\n linkAuthentication: jest.fn()\n }\n\n const module: TestingModule = await Test.createTestingModule({\n controllers: [LinksController],\n providers: [{ provide: LinksManager, useValue: linksManager }]\n }).compile()\n\n controller = module.get<LinksController>(LinksController)\n })\n\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n\n describe('linkValidation', () => {\n it('should call LinksManager.linkValidation with provided user and uuid and return its result', async () => {\n const user = { id: 123, login: 'john' } as any\n const uuid = 'test-uuid-1'\n const expected = {\n error: true,\n ok: true,\n link: { id: 1, uuid, name: 'My Link' }\n } as any\n\n linksManager.linkValidation.mockResolvedValue(expected)\n\n const result = await controller.linkValidation(user, uuid)\n\n expect(linksManager.linkValidation).toHaveBeenCalledTimes(1)\n expect(linksManager.linkValidation).toHaveBeenCalledWith(user, uuid)\n expect(result).toBe(expected)\n })\n })\n\n describe('linkAccess', () => {\n it('should forward to LinksManager.linkAccess and return a StreamableFile', async () => {\n const user = { id: 42 } as any\n const uuid = 'test-uuid-2'\n const req = {} as any\n const res = {} as any\n const file = new StreamableFile(Buffer.from('data'))\n\n linksManager.linkAccess.mockResolvedValue(file)\n\n const result = await controller.linkAccess(user, uuid, req, res)\n\n expect(linksManager.linkAccess).toHaveBeenCalledTimes(1)\n expect(linksManager.linkAccess).toHaveBeenCalledWith(user, uuid, req, res)\n expect(result).toBe(file)\n })\n\n it('should forward to LinksManager.linkAccess and return a LoginResponseDto', async () => {\n const user = { id: 43 } as any\n const uuid = 'test-uuid-3'\n const req = {} as any\n const res = {} as any\n const loginResponse = { accessToken: 'token', refreshToken: 'refresh' } as any\n\n linksManager.linkAccess.mockResolvedValue(loginResponse)\n\n const result = await controller.linkAccess(user, uuid, req, res)\n\n expect(linksManager.linkAccess).toHaveBeenCalledTimes(1)\n expect(linksManager.linkAccess).toHaveBeenCalledWith(user, uuid, req, res)\n expect(result).toBe(loginResponse)\n })\n })\n\n describe('linkAuthentication', () => {\n it('should call LinksManager.linkAuthentication with provided params and return its result', async () => {\n const user = { id: 7 } as any\n const uuid = 'test-uuid-4'\n const body = { password: 'secret' } as any\n const req = {} as any\n const res = {} as any\n const expectedLogin = { accessToken: 'acc', refreshToken: 'ref' } as any\n\n linksManager.linkAuthentication.mockResolvedValue(expectedLogin)\n\n const result = await controller.linkAuthentication(user, uuid, body, req, res)\n\n expect(linksManager.linkAuthentication).toHaveBeenCalledTimes(1)\n expect(linksManager.linkAuthentication).toHaveBeenCalledWith(user, uuid, body, req, res)\n expect(result).toBe(expectedLogin)\n })\n })\n})\n"],"names":["describe","LinksController","name","controller","linksManager","beforeAll","linkValidation","jest","fn","linkAccess","linkAuthentication","module","Test","createTestingModule","controllers","providers","provide","LinksManager","useValue","compile","get","beforeEach","clearAllMocks","it","expect","toBeDefined","user","id","login","uuid","expected","error","ok","link","mockResolvedValue","result","toHaveBeenCalledTimes","toHaveBeenCalledWith","toBe","req","res","file","StreamableFile","Buffer","from","loginResponse","accessToken","refreshToken","body","password","expectedLogin"],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/links/schemas/link.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 { links } from './links.schema'\n\ntype LinkSchema = typeof links.$inferSelect\n\nexport class Link implements LinkSchema {\n id: number\n uuid: string\n userId: number\n name: string\n email: string\n requireAuth: boolean\n nbAccess: number\n limitAccess: number\n expiresAt: Date\n createdAt: Date\n}\n"],"names":["Link"],"mappings":"AAAA;;;;CAIC;;;;+BAMYA;;;eAAAA;;;AAAN,IAAA,AAAMA,OAAN,MAAMA;AAWb"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/links/schemas/link.interface.ts"],"sourcesContent":["import type { links } from './links.schema'\n\ntype LinkSchema = typeof links.$inferSelect\n\nexport class Link implements LinkSchema {\n id: number\n uuid: string\n userId: number\n name: string\n email: string\n requireAuth: boolean\n nbAccess: number\n limitAccess: number\n expiresAt: Date\n createdAt: Date\n}\n"],"names":["Link"],"mappings":";;;;+BAIaA;;;eAAAA;;;AAAN,IAAA,AAAMA,OAAN,MAAMA;AAWb"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/links/schemas/links.schema.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 { sql } from 'drizzle-orm'\nimport { bigint, boolean, date, datetime, index, int, mysqlTable, uniqueIndex, varchar } from 'drizzle-orm/mysql-core'\nimport { users } from '../../users/schemas/users.schema'\n\n/*\n userId: must be a user with the role *3* (link)\n*/\n\nexport const links = mysqlTable(\n 'links',\n {\n id: bigint('id', { mode: 'number', unsigned: true }).autoincrement().primaryKey(),\n uuid: varchar('uuid', { length: 32 }).notNull(),\n userId: bigint('userId', { mode: 'number', unsigned: true })\n .references(() => users.id, { onDelete: 'cascade' })\n .notNull(),\n name: varchar('name', { length: 255 }).notNull(),\n email: varchar('email', { length: 255 }),\n requireAuth: boolean('requireAuth').default(false).notNull(),\n nbAccess: int('nbAccess', { unsigned: true }).default(0).notNull(),\n limitAccess: int('limitAccess', { unsigned: true }).default(0).notNull(),\n expiresAt: date('expiresAt', { mode: 'date' }),\n createdAt: datetime('createdAt', { mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull()\n },\n (table) => [index('user_idx').on(table.userId), uniqueIndex('uuid_idx').on(table.uuid)]\n)\n"],"names":["links","mysqlTable","id","bigint","mode","unsigned","autoincrement","primaryKey","uuid","varchar","length","notNull","userId","references","users","onDelete","name","email","requireAuth","boolean","default","nbAccess","int","limitAccess","expiresAt","date","createdAt","datetime","sql","table","index","on","uniqueIndex"],"mappings":"AAAA;;;;CAIC;;;;+BAUYA;;;eAAAA;;;4BARO;2BAC0E;6BACxE;AAMf,MAAMA,QAAQC,IAAAA,qBAAU,EAC7B,SACA;IACEC,IAAIC,IAAAA,iBAAM,EAAC,MAAM;QAAEC,MAAM;QAAUC,UAAU;IAAK,GAAGC,aAAa,GAAGC,UAAU;IAC/EC,MAAMC,IAAAA,kBAAO,EAAC,QAAQ;QAAEC,QAAQ;IAAG,GAAGC,OAAO;IAC7CC,QAAQT,IAAAA,iBAAM,EAAC,UAAU;QAAEC,MAAM;QAAUC,UAAU;IAAK,GACvDQ,UAAU,CAAC,IAAMC,kBAAK,CAACZ,EAAE,EAAE;QAAEa,UAAU;IAAU,GACjDJ,OAAO;IACVK,MAAMP,IAAAA,kBAAO,EAAC,QAAQ;QAAEC,QAAQ;IAAI,GAAGC,OAAO;IAC9CM,OAAOR,IAAAA,kBAAO,EAAC,SAAS;QAAEC,QAAQ;IAAI;IACtCQ,aAAaC,IAAAA,kBAAO,EAAC,eAAeC,OAAO,CAAC,OAAOT,OAAO;IAC1DU,UAAUC,IAAAA,cAAG,EAAC,YAAY;QAAEjB,UAAU;IAAK,GAAGe,OAAO,CAAC,GAAGT,OAAO;IAChEY,aAAaD,IAAAA,cAAG,EAAC,eAAe;QAAEjB,UAAU;IAAK,GAAGe,OAAO,CAAC,GAAGT,OAAO;IACtEa,WAAWC,IAAAA,eAAI,EAAC,aAAa;QAAErB,MAAM;IAAO;IAC5CsB,WAAWC,IAAAA,mBAAQ,EAAC,aAAa;QAAEvB,MAAM;IAAO,GAC7CgB,OAAO,CAACQ,IAAAA,eAAG,CAAA,CAAC,iBAAiB,CAAC,EAC9BjB,OAAO;AACZ,GACA,CAACkB,QAAU;QAACC,IAAAA,gBAAK,EAAC,YAAYC,EAAE,CAACF,MAAMjB,MAAM;QAAGoB,IAAAA,sBAAW,EAAC,YAAYD,EAAE,CAACF,MAAMrB,IAAI;KAAE"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/links/schemas/links.schema.ts"],"sourcesContent":["import { sql } from 'drizzle-orm'\nimport { bigint, boolean, date, datetime, index, int, mysqlTable, uniqueIndex, varchar } from 'drizzle-orm/mysql-core'\nimport { users } from '../../users/schemas/users.schema'\n\n/*\n userId: must be a user with the role *3* (link)\n*/\n\nexport const links = mysqlTable(\n 'links',\n {\n id: bigint('id', { mode: 'number', unsigned: true }).autoincrement().primaryKey(),\n uuid: varchar('uuid', { length: 32 }).notNull(),\n userId: bigint('userId', { mode: 'number', unsigned: true })\n .references(() => users.id, { onDelete: 'cascade' })\n .notNull(),\n name: varchar('name', { length: 255 }).notNull(),\n email: varchar('email', { length: 255 }),\n requireAuth: boolean('requireAuth').default(false).notNull(),\n nbAccess: int('nbAccess', { unsigned: true }).default(0).notNull(),\n limitAccess: int('limitAccess', { unsigned: true }).default(0).notNull(),\n expiresAt: date('expiresAt', { mode: 'date' }),\n createdAt: datetime('createdAt', { mode: 'date' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull()\n },\n (table) => [index('user_idx').on(table.userId), uniqueIndex('uuid_idx').on(table.uuid)]\n)\n"],"names":["links","mysqlTable","id","bigint","mode","unsigned","autoincrement","primaryKey","uuid","varchar","length","notNull","userId","references","users","onDelete","name","email","requireAuth","boolean","default","nbAccess","int","limitAccess","expiresAt","date","createdAt","datetime","sql","table","index","on","uniqueIndex"],"mappings":";;;;+BAQaA;;;eAAAA;;;4BARO;2BAC0E;6BACxE;AAMf,MAAMA,QAAQC,IAAAA,qBAAU,EAC7B,SACA;IACEC,IAAIC,IAAAA,iBAAM,EAAC,MAAM;QAAEC,MAAM;QAAUC,UAAU;IAAK,GAAGC,aAAa,GAAGC,UAAU;IAC/EC,MAAMC,IAAAA,kBAAO,EAAC,QAAQ;QAAEC,QAAQ;IAAG,GAAGC,OAAO;IAC7CC,QAAQT,IAAAA,iBAAM,EAAC,UAAU;QAAEC,MAAM;QAAUC,UAAU;IAAK,GACvDQ,UAAU,CAAC,IAAMC,kBAAK,CAACZ,EAAE,EAAE;QAAEa,UAAU;IAAU,GACjDJ,OAAO;IACVK,MAAMP,IAAAA,kBAAO,EAAC,QAAQ;QAAEC,QAAQ;IAAI,GAAGC,OAAO;IAC9CM,OAAOR,IAAAA,kBAAO,EAAC,SAAS;QAAEC,QAAQ;IAAI;IACtCQ,aAAaC,IAAAA,kBAAO,EAAC,eAAeC,OAAO,CAAC,OAAOT,OAAO;IAC1DU,UAAUC,IAAAA,cAAG,EAAC,YAAY;QAAEjB,UAAU;IAAK,GAAGe,OAAO,CAAC,GAAGT,OAAO;IAChEY,aAAaD,IAAAA,cAAG,EAAC,eAAe;QAAEjB,UAAU;IAAK,GAAGe,OAAO,CAAC,GAAGT,OAAO;IACtEa,WAAWC,IAAAA,eAAI,EAAC,aAAa;QAAErB,MAAM;IAAO;IAC5CsB,WAAWC,IAAAA,mBAAQ,EAAC,aAAa;QAAEvB,MAAM;IAAO,GAC7CgB,OAAO,CAACQ,IAAAA,eAAG,CAAA,CAAC,iBAAiB,CAAC,EAC9BjB,OAAO;AACZ,GACA,CAACkB,QAAU;QAACC,IAAAA,gBAAK,EAAC,YAAYC,EAAE,CAACF,MAAMjB,MAAM;QAAGoB,IAAAA,sBAAW,EAAC,YAAYD,EAAE,CAACF,MAAMrB,IAAI;KAAE"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -13,7 +9,7 @@ Object.defineProperty(exports, "LinksManager", {
13
9
  }
14
10
  });
15
11
  const _common = require("@nestjs/common");
16
- const _authmanagerservice = require("../../../authentication/services/auth-manager.service");
12
+ const _authservice = require("../../../authentication/auth.service");
17
13
  const _configenvironment = require("../../../configuration/config.environment");
18
14
  const _filesmanagerservice = require("../../files/services/files-manager.service");
19
15
  const _spaces = require("../../spaces/constants/spaces");
@@ -36,7 +32,10 @@ let LinksManager = class LinksManager {
36
32
  async linkValidation(identity, uuid) {
37
33
  const [_link, check, ok] = await this.linkEnv(identity, uuid);
38
34
  if (!ok) {
39
- this.logger.warn(`${this.linkValidation.name} - ${uuid} : ${check}`);
35
+ this.logger.warn({
36
+ tag: this.linkValidation.name,
37
+ msg: `${uuid} : ${check}`
38
+ });
40
39
  }
41
40
  const spaceLink = ok ? await this.linksQueries.spaceLink(uuid) : null;
42
41
  if (ok) {
@@ -59,15 +58,24 @@ let LinksManager = class LinksManager {
59
58
  async linkAccess(identity, uuid, req, res) {
60
59
  const [link, check, ok] = await this.linkEnv(identity, uuid);
61
60
  if (!ok) {
62
- this.logger.warn(`${this.linkAccess.name} - *${link.user.login}* (${link.user.id}) : ${check}`);
61
+ this.logger.warn({
62
+ tag: this.linkAccess.name,
63
+ msg: `*${link.user.login}* (${link.user.id}) : ${check}`
64
+ });
63
65
  throw new _common.HttpException(check, _common.HttpStatus.BAD_REQUEST);
64
66
  }
65
67
  const user = new _usermodel.UserModel(link.user);
66
68
  if (link.user.id !== identity.id) {
67
69
  // Authenticate user to allow access to the directory
68
- this.logger.log(`${this.linkAccess.name} - *${user.login}* (${user.id}) is logged`);
70
+ this.logger.log({
71
+ tag: this.linkAccess.name,
72
+ msg: `*${user.login}* (${user.id}) is logged`
73
+ });
69
74
  this.incrementLinkNbAccess(link);
70
- this.usersManager.updateAccesses(user, req.ip, true).catch((e)=>this.logger.error(`${this.linkAccess.name} - ${e}`));
75
+ this.usersManager.updateAccesses(user, req.ip, true).catch((e)=>this.logger.error({
76
+ tag: this.linkAccess.name,
77
+ msg: `${e}`
78
+ }));
71
79
  return this.authManager.setCookies(user, res);
72
80
  }
73
81
  // Already authenticated
@@ -79,17 +87,26 @@ let LinksManager = class LinksManager {
79
87
  async linkDownload(identity, uuid, req, res) {
80
88
  const [link, check, ok] = await this.linkEnv(identity, uuid);
81
89
  if (!ok) {
82
- this.logger.warn(`${this.linkDownload.name} - *${link.user.login}* (${link.user.id}) : ${check}`);
90
+ this.logger.warn({
91
+ tag: this.linkDownload.name,
92
+ msg: `*${link.user.login}* (${link.user.id}) : ${check}`
93
+ });
83
94
  throw new _common.HttpException(check, _common.HttpStatus.BAD_REQUEST);
84
95
  }
85
96
  const spaceLink = await this.linksQueries.spaceLink(uuid);
86
97
  if (spaceLink.space || spaceLink.share?.isDir) {
87
- this.logger.error(`${this.linkDownload.name} - the provided link does not reference a downloadable file`);
98
+ this.logger.error({
99
+ tag: this.linkDownload.name,
100
+ msg: `the provided link does not reference a downloadable file`
101
+ });
88
102
  throw new _common.HttpException('This link does not allow file download', _common.HttpStatus.BAD_REQUEST);
89
103
  }
90
104
  const user = new _usermodel.UserModel(link.user);
91
105
  // Download the file (authentication has been verified before)
92
- this.logger.log(`${this.linkDownload.name} - *${user.login}* (${user.id}) downloading ${spaceLink.share.name}`);
106
+ this.logger.log({
107
+ tag: this.linkDownload.name,
108
+ msg: `*${user.login}* (${user.id}) downloading ${spaceLink.share.name}`
109
+ });
93
110
  this.incrementLinkNbAccess(link);
94
111
  const spaceEnv = await this.spaceEnvFromLink(user, spaceLink);
95
112
  const sendFile = this.filesManager.sendFileFromSpace(spaceEnv, spaceLink.share.name);
@@ -97,25 +114,40 @@ let LinksManager = class LinksManager {
97
114
  await sendFile.checks();
98
115
  return await sendFile.stream(req, res);
99
116
  } catch (e) {
100
- this.logger.error(`${this.linkDownload.name} - unable to send file : ${e}`);
117
+ this.logger.error({
118
+ tag: this.linkDownload.name,
119
+ msg: `unable to send file : ${e}`
120
+ });
101
121
  throw new _common.HttpException('Unable to download file', _common.HttpStatus.INTERNAL_SERVER_ERROR);
102
122
  }
103
123
  }
104
124
  async linkAuthentication(identity, uuid, linkPasswordDto, req, res) {
105
125
  const [link, check, ok] = await this.linkEnv(identity, uuid, true);
106
126
  if (!ok) {
107
- this.logger.warn(`${this.linkAuthentication.name} - *${link.user.login}* (${link.user.id}) : ${check}`);
127
+ this.logger.warn({
128
+ tag: this.linkAuthentication.name,
129
+ msg: `*${link.user.login}* (${link.user.id}) : ${check}`
130
+ });
108
131
  throw new _common.HttpException(check, _common.HttpStatus.BAD_REQUEST);
109
132
  }
110
133
  const authSuccess = await this.usersManager.compareUserPassword(link.user.id, linkPasswordDto.password);
111
134
  const user = new _usermodel.UserModel(link.user);
112
- this.usersManager.updateAccesses(user, req.ip, authSuccess).catch((e)=>this.logger.error(`${this.linkAuthentication.name} - ${e}`));
135
+ this.usersManager.updateAccesses(user, req.ip, authSuccess).catch((e)=>this.logger.error({
136
+ tag: this.linkAuthentication.name,
137
+ msg: `${e}`
138
+ }));
113
139
  if (!authSuccess) {
114
- this.logger.warn(`${this.linkAuthentication.name} - *${user.login}* (${user.id}) : auth failed`);
140
+ this.logger.warn({
141
+ tag: this.linkAuthentication.name,
142
+ msg: `*${user.login}* (${user.id}) : auth failed`
143
+ });
115
144
  throw new _common.HttpException(_links.LINK_ERROR.UNAUTHORIZED, _common.HttpStatus.FORBIDDEN);
116
145
  }
117
146
  // authenticate user to allow access
118
- this.logger.log(`${this.linkAuthentication.name} - *${user.login}* (${user.id}) is logged`);
147
+ this.logger.log({
148
+ tag: this.linkAuthentication.name,
149
+ msg: `*${user.login}* (${user.id}) is logged`
150
+ });
119
151
  return this.authManager.setCookies(user, res);
120
152
  }
121
153
  spaceEnvFromLink(user, link) {
@@ -153,7 +185,10 @@ let LinksManager = class LinksManager {
153
185
  return true;
154
186
  }
155
187
  incrementLinkNbAccess(link) {
156
- this.linksQueries.incrementLinkNbAccess(link.uuid).catch((e)=>this.logger.error(`${this.incrementLinkNbAccess.name} - ${e}`));
188
+ this.linksQueries.incrementLinkNbAccess(link.uuid).catch((e)=>this.logger.error({
189
+ tag: this.incrementLinkNbAccess.name,
190
+ msg: `${e}`
191
+ }));
157
192
  }
158
193
  constructor(authManager, usersManager, filesManager, spacesManager, linksQueries){
159
194
  this.authManager = authManager;
@@ -168,7 +203,7 @@ LinksManager = _ts_decorate([
168
203
  (0, _common.Injectable)(),
169
204
  _ts_metadata("design:type", Function),
170
205
  _ts_metadata("design:paramtypes", [
171
- typeof _authmanagerservice.AuthManager === "undefined" ? Object : _authmanagerservice.AuthManager,
206
+ typeof _authservice.AuthManager === "undefined" ? Object : _authservice.AuthManager,
172
207
  typeof _usersmanagerservice.UsersManager === "undefined" ? Object : _usersmanagerservice.UsersManager,
173
208
  typeof _filesmanagerservice.FilesManager === "undefined" ? Object : _filesmanagerservice.FilesManager,
174
209
  typeof _spacesmanagerservice.SpacesManager === "undefined" ? Object : _spacesmanagerservice.SpacesManager,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/links/services/links-manager.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpException, HttpStatus, Injectable, Logger, StreamableFile } from '@nestjs/common'\nimport { FastifyReply, FastifyRequest } from 'fastify'\nimport { LoginResponseDto } from '../../../authentication/dto/login-response.dto'\nimport { JwtIdentityPayload } from '../../../authentication/interfaces/jwt-payload.interface'\nimport { AuthManager } from '../../../authentication/services/auth-manager.service'\nimport { serverConfig } from '../../../configuration/config.environment'\nimport { FilesManager } from '../../files/services/files-manager.service'\nimport { SendFile } from '../../files/utils/send-file'\nimport { SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { UserPasswordDto } from '../../users/dto/user-properties.dto'\nimport { UserModel } from '../../users/models/user.model'\nimport { UsersManager } from '../../users/services/users-manager.service'\nimport { getAvatarBase64 } from '../../users/utils/avatar'\nimport { LINK_ERROR } from '../constants/links'\nimport { LinkAsUser } from '../interfaces/link-guest.interface'\nimport { SpaceLink } from '../interfaces/link-space.interface'\nimport { LinksQueries } from './links-queries.service'\n\n@Injectable()\nexport class LinksManager {\n private logger = new Logger(LinksManager.name)\n\n constructor(\n private readonly authManager: AuthManager,\n private readonly usersManager: UsersManager,\n private readonly filesManager: FilesManager,\n private readonly spacesManager: SpacesManager,\n private readonly linksQueries: LinksQueries\n ) {}\n\n async linkValidation(identity: JwtIdentityPayload, uuid: string): Promise<{ ok: boolean; error: string | true; link: SpaceLink }> {\n const [_link, check, ok] = await this.linkEnv(identity, uuid)\n if (!ok) {\n this.logger.warn(`${this.linkValidation.name} - ${uuid} : ${check}`)\n }\n const spaceLink: SpaceLink = ok ? await this.linksQueries.spaceLink(uuid) : null\n if (ok) {\n if (spaceLink?.owner?.login) {\n spaceLink.owner.avatar = await getAvatarBase64(spaceLink.owner.login)\n // For security reasons\n delete spaceLink.owner.login\n }\n if (spaceLink?.share) {\n // Only used when the link is a file or a directory\n spaceLink.fileEditors = serverConfig.fileEditors\n }\n }\n return { ok: ok, error: ok ? null : check, link: spaceLink }\n }\n\n async linkAccess(\n identity: JwtIdentityPayload,\n uuid: string,\n req: FastifyRequest,\n res: FastifyReply\n ): Promise<LoginResponseDto | Omit<LoginResponseDto, 'token'>> {\n const [link, check, ok] = await this.linkEnv(identity, uuid)\n if (!ok) {\n this.logger.warn(`${this.linkAccess.name} - *${link.user.login}* (${link.user.id}) : ${check}`)\n throw new HttpException(check as string, HttpStatus.BAD_REQUEST)\n }\n const user = new UserModel(link.user)\n if (link.user.id !== identity.id) {\n // Authenticate user to allow access to the directory\n this.logger.log(`${this.linkAccess.name} - *${user.login}* (${user.id}) is logged`)\n this.incrementLinkNbAccess(link)\n this.usersManager.updateAccesses(user, req.ip, true).catch((e: Error) => this.logger.error(`${this.linkAccess.name} - ${e}`))\n return this.authManager.setCookies(user, res)\n }\n // Already authenticated\n return { user: user, server: serverConfig }\n }\n\n async linkDownload(identity: JwtIdentityPayload, uuid: string, req: FastifyRequest, res: FastifyReply): Promise<StreamableFile> {\n const [link, check, ok] = await this.linkEnv(identity, uuid)\n if (!ok) {\n this.logger.warn(`${this.linkDownload.name} - *${link.user.login}* (${link.user.id}) : ${check}`)\n throw new HttpException(check as string, HttpStatus.BAD_REQUEST)\n }\n const spaceLink: SpaceLink = await this.linksQueries.spaceLink(uuid)\n if (spaceLink.space || spaceLink.share?.isDir) {\n this.logger.error(`${this.linkDownload.name} - the provided link does not reference a downloadable file`)\n throw new HttpException('This link does not allow file download', HttpStatus.BAD_REQUEST)\n }\n const user = new UserModel(link.user)\n // Download the file (authentication has been verified before)\n this.logger.log(`${this.linkDownload.name} - *${user.login}* (${user.id}) downloading ${spaceLink.share.name}`)\n this.incrementLinkNbAccess(link)\n const spaceEnv: SpaceEnv = await this.spaceEnvFromLink(user, spaceLink)\n const sendFile: SendFile = this.filesManager.sendFileFromSpace(spaceEnv, spaceLink.share.name)\n try {\n await sendFile.checks()\n return await sendFile.stream(req, res)\n } catch (e) {\n this.logger.error(`${this.linkDownload.name} - unable to send file : ${e}`)\n throw new HttpException('Unable to download file', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n async linkAuthentication(identity: JwtIdentityPayload, uuid: string, linkPasswordDto: UserPasswordDto, req: FastifyRequest, res: FastifyReply) {\n const [link, check, ok] = await this.linkEnv(identity, uuid, true)\n if (!ok) {\n this.logger.warn(`${this.linkAuthentication.name} - *${link.user.login}* (${link.user.id}) : ${check}`)\n throw new HttpException(check as string, HttpStatus.BAD_REQUEST)\n }\n const authSuccess: boolean = await this.usersManager.compareUserPassword(link.user.id, linkPasswordDto.password)\n const user = new UserModel(link.user)\n this.usersManager.updateAccesses(user, req.ip, authSuccess).catch((e: Error) => this.logger.error(`${this.linkAuthentication.name} - ${e}`))\n if (!authSuccess) {\n this.logger.warn(`${this.linkAuthentication.name} - *${user.login}* (${user.id}) : auth failed`)\n throw new HttpException(LINK_ERROR.UNAUTHORIZED, HttpStatus.FORBIDDEN)\n }\n // authenticate user to allow access\n this.logger.log(`${this.linkAuthentication.name} - *${user.login}* (${user.id}) is logged`)\n return this.authManager.setCookies(user, res)\n }\n\n private spaceEnvFromLink(user: UserModel, link: SpaceLink): Promise<SpaceEnv> {\n return this.spacesManager.spaceEnv(user, [\n link.space ? SPACE_REPOSITORY.FILES : SPACE_REPOSITORY.SHARES,\n link.space ? link.space.alias : link.share.alias\n ])\n }\n\n private async linkEnv(identity: JwtIdentityPayload, uuid: string, ignoreAuth: boolean = false): Promise<[LinkAsUser, string | true, boolean]> {\n const link: LinkAsUser = await this.linksQueries.linkFromUUID(uuid)\n const check: string | true = this.checkLink(identity, link, ignoreAuth)\n const ok: boolean = check === true\n return [link, check, ok]\n }\n\n private checkLink(identity: JwtIdentityPayload, link: LinkAsUser, ignoreAuth: boolean = false): string | true {\n if (!link) {\n return LINK_ERROR.NOT_FOUND\n }\n if (!link.user.isActive) {\n return LINK_ERROR.DISABLED\n }\n if (link.limitAccess !== 0 && link.nbAccess >= link.limitAccess) {\n return LINK_ERROR.EXCEEDED\n }\n if (link.expiresAt && new Date() >= link.expiresAt) {\n return LINK_ERROR.EXPIRED\n }\n if (!ignoreAuth && link.requireAuth && link.user.id !== identity.id) {\n return LINK_ERROR.UNAUTHORIZED\n }\n return true\n }\n\n private incrementLinkNbAccess(link: LinkAsUser) {\n this.linksQueries.incrementLinkNbAccess(link.uuid).catch((e: Error) => this.logger.error(`${this.incrementLinkNbAccess.name} - ${e}`))\n }\n}\n"],"names":["LinksManager","linkValidation","identity","uuid","_link","check","ok","linkEnv","logger","warn","name","spaceLink","linksQueries","owner","login","avatar","getAvatarBase64","share","fileEditors","serverConfig","error","link","linkAccess","req","res","user","id","HttpException","HttpStatus","BAD_REQUEST","UserModel","log","incrementLinkNbAccess","usersManager","updateAccesses","ip","catch","e","authManager","setCookies","server","linkDownload","space","isDir","spaceEnv","spaceEnvFromLink","sendFile","filesManager","sendFileFromSpace","checks","stream","INTERNAL_SERVER_ERROR","linkAuthentication","linkPasswordDto","authSuccess","compareUserPassword","password","LINK_ERROR","UNAUTHORIZED","FORBIDDEN","spacesManager","SPACE_REPOSITORY","FILES","SHARES","alias","ignoreAuth","linkFromUUID","checkLink","NOT_FOUND","isActive","DISABLED","limitAccess","nbAccess","EXCEEDED","expiresAt","Date","EXPIRED","requireAuth","Logger"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/links/services/links-manager.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger, StreamableFile } from '@nestjs/common'\nimport { FastifyReply, FastifyRequest } from 'fastify'\nimport { AuthManager } from '../../../authentication/auth.service'\nimport { LoginResponseDto } from '../../../authentication/dto/login-response.dto'\nimport { JwtIdentityPayload } from '../../../authentication/interfaces/jwt-payload.interface'\nimport { serverConfig } from '../../../configuration/config.environment'\nimport { FilesManager } from '../../files/services/files-manager.service'\nimport { SendFile } from '../../files/utils/send-file'\nimport { SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { UserPasswordDto } from '../../users/dto/user-properties.dto'\nimport { UserModel } from '../../users/models/user.model'\nimport { UsersManager } from '../../users/services/users-manager.service'\nimport { getAvatarBase64 } from '../../users/utils/avatar'\nimport { LINK_ERROR } from '../constants/links'\nimport { LinkAsUser } from '../interfaces/link-guest.interface'\nimport { SpaceLink } from '../interfaces/link-space.interface'\nimport { LinksQueries } from './links-queries.service'\n\n@Injectable()\nexport class LinksManager {\n private logger = new Logger(LinksManager.name)\n\n constructor(\n private readonly authManager: AuthManager,\n private readonly usersManager: UsersManager,\n private readonly filesManager: FilesManager,\n private readonly spacesManager: SpacesManager,\n private readonly linksQueries: LinksQueries\n ) {}\n\n async linkValidation(identity: JwtIdentityPayload, uuid: string): Promise<{ ok: boolean; error: string | true; link: SpaceLink }> {\n const [_link, check, ok] = await this.linkEnv(identity, uuid)\n if (!ok) {\n this.logger.warn({ tag: this.linkValidation.name, msg: `${uuid} : ${check}` })\n }\n const spaceLink: SpaceLink = ok ? await this.linksQueries.spaceLink(uuid) : null\n if (ok) {\n if (spaceLink?.owner?.login) {\n spaceLink.owner.avatar = await getAvatarBase64(spaceLink.owner.login)\n // For security reasons\n delete spaceLink.owner.login\n }\n if (spaceLink?.share) {\n // Only used when the link is a file or a directory\n spaceLink.fileEditors = serverConfig.fileEditors\n }\n }\n return { ok: ok, error: ok ? null : check, link: spaceLink }\n }\n\n async linkAccess(\n identity: JwtIdentityPayload,\n uuid: string,\n req: FastifyRequest,\n res: FastifyReply\n ): Promise<LoginResponseDto | Omit<LoginResponseDto, 'token'>> {\n const [link, check, ok] = await this.linkEnv(identity, uuid)\n if (!ok) {\n this.logger.warn({ tag: this.linkAccess.name, msg: `*${link.user.login}* (${link.user.id}) : ${check}` })\n throw new HttpException(check as string, HttpStatus.BAD_REQUEST)\n }\n const user = new UserModel(link.user)\n if (link.user.id !== identity.id) {\n // Authenticate user to allow access to the directory\n this.logger.log({ tag: this.linkAccess.name, msg: `*${user.login}* (${user.id}) is logged` })\n this.incrementLinkNbAccess(link)\n this.usersManager.updateAccesses(user, req.ip, true).catch((e: Error) => this.logger.error({ tag: this.linkAccess.name, msg: `${e}` }))\n return this.authManager.setCookies(user, res)\n }\n // Already authenticated\n return { user: user, server: serverConfig }\n }\n\n async linkDownload(identity: JwtIdentityPayload, uuid: string, req: FastifyRequest, res: FastifyReply): Promise<StreamableFile> {\n const [link, check, ok] = await this.linkEnv(identity, uuid)\n if (!ok) {\n this.logger.warn({ tag: this.linkDownload.name, msg: `*${link.user.login}* (${link.user.id}) : ${check}` })\n throw new HttpException(check as string, HttpStatus.BAD_REQUEST)\n }\n const spaceLink: SpaceLink = await this.linksQueries.spaceLink(uuid)\n if (spaceLink.space || spaceLink.share?.isDir) {\n this.logger.error({ tag: this.linkDownload.name, msg: `the provided link does not reference a downloadable file` })\n throw new HttpException('This link does not allow file download', HttpStatus.BAD_REQUEST)\n }\n const user = new UserModel(link.user)\n // Download the file (authentication has been verified before)\n this.logger.log({ tag: this.linkDownload.name, msg: `*${user.login}* (${user.id}) downloading ${spaceLink.share.name}` })\n this.incrementLinkNbAccess(link)\n const spaceEnv: SpaceEnv = await this.spaceEnvFromLink(user, spaceLink)\n const sendFile: SendFile = this.filesManager.sendFileFromSpace(spaceEnv, spaceLink.share.name)\n try {\n await sendFile.checks()\n return await sendFile.stream(req, res)\n } catch (e) {\n this.logger.error({ tag: this.linkDownload.name, msg: `unable to send file : ${e}` })\n throw new HttpException('Unable to download file', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n async linkAuthentication(identity: JwtIdentityPayload, uuid: string, linkPasswordDto: UserPasswordDto, req: FastifyRequest, res: FastifyReply) {\n const [link, check, ok] = await this.linkEnv(identity, uuid, true)\n if (!ok) {\n this.logger.warn({ tag: this.linkAuthentication.name, msg: `*${link.user.login}* (${link.user.id}) : ${check}` })\n throw new HttpException(check as string, HttpStatus.BAD_REQUEST)\n }\n const authSuccess: boolean = await this.usersManager.compareUserPassword(link.user.id, linkPasswordDto.password)\n const user = new UserModel(link.user)\n this.usersManager\n .updateAccesses(user, req.ip, authSuccess)\n .catch((e: Error) => this.logger.error({ tag: this.linkAuthentication.name, msg: `${e}` }))\n if (!authSuccess) {\n this.logger.warn({ tag: this.linkAuthentication.name, msg: `*${user.login}* (${user.id}) : auth failed` })\n throw new HttpException(LINK_ERROR.UNAUTHORIZED, HttpStatus.FORBIDDEN)\n }\n // authenticate user to allow access\n this.logger.log({ tag: this.linkAuthentication.name, msg: `*${user.login}* (${user.id}) is logged` })\n return this.authManager.setCookies(user, res)\n }\n\n private spaceEnvFromLink(user: UserModel, link: SpaceLink): Promise<SpaceEnv> {\n return this.spacesManager.spaceEnv(user, [\n link.space ? SPACE_REPOSITORY.FILES : SPACE_REPOSITORY.SHARES,\n link.space ? link.space.alias : link.share.alias\n ])\n }\n\n private async linkEnv(identity: JwtIdentityPayload, uuid: string, ignoreAuth: boolean = false): Promise<[LinkAsUser, string | true, boolean]> {\n const link: LinkAsUser = await this.linksQueries.linkFromUUID(uuid)\n const check: string | true = this.checkLink(identity, link, ignoreAuth)\n const ok: boolean = check === true\n return [link, check, ok]\n }\n\n private checkLink(identity: JwtIdentityPayload, link: LinkAsUser, ignoreAuth: boolean = false): string | true {\n if (!link) {\n return LINK_ERROR.NOT_FOUND\n }\n if (!link.user.isActive) {\n return LINK_ERROR.DISABLED\n }\n if (link.limitAccess !== 0 && link.nbAccess >= link.limitAccess) {\n return LINK_ERROR.EXCEEDED\n }\n if (link.expiresAt && new Date() >= link.expiresAt) {\n return LINK_ERROR.EXPIRED\n }\n if (!ignoreAuth && link.requireAuth && link.user.id !== identity.id) {\n return LINK_ERROR.UNAUTHORIZED\n }\n return true\n }\n\n private incrementLinkNbAccess(link: LinkAsUser) {\n this.linksQueries.incrementLinkNbAccess(link.uuid).catch((e: Error) => this.logger.error({ tag: this.incrementLinkNbAccess.name, msg: `${e}` }))\n }\n}\n"],"names":["LinksManager","linkValidation","identity","uuid","_link","check","ok","linkEnv","logger","warn","tag","name","msg","spaceLink","linksQueries","owner","login","avatar","getAvatarBase64","share","fileEditors","serverConfig","error","link","linkAccess","req","res","user","id","HttpException","HttpStatus","BAD_REQUEST","UserModel","log","incrementLinkNbAccess","usersManager","updateAccesses","ip","catch","e","authManager","setCookies","server","linkDownload","space","isDir","spaceEnv","spaceEnvFromLink","sendFile","filesManager","sendFileFromSpace","checks","stream","INTERNAL_SERVER_ERROR","linkAuthentication","linkPasswordDto","authSuccess","compareUserPassword","password","LINK_ERROR","UNAUTHORIZED","FORBIDDEN","spacesManager","SPACE_REPOSITORY","FILES","SHARES","alias","ignoreAuth","linkFromUUID","checkLink","NOT_FOUND","isActive","DISABLED","limitAccess","nbAccess","EXCEEDED","expiresAt","Date","EXPIRED","requireAuth","Logger"],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -10,7 +6,7 @@ const _axios = require("@nestjs/axios");
10
6
  const _config = require("@nestjs/config");
11
7
  const _jwt = require("@nestjs/jwt");
12
8
  const _testing = require("@nestjs/testing");
13
- const _authmanagerservice = require("../../../authentication/services/auth-manager.service");
9
+ const _authservice = require("../../../authentication/auth.service");
14
10
  const _cacheservice = require("../../../infrastructure/cache/services/cache.service");
15
11
  const _contextmanagerservice = require("../../../infrastructure/context/services/context-manager.service");
16
12
  const _constants = require("../../../infrastructure/database/constants");
@@ -110,7 +106,7 @@ describe(_linksmanagerservice.LinksManager.name, ()=>{
110
106
  useValue: {}
111
107
  },
112
108
  {
113
- provide: _authmanagerservice.AuthManager,
109
+ provide: _authservice.AuthManager,
114
110
  useValue: authManagerMock
115
111
  },
116
112
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/links/services/links-manager.service.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpService } from '@nestjs/axios'\nimport { ConfigService } from '@nestjs/config'\nimport { JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { AuthManager } from '../../../authentication/services/auth-manager.service'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { ContextManager } from '../../../infrastructure/context/services/context-manager.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport { FilesLockManager } from '../../files/services/files-lock-manager.service'\nimport { FilesManager } from '../../files/services/files-manager.service'\nimport { FilesQueries } from '../../files/services/files-queries.service'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { SharesManager } from '../../shares/services/shares-manager.service'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { SpacesQueries } from '../../spaces/services/spaces-queries.service'\nimport { UserModel } from '../../users/models/user.model'\nimport { AdminUsersManager } from '../../users/services/admin-users-manager.service'\nimport { AdminUsersQueries } from '../../users/services/admin-users-queries.service'\nimport { UsersManager } from '../../users/services/users-manager.service'\nimport { UsersQueries } from '../../users/services/users-queries.service'\nimport { getAvatarBase64 } from '../../users/utils/avatar'\nimport { LinksManager } from './links-manager.service'\nimport { LinksQueries } from './links-queries.service'\n\njest.mock('../../users/utils/avatar', () => ({\n getAvatarBase64: jest.fn()\n}))\n\ndescribe(LinksManager.name, () => {\n let service: LinksManager\n let linksQueriesMock: jest.Mocked<LinksQueries>\n let usersManagerMock: jest.Mocked<UsersManager>\n let filesManagerMock: jest.Mocked<FilesManager>\n let spacesManagerMock: jest.Mocked<SpacesManager>\n let authManagerMock: jest.Mocked<AuthManager>\n\n const identity: any = { id: 42, login: 'visitor' }\n const baseLink: any = {\n uuid: 'uuid-123',\n user: { id: 7, login: 'john', isActive: true },\n requireAuth: false,\n limitAccess: 0,\n nbAccess: 0,\n expiresAt: null\n }\n\n beforeAll(async () => {\n linksQueriesMock = {\n linkFromUUID: jest.fn(),\n spaceLink: jest.fn(),\n incrementLinkNbAccess: jest.fn().mockResolvedValue(undefined)\n } as any\n\n usersManagerMock = {\n compareUserPassword: jest.fn(),\n updateAccesses: jest.fn()\n } as any\n\n filesManagerMock = {\n sendFileFromSpace: jest.fn()\n } as any\n\n spacesManagerMock = {\n spaceEnv: jest.fn()\n } as any\n\n authManagerMock = {\n setCookies: jest.fn()\n } as any\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n {\n provide: DB_TOKEN_PROVIDER,\n useValue: {}\n },\n {\n provide: Cache,\n useValue: {}\n },\n { provide: ContextManager, useValue: {} },\n {\n provide: NotificationsManager,\n useValue: {}\n },\n { provide: HttpService, useValue: {} },\n { provide: FilesLockManager, useValue: {} },\n { provide: ConfigService, useValue: {} },\n { provide: JwtService, useValue: {} },\n { provide: AuthManager, useValue: authManagerMock },\n { provide: UsersManager, useValue: usersManagerMock },\n { provide: UsersQueries, useValue: {} },\n { provide: AdminUsersManager, useValue: {} },\n { provide: AdminUsersQueries, useValue: {} },\n { provide: FilesQueries, useValue: {} },\n { provide: FilesManager, useValue: filesManagerMock },\n { provide: SpacesQueries, useValue: {} },\n { provide: SpacesManager, useValue: spacesManagerMock },\n { provide: SharesQueries, useValue: {} },\n { provide: SharesManager, useValue: {} },\n { provide: LinksQueries, useValue: linksQueriesMock },\n LinksManager\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<LinksManager>(LinksManager)\n })\n\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n\n describe('linkValidation', () => {\n it('returns ok with sanitized owner and avatar when link is valid', async () => {\n const link = { ...baseLink }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n const spaceLink = {\n owner: { login: 'jane' },\n share: { isDir: true, alias: 's-alias', name: 'Docs' },\n space: null\n } as any\n linksQueriesMock.spaceLink.mockResolvedValueOnce(spaceLink)\n ;(getAvatarBase64 as jest.Mock).mockResolvedValueOnce('base64-xxx')\n\n const res = await service.linkValidation(identity, link.uuid)\n\n expect(res.ok).toBe(true)\n expect(res.error).toBeNull()\n expect(res.link).toBe(spaceLink)\n expect((spaceLink.owner as any).login).toBeUndefined()\n expect(linksQueriesMock.spaceLink).toHaveBeenCalledWith(link.uuid)\n expect(getAvatarBase64).toHaveBeenCalledWith('jane')\n\n // extra coverage: directly assert private checkLink with default ignoreAuth=false\n const directCheck = (service as any).checkLink(identity, link)\n expect(directCheck).toBe(true)\n })\n\n it('returns error and null link when uuid is not found', async () => {\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(null)\n\n const res = await service.linkValidation(identity, 'missing-uuid')\n\n expect(res.ok).toBe(false)\n expect(res.error).toBeDefined()\n expect(res.link).toBeNull()\n })\n\n it('returns unauthorized when auth is required and identity differs', async () => {\n const link = { ...baseLink, requireAuth: true }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n\n const res = await service.linkValidation(identity, link.uuid)\n\n expect(res.ok).toBe(false)\n expect(String(res.error).toLowerCase()).toContain('unauthorized')\n expect(res.link).toBeNull()\n\n // extra coverage: directly assert private checkLink with default ignoreAuth=false\n const directCheck = (service as any).checkLink(identity, link)\n expect(String(directCheck).toLowerCase()).toContain('unauthorized')\n })\n\n it('returns exceeded when nbAccess >= limitAccess', async () => {\n const link = { ...baseLink, limitAccess: 5, nbAccess: 5 }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n\n const res = await service.linkValidation(identity, link.uuid)\n\n expect(res.ok).toBe(false)\n expect(String(res.error).toLowerCase()).toContain('exceeded')\n })\n })\n\n describe('linkAccess', () => {\n const req: any = { ip: '127.0.0.1' }\n const res: any = {}\n\n it('streams a file when link targets a single file', async () => {\n const link = { ...baseLink, limitAccess: 10 }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n const spaceLink = {\n space: null,\n share: { isDir: false, name: 'file.txt', alias: 'share-alias' }\n } as any\n linksQueriesMock.spaceLink.mockResolvedValueOnce(spaceLink)\n spacesManagerMock.spaceEnv.mockResolvedValueOnce({} as any)\n const streamable: any = { some: 'stream' }\n filesManagerMock.sendFileFromSpace.mockReturnValueOnce({\n checks: jest.fn().mockResolvedValueOnce(undefined),\n stream: jest.fn().mockResolvedValueOnce(streamable)\n } as any)\n\n // cover: incrementLinkNbAccess.catch(...) should log an error when the query rejects\n const logErrorSpy = jest.spyOn((service as any).logger, 'error').mockImplementation(() => undefined as any)\n linksQueriesMock.incrementLinkNbAccess.mockRejectedValueOnce(new Error('increment boom'))\n\n const result = await service.linkDownload(identity, link.uuid, req, res)\n\n expect(result).toBe(streamable)\n expect(filesManagerMock.sendFileFromSpace).toHaveBeenCalled()\n expect(linksQueriesMock.incrementLinkNbAccess).toHaveBeenCalledWith(link.uuid)\n // Assert repository selection for a share file (space falsy)\n // should call spacesManager.spaceEnv with SHARES and share alias when link.space is falsy\n expect(spacesManagerMock.spaceEnv).toHaveBeenCalledWith(expect.anything(), ['shares', 'share-alias'])\n // should log error when increment fails\n expect(logErrorSpy).toHaveBeenCalled()\n })\n\n it('authenticates and returns cookies when link targets a directory and user is different', async () => {\n const link = { ...baseLink, requireAuth: false, user: { id: 7, login: 'john', isActive: true } }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n const spaceLink = {\n space: { alias: 'files', name: 'My Space' },\n share: { isDir: true, name: 'ignored', alias: 'ignored' }\n } as any\n linksQueriesMock.spaceLink.mockResolvedValueOnce(spaceLink)\n\n const loginDto: any = { token: 'jwt' }\n authManagerMock.setCookies.mockResolvedValueOnce(loginDto)\n\n // cover: usersManager.updateAccesses.catch(...) should log an error when updateAccesses rejects\n const logErrorSpy = jest.spyOn((service as any).logger, 'error').mockImplementation(() => undefined as any)\n usersManagerMock.updateAccesses.mockRejectedValueOnce(new Error('updateAccesses boom'))\n\n const result = await service.linkAccess(identity, link.uuid, req, res)\n\n expect(result).toBe(loginDto)\n expect(usersManagerMock.updateAccesses).toHaveBeenCalledWith(expect.anything(), req.ip, true)\n expect(authManagerMock.setCookies).toHaveBeenCalled()\n // additionally cover the \"space truthy\" branch by calling the private helper directly\n // should call spacesManager.spaceEnv with FILES and space alias when link.space is truthy\n await (service as any).spaceEnvFromLink(new UserModel(link.user as any), spaceLink as any)\n expect(spacesManagerMock.spaceEnv).toHaveBeenCalledWith(expect.anything(), ['files', 'files'])\n // should log error when updateAccesses fails\n expect(logErrorSpy).toHaveBeenCalled()\n })\n\n it('throws BAD_REQUEST when link is invalid', async () => {\n const disabledLink = { ...baseLink, user: { id: 7, login: 'john', isActive: false } }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(disabledLink)\n\n await expect(service.linkAccess(identity, disabledLink.uuid, req, res)).rejects.toMatchObject({\n status: 400\n })\n })\n\n it('returns undefined for already authenticated directory access (same user) and does not set cookies or increment', async () => {\n const sameUserIdentity = { id: baseLink.user.id, login: 'john' }\n const link = { ...baseLink, requireAuth: true }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n const spaceLink = {\n space: { alias: 'files', name: 'Space' },\n share: { isDir: true, name: 'dir', alias: 'share' }\n } as any\n linksQueriesMock.spaceLink.mockResolvedValueOnce(spaceLink)\n\n const result = await service.linkAccess(sameUserIdentity as any, link.uuid, req, res)\n\n expect(result.user.id).toEqual(baseLink.user.id)\n expect(authManagerMock.setCookies).not.toHaveBeenCalled()\n expect(linksQueriesMock.incrementLinkNbAccess).not.toHaveBeenCalled()\n })\n\n it('throws INTERNAL_SERVER_ERROR when file checks fail during streaming', async () => {\n const link = { ...baseLink, limitAccess: 10 }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n const spaceLink = {\n space: null,\n share: { isDir: false, name: 'bad.txt', alias: 'share' }\n } as any\n linksQueriesMock.spaceLink.mockReset()\n linksQueriesMock.spaceLink.mockResolvedValueOnce(spaceLink)\n\n spacesManagerMock.spaceEnv.mockResolvedValueOnce({} as any)\n filesManagerMock.sendFileFromSpace.mockReturnValueOnce({\n checks: jest.fn().mockRejectedValueOnce(new Error('disk error')),\n stream: jest.fn()\n } as any)\n\n await expect(service.linkDownload(identity, link.uuid, req, res)).rejects.toMatchObject({\n status: 500\n })\n expect(linksQueriesMock.incrementLinkNbAccess).toHaveBeenCalledWith(link.uuid)\n })\n })\n\n describe('linkAuthentication', () => {\n const req: any = { ip: '10.0.0.1' }\n const res: any = {}\n\n it('returns cookies when password is correct', async () => {\n const link = { ...baseLink, requireAuth: true }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n usersManagerMock.compareUserPassword.mockResolvedValueOnce(true)\n // usersManagerMock.updateAccesses.mockResolvedValueOnce(undefined) // removed to ensure rejection is hit\n const loginDto: any = { token: 'abc' }\n authManagerMock.setCookies.mockResolvedValueOnce(loginDto)\n\n // cover: usersManager.updateAccesses.catch(...) should log an error when updateAccesses rejects (success flow)\n const logErrorSpy = jest.spyOn((service as any).logger, 'error').mockImplementation(() => undefined as any)\n usersManagerMock.updateAccesses.mockRejectedValueOnce(new Error('updateAccesses auth success boom'))\n\n const result = await service.linkAuthentication(identity, link.uuid, { password: 'secret' } as any, req, res)\n\n expect(result).toBe(loginDto)\n expect(usersManagerMock.compareUserPassword).toHaveBeenCalledWith(link.user.id, 'secret')\n expect(usersManagerMock.updateAccesses).toHaveBeenCalledWith(expect.anything(), req.ip, true)\n expect(authManagerMock.setCookies).toHaveBeenCalled()\n // should log error when updateAccesses fails in successful authentication\n expect(logErrorSpy).toHaveBeenCalled()\n })\n\n it('throws FORBIDDEN when password is incorrect', async () => {\n const link = { ...baseLink, requireAuth: true }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n usersManagerMock.compareUserPassword.mockResolvedValueOnce(false)\n usersManagerMock.updateAccesses.mockResolvedValueOnce(undefined)\n\n await expect(service.linkAuthentication(identity, link.uuid, { password: 'bad' } as any, req, res)).rejects.toMatchObject({ status: 403 })\n })\n\n it('throws BAD_REQUEST when link is invalid (e.g., expired)', async () => {\n const expired = { ...baseLink, expiresAt: new Date(Date.now() - 60_000) }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(expired)\n\n await expect(service.linkAuthentication(identity, expired.uuid, { password: 'whatever' } as any, req, res)).rejects.toMatchObject({\n status: 400\n })\n })\n })\n})\n"],"names":["jest","mock","getAvatarBase64","fn","describe","LinksManager","name","service","linksQueriesMock","usersManagerMock","filesManagerMock","spacesManagerMock","authManagerMock","identity","id","login","baseLink","uuid","user","isActive","requireAuth","limitAccess","nbAccess","expiresAt","beforeAll","linkFromUUID","spaceLink","incrementLinkNbAccess","mockResolvedValue","undefined","compareUserPassword","updateAccesses","sendFileFromSpace","spaceEnv","setCookies","module","Test","createTestingModule","providers","provide","DB_TOKEN_PROVIDER","useValue","Cache","ContextManager","NotificationsManager","HttpService","FilesLockManager","ConfigService","JwtService","AuthManager","UsersManager","UsersQueries","AdminUsersManager","AdminUsersQueries","FilesQueries","FilesManager","SpacesQueries","SpacesManager","SharesQueries","SharesManager","LinksQueries","compile","useLogger","get","beforeEach","clearAllMocks","it","expect","toBeDefined","link","mockResolvedValueOnce","owner","share","isDir","alias","space","res","linkValidation","ok","toBe","error","toBeNull","toBeUndefined","toHaveBeenCalledWith","directCheck","checkLink","String","toLowerCase","toContain","req","ip","streamable","some","mockReturnValueOnce","checks","stream","logErrorSpy","spyOn","logger","mockImplementation","mockRejectedValueOnce","Error","result","linkDownload","toHaveBeenCalled","anything","loginDto","token","linkAccess","spaceEnvFromLink","UserModel","disabledLink","rejects","toMatchObject","status","sameUserIdentity","toEqual","not","mockReset","linkAuthentication","password","expired","Date","now"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/links/services/links-manager.service.spec.ts"],"sourcesContent":["import { HttpService } from '@nestjs/axios'\nimport { ConfigService } from '@nestjs/config'\nimport { JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { AuthManager } from '../../../authentication/auth.service'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { ContextManager } from '../../../infrastructure/context/services/context-manager.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport { FilesLockManager } from '../../files/services/files-lock-manager.service'\nimport { FilesManager } from '../../files/services/files-manager.service'\nimport { FilesQueries } from '../../files/services/files-queries.service'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { SharesManager } from '../../shares/services/shares-manager.service'\nimport { SharesQueries } from '../../shares/services/shares-queries.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { SpacesQueries } from '../../spaces/services/spaces-queries.service'\nimport { UserModel } from '../../users/models/user.model'\nimport { AdminUsersManager } from '../../users/services/admin-users-manager.service'\nimport { AdminUsersQueries } from '../../users/services/admin-users-queries.service'\nimport { UsersManager } from '../../users/services/users-manager.service'\nimport { UsersQueries } from '../../users/services/users-queries.service'\nimport { getAvatarBase64 } from '../../users/utils/avatar'\nimport { LinksManager } from './links-manager.service'\nimport { LinksQueries } from './links-queries.service'\n\njest.mock('../../users/utils/avatar', () => ({\n getAvatarBase64: jest.fn()\n}))\n\ndescribe(LinksManager.name, () => {\n let service: LinksManager\n let linksQueriesMock: jest.Mocked<LinksQueries>\n let usersManagerMock: jest.Mocked<UsersManager>\n let filesManagerMock: jest.Mocked<FilesManager>\n let spacesManagerMock: jest.Mocked<SpacesManager>\n let authManagerMock: jest.Mocked<AuthManager>\n\n const identity: any = { id: 42, login: 'visitor' }\n const baseLink: any = {\n uuid: 'uuid-123',\n user: { id: 7, login: 'john', isActive: true },\n requireAuth: false,\n limitAccess: 0,\n nbAccess: 0,\n expiresAt: null\n }\n\n beforeAll(async () => {\n linksQueriesMock = {\n linkFromUUID: jest.fn(),\n spaceLink: jest.fn(),\n incrementLinkNbAccess: jest.fn().mockResolvedValue(undefined)\n } as any\n\n usersManagerMock = {\n compareUserPassword: jest.fn(),\n updateAccesses: jest.fn()\n } as any\n\n filesManagerMock = {\n sendFileFromSpace: jest.fn()\n } as any\n\n spacesManagerMock = {\n spaceEnv: jest.fn()\n } as any\n\n authManagerMock = {\n setCookies: jest.fn()\n } as any\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n {\n provide: DB_TOKEN_PROVIDER,\n useValue: {}\n },\n {\n provide: Cache,\n useValue: {}\n },\n { provide: ContextManager, useValue: {} },\n {\n provide: NotificationsManager,\n useValue: {}\n },\n { provide: HttpService, useValue: {} },\n { provide: FilesLockManager, useValue: {} },\n { provide: ConfigService, useValue: {} },\n { provide: JwtService, useValue: {} },\n { provide: AuthManager, useValue: authManagerMock },\n { provide: UsersManager, useValue: usersManagerMock },\n { provide: UsersQueries, useValue: {} },\n { provide: AdminUsersManager, useValue: {} },\n { provide: AdminUsersQueries, useValue: {} },\n { provide: FilesQueries, useValue: {} },\n { provide: FilesManager, useValue: filesManagerMock },\n { provide: SpacesQueries, useValue: {} },\n { provide: SpacesManager, useValue: spacesManagerMock },\n { provide: SharesQueries, useValue: {} },\n { provide: SharesManager, useValue: {} },\n { provide: LinksQueries, useValue: linksQueriesMock },\n LinksManager\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<LinksManager>(LinksManager)\n })\n\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n\n describe('linkValidation', () => {\n it('returns ok with sanitized owner and avatar when link is valid', async () => {\n const link = { ...baseLink }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n const spaceLink = {\n owner: { login: 'jane' },\n share: { isDir: true, alias: 's-alias', name: 'Docs' },\n space: null\n } as any\n linksQueriesMock.spaceLink.mockResolvedValueOnce(spaceLink)\n ;(getAvatarBase64 as jest.Mock).mockResolvedValueOnce('base64-xxx')\n\n const res = await service.linkValidation(identity, link.uuid)\n\n expect(res.ok).toBe(true)\n expect(res.error).toBeNull()\n expect(res.link).toBe(spaceLink)\n expect((spaceLink.owner as any).login).toBeUndefined()\n expect(linksQueriesMock.spaceLink).toHaveBeenCalledWith(link.uuid)\n expect(getAvatarBase64).toHaveBeenCalledWith('jane')\n\n // extra coverage: directly assert private checkLink with default ignoreAuth=false\n const directCheck = (service as any).checkLink(identity, link)\n expect(directCheck).toBe(true)\n })\n\n it('returns error and null link when uuid is not found', async () => {\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(null)\n\n const res = await service.linkValidation(identity, 'missing-uuid')\n\n expect(res.ok).toBe(false)\n expect(res.error).toBeDefined()\n expect(res.link).toBeNull()\n })\n\n it('returns unauthorized when auth is required and identity differs', async () => {\n const link = { ...baseLink, requireAuth: true }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n\n const res = await service.linkValidation(identity, link.uuid)\n\n expect(res.ok).toBe(false)\n expect(String(res.error).toLowerCase()).toContain('unauthorized')\n expect(res.link).toBeNull()\n\n // extra coverage: directly assert private checkLink with default ignoreAuth=false\n const directCheck = (service as any).checkLink(identity, link)\n expect(String(directCheck).toLowerCase()).toContain('unauthorized')\n })\n\n it('returns exceeded when nbAccess >= limitAccess', async () => {\n const link = { ...baseLink, limitAccess: 5, nbAccess: 5 }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n\n const res = await service.linkValidation(identity, link.uuid)\n\n expect(res.ok).toBe(false)\n expect(String(res.error).toLowerCase()).toContain('exceeded')\n })\n })\n\n describe('linkAccess', () => {\n const req: any = { ip: '127.0.0.1' }\n const res: any = {}\n\n it('streams a file when link targets a single file', async () => {\n const link = { ...baseLink, limitAccess: 10 }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n const spaceLink = {\n space: null,\n share: { isDir: false, name: 'file.txt', alias: 'share-alias' }\n } as any\n linksQueriesMock.spaceLink.mockResolvedValueOnce(spaceLink)\n spacesManagerMock.spaceEnv.mockResolvedValueOnce({} as any)\n const streamable: any = { some: 'stream' }\n filesManagerMock.sendFileFromSpace.mockReturnValueOnce({\n checks: jest.fn().mockResolvedValueOnce(undefined),\n stream: jest.fn().mockResolvedValueOnce(streamable)\n } as any)\n\n // cover: incrementLinkNbAccess.catch(...) should log an error when the query rejects\n const logErrorSpy = jest.spyOn((service as any).logger, 'error').mockImplementation(() => undefined as any)\n linksQueriesMock.incrementLinkNbAccess.mockRejectedValueOnce(new Error('increment boom'))\n\n const result = await service.linkDownload(identity, link.uuid, req, res)\n\n expect(result).toBe(streamable)\n expect(filesManagerMock.sendFileFromSpace).toHaveBeenCalled()\n expect(linksQueriesMock.incrementLinkNbAccess).toHaveBeenCalledWith(link.uuid)\n // Assert repository selection for a share file (space falsy)\n // should call spacesManager.spaceEnv with SHARES and share alias when link.space is falsy\n expect(spacesManagerMock.spaceEnv).toHaveBeenCalledWith(expect.anything(), ['shares', 'share-alias'])\n // should log error when increment fails\n expect(logErrorSpy).toHaveBeenCalled()\n })\n\n it('authenticates and returns cookies when link targets a directory and user is different', async () => {\n const link = { ...baseLink, requireAuth: false, user: { id: 7, login: 'john', isActive: true } }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n const spaceLink = {\n space: { alias: 'files', name: 'My Space' },\n share: { isDir: true, name: 'ignored', alias: 'ignored' }\n } as any\n linksQueriesMock.spaceLink.mockResolvedValueOnce(spaceLink)\n\n const loginDto: any = { token: 'jwt' }\n authManagerMock.setCookies.mockResolvedValueOnce(loginDto)\n\n // cover: usersManager.updateAccesses.catch(...) should log an error when updateAccesses rejects\n const logErrorSpy = jest.spyOn((service as any).logger, 'error').mockImplementation(() => undefined as any)\n usersManagerMock.updateAccesses.mockRejectedValueOnce(new Error('updateAccesses boom'))\n\n const result = await service.linkAccess(identity, link.uuid, req, res)\n\n expect(result).toBe(loginDto)\n expect(usersManagerMock.updateAccesses).toHaveBeenCalledWith(expect.anything(), req.ip, true)\n expect(authManagerMock.setCookies).toHaveBeenCalled()\n // additionally cover the \"space truthy\" branch by calling the private helper directly\n // should call spacesManager.spaceEnv with FILES and space alias when link.space is truthy\n await (service as any).spaceEnvFromLink(new UserModel(link.user as any), spaceLink as any)\n expect(spacesManagerMock.spaceEnv).toHaveBeenCalledWith(expect.anything(), ['files', 'files'])\n // should log error when updateAccesses fails\n expect(logErrorSpy).toHaveBeenCalled()\n })\n\n it('throws BAD_REQUEST when link is invalid', async () => {\n const disabledLink = { ...baseLink, user: { id: 7, login: 'john', isActive: false } }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(disabledLink)\n\n await expect(service.linkAccess(identity, disabledLink.uuid, req, res)).rejects.toMatchObject({\n status: 400\n })\n })\n\n it('returns undefined for already authenticated directory access (same user) and does not set cookies or increment', async () => {\n const sameUserIdentity = { id: baseLink.user.id, login: 'john' }\n const link = { ...baseLink, requireAuth: true }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n const spaceLink = {\n space: { alias: 'files', name: 'Space' },\n share: { isDir: true, name: 'dir', alias: 'share' }\n } as any\n linksQueriesMock.spaceLink.mockResolvedValueOnce(spaceLink)\n\n const result = await service.linkAccess(sameUserIdentity as any, link.uuid, req, res)\n\n expect(result.user.id).toEqual(baseLink.user.id)\n expect(authManagerMock.setCookies).not.toHaveBeenCalled()\n expect(linksQueriesMock.incrementLinkNbAccess).not.toHaveBeenCalled()\n })\n\n it('throws INTERNAL_SERVER_ERROR when file checks fail during streaming', async () => {\n const link = { ...baseLink, limitAccess: 10 }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n const spaceLink = {\n space: null,\n share: { isDir: false, name: 'bad.txt', alias: 'share' }\n } as any\n linksQueriesMock.spaceLink.mockReset()\n linksQueriesMock.spaceLink.mockResolvedValueOnce(spaceLink)\n\n spacesManagerMock.spaceEnv.mockResolvedValueOnce({} as any)\n filesManagerMock.sendFileFromSpace.mockReturnValueOnce({\n checks: jest.fn().mockRejectedValueOnce(new Error('disk error')),\n stream: jest.fn()\n } as any)\n\n await expect(service.linkDownload(identity, link.uuid, req, res)).rejects.toMatchObject({\n status: 500\n })\n expect(linksQueriesMock.incrementLinkNbAccess).toHaveBeenCalledWith(link.uuid)\n })\n })\n\n describe('linkAuthentication', () => {\n const req: any = { ip: '10.0.0.1' }\n const res: any = {}\n\n it('returns cookies when password is correct', async () => {\n const link = { ...baseLink, requireAuth: true }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n usersManagerMock.compareUserPassword.mockResolvedValueOnce(true)\n // usersManagerMock.updateAccesses.mockResolvedValueOnce(undefined) // removed to ensure rejection is hit\n const loginDto: any = { token: 'abc' }\n authManagerMock.setCookies.mockResolvedValueOnce(loginDto)\n\n // cover: usersManager.updateAccesses.catch(...) should log an error when updateAccesses rejects (success flow)\n const logErrorSpy = jest.spyOn((service as any).logger, 'error').mockImplementation(() => undefined as any)\n usersManagerMock.updateAccesses.mockRejectedValueOnce(new Error('updateAccesses auth success boom'))\n\n const result = await service.linkAuthentication(identity, link.uuid, { password: 'secret' } as any, req, res)\n\n expect(result).toBe(loginDto)\n expect(usersManagerMock.compareUserPassword).toHaveBeenCalledWith(link.user.id, 'secret')\n expect(usersManagerMock.updateAccesses).toHaveBeenCalledWith(expect.anything(), req.ip, true)\n expect(authManagerMock.setCookies).toHaveBeenCalled()\n // should log error when updateAccesses fails in successful authentication\n expect(logErrorSpy).toHaveBeenCalled()\n })\n\n it('throws FORBIDDEN when password is incorrect', async () => {\n const link = { ...baseLink, requireAuth: true }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(link)\n usersManagerMock.compareUserPassword.mockResolvedValueOnce(false)\n usersManagerMock.updateAccesses.mockResolvedValueOnce(undefined)\n\n await expect(service.linkAuthentication(identity, link.uuid, { password: 'bad' } as any, req, res)).rejects.toMatchObject({ status: 403 })\n })\n\n it('throws BAD_REQUEST when link is invalid (e.g., expired)', async () => {\n const expired = { ...baseLink, expiresAt: new Date(Date.now() - 60_000) }\n linksQueriesMock.linkFromUUID.mockResolvedValueOnce(expired)\n\n await expect(service.linkAuthentication(identity, expired.uuid, { password: 'whatever' } as any, req, res)).rejects.toMatchObject({\n status: 400\n })\n })\n })\n})\n"],"names":["jest","mock","getAvatarBase64","fn","describe","LinksManager","name","service","linksQueriesMock","usersManagerMock","filesManagerMock","spacesManagerMock","authManagerMock","identity","id","login","baseLink","uuid","user","isActive","requireAuth","limitAccess","nbAccess","expiresAt","beforeAll","linkFromUUID","spaceLink","incrementLinkNbAccess","mockResolvedValue","undefined","compareUserPassword","updateAccesses","sendFileFromSpace","spaceEnv","setCookies","module","Test","createTestingModule","providers","provide","DB_TOKEN_PROVIDER","useValue","Cache","ContextManager","NotificationsManager","HttpService","FilesLockManager","ConfigService","JwtService","AuthManager","UsersManager","UsersQueries","AdminUsersManager","AdminUsersQueries","FilesQueries","FilesManager","SpacesQueries","SpacesManager","SharesQueries","SharesManager","LinksQueries","compile","useLogger","get","beforeEach","clearAllMocks","it","expect","toBeDefined","link","mockResolvedValueOnce","owner","share","isDir","alias","space","res","linkValidation","ok","toBe","error","toBeNull","toBeUndefined","toHaveBeenCalledWith","directCheck","checkLink","String","toLowerCase","toContain","req","ip","streamable","some","mockReturnValueOnce","checks","stream","logErrorSpy","spyOn","logger","mockImplementation","mockRejectedValueOnce","Error","result","linkDownload","toHaveBeenCalled","anything","loginDto","token","linkAccess","spaceEnvFromLink","UserModel","disabledLink","rejects","toMatchObject","status","sameUserIdentity","toEqual","not","mockReset","linkAuthentication","password","expired","Date","now"],"mappings":";;;;uBAA4B;wBACE;qBACH;yBACS;6BACR;8BACN;uCACS;2BACG;yCACD;qCACJ;qCACA;6CACQ;sCACP;sCACA;sCACA;sCACA;2BACJ;0CACQ;0CACA;qCACL;qCACA;wBACG;qCACH;qCACA;AAE7BA,KAAKC,IAAI,CAAC,4BAA4B,IAAO,CAAA;QAC3CC,iBAAiBF,KAAKG,EAAE;IAC1B,CAAA;AAEAC,SAASC,iCAAY,CAACC,IAAI,EAAE;IAC1B,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJ,MAAMC,WAAgB;QAAEC,IAAI;QAAIC,OAAO;IAAU;IACjD,MAAMC,WAAgB;QACpBC,MAAM;QACNC,MAAM;YAAEJ,IAAI;YAAGC,OAAO;YAAQI,UAAU;QAAK;QAC7CC,aAAa;QACbC,aAAa;QACbC,UAAU;QACVC,WAAW;IACb;IAEAC,UAAU;QACRhB,mBAAmB;YACjBiB,cAAczB,KAAKG,EAAE;YACrBuB,WAAW1B,KAAKG,EAAE;YAClBwB,uBAAuB3B,KAAKG,EAAE,GAAGyB,iBAAiB,CAACC;QACrD;QAEApB,mBAAmB;YACjBqB,qBAAqB9B,KAAKG,EAAE;YAC5B4B,gBAAgB/B,KAAKG,EAAE;QACzB;QAEAO,mBAAmB;YACjBsB,mBAAmBhC,KAAKG,EAAE;QAC5B;QAEAQ,oBAAoB;YAClBsB,UAAUjC,KAAKG,EAAE;QACnB;QAEAS,kBAAkB;YAChBsB,YAAYlC,KAAKG,EAAE;QACrB;QAEA,MAAMgC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,WAAW;gBACT;oBACEC,SAASC,4BAAiB;oBAC1BC,UAAU,CAAC;gBACb;gBACA;oBACEF,SAASG,mBAAK;oBACdD,UAAU,CAAC;gBACb;gBACA;oBAAEF,SAASI,qCAAc;oBAAEF,UAAU,CAAC;gBAAE;gBACxC;oBACEF,SAASK,iDAAoB;oBAC7BH,UAAU,CAAC;gBACb;gBACA;oBAAEF,SAASM,kBAAW;oBAAEJ,UAAU,CAAC;gBAAE;gBACrC;oBAAEF,SAASO,yCAAgB;oBAAEL,UAAU,CAAC;gBAAE;gBAC1C;oBAAEF,SAASQ,qBAAa;oBAAEN,UAAU,CAAC;gBAAE;gBACvC;oBAAEF,SAASS,eAAU;oBAAEP,UAAU,CAAC;gBAAE;gBACpC;oBAAEF,SAASU,wBAAW;oBAAER,UAAU7B;gBAAgB;gBAClD;oBAAE2B,SAASW,iCAAY;oBAAET,UAAUhC;gBAAiB;gBACpD;oBAAE8B,SAASY,iCAAY;oBAAEV,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASa,2CAAiB;oBAAEX,UAAU,CAAC;gBAAE;gBAC3C;oBAAEF,SAASc,2CAAiB;oBAAEZ,UAAU,CAAC;gBAAE;gBAC3C;oBAAEF,SAASe,iCAAY;oBAAEb,UAAU,CAAC;gBAAE;gBACtC;oBAAEF,SAASgB,iCAAY;oBAAEd,UAAU/B;gBAAiB;gBACpD;oBAAE6B,SAASiB,mCAAa;oBAAEf,UAAU,CAAC;gBAAE;gBACvC;oBAAEF,SAASkB,mCAAa;oBAAEhB,UAAU9B;gBAAkB;gBACtD;oBAAE4B,SAASmB,mCAAa;oBAAEjB,UAAU,CAAC;gBAAE;gBACvC;oBAAEF,SAASoB,mCAAa;oBAAElB,UAAU,CAAC;gBAAE;gBACvC;oBAAEF,SAASqB,iCAAY;oBAAEnB,UAAUjC;gBAAiB;gBACpDH,iCAAY;aACb;QACH,GAAGwD,OAAO;QAEV1B,OAAO2B,SAAS,CAAC;YAAC;SAAQ;QAC1BvD,UAAU4B,OAAO4B,GAAG,CAAe1D,iCAAY;IACjD;IAEA2D,WAAW;QACThE,KAAKiE,aAAa;IACpB;IAEAC,GAAG,qBAAqB;QACtBC,OAAO5D,SAAS6D,WAAW;IAC7B;IAEAhE,SAAS,kBAAkB;QACzB8D,GAAG,iEAAiE;YAClE,MAAMG,OAAO;gBAAE,GAAGrD,QAAQ;YAAC;YAC3BR,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACD;YACpD,MAAM3C,YAAY;gBAChB6C,OAAO;oBAAExD,OAAO;gBAAO;gBACvByD,OAAO;oBAAEC,OAAO;oBAAMC,OAAO;oBAAWpE,MAAM;gBAAO;gBACrDqE,OAAO;YACT;YACAnE,iBAAiBkB,SAAS,CAAC4C,qBAAqB,CAAC5C;YAC/CxB,uBAAe,CAAeoE,qBAAqB,CAAC;YAEtD,MAAMM,MAAM,MAAMrE,QAAQsE,cAAc,CAAChE,UAAUwD,KAAKpD,IAAI;YAE5DkD,OAAOS,IAAIE,EAAE,EAAEC,IAAI,CAAC;YACpBZ,OAAOS,IAAII,KAAK,EAAEC,QAAQ;YAC1Bd,OAAOS,IAAIP,IAAI,EAAEU,IAAI,CAACrD;YACtByC,OAAO,AAACzC,UAAU6C,KAAK,CAASxD,KAAK,EAAEmE,aAAa;YACpDf,OAAO3D,iBAAiBkB,SAAS,EAAEyD,oBAAoB,CAACd,KAAKpD,IAAI;YACjEkD,OAAOjE,uBAAe,EAAEiF,oBAAoB,CAAC;YAE7C,kFAAkF;YAClF,MAAMC,cAAc,AAAC7E,QAAgB8E,SAAS,CAACxE,UAAUwD;YACzDF,OAAOiB,aAAaL,IAAI,CAAC;QAC3B;QAEAb,GAAG,sDAAsD;YACvD1D,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAAC;YAEpD,MAAMM,MAAM,MAAMrE,QAAQsE,cAAc,CAAChE,UAAU;YAEnDsD,OAAOS,IAAIE,EAAE,EAAEC,IAAI,CAAC;YACpBZ,OAAOS,IAAII,KAAK,EAAEZ,WAAW;YAC7BD,OAAOS,IAAIP,IAAI,EAAEY,QAAQ;QAC3B;QAEAf,GAAG,mEAAmE;YACpE,MAAMG,OAAO;gBAAE,GAAGrD,QAAQ;gBAAEI,aAAa;YAAK;YAC9CZ,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACD;YAEpD,MAAMO,MAAM,MAAMrE,QAAQsE,cAAc,CAAChE,UAAUwD,KAAKpD,IAAI;YAE5DkD,OAAOS,IAAIE,EAAE,EAAEC,IAAI,CAAC;YACpBZ,OAAOmB,OAAOV,IAAII,KAAK,EAAEO,WAAW,IAAIC,SAAS,CAAC;YAClDrB,OAAOS,IAAIP,IAAI,EAAEY,QAAQ;YAEzB,kFAAkF;YAClF,MAAMG,cAAc,AAAC7E,QAAgB8E,SAAS,CAACxE,UAAUwD;YACzDF,OAAOmB,OAAOF,aAAaG,WAAW,IAAIC,SAAS,CAAC;QACtD;QAEAtB,GAAG,iDAAiD;YAClD,MAAMG,OAAO;gBAAE,GAAGrD,QAAQ;gBAAEK,aAAa;gBAAGC,UAAU;YAAE;YACxDd,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACD;YAEpD,MAAMO,MAAM,MAAMrE,QAAQsE,cAAc,CAAChE,UAAUwD,KAAKpD,IAAI;YAE5DkD,OAAOS,IAAIE,EAAE,EAAEC,IAAI,CAAC;YACpBZ,OAAOmB,OAAOV,IAAII,KAAK,EAAEO,WAAW,IAAIC,SAAS,CAAC;QACpD;IACF;IAEApF,SAAS,cAAc;QACrB,MAAMqF,MAAW;YAAEC,IAAI;QAAY;QACnC,MAAMd,MAAW,CAAC;QAElBV,GAAG,kDAAkD;YACnD,MAAMG,OAAO;gBAAE,GAAGrD,QAAQ;gBAAEK,aAAa;YAAG;YAC5Cb,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACD;YACpD,MAAM3C,YAAY;gBAChBiD,OAAO;gBACPH,OAAO;oBAAEC,OAAO;oBAAOnE,MAAM;oBAAYoE,OAAO;gBAAc;YAChE;YACAlE,iBAAiBkB,SAAS,CAAC4C,qBAAqB,CAAC5C;YACjDf,kBAAkBsB,QAAQ,CAACqC,qBAAqB,CAAC,CAAC;YAClD,MAAMqB,aAAkB;gBAAEC,MAAM;YAAS;YACzClF,iBAAiBsB,iBAAiB,CAAC6D,mBAAmB,CAAC;gBACrDC,QAAQ9F,KAAKG,EAAE,GAAGmE,qBAAqB,CAACzC;gBACxCkE,QAAQ/F,KAAKG,EAAE,GAAGmE,qBAAqB,CAACqB;YAC1C;YAEA,qFAAqF;YACrF,MAAMK,cAAchG,KAAKiG,KAAK,CAAC,AAAC1F,QAAgB2F,MAAM,EAAE,SAASC,kBAAkB,CAAC,IAAMtE;YAC1FrB,iBAAiBmB,qBAAqB,CAACyE,qBAAqB,CAAC,IAAIC,MAAM;YAEvE,MAAMC,SAAS,MAAM/F,QAAQgG,YAAY,CAAC1F,UAAUwD,KAAKpD,IAAI,EAAEwE,KAAKb;YAEpET,OAAOmC,QAAQvB,IAAI,CAACY;YACpBxB,OAAOzD,iBAAiBsB,iBAAiB,EAAEwE,gBAAgB;YAC3DrC,OAAO3D,iBAAiBmB,qBAAqB,EAAEwD,oBAAoB,CAACd,KAAKpD,IAAI;YAC7E,6DAA6D;YAC7D,0FAA0F;YAC1FkD,OAAOxD,kBAAkBsB,QAAQ,EAAEkD,oBAAoB,CAAChB,OAAOsC,QAAQ,IAAI;gBAAC;gBAAU;aAAc;YACpG,wCAAwC;YACxCtC,OAAO6B,aAAaQ,gBAAgB;QACtC;QAEAtC,GAAG,yFAAyF;YAC1F,MAAMG,OAAO;gBAAE,GAAGrD,QAAQ;gBAAEI,aAAa;gBAAOF,MAAM;oBAAEJ,IAAI;oBAAGC,OAAO;oBAAQI,UAAU;gBAAK;YAAE;YAC/FX,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACD;YACpD,MAAM3C,YAAY;gBAChBiD,OAAO;oBAAED,OAAO;oBAASpE,MAAM;gBAAW;gBAC1CkE,OAAO;oBAAEC,OAAO;oBAAMnE,MAAM;oBAAWoE,OAAO;gBAAU;YAC1D;YACAlE,iBAAiBkB,SAAS,CAAC4C,qBAAqB,CAAC5C;YAEjD,MAAMgF,WAAgB;gBAAEC,OAAO;YAAM;YACrC/F,gBAAgBsB,UAAU,CAACoC,qBAAqB,CAACoC;YAEjD,gGAAgG;YAChG,MAAMV,cAAchG,KAAKiG,KAAK,CAAC,AAAC1F,QAAgB2F,MAAM,EAAE,SAASC,kBAAkB,CAAC,IAAMtE;YAC1FpB,iBAAiBsB,cAAc,CAACqE,qBAAqB,CAAC,IAAIC,MAAM;YAEhE,MAAMC,SAAS,MAAM/F,QAAQqG,UAAU,CAAC/F,UAAUwD,KAAKpD,IAAI,EAAEwE,KAAKb;YAElET,OAAOmC,QAAQvB,IAAI,CAAC2B;YACpBvC,OAAO1D,iBAAiBsB,cAAc,EAAEoD,oBAAoB,CAAChB,OAAOsC,QAAQ,IAAIhB,IAAIC,EAAE,EAAE;YACxFvB,OAAOvD,gBAAgBsB,UAAU,EAAEsE,gBAAgB;YACnD,sFAAsF;YACtF,0FAA0F;YAC1F,MAAM,AAACjG,QAAgBsG,gBAAgB,CAAC,IAAIC,oBAAS,CAACzC,KAAKnD,IAAI,GAAUQ;YACzEyC,OAAOxD,kBAAkBsB,QAAQ,EAAEkD,oBAAoB,CAAChB,OAAOsC,QAAQ,IAAI;gBAAC;gBAAS;aAAQ;YAC7F,6CAA6C;YAC7CtC,OAAO6B,aAAaQ,gBAAgB;QACtC;QAEAtC,GAAG,2CAA2C;YAC5C,MAAM6C,eAAe;gBAAE,GAAG/F,QAAQ;gBAAEE,MAAM;oBAAEJ,IAAI;oBAAGC,OAAO;oBAAQI,UAAU;gBAAM;YAAE;YACpFX,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACyC;YAEpD,MAAM5C,OAAO5D,QAAQqG,UAAU,CAAC/F,UAAUkG,aAAa9F,IAAI,EAAEwE,KAAKb,MAAMoC,OAAO,CAACC,aAAa,CAAC;gBAC5FC,QAAQ;YACV;QACF;QAEAhD,GAAG,kHAAkH;YACnH,MAAMiD,mBAAmB;gBAAErG,IAAIE,SAASE,IAAI,CAACJ,EAAE;gBAAEC,OAAO;YAAO;YAC/D,MAAMsD,OAAO;gBAAE,GAAGrD,QAAQ;gBAAEI,aAAa;YAAK;YAC9CZ,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACD;YACpD,MAAM3C,YAAY;gBAChBiD,OAAO;oBAAED,OAAO;oBAASpE,MAAM;gBAAQ;gBACvCkE,OAAO;oBAAEC,OAAO;oBAAMnE,MAAM;oBAAOoE,OAAO;gBAAQ;YACpD;YACAlE,iBAAiBkB,SAAS,CAAC4C,qBAAqB,CAAC5C;YAEjD,MAAM4E,SAAS,MAAM/F,QAAQqG,UAAU,CAACO,kBAAyB9C,KAAKpD,IAAI,EAAEwE,KAAKb;YAEjFT,OAAOmC,OAAOpF,IAAI,CAACJ,EAAE,EAAEsG,OAAO,CAACpG,SAASE,IAAI,CAACJ,EAAE;YAC/CqD,OAAOvD,gBAAgBsB,UAAU,EAAEmF,GAAG,CAACb,gBAAgB;YACvDrC,OAAO3D,iBAAiBmB,qBAAqB,EAAE0F,GAAG,CAACb,gBAAgB;QACrE;QAEAtC,GAAG,uEAAuE;YACxE,MAAMG,OAAO;gBAAE,GAAGrD,QAAQ;gBAAEK,aAAa;YAAG;YAC5Cb,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACD;YACpD,MAAM3C,YAAY;gBAChBiD,OAAO;gBACPH,OAAO;oBAAEC,OAAO;oBAAOnE,MAAM;oBAAWoE,OAAO;gBAAQ;YACzD;YACAlE,iBAAiBkB,SAAS,CAAC4F,SAAS;YACpC9G,iBAAiBkB,SAAS,CAAC4C,qBAAqB,CAAC5C;YAEjDf,kBAAkBsB,QAAQ,CAACqC,qBAAqB,CAAC,CAAC;YAClD5D,iBAAiBsB,iBAAiB,CAAC6D,mBAAmB,CAAC;gBACrDC,QAAQ9F,KAAKG,EAAE,GAAGiG,qBAAqB,CAAC,IAAIC,MAAM;gBAClDN,QAAQ/F,KAAKG,EAAE;YACjB;YAEA,MAAMgE,OAAO5D,QAAQgG,YAAY,CAAC1F,UAAUwD,KAAKpD,IAAI,EAAEwE,KAAKb,MAAMoC,OAAO,CAACC,aAAa,CAAC;gBACtFC,QAAQ;YACV;YACA/C,OAAO3D,iBAAiBmB,qBAAqB,EAAEwD,oBAAoB,CAACd,KAAKpD,IAAI;QAC/E;IACF;IAEAb,SAAS,sBAAsB;QAC7B,MAAMqF,MAAW;YAAEC,IAAI;QAAW;QAClC,MAAMd,MAAW,CAAC;QAElBV,GAAG,4CAA4C;YAC7C,MAAMG,OAAO;gBAAE,GAAGrD,QAAQ;gBAAEI,aAAa;YAAK;YAC9CZ,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACD;YACpD5D,iBAAiBqB,mBAAmB,CAACwC,qBAAqB,CAAC;YAC3D,yGAAyG;YACzG,MAAMoC,WAAgB;gBAAEC,OAAO;YAAM;YACrC/F,gBAAgBsB,UAAU,CAACoC,qBAAqB,CAACoC;YAEjD,+GAA+G;YAC/G,MAAMV,cAAchG,KAAKiG,KAAK,CAAC,AAAC1F,QAAgB2F,MAAM,EAAE,SAASC,kBAAkB,CAAC,IAAMtE;YAC1FpB,iBAAiBsB,cAAc,CAACqE,qBAAqB,CAAC,IAAIC,MAAM;YAEhE,MAAMC,SAAS,MAAM/F,QAAQgH,kBAAkB,CAAC1G,UAAUwD,KAAKpD,IAAI,EAAE;gBAAEuG,UAAU;YAAS,GAAU/B,KAAKb;YAEzGT,OAAOmC,QAAQvB,IAAI,CAAC2B;YACpBvC,OAAO1D,iBAAiBqB,mBAAmB,EAAEqD,oBAAoB,CAACd,KAAKnD,IAAI,CAACJ,EAAE,EAAE;YAChFqD,OAAO1D,iBAAiBsB,cAAc,EAAEoD,oBAAoB,CAAChB,OAAOsC,QAAQ,IAAIhB,IAAIC,EAAE,EAAE;YACxFvB,OAAOvD,gBAAgBsB,UAAU,EAAEsE,gBAAgB;YACnD,0EAA0E;YAC1ErC,OAAO6B,aAAaQ,gBAAgB;QACtC;QAEAtC,GAAG,+CAA+C;YAChD,MAAMG,OAAO;gBAAE,GAAGrD,QAAQ;gBAAEI,aAAa;YAAK;YAC9CZ,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACD;YACpD5D,iBAAiBqB,mBAAmB,CAACwC,qBAAqB,CAAC;YAC3D7D,iBAAiBsB,cAAc,CAACuC,qBAAqB,CAACzC;YAEtD,MAAMsC,OAAO5D,QAAQgH,kBAAkB,CAAC1G,UAAUwD,KAAKpD,IAAI,EAAE;gBAAEuG,UAAU;YAAM,GAAU/B,KAAKb,MAAMoC,OAAO,CAACC,aAAa,CAAC;gBAAEC,QAAQ;YAAI;QAC1I;QAEAhD,GAAG,2DAA2D;YAC5D,MAAMuD,UAAU;gBAAE,GAAGzG,QAAQ;gBAAEO,WAAW,IAAImG,KAAKA,KAAKC,GAAG,KAAK;YAAQ;YACxEnH,iBAAiBiB,YAAY,CAAC6C,qBAAqB,CAACmD;YAEpD,MAAMtD,OAAO5D,QAAQgH,kBAAkB,CAAC1G,UAAU4G,QAAQxG,IAAI,EAAE;gBAAEuG,UAAU;YAAW,GAAU/B,KAAKb,MAAMoC,OAAO,CAACC,aAAa,CAAC;gBAChIC,QAAQ;YACV;QACF;IACF;AACF"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/links/services/links-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, eq, getTableColumns, isNotNull, isNull, or, sql } from 'drizzle-orm'\nimport { alias } from 'drizzle-orm/mysql-core'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport type { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { dbGetInsertedId } from '../../../infrastructure/database/utils'\nimport { files } from '../../files/schemas/files.schema'\nimport type { ShareMembers } from '../../shares/schemas/share-members.interface'\nimport type { Share } from '../../shares/schemas/share.interface'\nimport { sharesMembers } from '../../shares/schemas/shares-members.schema'\nimport { shares } from '../../shares/schemas/shares.schema'\nimport { SPACE_ROLE } from '../../spaces/constants/spaces'\nimport type { SpaceMembers } from '../../spaces/schemas/space-members.interface'\nimport { spacesMembers } from '../../spaces/schemas/spaces-members.schema'\nimport { spacesRoots } from '../../spaces/schemas/spaces-roots.schema'\nimport { spaces } from '../../spaces/schemas/spaces.schema'\nimport { USER_ROLE } from '../../users/constants/user'\nimport type { User } from '../../users/schemas/user.interface'\nimport { userFullNameSQL, users } from '../../users/schemas/users.schema'\nimport { CACHE_LINK_UUID_PREFIX, CACHE_LINK_UUID_TTL } from '../constants/cache'\nimport { LINK_TYPE } from '../constants/links'\nimport type { LinkAsUser, LinkGuest } from '../interfaces/link-guest.interface'\nimport type { SpaceLink } from '../interfaces/link-space.interface'\nimport type { Link } from '../schemas/link.interface'\nimport { links } from '../schemas/links.schema'\n\n@Injectable()\nexport class LinksQueries {\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly cache: Cache\n ) {}\n\n async linkFromShare(ownerId: number, linkId: number, shareId: number, isAdmin: number = 0): Promise<LinkGuest> {\n const [r] = await this.db\n .select({\n ...getTableColumns(links),\n permissions: sharesMembers.permissions,\n language: users.language,\n isActive: users.isActive\n })\n .from(links)\n .innerJoin(shares, and(eq(shares.id, shareId), or(eq(shares.ownerId, ownerId), and(eq(sql`${isAdmin}`, 1), isNull(shares.ownerId)))))\n .innerJoin(sharesMembers, and(eq(sharesMembers.shareId, shares.id), eq(sharesMembers.userId, links.userId), eq(sharesMembers.linkId, linkId)))\n .innerJoin(users, eq(users.id, links.userId))\n .where(eq(links.id, linkId))\n .limit(1)\n return r as LinkGuest\n }\n\n async linkFromSpace(managerId: number, linkId: number, spaceId: number): Promise<LinkGuest> {\n const linkMember: any = alias(spacesMembers, 'linkMember')\n const [r] = await this.db\n .select({\n ...getTableColumns(links),\n permissions: linkMember.permissions,\n language: users.language,\n isActive: users.isActive\n })\n .from(links)\n .innerJoin(\n spacesMembers,\n and(eq(spacesMembers.spaceId, spaceId), eq(spacesMembers.userId, managerId), eq(spacesMembers.role, SPACE_ROLE.IS_MANAGER))\n )\n .innerJoin(linkMember, and(eq(linkMember.spaceId, spacesMembers.spaceId), eq(linkMember.userId, links.userId), eq(linkMember.linkId, linkId)))\n .innerJoin(users, eq(users.id, links.userId))\n .where(eq(links.id, linkId))\n .limit(1)\n return r as LinkGuest\n }\n\n async updateLinkFromSpaceOrShare(\n link: LinkGuest,\n shareId: number,\n diffUser: Partial<User>,\n diffLink: Partial<Link>,\n diffShare: Partial<Share>,\n diffMember: Partial<ShareMembers>\n ) {\n if (Object.keys(diffUser).length) {\n await this.db.update(users).set(diffUser).where(eq(users.id, link.userId))\n }\n if (Object.keys(diffLink).length) {\n await this.db.update(links).set(diffLink).where(eq(links.id, link.id))\n }\n if (Object.keys(diffShare).length) {\n await this.db.update(shares).set(diffShare).where(eq(shares.id, shareId))\n }\n if (Object.keys(diffMember).length) {\n await this.db\n .update(sharesMembers)\n .set(diffMember)\n .where(and(eq(sharesMembers.shareId, shareId), eq(sharesMembers.userId, link.userId), eq(sharesMembers.linkId, link.id)))\n }\n }\n\n async createLinkToSpaceOrShare(guestId: number, spaceOrShareId: number, type: LINK_TYPE, link: Partial<LinkGuest>): Promise<number> {\n const linkId = dbGetInsertedId(await this.db.insert(links).values(link as Link))\n if (type === LINK_TYPE.SPACE) {\n await this.db.insert(spacesMembers).values({\n userId: guestId,\n spaceId: spaceOrShareId,\n permissions: link.permissions,\n role: SPACE_ROLE.IS_MEMBER,\n linkId: linkId\n } as SpaceMembers)\n } else {\n await this.db.insert(sharesMembers).values({\n userId: guestId,\n shareId: spaceOrShareId,\n linkId: linkId,\n permissions: link.permissions\n } as ShareMembers)\n }\n return linkId\n }\n\n allLinksFromSpaceOrShare(spaceOrShareId: number, type: LINK_TYPE): Promise<{ id: number; linkId: number }[]> {\n const members: any = alias(type == 'share' ? sharesMembers : spacesMembers, 'members')\n return this.db\n .select({ id: users.id, linkId: members.linkId })\n .from(members)\n .innerJoin(users, and(eq(users.id, members.userId), eq(users.role, USER_ROLE.LINK)))\n .where(and(eq(type == 'share' ? members.shareId : members.spaceId, spaceOrShareId), isNotNull(members.linkId)))\n }\n\n async linkFromUUID(uuid: string): Promise<LinkAsUser> {\n const { password, ...userColumns } = getTableColumns(users)\n const [r] = await this.db\n .select({\n ...getTableColumns(links),\n user: { ...userColumns }\n })\n .from(links)\n .leftJoin(users, eq(users.id, links.userId))\n .where(eq(links.uuid, uuid))\n .limit(1)\n return r\n }\n\n async spaceLink(uuid: string): Promise<SpaceLink> {\n const shareOwner: any = alias(users, 'shareOwner')\n const shareSpaceRoot: any = alias(spacesRoots, 'shareSpaceRoot')\n const [r]: SpaceLink[] = await this.db\n .select({\n share: {\n name: shares.name,\n alias: shares.alias,\n hasParent: isNotNull(shares.parentId).mapWith(Boolean),\n isDir: sql`IF (${isNotNull(shares.externalPath)} OR ${isNotNull(shareSpaceRoot.externalPath)}, 1 ,${files.isDir})`.mapWith(Boolean),\n mime: files.mime,\n mtime: files.mtime,\n size: files.size,\n permissions: sharesMembers.permissions\n },\n space: { name: spaces.name, alias: spaces.alias },\n owner: { login: shareOwner.login, fullName: userFullNameSQL(shareOwner) }\n })\n .from(links)\n .leftJoin(sharesMembers, eq(sharesMembers.linkId, links.id))\n .leftJoin(shares, eq(shares.id, sharesMembers.shareId))\n .leftJoin(shareOwner, eq(shareOwner.id, shares.ownerId))\n .leftJoin(spacesMembers, eq(spacesMembers.linkId, links.id))\n .leftJoin(spaces, eq(spaces.id, spacesMembers.spaceId))\n .leftJoin(shareSpaceRoot, and(isNull(shares.externalPath), isNull(shares.fileId), eq(shareSpaceRoot.id, shares.spaceRootId)))\n .leftJoin(\n files,\n or(\n and(isNotNull(shares.fileId), eq(files.id, shares.fileId)),\n and(isNull(shares.externalPath), isNotNull(shareSpaceRoot.fileId), eq(files.id, shareSpaceRoot.fileId))\n )\n )\n .where(eq(links.uuid, uuid))\n .limit(1)\n return {\n ...r,\n space: r.space?.name ? r.space : null,\n share: r.share?.name ? r.share : null\n }\n }\n\n async incrementLinkNbAccess(uuid: string) {\n await this.db\n .update(links)\n .set({ nbAccess: sql`${links.nbAccess} + 1` } as Record<keyof Link, any>)\n .where(eq(links.uuid, uuid))\n .limit(1)\n }\n\n async isUniqueUUID(userId: number, uuid: string) {\n const [r] = await this.db.select({ check: links.uuid }).from(links).where(eq(links.uuid, uuid)).limit(1)\n if (!r) {\n // uuid does not exist in db\n const cacheKey = this.cache.genSlugKey(CACHE_LINK_UUID_PREFIX, userId, uuid)\n // check if uuid was already requested\n if (!(await this.cache.has(cacheKey))) {\n // store uuid to prevent reuse\n await this.cache.set(cacheKey, uuid, CACHE_LINK_UUID_TTL)\n return true\n }\n return false\n }\n return false\n }\n\n isReservedUUID(userId: number, uuid: string): Promise<boolean> {\n // check if uuid is reserved\n return this.cache.has(this.cache.genSlugKey(CACHE_LINK_UUID_PREFIX, userId, uuid))\n }\n}\n"],"names":["LinksQueries","linkFromShare","ownerId","linkId","shareId","isAdmin","r","db","select","getTableColumns","links","permissions","sharesMembers","language","users","isActive","from","innerJoin","shares","and","eq","id","or","sql","isNull","userId","where","limit","linkFromSpace","managerId","spaceId","linkMember","alias","spacesMembers","role","SPACE_ROLE","IS_MANAGER","updateLinkFromSpaceOrShare","link","diffUser","diffLink","diffShare","diffMember","Object","keys","length","update","set","createLinkToSpaceOrShare","guestId","spaceOrShareId","type","dbGetInsertedId","insert","values","LINK_TYPE","SPACE","IS_MEMBER","allLinksFromSpaceOrShare","members","USER_ROLE","LINK","isNotNull","linkFromUUID","uuid","password","userColumns","user","leftJoin","spaceLink","shareOwner","shareSpaceRoot","spacesRoots","share","name","hasParent","parentId","mapWith","Boolean","isDir","externalPath","files","mime","mtime","size","space","spaces","owner","login","fullName","userFullNameSQL","fileId","spaceRootId","incrementLinkNbAccess","nbAccess","isUniqueUUID","check","cacheKey","cache","genSlugKey","CACHE_LINK_UUID_PREFIX","has","CACHE_LINK_UUID_TTL","isReservedUUID"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/links/services/links-queries.service.ts"],"sourcesContent":["import { Inject, Injectable } from '@nestjs/common'\nimport { and, eq, getTableColumns, isNotNull, isNull, or, sql } from 'drizzle-orm'\nimport { alias } from 'drizzle-orm/mysql-core'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport type { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { dbGetInsertedId } from '../../../infrastructure/database/utils'\nimport { files } from '../../files/schemas/files.schema'\nimport type { ShareMembers } from '../../shares/schemas/share-members.interface'\nimport type { Share } from '../../shares/schemas/share.interface'\nimport { sharesMembers } from '../../shares/schemas/shares-members.schema'\nimport { shares } from '../../shares/schemas/shares.schema'\nimport { SPACE_ROLE } from '../../spaces/constants/spaces'\nimport type { SpaceMembers } from '../../spaces/schemas/space-members.interface'\nimport { spacesMembers } from '../../spaces/schemas/spaces-members.schema'\nimport { spacesRoots } from '../../spaces/schemas/spaces-roots.schema'\nimport { spaces } from '../../spaces/schemas/spaces.schema'\nimport { USER_ROLE } from '../../users/constants/user'\nimport type { User } from '../../users/schemas/user.interface'\nimport { userFullNameSQL, users } from '../../users/schemas/users.schema'\nimport { CACHE_LINK_UUID_PREFIX, CACHE_LINK_UUID_TTL } from '../constants/cache'\nimport { LINK_TYPE } from '../constants/links'\nimport type { LinkAsUser, LinkGuest } from '../interfaces/link-guest.interface'\nimport type { SpaceLink } from '../interfaces/link-space.interface'\nimport type { Link } from '../schemas/link.interface'\nimport { links } from '../schemas/links.schema'\n\n@Injectable()\nexport class LinksQueries {\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly cache: Cache\n ) {}\n\n async linkFromShare(ownerId: number, linkId: number, shareId: number, isAdmin: number = 0): Promise<LinkGuest> {\n const [r] = await this.db\n .select({\n ...getTableColumns(links),\n permissions: sharesMembers.permissions,\n language: users.language,\n isActive: users.isActive\n })\n .from(links)\n .innerJoin(shares, and(eq(shares.id, shareId), or(eq(shares.ownerId, ownerId), and(eq(sql`${isAdmin}`, 1), isNull(shares.ownerId)))))\n .innerJoin(sharesMembers, and(eq(sharesMembers.shareId, shares.id), eq(sharesMembers.userId, links.userId), eq(sharesMembers.linkId, linkId)))\n .innerJoin(users, eq(users.id, links.userId))\n .where(eq(links.id, linkId))\n .limit(1)\n return r as LinkGuest\n }\n\n async linkFromSpace(managerId: number, linkId: number, spaceId: number): Promise<LinkGuest> {\n const linkMember: any = alias(spacesMembers, 'linkMember')\n const [r] = await this.db\n .select({\n ...getTableColumns(links),\n permissions: linkMember.permissions,\n language: users.language,\n isActive: users.isActive\n })\n .from(links)\n .innerJoin(\n spacesMembers,\n and(eq(spacesMembers.spaceId, spaceId), eq(spacesMembers.userId, managerId), eq(spacesMembers.role, SPACE_ROLE.IS_MANAGER))\n )\n .innerJoin(linkMember, and(eq(linkMember.spaceId, spacesMembers.spaceId), eq(linkMember.userId, links.userId), eq(linkMember.linkId, linkId)))\n .innerJoin(users, eq(users.id, links.userId))\n .where(eq(links.id, linkId))\n .limit(1)\n return r as LinkGuest\n }\n\n async updateLinkFromSpaceOrShare(\n link: LinkGuest,\n shareId: number,\n diffUser: Partial<User>,\n diffLink: Partial<Link>,\n diffShare: Partial<Share>,\n diffMember: Partial<ShareMembers>\n ) {\n if (Object.keys(diffUser).length) {\n await this.db.update(users).set(diffUser).where(eq(users.id, link.userId))\n }\n if (Object.keys(diffLink).length) {\n await this.db.update(links).set(diffLink).where(eq(links.id, link.id))\n }\n if (Object.keys(diffShare).length) {\n await this.db.update(shares).set(diffShare).where(eq(shares.id, shareId))\n }\n if (Object.keys(diffMember).length) {\n await this.db\n .update(sharesMembers)\n .set(diffMember)\n .where(and(eq(sharesMembers.shareId, shareId), eq(sharesMembers.userId, link.userId), eq(sharesMembers.linkId, link.id)))\n }\n }\n\n async createLinkToSpaceOrShare(guestId: number, spaceOrShareId: number, type: LINK_TYPE, link: Partial<LinkGuest>): Promise<number> {\n const linkId = dbGetInsertedId(await this.db.insert(links).values(link as Link))\n if (type === LINK_TYPE.SPACE) {\n await this.db.insert(spacesMembers).values({\n userId: guestId,\n spaceId: spaceOrShareId,\n permissions: link.permissions,\n role: SPACE_ROLE.IS_MEMBER,\n linkId: linkId\n } as SpaceMembers)\n } else {\n await this.db.insert(sharesMembers).values({\n userId: guestId,\n shareId: spaceOrShareId,\n linkId: linkId,\n permissions: link.permissions\n } as ShareMembers)\n }\n return linkId\n }\n\n allLinksFromSpaceOrShare(spaceOrShareId: number, type: LINK_TYPE): Promise<{ id: number; linkId: number }[]> {\n const members: any = alias(type == 'share' ? sharesMembers : spacesMembers, 'members')\n return this.db\n .select({ id: users.id, linkId: members.linkId })\n .from(members)\n .innerJoin(users, and(eq(users.id, members.userId), eq(users.role, USER_ROLE.LINK)))\n .where(and(eq(type == 'share' ? members.shareId : members.spaceId, spaceOrShareId), isNotNull(members.linkId)))\n }\n\n async linkFromUUID(uuid: string): Promise<LinkAsUser> {\n const { password, ...userColumns } = getTableColumns(users)\n const [r] = await this.db\n .select({\n ...getTableColumns(links),\n user: { ...userColumns }\n })\n .from(links)\n .leftJoin(users, eq(users.id, links.userId))\n .where(eq(links.uuid, uuid))\n .limit(1)\n return r\n }\n\n async spaceLink(uuid: string): Promise<SpaceLink> {\n const shareOwner: any = alias(users, 'shareOwner')\n const shareSpaceRoot: any = alias(spacesRoots, 'shareSpaceRoot')\n const [r]: SpaceLink[] = await this.db\n .select({\n share: {\n name: shares.name,\n alias: shares.alias,\n hasParent: isNotNull(shares.parentId).mapWith(Boolean),\n isDir: sql`IF (${isNotNull(shares.externalPath)} OR ${isNotNull(shareSpaceRoot.externalPath)}, 1 ,${files.isDir})`.mapWith(Boolean),\n mime: files.mime,\n mtime: files.mtime,\n size: files.size,\n permissions: sharesMembers.permissions\n },\n space: { name: spaces.name, alias: spaces.alias },\n owner: { login: shareOwner.login, fullName: userFullNameSQL(shareOwner) }\n })\n .from(links)\n .leftJoin(sharesMembers, eq(sharesMembers.linkId, links.id))\n .leftJoin(shares, eq(shares.id, sharesMembers.shareId))\n .leftJoin(shareOwner, eq(shareOwner.id, shares.ownerId))\n .leftJoin(spacesMembers, eq(spacesMembers.linkId, links.id))\n .leftJoin(spaces, eq(spaces.id, spacesMembers.spaceId))\n .leftJoin(shareSpaceRoot, and(isNull(shares.externalPath), isNull(shares.fileId), eq(shareSpaceRoot.id, shares.spaceRootId)))\n .leftJoin(\n files,\n or(\n and(isNotNull(shares.fileId), eq(files.id, shares.fileId)),\n and(isNull(shares.externalPath), isNotNull(shareSpaceRoot.fileId), eq(files.id, shareSpaceRoot.fileId))\n )\n )\n .where(eq(links.uuid, uuid))\n .limit(1)\n return {\n ...r,\n space: r.space?.name ? r.space : null,\n share: r.share?.name ? r.share : null\n }\n }\n\n async incrementLinkNbAccess(uuid: string) {\n await this.db\n .update(links)\n .set({ nbAccess: sql`${links.nbAccess} + 1` } as Record<keyof Link, any>)\n .where(eq(links.uuid, uuid))\n .limit(1)\n }\n\n async isUniqueUUID(userId: number, uuid: string) {\n const [r] = await this.db.select({ check: links.uuid }).from(links).where(eq(links.uuid, uuid)).limit(1)\n if (!r) {\n // uuid does not exist in db\n const cacheKey = this.cache.genSlugKey(CACHE_LINK_UUID_PREFIX, userId, uuid)\n // check if uuid was already requested\n if (!(await this.cache.has(cacheKey))) {\n // store uuid to prevent reuse\n await this.cache.set(cacheKey, uuid, CACHE_LINK_UUID_TTL)\n return true\n }\n return false\n }\n return false\n }\n\n isReservedUUID(userId: number, uuid: string): Promise<boolean> {\n // check if uuid is reserved\n return this.cache.has(this.cache.genSlugKey(CACHE_LINK_UUID_PREFIX, userId, uuid))\n }\n}\n"],"names":["LinksQueries","linkFromShare","ownerId","linkId","shareId","isAdmin","r","db","select","getTableColumns","links","permissions","sharesMembers","language","users","isActive","from","innerJoin","shares","and","eq","id","or","sql","isNull","userId","where","limit","linkFromSpace","managerId","spaceId","linkMember","alias","spacesMembers","role","SPACE_ROLE","IS_MANAGER","updateLinkFromSpaceOrShare","link","diffUser","diffLink","diffShare","diffMember","Object","keys","length","update","set","createLinkToSpaceOrShare","guestId","spaceOrShareId","type","dbGetInsertedId","insert","values","LINK_TYPE","SPACE","IS_MEMBER","allLinksFromSpaceOrShare","members","USER_ROLE","LINK","isNotNull","linkFromUUID","uuid","password","userColumns","user","leftJoin","spaceLink","shareOwner","shareSpaceRoot","spacesRoots","share","name","hasParent","parentId","mapWith","Boolean","isDir","externalPath","files","mime","mtime","size","space","spaces","owner","login","fullName","userFullNameSQL","fileId","spaceRootId","incrementLinkNbAccess","nbAccess","isUniqueUUID","check","cacheKey","cache","genSlugKey","CACHE_LINK_UUID_PREFIX","has","CACHE_LINK_UUID_TTL","isReservedUUID"],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });