@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/users/services/users-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, Logger } from '@nestjs/common'\nimport { and, countDistinct, eq, inArray, isNotNull, like, lte, ne, notInArray, or, SelectedFields, SQL, sql } from 'drizzle-orm'\nimport { alias } from 'drizzle-orm/mysql-core'\nimport { MySql2PreparedQuery, MySqlQueryResult } from 'drizzle-orm/mysql2'\nimport { anonymizePassword, comparePassword, uniquePermissions } from '../../../common/functions'\nimport { CacheDecorator } from '../../../infrastructure/cache/cache.decorator'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport {\n concatDistinctObjectsInArray,\n convertToSelect,\n dateTimeUTC,\n dbCheckAffectedRows,\n dbGetInsertedId\n} from '../../../infrastructure/database/utils'\nimport { GROUP_TYPE, GROUP_VISIBILITY } from '../constants/group'\nimport { MEMBER_TYPE } from '../constants/member'\nimport { USER_GROUP_ROLE, USER_ONLINE_STATUS, USER_PERMS_SEP, USER_ROLE } from '../constants/user'\nimport { UserCreateOrUpdateGroupDto } from '../dto/create-or-update-group.dto'\nimport { CreateUserDto } from '../dto/create-or-update-user.dto'\nimport { SearchMembersDto } from '../dto/search-members.dto'\nimport { GroupMember, GroupWithMembers } from '../interfaces/group-member'\nimport { GuestUser } from '../interfaces/guest-user.interface'\nimport { Member } from '../interfaces/member.interface'\nimport { UserSecrets } from '../interfaces/user-secrets.interface'\nimport { UserOnline } from '../interfaces/websocket.interface'\nimport { UserModel } from '../models/user.model'\nimport { Group } from '../schemas/group.interface'\nimport { groups } from '../schemas/groups.schema'\nimport { UserGroup } from '../schemas/user-group.interface'\nimport { User } from '../schemas/user.interface'\nimport { usersGroups } from '../schemas/users-groups.schema'\nimport { usersGuests } from '../schemas/users-guests.schema'\nimport { userFullNameSQL, users } from '../schemas/users.schema'\n\n@Injectable()\nexport class UsersQueries {\n private readonly logger = new Logger(UsersQueries.name)\n private fromLoginOrEmailPermissionsQuery: MySql2PreparedQuery<any> = null\n private fromIdPermissionsQuery: MySql2PreparedQuery<any> = null\n\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly cache: Cache\n ) {}\n\n checkUserExists(login?: string, email?: string): Promise<{ login?: string; email?: string }> {\n if (!login && !email) {\n throw new Error('login or email must be specified')\n }\n const columns: { login?: boolean; email?: boolean } = {}\n const where: SQL[] = []\n if (login) {\n columns.login = true\n where.push(eq(users.login, login))\n }\n if (email) {\n columns.email = true\n where.push(eq(users.email, email))\n }\n const operator = login && email ? or : and\n return this.db.query.users.findFirst({\n columns: columns,\n where: operator(...where)\n })\n }\n\n setOnlineStatus(userId: number, onlineStatus: USER_ONLINE_STATUS): Promise<boolean> {\n return this.updateUserOrGuest(userId, { onlineStatus: onlineStatus })\n }\n\n getOnlineUsers(userIds: number[]): Promise<UserOnline[]> {\n return this.db\n .select({\n id: users.id,\n login: users.login,\n email: users.email,\n fullName: userFullNameSQL(users),\n onlineStatus: users.onlineStatus\n } satisfies UserOnline | SelectedFields<any, any>)\n .from(users)\n .where(inArray(users.id, userIds))\n }\n\n async checkGroupNameExists(groupName: string): Promise<boolean> {\n const [group] = await this.db.select({ name: groups.name }).from(groups).where(eq(groups.name, groupName)).limit(1)\n return !!group?.name\n }\n\n async compareUserPassword(userId: number, password: string): Promise<boolean> {\n const [hash] = (await this.selectUsers(['password'], [eq(users.id, userId)])) as { password: string }[]\n if (!hash) return false\n return comparePassword(password, hash.password)\n }\n\n async from(userId?: number, loginOrEmail?: string): Promise<User> {\n // retrieve user with application permissions\n let pQuery: MySql2PreparedQuery<any> = userId ? this.fromIdPermissionsQuery : this.fromLoginOrEmailPermissionsQuery\n if (!pQuery) {\n const where = userId\n ? eq(users.id, sql.placeholder('userId'))\n : or(eq(users.login, sql.placeholder('loginOrEmail')), eq(users.email, sql.placeholder('loginOrEmail')))\n pQuery = this.db\n .select({\n user: users,\n groupsPermissions: sql`GROUP_CONCAT(DISTINCT (${groups.permissions}) SEPARATOR ${USER_PERMS_SEP})`\n })\n .from(users)\n .leftJoin(usersGroups, eq(usersGroups.userId, users.id))\n .leftJoin(groups, and(eq(groups.id, usersGroups.groupId), ne(groups.permissions, '')))\n .where(where)\n .groupBy(users.id)\n .limit(1)\n .prepare()\n if (userId) {\n this.fromIdPermissionsQuery = pQuery\n } else {\n this.fromLoginOrEmailPermissionsQuery = pQuery\n }\n }\n const r = await pQuery.execute(userId ? { userId } : { loginOrEmail })\n if (!r.length) return null\n const [user, groupsPermissions] = [r[0].user, r[0].groupsPermissions]\n // merge user and groups permissions\n user.permissions = uniquePermissions(`${user.permissions},${groupsPermissions}`, USER_PERMS_SEP)\n return user\n }\n\n async getUserSecrets(userId: number): Promise<UserSecrets> {\n const [r]: { secrets: UserSecrets }[] = await this.db.select({ secrets: users.secrets }).from(users).where(eq(users.id, userId)).limit(1)\n return r.secrets || {}\n }\n\n selectUsers(fields: Partial<keyof User>[] = ['id', 'login', 'email'], where: SQL[]): Promise<Partial<User>[]> {\n const select: Record<keyof User, any> = convertToSelect(users, fields)\n return this.db\n .select(select)\n .from(users)\n .where(and(...where))\n }\n\n async selectUserProperties(userId: number, fields: Partial<keyof User>[]): Promise<Partial<User>> {\n const select: Record<keyof User, any> = convertToSelect(users, fields)\n const [r]: Record<string, any>[] = await this.db.select(select).from(users).where(eq(users.id, userId)).limit(1)\n return r\n }\n\n async createUserOrGuest(createUserDto: CreateUserDto, userRole: USER_ROLE): Promise<User['id']> {\n const userId: number = dbGetInsertedId(await this.db.insert(users).values({ ...createUserDto, role: userRole } as User))\n if (userRole === USER_ROLE.USER && createUserDto.groups?.length) {\n await this.db.insert(usersGroups).values(createUserDto.groups.map((gid: number) => ({ userId: userId, groupId: gid })))\n }\n if (userRole === USER_ROLE.GUEST && createUserDto.managers?.length) {\n await this.db.insert(usersGuests).values(createUserDto.managers.map((uid: number) => ({ guestId: userId, userId: uid })))\n }\n return userId\n }\n\n async updateUserOrGuest(userId: number, set: Partial<Record<keyof User, any>>, userRole?: USER_ROLE): Promise<boolean> {\n try {\n dbCheckAffectedRows(\n await this.db\n .update(users)\n .set({ ...set, ...(userRole && { role: userRole }) } as User)\n .where(eq(users.id, userId)),\n 1\n )\n this.logger.verbose(`${this.updateUserOrGuest.name} - user (${userId}) was updated : ${JSON.stringify(anonymizePassword(set))}`)\n return true\n } catch (e) {\n this.logger.error(`${this.updateUserOrGuest.name} - user (${userId}) was not updated : ${JSON.stringify(anonymizePassword(set))} : ${e}`)\n return false\n }\n }\n\n async deleteGuestLink(userId: number): Promise<void> {\n dbCheckAffectedRows(await this.db.delete(users).where(and(eq(users.id, userId), eq(users.role, USER_ROLE.LINK))), 1)\n }\n\n async searchUsersOrGroups(searchMembersDto: SearchMembersDto, userId?: number): Promise<Member[]> {\n const limit = searchMembersDto.onlyUsers || searchMembersDto.onlyGroups ? 6 : 3\n const members: Member[] = []\n if (!searchMembersDto.onlyGroups) {\n for (const u of await this.searchUsers(searchMembersDto, userId, limit)) {\n members.push({\n id: u.id,\n login: u.login,\n name: u.fullName,\n description: u.email,\n type: u.role === USER_ROLE.GUEST ? MEMBER_TYPE.GUEST : MEMBER_TYPE.USER,\n permissions: searchMembersDto.withPermissions ? u.permissions : undefined\n })\n }\n }\n if (!searchMembersDto.onlyUsers) {\n for (const g of await this.searchGroups(searchMembersDto, userId, limit)) {\n members.push({\n id: g.id,\n name: g.name,\n description: g.description,\n type: g.type === GROUP_TYPE.USER ? MEMBER_TYPE.GROUP : MEMBER_TYPE.PGROUP,\n permissions: searchMembersDto.withPermissions ? g.permissions : undefined\n })\n }\n }\n return members\n }\n\n async groupFromName(userId: number, name: string): Promise<Pick<Group, 'id' | 'name' | 'type'> & { role: UserGroup['role'] }> {\n const [group] = await this.db\n .select({\n id: groups.id,\n name: groups.name,\n type: groups.type,\n role: usersGroups.role\n } satisfies (Pick<Group, 'id' | 'name' | 'type'> & { role: UserGroup['role'] }) | SelectedFields<any, any>)\n .from(usersGroups)\n .innerJoin(groups, eq(groups.id, usersGroups.groupId))\n .where(and(eq(usersGroups.userId, userId), eq(groups.name, name)))\n .limit(1)\n return group\n }\n\n async browseRootGroups(userId: number): Promise<Member[]> {\n const members = alias(usersGroups, 'members')\n return this.db\n .select({\n id: groups.id,\n name: groups.name,\n description: groups.description,\n createdAt: groups.createdAt,\n modifiedAt: groups.modifiedAt,\n type: sql<MEMBER_TYPE>`IF(${groups.type} = ${GROUP_TYPE.USER}, ${MEMBER_TYPE.GROUP}, ${MEMBER_TYPE.PGROUP})`,\n groupRole: sql<USER_GROUP_ROLE>`${usersGroups.role}`,\n counts: { users: countDistinct(members.userId) }\n } satisfies Member | SelectedFields<any, any>)\n .from(usersGroups)\n .innerJoin(groups, and(eq(groups.id, usersGroups.groupId), eq(usersGroups.userId, userId)))\n .leftJoin(members, eq(members.groupId, groups.id))\n .groupBy(groups.id)\n }\n\n async browseGroupMembers(groupId: number): Promise<Member[]> {\n return this.db\n .select({\n id: users.id,\n login: users.login,\n name: userFullNameSQL(users).as('name'),\n description: users.email,\n createdAt: usersGroups.createdAt,\n type: sql<MEMBER_TYPE>`${MEMBER_TYPE.USER}`,\n groupRole: sql<USER_GROUP_ROLE>`${usersGroups.role}`\n } satisfies Member | SelectedFields<any, any>)\n .from(groups)\n .innerJoin(usersGroups, and(eq(usersGroups.groupId, groups.id), eq(usersGroups.groupId, groupId)))\n .leftJoin(users, eq(users.id, usersGroups.userId))\n .groupBy(users.id)\n }\n\n async canDeletePersonalGroup(userId: number, groupId: number): Promise<boolean> {\n const [group] = await this.db\n .select({ id: usersGroups.groupId })\n .from(usersGroups)\n .innerJoin(groups, and(eq(groups.id, usersGroups.groupId)))\n .where(\n and(\n eq(groups.type, GROUP_TYPE.PERSONAL),\n eq(usersGroups.userId, userId),\n eq(usersGroups.groupId, groupId),\n eq(usersGroups.role, USER_GROUP_ROLE.MANAGER)\n )\n )\n .limit(1)\n return !!group?.id\n }\n\n async getGroup(userId: number, groupId: number, asAdmin = false): Promise<GroupMember> {\n const [group] = await this.db\n .select({\n id: groups.id,\n name: groups.name,\n description: groups.description,\n createdAt: groups.createdAt,\n modifiedAt: groups.modifiedAt,\n type: sql<MEMBER_TYPE>`IF(${groups.type} = ${GROUP_TYPE.USER}, ${MEMBER_TYPE.GROUP}, ${MEMBER_TYPE.PGROUP})`\n })\n .from(usersGroups)\n .innerJoin(groups, and(eq(groups.id, usersGroups.groupId)))\n .where(\n and(\n eq(usersGroups.groupId, groupId),\n sql`IF(${+asAdmin} = 0, ${usersGroups.userId} = ${userId} AND ${usersGroups.role} = ${USER_GROUP_ROLE.MANAGER}, 1)`\n )\n )\n .limit(1)\n return group\n }\n\n async getGroupWithMembers(userId: number, groupId: number, asAdmin = false): Promise<GroupWithMembers> {\n const usersGroupsAlias: any = alias(usersGroups, 'usersFromGroups')\n const [group] = await this.db\n .select({\n id: groups.id,\n name: groups.name,\n description: groups.description,\n createdAt: groups.createdAt,\n modifiedAt: groups.modifiedAt,\n type: sql<MEMBER_TYPE>`IF(${groups.type} = ${GROUP_TYPE.USER}, ${sql.raw(`'${MEMBER_TYPE.GROUP}'`)}, ${sql.raw(`'${MEMBER_TYPE.PGROUP}'`)})`,\n members: concatDistinctObjectsInArray(users.id, {\n id: users.id,\n login: users.login,\n name: userFullNameSQL(users),\n description: users.email,\n type: sql.raw(`'${MEMBER_TYPE.USER}'`),\n groupRole: usersGroupsAlias.role,\n createdAt: dateTimeUTC(usersGroupsAlias.createdAt)\n } satisfies Record<keyof Pick<Member, 'id' | 'name' | 'login' | 'description' | 'type' | 'groupRole' | 'createdAt'>, any>)\n } satisfies GroupWithMembers | SelectedFields<any, any>)\n .from(usersGroups)\n .innerJoin(groups, eq(groups.id, usersGroups.groupId))\n .leftJoin(usersGroupsAlias, and(eq(usersGroupsAlias.groupId, groups.id)))\n .leftJoin(users, eq(users.id, usersGroupsAlias.userId))\n .where(\n and(\n eq(usersGroups.groupId, groupId),\n sql`IF(${+asAdmin} = 0, ${usersGroups.userId} = ${userId} AND ${usersGroups.role} = ${USER_GROUP_ROLE.MANAGER}, 1)`\n )\n )\n .groupBy(groups.id)\n .limit(1)\n return group\n }\n\n async deletePersonalGroup(groupId: number): Promise<boolean> {\n return dbCheckAffectedRows(\n await this.db\n .delete(groups)\n .where(and(eq(groups.id, groupId), eq(groups.type, GROUP_TYPE.PERSONAL)))\n .limit(1),\n 1,\n false\n )\n }\n\n async createPersonalGroup(managerId: number, userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto): Promise<Group['id']> {\n const groupId: number = dbGetInsertedId(\n await this.db.insert(groups).values({\n ...userCreateOrUpdateGroupDto,\n type: GROUP_TYPE.PERSONAL,\n visibility: GROUP_VISIBILITY.PRIVATE\n } as Group)\n )\n await this.db.insert(usersGroups).values({ userId: managerId, groupId: groupId, role: USER_GROUP_ROLE.MANAGER } as UserGroup)\n return groupId\n }\n\n async updateGroup(groupId: number, set: Partial<Record<keyof Group, any>>) {\n if (Object.keys(set).length) {\n try {\n await this.db.update(groups).set(set).where(eq(groups.id, groupId))\n this.logger.log(`${this.updateGroup.name} - group (${groupId}) was updated : ${JSON.stringify(set)}`)\n } catch (e) {\n this.logger.error(`${this.updateGroup.name} - group (${groupId}) was not updated : ${JSON.stringify(set)} : ${e}`)\n throw new Error('Group was not updated')\n }\n }\n }\n\n async updateGroupMembers(\n groupId: number,\n members: {\n add?: Pick<Member, 'id' | 'groupRole'>[]\n remove?: UserGroup['userId'][]\n }\n ): Promise<void> {\n if (members?.add?.length) {\n try {\n await this.db.insert(usersGroups).values(members.add.map((m) => ({ userId: m.id, groupId: groupId, role: m.groupRole })))\n // clear cache\n this.clearWhiteListCaches(members.add.map((m) => m.id))\n this.logger.log(`${this.updateGroupMembers.name} - users ${JSON.stringify(members.add.map((m) => m.id))} was added to group (${groupId})`)\n } catch (e) {\n this.logger.error(\n `${this.updateGroupMembers.name} - users ${JSON.stringify(members.add.map((m) => m.id))} was not added to group (${groupId}) : ${e}`\n )\n throw new Error('Group members was not added')\n }\n }\n if (members?.remove?.length) {\n try {\n await this.db\n .delete(usersGroups)\n .where(and(eq(usersGroups.groupId, groupId), inArray(usersGroups.userId, members.remove)))\n .limit(members.remove.length)\n // clear cache\n this.clearWhiteListCaches(members.remove)\n this.logger.log(`${this.updateGroupMembers.name} - users ${JSON.stringify(members.remove)} was removed from group (${groupId})`)\n } catch (e) {\n this.logger.error(`${this.updateGroupMembers.name} - users ${JSON.stringify(members.remove)} was not removed from group (${groupId}) : ${e}`)\n throw new Error('Group members was not removed')\n }\n }\n }\n\n async listGuests(guestId: null, managerId?: number, asAdmin?: boolean): Promise<GuestUser[]>\n async listGuests(guestId: number, managerId?: number, asAdmin?: boolean): Promise<GuestUser>\n async listGuests(guestId: number | null, managerId?: number, asAdmin = false): Promise<GuestUser | GuestUser[]> {\n const where: SQL[] = [...(guestId ? [eq(usersGuests.guestId, guestId)] : []), ...(asAdmin ? [] : [eq(usersGuests.userId, managerId)])]\n const managersGuestAlias: any = alias(usersGuests, 'managersGuestAlias')\n const managersAlias: any = alias(users, 'managersAlias')\n const guests = await this.db\n .select({\n id: users.id,\n login: users.login,\n email: users.email,\n firstName: users.firstName,\n lastName: users.lastName,\n fullName: userFullNameSQL(users),\n role: users.role,\n isActive: users.isActive,\n passwordAttempts: users.passwordAttempts,\n language: users.language,\n notification: users.notification,\n currentAccess: users.currentAccess,\n lastAccess: users.lastAccess,\n currentIp: users.currentIp,\n lastIp: users.lastIp,\n createdAt: users.createdAt,\n managers: concatDistinctObjectsInArray(managersAlias.id, {\n id: managersAlias.id,\n login: managersAlias.login,\n name: userFullNameSQL(managersAlias),\n type: sql.raw(`'${MEMBER_TYPE.USER}'`),\n description: managersAlias.email,\n createdAt: dateTimeUTC(managersGuestAlias.createdAt)\n } satisfies Record<keyof Pick<Member, 'id' | 'name' | 'login' | 'description' | 'type' | 'createdAt'>, any>)\n } satisfies GuestUser | SelectedFields<any, any>)\n .from(usersGuests)\n .innerJoin(users, and(eq(users.id, usersGuests.guestId), eq(users.role, USER_ROLE.GUEST)))\n .leftJoin(managersGuestAlias, eq(managersGuestAlias.guestId, users.id))\n .leftJoin(managersAlias, eq(managersAlias.id, managersGuestAlias.userId))\n .where(and(...where))\n .groupBy(users.id)\n .limit(guestId ? 1 : undefined)\n return guestId ? guests[0] : guests\n }\n\n async isGuestManager(managerId: number, guestId: number): Promise<{ id: number; login: string } | undefined> {\n const [guest] = await this.db\n .select({ id: usersGuests.guestId, login: users.login })\n .from(usersGuests)\n .innerJoin(users, eq(users.id, usersGuests.guestId))\n .where(and(eq(usersGuests.userId, managerId), eq(usersGuests.guestId, guestId), eq(users.role, USER_ROLE.GUEST)))\n .limit(1)\n return guest\n }\n\n @CacheDecorator(900)\n async usersWhitelist(userId: number, lowerOrEqualUserRole: USER_ROLE = USER_ROLE.GUEST): Promise<number[]> {\n /* Get the list of user ids allowed to the current user\n - all users with no groups (except users with a role higher than lowerOrEqualUserRole)\n - all users who are members of groups visible to the current user\n (VISIBLE groups for everyone, PRIVATE groups only if the current user is a member, never members of ISOLATED groups)\n - all guests managed by the current user\n - all managers who manage the current guest\n */\n const userIds: any = sql`\n WITH visible_groups AS (\n SELECT ${groups.id} AS id\n FROM ${groups}\n LEFT JOIN ${usersGroups}\n ON ${usersGroups.groupId} = ${groups.id}\n AND ${usersGroups.userId} = ${userId}\n WHERE\n ${groups.visibility} != ${GROUP_VISIBILITY.ISOLATED}\n AND (\n ${groups.visibility} = ${GROUP_VISIBILITY.VISIBLE}\n OR (\n ${groups.visibility} = ${GROUP_VISIBILITY.PRIVATE}\n AND ${usersGroups.userId} IS NOT NULL\n )\n )\n )\n SELECT JSON_ARRAYAGG(id) AS ids\n FROM (\n -- 1) Users from groups visible to the current user\n SELECT ${users.id} AS id\n FROM ${users}\n INNER JOIN ${usersGroups}\n ON ${usersGroups.userId} = ${users.id}\n INNER JOIN visible_groups\n ON visible_groups.id = ${usersGroups.groupId}\n WHERE ${users.role} <= ${sql.raw(`${lowerOrEqualUserRole}`)}\n\n UNION\n\n -- 2) Users with no groups\n SELECT ${users.id} AS id\n FROM ${users}\n WHERE\n ${users.role} <= ${sql.raw(`${lowerOrEqualUserRole}`)}\n AND NOT EXISTS (\n SELECT 1\n FROM ${usersGroups}\n WHERE ${usersGroups.userId} = ${users.id}\n )\n\n UNION\n\n -- 3) Guests managed by the user and managers of the current guest\n SELECT CASE\n WHEN ${usersGuests.userId} = ${userId} THEN ${usersGuests.guestId}\n WHEN ${usersGuests.guestId} = ${userId} THEN ${usersGuests.userId}\n END AS id\n FROM ${usersGuests}\n WHERE ${usersGuests.userId} = ${userId}\n OR ${usersGuests.guestId} = ${userId}\n ) AS usersUnion\n `\n const [r] = await this.db.execute(userIds)\n return JSON.parse(r[0].ids) || []\n }\n\n @CacheDecorator(900)\n async groupsWhitelist(userId: number): Promise<number[]> {\n /* Get the list of group IDs the current user is allowed to see.\n - A group marked VISIBLE is always included.\n - A group marked ISOLATED is always excluded.\n - A PRIVATE group is included only if the user is a direct member of it.\n - Visibility does not inherit from parent or child groups.\n */\n const q = this.db\n .select({ id: sql`JSON_ARRAYAGG(${groups.id}) as ids` })\n .from(groups)\n .leftJoin(usersGroups, and(eq(usersGroups.groupId, groups.id), eq(usersGroups.userId, userId)))\n .where(\n and(\n ne(groups.visibility, GROUP_VISIBILITY.ISOLATED),\n or(eq(groups.visibility, GROUP_VISIBILITY.VISIBLE), and(eq(groups.visibility, GROUP_VISIBILITY.PRIVATE), isNotNull(usersGroups.userId)))\n )\n )\n const [r] = await this.db.execute(q)\n return JSON.parse(r[0].ids) || []\n }\n\n clearWhiteListCaches(userIds: number[] | '*') {\n if (userIds === '*') {\n // Means all entries\n for (const pattern of [\n this.cache.genSlugKey(this.constructor.name, this.usersWhitelist.name, userIds),\n this.cache.genSlugKey(this.constructor.name, this.groupsWhitelist.name, userIds)\n ]) {\n this.cache\n .keys(pattern)\n .then((keys: string[]) => {\n if (!keys.length) return\n this.logger.verbose(`${this.clearWhiteListCaches.name} - ${JSON.stringify(keys)}`)\n this.cache.mdel(keys).catch((e: Error) => this.logger.error(`${this.clearWhiteListCaches.name} - ${e}`))\n })\n .catch((e: Error) => this.logger.error(`${this.clearWhiteListCaches.name} - ${e}`))\n }\n } else {\n this.cache\n .mdel([\n ...userIds.map((id: number) => this.cache.genSlugKey(this.constructor.name, this.usersWhitelist.name, id)),\n ...userIds.map((id: number) => this.cache.genSlugKey(this.constructor.name, this.groupsWhitelist.name, id))\n ])\n .catch((e: Error) => this.logger.error(`${this.clearWhiteListCaches.name} - ${e}`))\n }\n }\n\n async allUserIdsFromGroupsAndSubGroups(groupIds: number[]): Promise<number[]> {\n if (!groupIds.length) return []\n const subGroup: any = alias(groups, 'subGroup')\n const withChildren: any = sql`\n WITH RECURSIVE child (id, parentId) AS\n (SELECT ${groups.id}, ${groups.parentId}\n FROM ${groups}\n WHERE ${inArray(groups.id, groupIds)}\n UNION\n SELECT ${subGroup.id},\n ${subGroup.parentId}\n FROM ${groups} AS subGroup\n INNER JOIN child AS cs ON ${subGroup.parentId} = cs.id)\n SELECT DISTINCT ${usersGroups.userId} as userId\n FROM child\n INNER JOIN ${usersGroups} ON child.id = ${usersGroups.groupId}\n `\n const [r]: { userId: number }[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r.length ? r.map((r) => r.userId) : []\n }\n\n private async searchGroups(\n searchMembersDto: SearchMembersDto,\n userId?: number,\n limit = 3\n ): Promise<Pick<Group, 'id' | 'name' | 'description' | 'type' | 'permissions'>[]> {\n /* Search for groups */\n const where: SQL[] = [like(groups.name, `%${searchMembersDto.search}%`)]\n if (userId) {\n let idsWhitelist: number[] = await this.groupsWhitelist(userId)\n if (searchMembersDto.ignoreGroupIds?.length) {\n idsWhitelist = idsWhitelist.filter((id) => searchMembersDto.ignoreGroupIds.indexOf(id) === -1)\n }\n where.unshift(inArray(groups.id, idsWhitelist))\n } else if (searchMembersDto.ignoreGroupIds?.length) {\n where.unshift(notInArray(groups.id, searchMembersDto.ignoreGroupIds))\n }\n if (searchMembersDto.excludePersonalGroups) {\n where.unshift(eq(groups.type, GROUP_TYPE.USER))\n }\n return this.db\n .select({ id: groups.id, name: groups.name, description: groups.description, type: groups.type, permissions: groups.permissions })\n .from(groups)\n .where(and(...where))\n .limit(limit)\n }\n\n private async searchUsers(\n searchMembersDto: SearchMembersDto,\n userId?: number,\n limit = 3\n ): Promise<Pick<UserModel, 'id' | 'login' | 'email' | 'fullName' | 'role' | 'permissions'>[]> {\n /* Search for users */\n const where: SQL[] = [\n ne(users.role, USER_ROLE.LINK),\n or(like(sql`CONCAT_WS('-', ${users.login}, ${users.email}, ${users.firstName}, ${users.lastName})`, `%${searchMembersDto.search}%`))\n ]\n if (userId) {\n let idsWhitelist: number[] = await this.usersWhitelist(userId)\n if (searchMembersDto.ignoreUserIds?.length) {\n idsWhitelist = idsWhitelist.filter((id) => searchMembersDto.ignoreUserIds.indexOf(id) === -1)\n }\n where.unshift(inArray(users.id, idsWhitelist))\n } else {\n if (searchMembersDto.ignoreUserIds?.length) {\n where.unshift(notInArray(users.id, searchMembersDto.ignoreUserIds))\n }\n }\n if (typeof searchMembersDto.usersRole !== 'undefined') {\n if (searchMembersDto.usersRole === USER_ROLE.USER) {\n // allow admin users\n where.unshift(lte(users.role, searchMembersDto.usersRole))\n } else {\n where.unshift(eq(users.role, searchMembersDto.usersRole))\n }\n }\n return this.db\n .select({\n id: users.id,\n login: users.login,\n email: users.email,\n fullName: userFullNameSQL(users),\n role: users.role,\n permissions: users.permissions\n })\n .from(users)\n .where(and(...where))\n .limit(limit)\n }\n}\n"],"names":["UsersQueries","checkUserExists","login","email","Error","columns","where","push","eq","users","operator","or","and","db","query","findFirst","setOnlineStatus","userId","onlineStatus","updateUserOrGuest","getOnlineUsers","userIds","select","id","fullName","userFullNameSQL","from","inArray","checkGroupNameExists","groupName","group","name","groups","limit","compareUserPassword","password","hash","selectUsers","comparePassword","loginOrEmail","pQuery","fromIdPermissionsQuery","fromLoginOrEmailPermissionsQuery","sql","placeholder","user","groupsPermissions","permissions","USER_PERMS_SEP","leftJoin","usersGroups","groupId","ne","groupBy","prepare","r","execute","length","uniquePermissions","getUserSecrets","secrets","fields","convertToSelect","selectUserProperties","createUserOrGuest","createUserDto","userRole","dbGetInsertedId","insert","values","role","USER_ROLE","USER","map","gid","GUEST","managers","usersGuests","uid","guestId","set","dbCheckAffectedRows","update","logger","verbose","JSON","stringify","anonymizePassword","e","error","deleteGuestLink","delete","LINK","searchUsersOrGroups","searchMembersDto","onlyUsers","onlyGroups","members","u","searchUsers","description","type","MEMBER_TYPE","withPermissions","undefined","g","searchGroups","GROUP_TYPE","GROUP","PGROUP","groupFromName","innerJoin","browseRootGroups","alias","createdAt","modifiedAt","groupRole","counts","countDistinct","browseGroupMembers","as","canDeletePersonalGroup","PERSONAL","USER_GROUP_ROLE","MANAGER","getGroup","asAdmin","getGroupWithMembers","usersGroupsAlias","raw","concatDistinctObjectsInArray","dateTimeUTC","deletePersonalGroup","createPersonalGroup","managerId","userCreateOrUpdateGroupDto","visibility","GROUP_VISIBILITY","PRIVATE","updateGroup","Object","keys","log","updateGroupMembers","add","m","clearWhiteListCaches","remove","listGuests","managersGuestAlias","managersAlias","guests","firstName","lastName","isActive","passwordAttempts","language","notification","currentAccess","lastAccess","currentIp","lastIp","isGuestManager","guest","usersWhitelist","lowerOrEqualUserRole","ISOLATED","VISIBLE","parse","ids","groupsWhitelist","q","isNotNull","pattern","cache","genSlugKey","then","mdel","catch","allUserIdsFromGroupsAndSubGroups","groupIds","subGroup","withChildren","parentId","like","search","idsWhitelist","ignoreGroupIds","filter","indexOf","unshift","notInArray","excludePersonalGroups","ignoreUserIds","usersRole","lte","Logger"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/users/services/users-queries.service.ts"],"sourcesContent":["import { Inject, Injectable, Logger } from '@nestjs/common'\nimport { and, countDistinct, eq, inArray, isNotNull, like, lte, ne, notInArray, or, SelectedFields, SQL, sql } from 'drizzle-orm'\nimport { alias } from 'drizzle-orm/mysql-core'\nimport { MySql2PreparedQuery, MySqlQueryResult } from 'drizzle-orm/mysql2'\nimport { anonymizePassword, comparePassword, uniquePermissions } from '../../../common/functions'\nimport { CacheDecorator } from '../../../infrastructure/cache/cache.decorator'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport {\n concatDistinctObjectsInArray,\n convertToSelect,\n dateTimeUTC,\n dbCheckAffectedRows,\n dbGetInsertedId\n} from '../../../infrastructure/database/utils'\nimport { GROUP_TYPE, GROUP_VISIBILITY } from '../constants/group'\nimport { MEMBER_TYPE } from '../constants/member'\nimport { USER_GROUP_ROLE, USER_ONLINE_STATUS, USER_PERMS_SEP, USER_ROLE } from '../constants/user'\nimport { UserCreateOrUpdateGroupDto } from '../dto/create-or-update-group.dto'\nimport { CreateUserDto } from '../dto/create-or-update-user.dto'\nimport { SearchMembersDto } from '../dto/search-members.dto'\nimport { GroupMember, GroupWithMembers } from '../interfaces/group-member'\nimport { GuestUser } from '../interfaces/guest-user.interface'\nimport { Member } from '../interfaces/member.interface'\nimport { UserSecrets } from '../interfaces/user-secrets.interface'\nimport { UserOnline } from '../interfaces/websocket.interface'\nimport { UserModel } from '../models/user.model'\nimport { Group } from '../schemas/group.interface'\nimport { groups } from '../schemas/groups.schema'\nimport { UserGroup } from '../schemas/user-group.interface'\nimport { User } from '../schemas/user.interface'\nimport { usersGroups } from '../schemas/users-groups.schema'\nimport { usersGuests } from '../schemas/users-guests.schema'\nimport { userFullNameSQL, users } from '../schemas/users.schema'\n\n@Injectable()\nexport class UsersQueries {\n private readonly logger = new Logger(UsersQueries.name)\n private fromLoginOrEmailPermissionsQuery: MySql2PreparedQuery<any> = null\n private fromIdPermissionsQuery: MySql2PreparedQuery<any> = null\n\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly cache: Cache\n ) {}\n\n checkUserExists(login?: string, email?: string): Promise<{ login?: string; email?: string }> {\n if (!login && !email) {\n throw new Error('login or email must be specified')\n }\n const columns: { login?: boolean; email?: boolean } = {}\n const where: SQL[] = []\n if (login) {\n columns.login = true\n where.push(eq(users.login, login))\n }\n if (email) {\n columns.email = true\n where.push(eq(users.email, email))\n }\n const operator = login && email ? or : and\n return this.db.query.users.findFirst({\n columns: columns,\n where: operator(...where)\n })\n }\n\n setOnlineStatus(userId: number, onlineStatus: USER_ONLINE_STATUS): Promise<boolean> {\n return this.updateUserOrGuest(userId, { onlineStatus: onlineStatus })\n }\n\n getOnlineUsers(userIds: number[]): Promise<UserOnline[]> {\n return this.db\n .select({\n id: users.id,\n login: users.login,\n email: users.email,\n fullName: userFullNameSQL(users),\n onlineStatus: users.onlineStatus\n } satisfies UserOnline | SelectedFields<any, any>)\n .from(users)\n .where(inArray(users.id, userIds))\n }\n\n async checkGroupNameExists(groupName: string): Promise<boolean> {\n const [group] = await this.db.select({ name: groups.name }).from(groups).where(eq(groups.name, groupName)).limit(1)\n return !!group?.name\n }\n\n async compareUserPassword(userId: number, password: string): Promise<boolean> {\n const [hash] = (await this.selectUsers(['password'], [eq(users.id, userId)])) as { password: string }[]\n if (!hash) return false\n return comparePassword(password, hash.password)\n }\n\n async from(userId?: number, loginOrEmail?: string): Promise<User> {\n // retrieve user with application permissions\n let pQuery: MySql2PreparedQuery<any> = userId ? this.fromIdPermissionsQuery : this.fromLoginOrEmailPermissionsQuery\n if (!pQuery) {\n const where = userId\n ? eq(users.id, sql.placeholder('userId'))\n : or(eq(users.login, sql.placeholder('loginOrEmail')), eq(users.email, sql.placeholder('loginOrEmail')))\n pQuery = this.db\n .select({\n user: users,\n groupsPermissions: sql`GROUP_CONCAT(DISTINCT (${groups.permissions}) SEPARATOR ${USER_PERMS_SEP})`\n })\n .from(users)\n .leftJoin(usersGroups, eq(usersGroups.userId, users.id))\n .leftJoin(groups, and(eq(groups.id, usersGroups.groupId), ne(groups.permissions, '')))\n .where(where)\n .groupBy(users.id)\n .limit(1)\n .prepare()\n if (userId) {\n this.fromIdPermissionsQuery = pQuery\n } else {\n this.fromLoginOrEmailPermissionsQuery = pQuery\n }\n }\n const r = await pQuery.execute(userId ? { userId } : { loginOrEmail })\n if (!r.length) return null\n const [user, groupsPermissions] = [r[0].user, r[0].groupsPermissions]\n // merge user and groups permissions\n user.permissions = uniquePermissions(`${user.permissions},${groupsPermissions}`, USER_PERMS_SEP)\n return user\n }\n\n async getUserSecrets(userId: number): Promise<UserSecrets> {\n const [r]: { secrets: UserSecrets }[] = await this.db.select({ secrets: users.secrets }).from(users).where(eq(users.id, userId)).limit(1)\n return r.secrets || {}\n }\n\n selectUsers(fields: Partial<keyof User>[] = ['id', 'login', 'email'], where: SQL[]): Promise<Partial<User>[]> {\n const select: Record<keyof User, any> = convertToSelect(users, fields)\n return this.db\n .select(select)\n .from(users)\n .where(and(...where))\n }\n\n async selectUserProperties(userId: number, fields: Partial<keyof User>[]): Promise<Partial<User>> {\n const select: Record<keyof User, any> = convertToSelect(users, fields)\n const [r]: Record<string, any>[] = await this.db.select(select).from(users).where(eq(users.id, userId)).limit(1)\n return r\n }\n\n async createUserOrGuest(createUserDto: CreateUserDto, userRole: USER_ROLE): Promise<User['id']> {\n const userId: number = dbGetInsertedId(await this.db.insert(users).values({ ...createUserDto, role: userRole } as User))\n if (userRole === USER_ROLE.USER && createUserDto.groups?.length) {\n await this.db.insert(usersGroups).values(createUserDto.groups.map((gid: number) => ({ userId: userId, groupId: gid })))\n }\n if (userRole === USER_ROLE.GUEST && createUserDto.managers?.length) {\n await this.db.insert(usersGuests).values(createUserDto.managers.map((uid: number) => ({ guestId: userId, userId: uid })))\n }\n return userId\n }\n\n async updateUserOrGuest(userId: number, set: Partial<Record<keyof User, any>>, userRole?: USER_ROLE): Promise<boolean> {\n try {\n dbCheckAffectedRows(\n await this.db\n .update(users)\n .set({ ...set, ...(userRole && { role: userRole }) } as User)\n .where(eq(users.id, userId)),\n 1\n )\n this.logger.verbose({ tag: this.updateUserOrGuest.name, msg: `user (${userId}) was updated : ${JSON.stringify(anonymizePassword(set))}` })\n return true\n } catch (e) {\n this.logger.error({\n tag: this.updateUserOrGuest.name,\n msg: `user (${userId}) was not updated : ${JSON.stringify(anonymizePassword(set))} : ${e}`\n })\n return false\n }\n }\n\n async deleteGuestLink(userId: number): Promise<void> {\n dbCheckAffectedRows(await this.db.delete(users).where(and(eq(users.id, userId), eq(users.role, USER_ROLE.LINK))), 1)\n }\n\n async searchUsersOrGroups(searchMembersDto: SearchMembersDto, userId?: number): Promise<Member[]> {\n const limit = searchMembersDto.onlyUsers || searchMembersDto.onlyGroups ? 6 : 3\n const members: Member[] = []\n if (!searchMembersDto.onlyGroups) {\n for (const u of await this.searchUsers(searchMembersDto, userId, limit)) {\n members.push({\n id: u.id,\n login: u.login,\n name: u.fullName,\n description: u.email,\n type: u.role === USER_ROLE.GUEST ? MEMBER_TYPE.GUEST : MEMBER_TYPE.USER,\n permissions: searchMembersDto.withPermissions ? u.permissions : undefined\n })\n }\n }\n if (!searchMembersDto.onlyUsers) {\n for (const g of await this.searchGroups(searchMembersDto, userId, limit)) {\n members.push({\n id: g.id,\n name: g.name,\n description: g.description,\n type: g.type === GROUP_TYPE.USER ? MEMBER_TYPE.GROUP : MEMBER_TYPE.PGROUP,\n permissions: searchMembersDto.withPermissions ? g.permissions : undefined\n })\n }\n }\n return members\n }\n\n async groupFromName(userId: number, name: string): Promise<Pick<Group, 'id' | 'name' | 'type'> & { role: UserGroup['role'] }> {\n const [group] = await this.db\n .select({\n id: groups.id,\n name: groups.name,\n type: groups.type,\n role: usersGroups.role\n } satisfies (Pick<Group, 'id' | 'name' | 'type'> & { role: UserGroup['role'] }) | SelectedFields<any, any>)\n .from(usersGroups)\n .innerJoin(groups, eq(groups.id, usersGroups.groupId))\n .where(and(eq(usersGroups.userId, userId), eq(groups.name, name)))\n .limit(1)\n return group\n }\n\n async browseRootGroups(userId: number): Promise<Member[]> {\n const members = alias(usersGroups, 'members')\n return this.db\n .select({\n id: groups.id,\n name: groups.name,\n description: groups.description,\n createdAt: groups.createdAt,\n modifiedAt: groups.modifiedAt,\n type: sql<MEMBER_TYPE>`IF(${groups.type} = ${GROUP_TYPE.USER}, ${MEMBER_TYPE.GROUP}, ${MEMBER_TYPE.PGROUP})`,\n groupRole: sql<USER_GROUP_ROLE>`${usersGroups.role}`,\n counts: { users: countDistinct(members.userId) }\n } satisfies Member | SelectedFields<any, any>)\n .from(usersGroups)\n .innerJoin(groups, and(eq(groups.id, usersGroups.groupId), eq(usersGroups.userId, userId)))\n .leftJoin(members, eq(members.groupId, groups.id))\n .groupBy(groups.id)\n }\n\n async browseGroupMembers(groupId: number): Promise<Member[]> {\n return this.db\n .select({\n id: users.id,\n login: users.login,\n name: userFullNameSQL(users).as('name'),\n description: users.email,\n createdAt: usersGroups.createdAt,\n type: sql<MEMBER_TYPE>`${MEMBER_TYPE.USER}`,\n groupRole: sql<USER_GROUP_ROLE>`${usersGroups.role}`\n } satisfies Member | SelectedFields<any, any>)\n .from(groups)\n .innerJoin(usersGroups, and(eq(usersGroups.groupId, groups.id), eq(usersGroups.groupId, groupId)))\n .leftJoin(users, eq(users.id, usersGroups.userId))\n .groupBy(users.id)\n }\n\n async canDeletePersonalGroup(userId: number, groupId: number): Promise<boolean> {\n const [group] = await this.db\n .select({ id: usersGroups.groupId })\n .from(usersGroups)\n .innerJoin(groups, and(eq(groups.id, usersGroups.groupId)))\n .where(\n and(\n eq(groups.type, GROUP_TYPE.PERSONAL),\n eq(usersGroups.userId, userId),\n eq(usersGroups.groupId, groupId),\n eq(usersGroups.role, USER_GROUP_ROLE.MANAGER)\n )\n )\n .limit(1)\n return !!group?.id\n }\n\n async getGroup(userId: number, groupId: number, asAdmin = false): Promise<GroupMember> {\n const [group] = await this.db\n .select({\n id: groups.id,\n name: groups.name,\n description: groups.description,\n createdAt: groups.createdAt,\n modifiedAt: groups.modifiedAt,\n type: sql<MEMBER_TYPE>`IF(${groups.type} = ${GROUP_TYPE.USER}, ${MEMBER_TYPE.GROUP}, ${MEMBER_TYPE.PGROUP})`\n })\n .from(usersGroups)\n .innerJoin(groups, and(eq(groups.id, usersGroups.groupId)))\n .where(\n and(\n eq(usersGroups.groupId, groupId),\n sql`IF(${+asAdmin} = 0, ${usersGroups.userId} = ${userId} AND ${usersGroups.role} = ${USER_GROUP_ROLE.MANAGER}, 1)`\n )\n )\n .limit(1)\n return group\n }\n\n async getGroupWithMembers(userId: number, groupId: number, asAdmin = false): Promise<GroupWithMembers> {\n const usersGroupsAlias: any = alias(usersGroups, 'usersFromGroups')\n const [group] = await this.db\n .select({\n id: groups.id,\n name: groups.name,\n description: groups.description,\n createdAt: groups.createdAt,\n modifiedAt: groups.modifiedAt,\n type: sql<MEMBER_TYPE>`IF(${groups.type} = ${GROUP_TYPE.USER}, ${sql.raw(`'${MEMBER_TYPE.GROUP}'`)}, ${sql.raw(`'${MEMBER_TYPE.PGROUP}'`)})`,\n members: concatDistinctObjectsInArray(users.id, {\n id: users.id,\n login: users.login,\n name: userFullNameSQL(users),\n description: users.email,\n type: sql.raw(`'${MEMBER_TYPE.USER}'`),\n groupRole: usersGroupsAlias.role,\n createdAt: dateTimeUTC(usersGroupsAlias.createdAt)\n } satisfies Record<keyof Pick<Member, 'id' | 'name' | 'login' | 'description' | 'type' | 'groupRole' | 'createdAt'>, any>)\n } satisfies GroupWithMembers | SelectedFields<any, any>)\n .from(usersGroups)\n .innerJoin(groups, eq(groups.id, usersGroups.groupId))\n .leftJoin(usersGroupsAlias, and(eq(usersGroupsAlias.groupId, groups.id)))\n .leftJoin(users, eq(users.id, usersGroupsAlias.userId))\n .where(\n and(\n eq(usersGroups.groupId, groupId),\n sql`IF(${+asAdmin} = 0, ${usersGroups.userId} = ${userId} AND ${usersGroups.role} = ${USER_GROUP_ROLE.MANAGER}, 1)`\n )\n )\n .groupBy(groups.id)\n .limit(1)\n return group\n }\n\n async deletePersonalGroup(groupId: number): Promise<boolean> {\n return dbCheckAffectedRows(\n await this.db\n .delete(groups)\n .where(and(eq(groups.id, groupId), eq(groups.type, GROUP_TYPE.PERSONAL)))\n .limit(1),\n 1,\n false\n )\n }\n\n async createPersonalGroup(managerId: number, userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto): Promise<Group['id']> {\n const groupId: number = dbGetInsertedId(\n await this.db.insert(groups).values({\n ...userCreateOrUpdateGroupDto,\n type: GROUP_TYPE.PERSONAL,\n visibility: GROUP_VISIBILITY.PRIVATE\n } as Group)\n )\n await this.db.insert(usersGroups).values({ userId: managerId, groupId: groupId, role: USER_GROUP_ROLE.MANAGER } as UserGroup)\n return groupId\n }\n\n async updateGroup(groupId: number, set: Partial<Record<keyof Group, any>>) {\n if (Object.keys(set).length) {\n try {\n await this.db.update(groups).set(set).where(eq(groups.id, groupId))\n this.logger.log({ tag: this.updateGroup.name, msg: `group (${groupId}) was updated : ${JSON.stringify(set)}` })\n } catch (e) {\n this.logger.error({ tag: this.updateGroup.name, msg: `group (${groupId}) was not updated : ${JSON.stringify(set)} : ${e}` })\n throw new Error('Group was not updated')\n }\n }\n }\n\n async updateGroupMembers(\n groupId: number,\n members: {\n add?: Pick<Member, 'id' | 'groupRole'>[]\n remove?: UserGroup['userId'][]\n }\n ): Promise<void> {\n if (members?.add?.length) {\n try {\n await this.db.insert(usersGroups).values(members.add.map((m) => ({ userId: m.id, groupId: groupId, role: m.groupRole })))\n // clear cache\n this.clearWhiteListCaches(members.add.map((m) => m.id))\n this.logger.log({\n tag: this.updateGroupMembers.name,\n msg: `users ${JSON.stringify(members.add.map((m) => m.id))} was added to group (${groupId})`\n })\n } catch (e) {\n this.logger.error({\n tag: this.updateGroupMembers.name,\n msg: `users ${JSON.stringify(members.add.map((m) => m.id))} was not added to group (${groupId}) : ${e}`\n })\n throw new Error('Group members was not added')\n }\n }\n if (members?.remove?.length) {\n try {\n await this.db\n .delete(usersGroups)\n .where(and(eq(usersGroups.groupId, groupId), inArray(usersGroups.userId, members.remove)))\n .limit(members.remove.length)\n // clear cache\n this.clearWhiteListCaches(members.remove)\n this.logger.log({ tag: this.updateGroupMembers.name, msg: `users ${JSON.stringify(members.remove)} was removed from group (${groupId})` })\n } catch (e) {\n this.logger.error({\n tag: this.updateGroupMembers.name,\n msg: `users ${JSON.stringify(members.remove)} was not removed from group (${groupId}) : ${e}`\n })\n throw new Error('Group members was not removed')\n }\n }\n }\n\n async listGuests(guestId: null, managerId?: number, asAdmin?: boolean): Promise<GuestUser[]>\n async listGuests(guestId: number, managerId?: number, asAdmin?: boolean): Promise<GuestUser>\n async listGuests(guestId: number | null, managerId?: number, asAdmin = false): Promise<GuestUser | GuestUser[]> {\n const where: SQL[] = [...(guestId ? [eq(usersGuests.guestId, guestId)] : []), ...(asAdmin ? [] : [eq(usersGuests.userId, managerId)])]\n const managersGuestAlias: any = alias(usersGuests, 'managersGuestAlias')\n const managersAlias: any = alias(users, 'managersAlias')\n const guests = await this.db\n .select({\n id: users.id,\n login: users.login,\n email: users.email,\n firstName: users.firstName,\n lastName: users.lastName,\n fullName: userFullNameSQL(users),\n role: users.role,\n isActive: users.isActive,\n passwordAttempts: users.passwordAttempts,\n language: users.language,\n notification: users.notification,\n currentAccess: users.currentAccess,\n lastAccess: users.lastAccess,\n currentIp: users.currentIp,\n lastIp: users.lastIp,\n createdAt: users.createdAt,\n managers: concatDistinctObjectsInArray(managersAlias.id, {\n id: managersAlias.id,\n login: managersAlias.login,\n name: userFullNameSQL(managersAlias),\n type: sql.raw(`'${MEMBER_TYPE.USER}'`),\n description: managersAlias.email,\n createdAt: dateTimeUTC(managersGuestAlias.createdAt)\n } satisfies Record<keyof Pick<Member, 'id' | 'name' | 'login' | 'description' | 'type' | 'createdAt'>, any>)\n } satisfies GuestUser | SelectedFields<any, any>)\n .from(usersGuests)\n .innerJoin(users, and(eq(users.id, usersGuests.guestId), eq(users.role, USER_ROLE.GUEST)))\n .leftJoin(managersGuestAlias, eq(managersGuestAlias.guestId, users.id))\n .leftJoin(managersAlias, eq(managersAlias.id, managersGuestAlias.userId))\n .where(and(...where))\n .groupBy(users.id)\n .limit(guestId ? 1 : undefined)\n return guestId ? guests[0] : guests\n }\n\n async isGuestManager(managerId: number, guestId: number): Promise<{ id: number; login: string } | undefined> {\n const [guest] = await this.db\n .select({ id: usersGuests.guestId, login: users.login })\n .from(usersGuests)\n .innerJoin(users, eq(users.id, usersGuests.guestId))\n .where(and(eq(usersGuests.userId, managerId), eq(usersGuests.guestId, guestId), eq(users.role, USER_ROLE.GUEST)))\n .limit(1)\n return guest\n }\n\n @CacheDecorator(900)\n async usersWhitelist(userId: number, lowerOrEqualUserRole: USER_ROLE = USER_ROLE.GUEST): Promise<number[]> {\n /* Get the list of user ids allowed to the current user\n - all users with no groups (except users with a role higher than lowerOrEqualUserRole)\n - all users who are members of groups visible to the current user\n (VISIBLE groups for everyone, PRIVATE groups only if the current user is a member, never members of ISOLATED groups)\n - all guests managed by the current user\n - all managers who manage the current guest\n */\n const userIds: any = sql`\n WITH visible_groups AS (\n SELECT ${groups.id} AS id\n FROM ${groups}\n LEFT JOIN ${usersGroups}\n ON ${usersGroups.groupId} = ${groups.id}\n AND ${usersGroups.userId} = ${userId}\n WHERE\n ${groups.visibility} != ${GROUP_VISIBILITY.ISOLATED}\n AND (\n ${groups.visibility} = ${GROUP_VISIBILITY.VISIBLE}\n OR (\n ${groups.visibility} = ${GROUP_VISIBILITY.PRIVATE}\n AND ${usersGroups.userId} IS NOT NULL\n )\n )\n )\n SELECT JSON_ARRAYAGG(id) AS ids\n FROM (\n -- 1) Users from groups visible to the current user\n SELECT ${users.id} AS id\n FROM ${users}\n INNER JOIN ${usersGroups}\n ON ${usersGroups.userId} = ${users.id}\n INNER JOIN visible_groups\n ON visible_groups.id = ${usersGroups.groupId}\n WHERE ${users.role} <= ${sql.raw(`${lowerOrEqualUserRole}`)}\n\n UNION\n\n -- 2) Users with no groups\n SELECT ${users.id} AS id\n FROM ${users}\n WHERE\n ${users.role} <= ${sql.raw(`${lowerOrEqualUserRole}`)}\n AND NOT EXISTS (\n SELECT 1\n FROM ${usersGroups}\n WHERE ${usersGroups.userId} = ${users.id}\n )\n\n UNION\n\n -- 3) Guests managed by the user and managers of the current guest\n SELECT CASE\n WHEN ${usersGuests.userId} = ${userId} THEN ${usersGuests.guestId}\n WHEN ${usersGuests.guestId} = ${userId} THEN ${usersGuests.userId}\n END AS id\n FROM ${usersGuests}\n WHERE ${usersGuests.userId} = ${userId}\n OR ${usersGuests.guestId} = ${userId}\n ) AS usersUnion\n `\n const [r] = await this.db.execute(userIds)\n return JSON.parse(r[0].ids) || []\n }\n\n @CacheDecorator(900)\n async groupsWhitelist(userId: number): Promise<number[]> {\n /* Get the list of group IDs the current user is allowed to see.\n - A group marked VISIBLE is always included.\n - A group marked ISOLATED is always excluded.\n - A PRIVATE group is included only if the user is a direct member of it.\n - Visibility does not inherit from parent or child groups.\n */\n const q = this.db\n .select({ id: sql`JSON_ARRAYAGG(${groups.id}) as ids` })\n .from(groups)\n .leftJoin(usersGroups, and(eq(usersGroups.groupId, groups.id), eq(usersGroups.userId, userId)))\n .where(\n and(\n ne(groups.visibility, GROUP_VISIBILITY.ISOLATED),\n or(eq(groups.visibility, GROUP_VISIBILITY.VISIBLE), and(eq(groups.visibility, GROUP_VISIBILITY.PRIVATE), isNotNull(usersGroups.userId)))\n )\n )\n const [r] = await this.db.execute(q)\n return JSON.parse(r[0].ids) || []\n }\n\n clearWhiteListCaches(userIds: number[] | '*') {\n if (userIds === '*') {\n // Means all entries\n for (const pattern of [\n this.cache.genSlugKey(this.constructor.name, this.usersWhitelist.name, userIds),\n this.cache.genSlugKey(this.constructor.name, this.groupsWhitelist.name, userIds)\n ]) {\n this.cache\n .keys(pattern)\n .then((keys: string[]) => {\n if (!keys.length) return\n this.logger.verbose({ tag: this.clearWhiteListCaches.name, msg: `${JSON.stringify(keys)}` })\n this.cache.mdel(keys).catch((e: Error) => this.logger.error({ tag: this.clearWhiteListCaches.name, msg: `${e}` }))\n })\n .catch((e: Error) => this.logger.error({ tag: this.clearWhiteListCaches.name, msg: `${e}` }))\n }\n } else {\n this.cache\n .mdel([\n ...userIds.map((id: number) => this.cache.genSlugKey(this.constructor.name, this.usersWhitelist.name, id)),\n ...userIds.map((id: number) => this.cache.genSlugKey(this.constructor.name, this.groupsWhitelist.name, id))\n ])\n .catch((e: Error) => this.logger.error({ tag: this.clearWhiteListCaches.name, msg: `${e}` }))\n }\n }\n\n async allUserIdsFromGroupsAndSubGroups(groupIds: number[]): Promise<number[]> {\n if (!groupIds.length) return []\n const subGroup: any = alias(groups, 'subGroup')\n const withChildren: any = sql`\n WITH RECURSIVE child (id, parentId) AS\n (SELECT ${groups.id}, ${groups.parentId}\n FROM ${groups}\n WHERE ${inArray(groups.id, groupIds)}\n UNION\n SELECT ${subGroup.id},\n ${subGroup.parentId}\n FROM ${groups} AS subGroup\n INNER JOIN child AS cs ON ${subGroup.parentId} = cs.id)\n SELECT DISTINCT ${usersGroups.userId} as userId\n FROM child\n INNER JOIN ${usersGroups} ON child.id = ${usersGroups.groupId}\n `\n const [r]: { userId: number }[][] = (await this.db.execute(withChildren)) as MySqlQueryResult\n return r.length ? r.map((r) => r.userId) : []\n }\n\n private async searchGroups(\n searchMembersDto: SearchMembersDto,\n userId?: number,\n limit = 3\n ): Promise<Pick<Group, 'id' | 'name' | 'description' | 'type' | 'permissions'>[]> {\n /* Search for groups */\n const where: SQL[] = [like(groups.name, `%${searchMembersDto.search}%`)]\n if (userId) {\n let idsWhitelist: number[] = await this.groupsWhitelist(userId)\n if (searchMembersDto.ignoreGroupIds?.length) {\n idsWhitelist = idsWhitelist.filter((id) => searchMembersDto.ignoreGroupIds.indexOf(id) === -1)\n }\n where.unshift(inArray(groups.id, idsWhitelist))\n } else if (searchMembersDto.ignoreGroupIds?.length) {\n where.unshift(notInArray(groups.id, searchMembersDto.ignoreGroupIds))\n }\n if (searchMembersDto.excludePersonalGroups) {\n where.unshift(eq(groups.type, GROUP_TYPE.USER))\n }\n return this.db\n .select({ id: groups.id, name: groups.name, description: groups.description, type: groups.type, permissions: groups.permissions })\n .from(groups)\n .where(and(...where))\n .limit(limit)\n }\n\n private async searchUsers(\n searchMembersDto: SearchMembersDto,\n userId?: number,\n limit = 3\n ): Promise<Pick<UserModel, 'id' | 'login' | 'email' | 'fullName' | 'role' | 'permissions'>[]> {\n /* Search for users */\n const where: SQL[] = [\n ne(users.role, USER_ROLE.LINK),\n or(like(sql`CONCAT_WS('-', ${users.login}, ${users.email}, ${users.firstName}, ${users.lastName})`, `%${searchMembersDto.search}%`))\n ]\n if (userId) {\n let idsWhitelist: number[] = await this.usersWhitelist(userId)\n if (searchMembersDto.ignoreUserIds?.length) {\n idsWhitelist = idsWhitelist.filter((id) => searchMembersDto.ignoreUserIds.indexOf(id) === -1)\n }\n where.unshift(inArray(users.id, idsWhitelist))\n } else {\n if (searchMembersDto.ignoreUserIds?.length) {\n where.unshift(notInArray(users.id, searchMembersDto.ignoreUserIds))\n }\n }\n if (typeof searchMembersDto.usersRole !== 'undefined') {\n if (searchMembersDto.usersRole === USER_ROLE.USER) {\n // allow admin users\n where.unshift(lte(users.role, searchMembersDto.usersRole))\n } else {\n where.unshift(eq(users.role, searchMembersDto.usersRole))\n }\n }\n return this.db\n .select({\n id: users.id,\n login: users.login,\n email: users.email,\n fullName: userFullNameSQL(users),\n role: users.role,\n permissions: users.permissions\n })\n .from(users)\n .where(and(...where))\n .limit(limit)\n }\n}\n"],"names":["UsersQueries","checkUserExists","login","email","Error","columns","where","push","eq","users","operator","or","and","db","query","findFirst","setOnlineStatus","userId","onlineStatus","updateUserOrGuest","getOnlineUsers","userIds","select","id","fullName","userFullNameSQL","from","inArray","checkGroupNameExists","groupName","group","name","groups","limit","compareUserPassword","password","hash","selectUsers","comparePassword","loginOrEmail","pQuery","fromIdPermissionsQuery","fromLoginOrEmailPermissionsQuery","sql","placeholder","user","groupsPermissions","permissions","USER_PERMS_SEP","leftJoin","usersGroups","groupId","ne","groupBy","prepare","r","execute","length","uniquePermissions","getUserSecrets","secrets","fields","convertToSelect","selectUserProperties","createUserOrGuest","createUserDto","userRole","dbGetInsertedId","insert","values","role","USER_ROLE","USER","map","gid","GUEST","managers","usersGuests","uid","guestId","set","dbCheckAffectedRows","update","logger","verbose","tag","msg","JSON","stringify","anonymizePassword","e","error","deleteGuestLink","delete","LINK","searchUsersOrGroups","searchMembersDto","onlyUsers","onlyGroups","members","u","searchUsers","description","type","MEMBER_TYPE","withPermissions","undefined","g","searchGroups","GROUP_TYPE","GROUP","PGROUP","groupFromName","innerJoin","browseRootGroups","alias","createdAt","modifiedAt","groupRole","counts","countDistinct","browseGroupMembers","as","canDeletePersonalGroup","PERSONAL","USER_GROUP_ROLE","MANAGER","getGroup","asAdmin","getGroupWithMembers","usersGroupsAlias","raw","concatDistinctObjectsInArray","dateTimeUTC","deletePersonalGroup","createPersonalGroup","managerId","userCreateOrUpdateGroupDto","visibility","GROUP_VISIBILITY","PRIVATE","updateGroup","Object","keys","log","updateGroupMembers","add","m","clearWhiteListCaches","remove","listGuests","managersGuestAlias","managersAlias","guests","firstName","lastName","isActive","passwordAttempts","language","notification","currentAccess","lastAccess","currentIp","lastIp","isGuestManager","guest","usersWhitelist","lowerOrEqualUserRole","ISOLATED","VISIBLE","parse","ids","groupsWhitelist","q","isNotNull","pattern","cache","genSlugKey","then","mdel","catch","allUserIdsFromGroupsAndSubGroups","groupIds","subGroup","withChildren","parentId","like","search","idsWhitelist","ignoreGroupIds","filter","indexOf","unshift","notInArray","excludePersonalGroups","ignoreUserIds","usersRole","lte","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
  });
@@ -14,8 +10,8 @@ Object.defineProperty(exports, "UsersController", {
14
10
  });
15
11
  const _common = require("@nestjs/common");
16
12
  const _fs = require("fs");
17
- const _authtwofaguard = require("../../authentication/guards/auth-two-fa-guard");
18
13
  const _authrequestinterface = require("../../authentication/interfaces/auth-request.interface");
14
+ const _authtwofaguard = require("../../authentication/providers/two-fa/auth-two-fa-guard");
19
15
  const _sendfile = require("../files/utils/send-file");
20
16
  const _routes = require("./constants/routes");
21
17
  const _user = require("./constants/user");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/users/users.controller.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Body, Controller, Delete, Get, Header, Param, ParseIntPipe, Patch, Post, Put, Req, Search, StreamableFile, UseGuards } from '@nestjs/common'\nimport { createReadStream } from 'fs'\nimport { LoginResponseDto } from '../../authentication/dto/login-response.dto'\nimport { AuthTwoFaGuardWithoutPassword } from '../../authentication/guards/auth-two-fa-guard'\nimport { FastifyAuthenticatedRequest } from '../../authentication/interfaces/auth-request.interface'\nimport { makeContentDispositionAttachment } from '../files/utils/send-file'\nimport { USERS_ROUTE } from './constants/routes'\nimport { USER_PERMISSION, USER_ROLE } from './constants/user'\nimport { UserHavePermission } from './decorators/permissions.decorator'\nimport { UserHaveRole } from './decorators/roles.decorator'\nimport { GetUser } from './decorators/user.decorator'\nimport { UserCreateOrUpdateGroupDto } from './dto/create-or-update-group.dto'\nimport { CreateUserDto, UpdateUserDto, UpdateUserFromGroupDto } from './dto/create-or-update-user.dto'\nimport { SearchMembersDto } from './dto/search-members.dto'\nimport { UserAppPasswordDto, UserLanguageDto, UserNotificationDto, UserStorageIndexingDto, UserUpdatePasswordDto } from './dto/user-properties.dto'\nimport { UserPermissionsGuard } from './guards/permissions.guard'\nimport { UserRolesGuard } from './guards/roles.guard'\nimport { GroupBrowse } from './interfaces/group-browse.interface'\nimport { GroupMember } from './interfaces/group-member'\nimport { GuestUser } from './interfaces/guest-user.interface'\nimport { Member } from './interfaces/member.interface'\nimport { UserAppPassword } from './interfaces/user-secrets.interface'\nimport { UserModel } from './models/user.model'\nimport { UsersManager } from './services/users-manager.service'\nimport { USER_AVATAR_FILE_NAME } from './utils/avatar'\n\n@Controller(USERS_ROUTE.BASE)\n@UseGuards(UserRolesGuard)\n@UserHaveRole(USER_ROLE.USER)\nexport class UsersController {\n constructor(private readonly usersManager: UsersManager) {}\n\n @Get(USERS_ROUTE.ME)\n @UserHaveRole(USER_ROLE.LINK)\n me(@GetUser() user: UserModel): Promise<Omit<LoginResponseDto, 'token'>> {\n return this.usersManager.me(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n listAppPasswords(@GetUser() user: UserModel): Promise<Omit<UserAppPassword, 'password'>[]> {\n return this.usersManager.listAppPasswords(user)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n generateAppPassword(@GetUser() user: UserModel, @Body() userAppPasswordDto: UserAppPasswordDto): Promise<UserAppPassword> {\n return this.usersManager.generateAppPassword(user, userAppPasswordDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}/:name`)\n @UserHaveRole(USER_ROLE.USER)\n deleteAppPassword(@GetUser() user: UserModel, @Param('name') name: string): Promise<void> {\n return this.usersManager.deleteAppPassword(user, name)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.LANGUAGE}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateLanguage(@GetUser() user: UserModel, @Body() userLanguageDto: UserLanguageDto) {\n return this.usersManager.updateLanguage(user, userLanguageDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.PASSWORD}`)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n updatePassword(@GetUser() user: UserModel, @Body() userPasswordDto: UserUpdatePasswordDto) {\n return this.usersManager.updatePassword(user, userPasswordDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.NOTIFICATION}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateNotification(@GetUser() user: UserModel, @Body() userNotificationDto: UserNotificationDto) {\n return this.usersManager.updateNotification(user, userNotificationDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.STORAGE_INDEXING}`)\n @UserHaveRole(USER_ROLE.USER)\n updateStorageIndexing(@GetUser() user: UserModel, @Body() userStorageIndexingDto: UserStorageIndexingDto) {\n return this.usersManager.updateStorageIndexing(user, userStorageIndexingDto)\n }\n\n @Get(`${USERS_ROUTE.AVATAR}/:login`)\n @UserHaveRole(USER_ROLE.LINK)\n @Header('cache-control', 'public,max-age=86400')\n async avatar(@GetUser() user: UserModel, @Param('login') login: 'me' | string): Promise<StreamableFile> {\n const isMe: boolean = login === 'me'\n const [path, mime] = await this.usersManager.getAvatar(isMe ? user.login : login, false, isMe && user.role <= USER_ROLE.USER)\n return new StreamableFile(createReadStream(path), { type: mime, disposition: makeContentDispositionAttachment(USER_AVATAR_FILE_NAME) })\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n updateAvatar(@Req() req: FastifyAuthenticatedRequest) {\n return this.usersManager.updateAvatar(req)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n genAvatar(@GetUser() user: UserModel) {\n return this.usersManager.getAvatar(user.login, true)\n }\n\n @Search()\n searchMembers(@GetUser() user: UserModel, @Body() searchMembersDto: SearchMembersDto): Promise<Member[]> {\n return this.usersManager.searchMembers(user, searchMembersDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.BROWSE}/:name?`)\n browseGroups(@GetUser() user: UserModel, @Param('name') name?: string): Promise<GroupBrowse> {\n return this.usersManager.browseGroups(user, name)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}`)\n @UserHavePermission(USER_PERMISSION.PERSONAL_GROUPS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createPersonalGroup(@GetUser() user: UserModel, @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto): Promise<GroupMember> {\n return this.usersManager.createPersonalGroup(user, userCreateOrUpdateGroupDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n updatePersonalGroup(\n @GetUser() user: UserModel,\n @Param('id', ParseIntPipe) groupId: number,\n @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto\n ): Promise<GroupMember> {\n return this.usersManager.updatePersonalGroup(user, groupId, userCreateOrUpdateGroupDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n deletePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.deletePersonalGroup(user, groupId)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.GROUPS_LEAVE}/:id`)\n leavePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.leavePersonalGroup(user, groupId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}`)\n addUsersToGroup(@GetUser() user: UserModel, @Param('groupId', ParseIntPipe) groupId: number, @Body() userIds: number[]): Promise<void> {\n return this.usersManager.addUsersToGroup(user, groupId, userIds)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n removeUserFromGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number\n ): Promise<void> {\n return this.usersManager.removeUserFromGroup(user, groupId, userId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n updateUserFromPersonalGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number,\n @Body() updateUserFromGroupDto: UpdateUserFromGroupDto\n ): Promise<void> {\n return this.usersManager.updateUserFromPersonalGroup(user, groupId, userId, updateUserFromGroupDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n listGuests(@GetUser() user: UserModel): Promise<GuestUser[]> {\n return this.usersManager.listGuests(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n getGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<GuestUser> {\n return this.usersManager.getGuest(user, guestId)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n @UserHavePermission(USER_PERMISSION.GUESTS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createGuest(@GetUser() user: UserModel, @Body() createGuestDto: CreateUserDto): Promise<GuestUser> {\n return this.usersManager.createGuest(user, createGuestDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n updateGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number, @Body() updateGuestDto: UpdateUserDto): Promise<GuestUser> {\n return this.usersManager.updateGuest(user, guestId, updateGuestDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n deleteGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<void> {\n return this.usersManager.deleteGuest(user, guestId)\n }\n}\n"],"names":["UsersController","me","user","usersManager","listAppPasswords","generateAppPassword","userAppPasswordDto","deleteAppPassword","name","updateLanguage","userLanguageDto","updatePassword","userPasswordDto","updateNotification","userNotificationDto","updateStorageIndexing","userStorageIndexingDto","avatar","login","isMe","path","mime","getAvatar","role","USER_ROLE","USER","StreamableFile","createReadStream","type","disposition","makeContentDispositionAttachment","USER_AVATAR_FILE_NAME","updateAvatar","req","genAvatar","searchMembers","searchMembersDto","browseGroups","createPersonalGroup","userCreateOrUpdateGroupDto","updatePersonalGroup","groupId","deletePersonalGroup","leavePersonalGroup","addUsersToGroup","userIds","removeUserFromGroup","userId","updateUserFromPersonalGroup","updateUserFromGroupDto","listGuests","getGuest","guestId","createGuest","createGuestDto","updateGuest","updateGuestDto","deleteGuest","ME","LINK","USERS_ROUTE","APP_PASSWORDS","LANGUAGE","GUEST","PASSWORD","NOTIFICATION","STORAGE_INDEXING","AVATAR","GROUPS","BROWSE","PERSONAL_GROUPS_ADMIN","GROUPS_LEAVE","USERS","GUESTS","GUESTS_ADMIN","BASE"],"mappings":"AAAA;;;;CAIC;;;;+BA+BYA;;;eAAAA;;;wBA7BwH;oBACpG;gCAEa;sCACF;0BACK;wBACrB;sBACe;sCACR;gCACN;+BACL;wCACmB;uCAC0B;kCACpC;mCACuF;kCACnF;4BACN;2BAML;qCACG;wBACS;;;;;;;;;;;;;;;AAK/B,IAAA,AAAMA,kBAAN,MAAMA;IAKXC,GAAG,AAAWC,IAAe,EAA4C;QACvE,OAAO,IAAI,CAACC,YAAY,CAACF,EAAE,CAACC;IAC9B;IAKAE,iBAAiB,AAAWF,IAAe,EAAgD;QACzF,OAAO,IAAI,CAACC,YAAY,CAACC,gBAAgB,CAACF;IAC5C;IAKAG,oBAAoB,AAAWH,IAAe,EAAE,AAAQI,kBAAsC,EAA4B;QACxH,OAAO,IAAI,CAACH,YAAY,CAACE,mBAAmB,CAACH,MAAMI;IACrD;IAIAC,kBAAkB,AAAWL,IAAe,EAAE,AAAeM,IAAY,EAAiB;QACxF,OAAO,IAAI,CAACL,YAAY,CAACI,iBAAiB,CAACL,MAAMM;IACnD;IAIAC,eAAe,AAAWP,IAAe,EAAE,AAAQQ,eAAgC,EAAE;QACnF,OAAO,IAAI,CAACP,YAAY,CAACM,cAAc,CAACP,MAAMQ;IAChD;IAIAC,eAAe,AAAWT,IAAe,EAAE,AAAQU,eAAsC,EAAE;QACzF,OAAO,IAAI,CAACT,YAAY,CAACQ,cAAc,CAACT,MAAMU;IAChD;IAIAC,mBAAmB,AAAWX,IAAe,EAAE,AAAQY,mBAAwC,EAAE;QAC/F,OAAO,IAAI,CAACX,YAAY,CAACU,kBAAkB,CAACX,MAAMY;IACpD;IAIAC,sBAAsB,AAAWb,IAAe,EAAE,AAAQc,sBAA8C,EAAE;QACxG,OAAO,IAAI,CAACb,YAAY,CAACY,qBAAqB,CAACb,MAAMc;IACvD;IAEA,MAGMC,OAAO,AAAWf,IAAe,EAAE,AAAgBgB,KAAoB,EAA2B;QACtG,MAAMC,OAAgBD,UAAU;QAChC,MAAM,CAACE,MAAMC,KAAK,GAAG,MAAM,IAAI,CAAClB,YAAY,CAACmB,SAAS,CAACH,OAAOjB,KAAKgB,KAAK,GAAGA,OAAO,OAAOC,QAAQjB,KAAKqB,IAAI,IAAIC,eAAS,CAACC,IAAI;QAC5H,OAAO,IAAIC,sBAAc,CAACC,IAAAA,oBAAgB,EAACP,OAAO;YAAEQ,MAAMP;YAAMQ,aAAaC,IAAAA,0CAAgC,EAACC,6BAAqB;QAAE;IACvI;IAGAC,aAAa,AAAOC,GAAgC,EAAE;QACpD,OAAO,IAAI,CAAC9B,YAAY,CAAC6B,YAAY,CAACC;IACxC;IAGAC,UAAU,AAAWhC,IAAe,EAAE;QACpC,OAAO,IAAI,CAACC,YAAY,CAACmB,SAAS,CAACpB,KAAKgB,KAAK,EAAE;IACjD;IAGAiB,cAAc,AAAWjC,IAAe,EAAE,AAAQkC,gBAAkC,EAAqB;QACvG,OAAO,IAAI,CAACjC,YAAY,CAACgC,aAAa,CAACjC,MAAMkC;IAC/C;IAGAC,aAAa,AAAWnC,IAAe,EAAE,AAAeM,IAAa,EAAwB;QAC3F,OAAO,IAAI,CAACL,YAAY,CAACkC,YAAY,CAACnC,MAAMM;IAC9C;IAKA8B,oBAAoB,AAAWpC,IAAe,EAAE,AAAQqC,0BAAsD,EAAwB;QACpI,OAAO,IAAI,CAACpC,YAAY,CAACmC,mBAAmB,CAACpC,MAAMqC;IACrD;IAGAC,oBACE,AAAWtC,IAAe,EAC1B,AAA2BuC,OAAe,EAC1C,AAAQF,0BAAsD,EACxC;QACtB,OAAO,IAAI,CAACpC,YAAY,CAACqC,mBAAmB,CAACtC,MAAMuC,SAASF;IAC9D;IAGAG,oBAAoB,AAAWxC,IAAe,EAAE,AAA2BuC,OAAe,EAAiB;QACzG,OAAO,IAAI,CAACtC,YAAY,CAACuC,mBAAmB,CAACxC,MAAMuC;IACrD;IAGAE,mBAAmB,AAAWzC,IAAe,EAAE,AAA2BuC,OAAe,EAAiB;QACxG,OAAO,IAAI,CAACtC,YAAY,CAACwC,kBAAkB,CAACzC,MAAMuC;IACpD;IAGAG,gBAAgB,AAAW1C,IAAe,EAAE,AAAgCuC,OAAe,EAAE,AAAQI,OAAiB,EAAiB;QACrI,OAAO,IAAI,CAAC1C,YAAY,CAACyC,eAAe,CAAC1C,MAAMuC,SAASI;IAC1D;IAGAC,oBACE,AAAW5C,IAAe,EAC1B,AAAgCuC,OAAe,EAC/C,AAA+BM,MAAc,EAC9B;QACf,OAAO,IAAI,CAAC5C,YAAY,CAAC2C,mBAAmB,CAAC5C,MAAMuC,SAASM;IAC9D;IAGAC,4BACE,AAAW9C,IAAe,EAC1B,AAAgCuC,OAAe,EAC/C,AAA+BM,MAAc,EAC7C,AAAQE,sBAA8C,EACvC;QACf,OAAO,IAAI,CAAC9C,YAAY,CAAC6C,2BAA2B,CAAC9C,MAAMuC,SAASM,QAAQE;IAC9E;IAGAC,WAAW,AAAWhD,IAAe,EAAwB;QAC3D,OAAO,IAAI,CAACC,YAAY,CAAC+C,UAAU,CAAChD;IACtC;IAGAiD,SAAS,AAAWjD,IAAe,EAAE,AAA2BkD,OAAe,EAAsB;QACnG,OAAO,IAAI,CAACjD,YAAY,CAACgD,QAAQ,CAACjD,MAAMkD;IAC1C;IAKAC,YAAY,AAAWnD,IAAe,EAAE,AAAQoD,cAA6B,EAAsB;QACjG,OAAO,IAAI,CAACnD,YAAY,CAACkD,WAAW,CAACnD,MAAMoD;IAC7C;IAGAC,YAAY,AAAWrD,IAAe,EAAE,AAA2BkD,OAAe,EAAE,AAAQI,cAA6B,EAAsB;QAC7I,OAAO,IAAI,CAACrD,YAAY,CAACoD,WAAW,CAACrD,MAAMkD,SAASI;IACtD;IAGAC,YAAY,AAAWvD,IAAe,EAAE,AAA2BkD,OAAe,EAAiB;QACjG,OAAO,IAAI,CAACjD,YAAY,CAACsD,WAAW,CAACvD,MAAMkD;IAC7C;IA5JA,YAAY,AAAiBjD,YAA0B,CAAE;aAA5BA,eAAAA;IAA6B;AA6J5D;;yCA3JmBuD;sDACOC;;;;;;;;;wBAKhBC,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACC,aAAa;sDAC3BpC;;;;;;;;;;yBAMfmC,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACC,aAAa;sDAC5BpC;;;;;;;;;;;;2BAMbmC,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACC,aAAa,CAAC,MAAM;sDACrCpC;;;;;;;;;;;wBAKhBmC,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACE,QAAQ;sDACtBC;;;;;;;;;;;wBAKhBH,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACI,QAAQ;;;;;;;;;;;;wBAMtCJ,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACK,YAAY;sDAC1BF;;;;;;;;;;;wBAKhBH,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACM,gBAAgB;sDAC9BzC;;;;;;;;;;;wBAKhBmC,mBAAW,CAACO,MAAM,CAAC,OAAO;sDACVR;;;;;;;;;;;;wBAQhBC,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACO,MAAM;;;;;;;;;0BAKlCP,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACO,MAAM;;;;;;;;;;;;;;;;;;;;wBAUtCP,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACQ,MAAM,CAAC,CAAC,EAAER,mBAAW,CAACS,MAAM,CAAC,OAAO;;;;;;;;;;;yBAKjET,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACQ,MAAM;wEACTE;;;;;;;;;;;;wBAM5BV,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACQ,MAAM,CAAC,IAAI;;;;;;;;;;;;;2BAStCR,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACQ,MAAM,CAAC,IAAI;;;;;;;;;;;2BAKzCR,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACQ,MAAM,CAAC,CAAC,EAAER,mBAAW,CAACW,YAAY,CAAC,IAAI;;;;;;;;;;;0BAKtEX,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACQ,MAAM,CAAC,UAAU,EAAER,mBAAW,CAACY,KAAK;;;;;;;;;;;;;2BAKjEZ,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACQ,MAAM,CAAC,UAAU,EAAER,mBAAW,CAACY,KAAK,CAAC,QAAQ;;;;;;;;;;;;;0BAS5EZ,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACQ,MAAM,CAAC,UAAU,EAAER,mBAAW,CAACY,KAAK,CAAC,QAAQ;;;;;;;;;;;;;;;wBAU7EZ,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACa,MAAM;;;;;;;;;wBAKpCb,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACa,MAAM,CAAC,IAAI;;;;;;;;;;;yBAKxCb,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACa,MAAM;wEACTC;;;;;;;;;;;;wBAM5Bd,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACa,MAAM,CAAC,IAAI;;;;;;;;;;;;;2BAKtCb,mBAAW,CAACF,EAAE,CAAC,CAAC,EAAEE,mBAAW,CAACa,MAAM,CAAC,IAAI;;;;;;;;;;;gDA7J9BE;;sDAEAlD"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/users/users.controller.ts"],"sourcesContent":["import { Body, Controller, Delete, Get, Header, Param, ParseIntPipe, Patch, Post, Put, Req, Search, StreamableFile, UseGuards } from '@nestjs/common'\nimport { createReadStream } from 'fs'\nimport { LoginResponseDto } from '../../authentication/dto/login-response.dto'\nimport { FastifyAuthenticatedRequest } from '../../authentication/interfaces/auth-request.interface'\nimport { AuthTwoFaGuardWithoutPassword } from '../../authentication/providers/two-fa/auth-two-fa-guard'\nimport { makeContentDispositionAttachment } from '../files/utils/send-file'\nimport { USERS_ROUTE } from './constants/routes'\nimport { USER_PERMISSION, USER_ROLE } from './constants/user'\nimport { UserHavePermission } from './decorators/permissions.decorator'\nimport { UserHaveRole } from './decorators/roles.decorator'\nimport { GetUser } from './decorators/user.decorator'\nimport { UserCreateOrUpdateGroupDto } from './dto/create-or-update-group.dto'\nimport { CreateUserDto, UpdateUserDto, UpdateUserFromGroupDto } from './dto/create-or-update-user.dto'\nimport { SearchMembersDto } from './dto/search-members.dto'\nimport { UserAppPasswordDto, UserLanguageDto, UserNotificationDto, UserStorageIndexingDto, UserUpdatePasswordDto } from './dto/user-properties.dto'\nimport { UserPermissionsGuard } from './guards/permissions.guard'\nimport { UserRolesGuard } from './guards/roles.guard'\nimport { GroupBrowse } from './interfaces/group-browse.interface'\nimport { GroupMember } from './interfaces/group-member'\nimport { GuestUser } from './interfaces/guest-user.interface'\nimport { Member } from './interfaces/member.interface'\nimport { UserAppPassword } from './interfaces/user-secrets.interface'\nimport { UserModel } from './models/user.model'\nimport { UsersManager } from './services/users-manager.service'\nimport { USER_AVATAR_FILE_NAME } from './utils/avatar'\n\n@Controller(USERS_ROUTE.BASE)\n@UseGuards(UserRolesGuard)\n@UserHaveRole(USER_ROLE.USER)\nexport class UsersController {\n constructor(private readonly usersManager: UsersManager) {}\n\n @Get(USERS_ROUTE.ME)\n @UserHaveRole(USER_ROLE.LINK)\n me(@GetUser() user: UserModel): Promise<Omit<LoginResponseDto, 'token'>> {\n return this.usersManager.me(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n listAppPasswords(@GetUser() user: UserModel): Promise<Omit<UserAppPassword, 'password'>[]> {\n return this.usersManager.listAppPasswords(user)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}`)\n @UserHaveRole(USER_ROLE.USER)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n generateAppPassword(@GetUser() user: UserModel, @Body() userAppPasswordDto: UserAppPasswordDto): Promise<UserAppPassword> {\n return this.usersManager.generateAppPassword(user, userAppPasswordDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.APP_PASSWORDS}/:name`)\n @UserHaveRole(USER_ROLE.USER)\n deleteAppPassword(@GetUser() user: UserModel, @Param('name') name: string): Promise<void> {\n return this.usersManager.deleteAppPassword(user, name)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.LANGUAGE}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateLanguage(@GetUser() user: UserModel, @Body() userLanguageDto: UserLanguageDto) {\n return this.usersManager.updateLanguage(user, userLanguageDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.PASSWORD}`)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n updatePassword(@GetUser() user: UserModel, @Body() userPasswordDto: UserUpdatePasswordDto) {\n return this.usersManager.updatePassword(user, userPasswordDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.NOTIFICATION}`)\n @UserHaveRole(USER_ROLE.GUEST)\n updateNotification(@GetUser() user: UserModel, @Body() userNotificationDto: UserNotificationDto) {\n return this.usersManager.updateNotification(user, userNotificationDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.STORAGE_INDEXING}`)\n @UserHaveRole(USER_ROLE.USER)\n updateStorageIndexing(@GetUser() user: UserModel, @Body() userStorageIndexingDto: UserStorageIndexingDto) {\n return this.usersManager.updateStorageIndexing(user, userStorageIndexingDto)\n }\n\n @Get(`${USERS_ROUTE.AVATAR}/:login`)\n @UserHaveRole(USER_ROLE.LINK)\n @Header('cache-control', 'public,max-age=86400')\n async avatar(@GetUser() user: UserModel, @Param('login') login: 'me' | string): Promise<StreamableFile> {\n const isMe: boolean = login === 'me'\n const [path, mime] = await this.usersManager.getAvatar(isMe ? user.login : login, false, isMe && user.role <= USER_ROLE.USER)\n return new StreamableFile(createReadStream(path), { type: mime, disposition: makeContentDispositionAttachment(USER_AVATAR_FILE_NAME) })\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n updateAvatar(@Req() req: FastifyAuthenticatedRequest) {\n return this.usersManager.updateAvatar(req)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.AVATAR}`)\n genAvatar(@GetUser() user: UserModel) {\n return this.usersManager.getAvatar(user.login, true)\n }\n\n @Search()\n searchMembers(@GetUser() user: UserModel, @Body() searchMembersDto: SearchMembersDto): Promise<Member[]> {\n return this.usersManager.searchMembers(user, searchMembersDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.BROWSE}/:name?`)\n browseGroups(@GetUser() user: UserModel, @Param('name') name?: string): Promise<GroupBrowse> {\n return this.usersManager.browseGroups(user, name)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}`)\n @UserHavePermission(USER_PERMISSION.PERSONAL_GROUPS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createPersonalGroup(@GetUser() user: UserModel, @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto): Promise<GroupMember> {\n return this.usersManager.createPersonalGroup(user, userCreateOrUpdateGroupDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n updatePersonalGroup(\n @GetUser() user: UserModel,\n @Param('id', ParseIntPipe) groupId: number,\n @Body() userCreateOrUpdateGroupDto: UserCreateOrUpdateGroupDto\n ): Promise<GroupMember> {\n return this.usersManager.updatePersonalGroup(user, groupId, userCreateOrUpdateGroupDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:id`)\n deletePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.deletePersonalGroup(user, groupId)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/${USERS_ROUTE.GROUPS_LEAVE}/:id`)\n leavePersonalGroup(@GetUser() user: UserModel, @Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersManager.leavePersonalGroup(user, groupId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}`)\n addUsersToGroup(@GetUser() user: UserModel, @Param('groupId', ParseIntPipe) groupId: number, @Body() userIds: number[]): Promise<void> {\n return this.usersManager.addUsersToGroup(user, groupId, userIds)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n removeUserFromGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number\n ): Promise<void> {\n return this.usersManager.removeUserFromGroup(user, groupId, userId)\n }\n\n @Patch(`${USERS_ROUTE.ME}/${USERS_ROUTE.GROUPS}/:groupId/${USERS_ROUTE.USERS}/:userId`)\n updateUserFromPersonalGroup(\n @GetUser() user: UserModel,\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number,\n @Body() updateUserFromGroupDto: UpdateUserFromGroupDto\n ): Promise<void> {\n return this.usersManager.updateUserFromPersonalGroup(user, groupId, userId, updateUserFromGroupDto)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n listGuests(@GetUser() user: UserModel): Promise<GuestUser[]> {\n return this.usersManager.listGuests(user)\n }\n\n @Get(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n getGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<GuestUser> {\n return this.usersManager.getGuest(user, guestId)\n }\n\n @Post(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}`)\n @UserHavePermission(USER_PERMISSION.GUESTS_ADMIN)\n @UseGuards(UserPermissionsGuard)\n createGuest(@GetUser() user: UserModel, @Body() createGuestDto: CreateUserDto): Promise<GuestUser> {\n return this.usersManager.createGuest(user, createGuestDto)\n }\n\n @Put(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n updateGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number, @Body() updateGuestDto: UpdateUserDto): Promise<GuestUser> {\n return this.usersManager.updateGuest(user, guestId, updateGuestDto)\n }\n\n @Delete(`${USERS_ROUTE.ME}/${USERS_ROUTE.GUESTS}/:id`)\n deleteGuest(@GetUser() user: UserModel, @Param('id', ParseIntPipe) guestId: number): Promise<void> {\n return this.usersManager.deleteGuest(user, guestId)\n }\n}\n"],"names":["UsersController","me","user","usersManager","listAppPasswords","generateAppPassword","userAppPasswordDto","deleteAppPassword","name","updateLanguage","userLanguageDto","updatePassword","userPasswordDto","updateNotification","userNotificationDto","updateStorageIndexing","userStorageIndexingDto","avatar","login","isMe","path","mime","getAvatar","role","USER_ROLE","USER","StreamableFile","createReadStream","type","disposition","makeContentDispositionAttachment","USER_AVATAR_FILE_NAME","updateAvatar","req","genAvatar","searchMembers","searchMembersDto","browseGroups","createPersonalGroup","userCreateOrUpdateGroupDto","updatePersonalGroup","groupId","deletePersonalGroup","leavePersonalGroup","addUsersToGroup","userIds","removeUserFromGroup","userId","updateUserFromPersonalGroup","updateUserFromGroupDto","listGuests","getGuest","guestId","createGuest","createGuestDto","updateGuest","updateGuestDto","deleteGuest","ME","LINK","USERS_ROUTE","APP_PASSWORDS","LANGUAGE","GUEST","PASSWORD","NOTIFICATION","STORAGE_INDEXING","AVATAR","GROUPS","BROWSE","PERSONAL_GROUPS_ADMIN","GROUPS_LEAVE","USERS","GUESTS","GUESTS_ADMIN","BASE"],"mappings":"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"}
@@ -1,16 +1,12 @@
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
  });
9
5
  const _config = require("@nestjs/config");
10
6
  const _jwt = require("@nestjs/jwt");
11
7
  const _testing = require("@nestjs/testing");
12
- const _authmanagerservice = require("../../authentication/services/auth-manager.service");
13
- const _authmethodtwofaservice = require("../../authentication/services/auth-methods/auth-method-two-fa.service");
8
+ const _authservice = require("../../authentication/auth.service");
9
+ const _authprovidertwofaservice = require("../../authentication/providers/two-fa/auth-provider-two-fa.service");
14
10
  const _configenvironment = require("../../configuration/config.environment");
15
11
  const _cacheservice = require("../../infrastructure/cache/services/cache.service");
16
12
  const _constants = require("../../infrastructure/database/constants");
@@ -54,9 +50,9 @@ describe(_userscontroller.UsersController.name, ()=>{
54
50
  _usersqueriesservice.UsersQueries,
55
51
  _adminusersmanagerservice.AdminUsersManager,
56
52
  _adminusersqueriesservice.AdminUsersQueries,
57
- _authmanagerservice.AuthManager,
53
+ _authservice.AuthManager,
58
54
  _jwt.JwtService,
59
- _authmethodtwofaservice.AuthMethod2FA,
55
+ _authprovidertwofaservice.AuthProvider2FA,
60
56
  {
61
57
  provide: _notificationsmanagerservice.NotificationsManager,
62
58
  useValue: {}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/users/users.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 { ConfigModule } from '@nestjs/config'\nimport { JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { AuthManager } from '../../authentication/services/auth-manager.service'\nimport { AuthMethod2FA } from '../../authentication/services/auth-methods/auth-method-two-fa.service'\nimport { exportConfiguration } from '../../configuration/config.environment'\nimport { Cache } from '../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../infrastructure/database/constants'\nimport { NotificationsManager } from '../notifications/services/notifications-manager.service'\nimport { UserModel } from './models/user.model'\nimport { AdminUsersManager } from './services/admin-users-manager.service'\nimport { AdminUsersQueries } from './services/admin-users-queries.service'\nimport { UsersManager } from './services/users-manager.service'\nimport { UsersQueries } from './services/users-queries.service'\nimport { UsersController } from './users.controller'\nimport { generateUserTest } from './utils/test'\n\ndescribe(UsersController.name, () => {\n let module: TestingModule\n let userController: UsersController\n let usersQueries: UsersQueries\n let adminUsersManager: AdminUsersManager\n let userTest: UserModel\n\n beforeAll(async () => {\n module = await Test.createTestingModule({\n imports: [await ConfigModule.forRoot({ load: [exportConfiguration], isGlobal: true })],\n controllers: [UsersController],\n providers: [\n { provide: DB_TOKEN_PROVIDER, useValue: {} },\n {\n provide: Cache,\n useValue: {}\n },\n UsersManager,\n UsersQueries,\n AdminUsersManager,\n AdminUsersQueries,\n AuthManager,\n JwtService,\n AuthMethod2FA,\n { provide: NotificationsManager, useValue: {} }\n ]\n }).compile()\n userController = module.get<UsersController>(UsersController)\n usersQueries = module.get<UsersQueries>(UsersQueries)\n adminUsersManager = module.get<AdminUsersManager>(AdminUsersManager)\n userTest = new UserModel(generateUserTest())\n })\n\n afterAll(async () => {\n await expect(adminUsersManager.deleteUserSpace(userTest.login)).resolves.not.toThrow()\n await module.close()\n })\n\n it('should be defined', () => {\n expect(userController).toBeDefined()\n expect(usersQueries).toBeDefined()\n expect(userTest).toBeDefined()\n })\n\n it('should get the user profile', async () => {\n usersQueries.from = jest.fn().mockReturnValue(userTest)\n const profile = await userController.me(userTest)\n expect(usersQueries.from).toHaveBeenCalled()\n expect(profile.user).toBeInstanceOf(UserModel)\n expect(profile.user.login).toBe(userTest.login)\n })\n\n it('should not generate the user avatar stream', async () => {\n usersQueries.from = jest.fn().mockReturnValueOnce(null)\n await expect(userController.genAvatar(userTest)).rejects.toThrow('does not exist')\n })\n})\n"],"names":["describe","UsersController","name","module","userController","usersQueries","adminUsersManager","userTest","beforeAll","Test","createTestingModule","imports","ConfigModule","forRoot","load","exportConfiguration","isGlobal","controllers","providers","provide","DB_TOKEN_PROVIDER","useValue","Cache","UsersManager","UsersQueries","AdminUsersManager","AdminUsersQueries","AuthManager","JwtService","AuthMethod2FA","NotificationsManager","compile","get","UserModel","generateUserTest","afterAll","expect","deleteUserSpace","login","resolves","not","toThrow","close","it","toBeDefined","from","jest","fn","mockReturnValue","profile","me","toHaveBeenCalled","user","toBeInstanceOf","toBe","mockReturnValueOnce","genAvatar","rejects"],"mappings":"AAAA;;;;CAIC;;;;wBAE4B;qBACF;yBACS;oCACR;wCACE;mCACM;8BACd;2BACY;6CACG;2BACX;0CACQ;0CACA;qCACL;qCACA;iCACG;sBACC;AAEjCA,SAASC,gCAAe,CAACC,IAAI,EAAE;IAC7B,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJC,UAAU;QACRL,SAAS,MAAMM,aAAI,CAACC,mBAAmB,CAAC;YACtCC,SAAS;gBAAC,MAAMC,oBAAY,CAACC,OAAO,CAAC;oBAAEC,MAAM;wBAACC,sCAAmB;qBAAC;oBAAEC,UAAU;gBAAK;aAAG;YACtFC,aAAa;gBAAChB,gCAAe;aAAC;YAC9BiB,WAAW;gBACT;oBAAEC,SAASC,4BAAiB;oBAAEC,UAAU,CAAC;gBAAE;gBAC3C;oBACEF,SAASG,mBAAK;oBACdD,UAAU,CAAC;gBACb;gBACAE,iCAAY;gBACZC,iCAAY;gBACZC,2CAAiB;gBACjBC,2CAAiB;gBACjBC,+BAAW;gBACXC,eAAU;gBACVC,qCAAa;gBACb;oBAAEV,SAASW,iDAAoB;oBAAET,UAAU,CAAC;gBAAE;aAC/C;QACH,GAAGU,OAAO;QACV3B,iBAAiBD,OAAO6B,GAAG,CAAkB/B,gCAAe;QAC5DI,eAAeF,OAAO6B,GAAG,CAAeR,iCAAY;QACpDlB,oBAAoBH,OAAO6B,GAAG,CAAoBP,2CAAiB;QACnElB,WAAW,IAAI0B,oBAAS,CAACC,IAAAA,sBAAgB;IAC3C;IAEAC,SAAS;QACP,MAAMC,OAAO9B,kBAAkB+B,eAAe,CAAC9B,SAAS+B,KAAK,GAAGC,QAAQ,CAACC,GAAG,CAACC,OAAO;QACpF,MAAMtC,OAAOuC,KAAK;IACpB;IAEAC,GAAG,qBAAqB;QACtBP,OAAOhC,gBAAgBwC,WAAW;QAClCR,OAAO/B,cAAcuC,WAAW;QAChCR,OAAO7B,UAAUqC,WAAW;IAC9B;IAEAD,GAAG,+BAA+B;QAChCtC,aAAawC,IAAI,GAAGC,KAAKC,EAAE,GAAGC,eAAe,CAACzC;QAC9C,MAAM0C,UAAU,MAAM7C,eAAe8C,EAAE,CAAC3C;QACxC6B,OAAO/B,aAAawC,IAAI,EAAEM,gBAAgB;QAC1Cf,OAAOa,QAAQG,IAAI,EAAEC,cAAc,CAACpB,oBAAS;QAC7CG,OAAOa,QAAQG,IAAI,CAACd,KAAK,EAAEgB,IAAI,CAAC/C,SAAS+B,KAAK;IAChD;IAEAK,GAAG,8CAA8C;QAC/CtC,aAAawC,IAAI,GAAGC,KAAKC,EAAE,GAAGQ,mBAAmB,CAAC;QAClD,MAAMnB,OAAOhC,eAAeoD,SAAS,CAACjD,WAAWkD,OAAO,CAAChB,OAAO,CAAC;IACnE;AACF"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/users/users.controller.spec.ts"],"sourcesContent":["import { ConfigModule } from '@nestjs/config'\nimport { JwtService } from '@nestjs/jwt'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { AuthManager } from '../../authentication/auth.service'\nimport { AuthProvider2FA } from '../../authentication/providers/two-fa/auth-provider-two-fa.service'\nimport { exportConfiguration } from '../../configuration/config.environment'\nimport { Cache } from '../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../infrastructure/database/constants'\nimport { NotificationsManager } from '../notifications/services/notifications-manager.service'\nimport { UserModel } from './models/user.model'\nimport { AdminUsersManager } from './services/admin-users-manager.service'\nimport { AdminUsersQueries } from './services/admin-users-queries.service'\nimport { UsersManager } from './services/users-manager.service'\nimport { UsersQueries } from './services/users-queries.service'\nimport { UsersController } from './users.controller'\nimport { generateUserTest } from './utils/test'\n\ndescribe(UsersController.name, () => {\n let module: TestingModule\n let userController: UsersController\n let usersQueries: UsersQueries\n let adminUsersManager: AdminUsersManager\n let userTest: UserModel\n\n beforeAll(async () => {\n module = await Test.createTestingModule({\n imports: [await ConfigModule.forRoot({ load: [exportConfiguration], isGlobal: true })],\n controllers: [UsersController],\n providers: [\n { provide: DB_TOKEN_PROVIDER, useValue: {} },\n {\n provide: Cache,\n useValue: {}\n },\n UsersManager,\n UsersQueries,\n AdminUsersManager,\n AdminUsersQueries,\n AuthManager,\n JwtService,\n AuthProvider2FA,\n { provide: NotificationsManager, useValue: {} }\n ]\n }).compile()\n userController = module.get<UsersController>(UsersController)\n usersQueries = module.get<UsersQueries>(UsersQueries)\n adminUsersManager = module.get<AdminUsersManager>(AdminUsersManager)\n userTest = new UserModel(generateUserTest())\n })\n\n afterAll(async () => {\n await expect(adminUsersManager.deleteUserSpace(userTest.login)).resolves.not.toThrow()\n await module.close()\n })\n\n it('should be defined', () => {\n expect(userController).toBeDefined()\n expect(usersQueries).toBeDefined()\n expect(userTest).toBeDefined()\n })\n\n it('should get the user profile', async () => {\n usersQueries.from = jest.fn().mockReturnValue(userTest)\n const profile = await userController.me(userTest)\n expect(usersQueries.from).toHaveBeenCalled()\n expect(profile.user).toBeInstanceOf(UserModel)\n expect(profile.user.login).toBe(userTest.login)\n })\n\n it('should not generate the user avatar stream', async () => {\n usersQueries.from = jest.fn().mockReturnValueOnce(null)\n await expect(userController.genAvatar(userTest)).rejects.toThrow('does not exist')\n })\n})\n"],"names":["describe","UsersController","name","module","userController","usersQueries","adminUsersManager","userTest","beforeAll","Test","createTestingModule","imports","ConfigModule","forRoot","load","exportConfiguration","isGlobal","controllers","providers","provide","DB_TOKEN_PROVIDER","useValue","Cache","UsersManager","UsersQueries","AdminUsersManager","AdminUsersQueries","AuthManager","JwtService","AuthProvider2FA","NotificationsManager","compile","get","UserModel","generateUserTest","afterAll","expect","deleteUserSpace","login","resolves","not","toThrow","close","it","toBeDefined","from","jest","fn","mockReturnValue","profile","me","toHaveBeenCalled","user","toBeInstanceOf","toBe","mockReturnValueOnce","genAvatar","rejects"],"mappings":";;;;wBAA6B;qBACF;yBACS;6BACR;0CACI;mCACI;8BACd;2BACY;6CACG;2BACX;0CACQ;0CACA;qCACL;qCACA;iCACG;sBACC;AAEjCA,SAASC,gCAAe,CAACC,IAAI,EAAE;IAC7B,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJC,UAAU;QACRL,SAAS,MAAMM,aAAI,CAACC,mBAAmB,CAAC;YACtCC,SAAS;gBAAC,MAAMC,oBAAY,CAACC,OAAO,CAAC;oBAAEC,MAAM;wBAACC,sCAAmB;qBAAC;oBAAEC,UAAU;gBAAK;aAAG;YACtFC,aAAa;gBAAChB,gCAAe;aAAC;YAC9BiB,WAAW;gBACT;oBAAEC,SAASC,4BAAiB;oBAAEC,UAAU,CAAC;gBAAE;gBAC3C;oBACEF,SAASG,mBAAK;oBACdD,UAAU,CAAC;gBACb;gBACAE,iCAAY;gBACZC,iCAAY;gBACZC,2CAAiB;gBACjBC,2CAAiB;gBACjBC,wBAAW;gBACXC,eAAU;gBACVC,yCAAe;gBACf;oBAAEV,SAASW,iDAAoB;oBAAET,UAAU,CAAC;gBAAE;aAC/C;QACH,GAAGU,OAAO;QACV3B,iBAAiBD,OAAO6B,GAAG,CAAkB/B,gCAAe;QAC5DI,eAAeF,OAAO6B,GAAG,CAAeR,iCAAY;QACpDlB,oBAAoBH,OAAO6B,GAAG,CAAoBP,2CAAiB;QACnElB,WAAW,IAAI0B,oBAAS,CAACC,IAAAA,sBAAgB;IAC3C;IAEAC,SAAS;QACP,MAAMC,OAAO9B,kBAAkB+B,eAAe,CAAC9B,SAAS+B,KAAK,GAAGC,QAAQ,CAACC,GAAG,CAACC,OAAO;QACpF,MAAMtC,OAAOuC,KAAK;IACpB;IAEAC,GAAG,qBAAqB;QACtBP,OAAOhC,gBAAgBwC,WAAW;QAClCR,OAAO/B,cAAcuC,WAAW;QAChCR,OAAO7B,UAAUqC,WAAW;IAC9B;IAEAD,GAAG,+BAA+B;QAChCtC,aAAawC,IAAI,GAAGC,KAAKC,EAAE,GAAGC,eAAe,CAACzC;QAC9C,MAAM0C,UAAU,MAAM7C,eAAe8C,EAAE,CAAC3C;QACxC6B,OAAO/B,aAAawC,IAAI,EAAEM,gBAAgB;QAC1Cf,OAAOa,QAAQG,IAAI,EAAEC,cAAc,CAACpB,oBAAS;QAC7CG,OAAOa,QAAQG,IAAI,CAACd,KAAK,EAAEgB,IAAI,CAAC/C,SAAS+B,KAAK;IAChD;IAEAK,GAAG,8CAA8C;QAC/CtC,aAAawC,IAAI,GAAGC,KAAKC,EAAE,GAAGQ,mBAAmB,CAAC;QAClD,MAAMnB,OAAOhC,eAAeoD,SAAS,CAACjD,WAAWkD,OAAO,CAAChB,OAAO,CAAC;IACnE;AACF"}
@@ -1,13 +1,9 @@
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
  });
9
5
  const _appbootstrap = require("../../app.bootstrap");
10
- const _authmanagerservice = require("../../authentication/services/auth-manager.service");
6
+ const _authservice = require("../../authentication/auth.service");
11
7
  const _utils = require("../../infrastructure/database/utils");
12
8
  const _routes = require("./constants/routes");
13
9
  const _user = require("./constants/user");
@@ -24,7 +20,7 @@ describe('Users (e2e)', ()=>{
24
20
  app = await (0, _appbootstrap.appBootstrap)();
25
21
  await app.init();
26
22
  await app.getHttpAdapter().getInstance().ready();
27
- authManager = app.get(_authmanagerservice.AuthManager);
23
+ authManager = app.get(_authservice.AuthManager);
28
24
  adminUsersManager = app.get(_adminusersmanagerservice.AdminUsersManager);
29
25
  userTest = new _usermodel.UserModel((0, _test.generateUserTest)(false), false);
30
26
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/users/users.e2e-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 { NestFastifyApplication } from '@nestjs/platform-fastify'\nimport { appBootstrap } from '../../app.bootstrap'\nimport { TokenResponseDto } from '../../authentication/dto/token-response.dto'\nimport { AuthManager } from '../../authentication/services/auth-manager.service'\nimport { dbCheckConnection } from '../../infrastructure/database/utils'\nimport { API_USERS_AVATAR, API_USERS_ME } from './constants/routes'\nimport { USER_ROLE } from './constants/user'\nimport { DeleteUserDto } from './dto/delete-user.dto'\nimport { UserModel } from './models/user.model'\nimport { AdminUsersManager } from './services/admin-users-manager.service'\nimport { generateUserTest } from './utils/test'\n\ndescribe('Users (e2e)', () => {\n let app: NestFastifyApplication\n let authManager: AuthManager\n let adminUsersManager: AdminUsersManager\n let userTest: UserModel\n let tokens: TokenResponseDto\n\n beforeAll(async () => {\n app = await appBootstrap()\n await app.init()\n await app.getHttpAdapter().getInstance().ready()\n authManager = app.get<AuthManager>(AuthManager)\n adminUsersManager = app.get<AdminUsersManager>(AdminUsersManager)\n userTest = new UserModel(generateUserTest(false), false)\n })\n\n afterAll(async () => {\n await expect(\n adminUsersManager.deleteUserOrGuest(userTest.id, userTest.login, { deleteSpace: true, isGuest: false } satisfies DeleteUserDto)\n ).resolves.not.toThrow()\n await app.close()\n })\n\n it('should be defined', () => {\n expect(authManager).toBeDefined()\n expect(adminUsersManager).toBeDefined()\n expect(userTest).toBeDefined()\n })\n\n it('should get the database connection', async () => {\n expect(await dbCheckConnection(app)).toBe(true)\n })\n\n it(`GET ${API_USERS_ME} => 401`, async () => {\n const res = await app.inject({\n method: 'GET',\n url: API_USERS_ME\n })\n expect(res.statusCode).toEqual(401)\n })\n\n it(`GET ${API_USERS_ME} => 200`, async () => {\n userTest = await adminUsersManager.createUserOrGuest(userTest, USER_ROLE.USER)\n expect(userTest.id).toBeDefined()\n tokens = await authManager.getTokens(userTest)\n const res = await app.inject({\n method: 'GET',\n url: API_USERS_ME,\n headers: { authorization: `Bearer ${tokens.access}` }\n })\n expect(res.statusCode).toEqual(200)\n const content = res.json()\n expect(content.user).toBeDefined()\n expect(content.user.id).toBe(userTest.id)\n })\n\n it(`GET ${API_USERS_AVATAR} => 200`, async () => {\n const res1 = await app.inject({\n method: 'GET',\n url: `${API_USERS_AVATAR}/me`,\n headers: { authorization: `Bearer ${tokens.access}` }\n })\n const res2 = await app.inject({\n method: 'GET',\n url: `${API_USERS_AVATAR}/${userTest.login}`,\n headers: { authorization: `Bearer ${tokens.access}` }\n })\n for (const res of [res1, res2]) {\n expect(res.statusCode).toEqual(200)\n expect(res.rawPayload).toBeInstanceOf(Buffer)\n expect(res.rawPayload.byteLength).toBeGreaterThan(1)\n }\n expect((res1.raw.req as any).user).toBe((res2.raw.req as any).user)\n expect(res1.rawPayload.byteLength).toEqual(res2.rawPayload.byteLength)\n })\n})\n"],"names":["describe","app","authManager","adminUsersManager","userTest","tokens","beforeAll","appBootstrap","init","getHttpAdapter","getInstance","ready","get","AuthManager","AdminUsersManager","UserModel","generateUserTest","afterAll","expect","deleteUserOrGuest","id","login","deleteSpace","isGuest","resolves","not","toThrow","close","it","toBeDefined","dbCheckConnection","toBe","API_USERS_ME","res","inject","method","url","statusCode","toEqual","createUserOrGuest","USER_ROLE","USER","getTokens","headers","authorization","access","content","json","user","API_USERS_AVATAR","res1","res2","rawPayload","toBeInstanceOf","Buffer","byteLength","toBeGreaterThan","raw","req"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/users/users.e2e-spec.ts"],"sourcesContent":["import { NestFastifyApplication } from '@nestjs/platform-fastify'\nimport { appBootstrap } from '../../app.bootstrap'\nimport { AuthManager } from '../../authentication/auth.service'\nimport { TokenResponseDto } from '../../authentication/dto/token-response.dto'\nimport { dbCheckConnection } from '../../infrastructure/database/utils'\nimport { API_USERS_AVATAR, API_USERS_ME } from './constants/routes'\nimport { USER_ROLE } from './constants/user'\nimport { DeleteUserDto } from './dto/delete-user.dto'\nimport { UserModel } from './models/user.model'\nimport { AdminUsersManager } from './services/admin-users-manager.service'\nimport { generateUserTest } from './utils/test'\n\ndescribe('Users (e2e)', () => {\n let app: NestFastifyApplication\n let authManager: AuthManager\n let adminUsersManager: AdminUsersManager\n let userTest: UserModel\n let tokens: TokenResponseDto\n\n beforeAll(async () => {\n app = await appBootstrap()\n await app.init()\n await app.getHttpAdapter().getInstance().ready()\n authManager = app.get<AuthManager>(AuthManager)\n adminUsersManager = app.get<AdminUsersManager>(AdminUsersManager)\n userTest = new UserModel(generateUserTest(false), false)\n })\n\n afterAll(async () => {\n await expect(\n adminUsersManager.deleteUserOrGuest(userTest.id, userTest.login, { deleteSpace: true, isGuest: false } satisfies DeleteUserDto)\n ).resolves.not.toThrow()\n await app.close()\n })\n\n it('should be defined', () => {\n expect(authManager).toBeDefined()\n expect(adminUsersManager).toBeDefined()\n expect(userTest).toBeDefined()\n })\n\n it('should get the database connection', async () => {\n expect(await dbCheckConnection(app)).toBe(true)\n })\n\n it(`GET ${API_USERS_ME} => 401`, async () => {\n const res = await app.inject({\n method: 'GET',\n url: API_USERS_ME\n })\n expect(res.statusCode).toEqual(401)\n })\n\n it(`GET ${API_USERS_ME} => 200`, async () => {\n userTest = await adminUsersManager.createUserOrGuest(userTest, USER_ROLE.USER)\n expect(userTest.id).toBeDefined()\n tokens = await authManager.getTokens(userTest)\n const res = await app.inject({\n method: 'GET',\n url: API_USERS_ME,\n headers: { authorization: `Bearer ${tokens.access}` }\n })\n expect(res.statusCode).toEqual(200)\n const content = res.json()\n expect(content.user).toBeDefined()\n expect(content.user.id).toBe(userTest.id)\n })\n\n it(`GET ${API_USERS_AVATAR} => 200`, async () => {\n const res1 = await app.inject({\n method: 'GET',\n url: `${API_USERS_AVATAR}/me`,\n headers: { authorization: `Bearer ${tokens.access}` }\n })\n const res2 = await app.inject({\n method: 'GET',\n url: `${API_USERS_AVATAR}/${userTest.login}`,\n headers: { authorization: `Bearer ${tokens.access}` }\n })\n for (const res of [res1, res2]) {\n expect(res.statusCode).toEqual(200)\n expect(res.rawPayload).toBeInstanceOf(Buffer)\n expect(res.rawPayload.byteLength).toBeGreaterThan(1)\n }\n expect((res1.raw.req as any).user).toBe((res2.raw.req as any).user)\n expect(res1.rawPayload.byteLength).toEqual(res2.rawPayload.byteLength)\n })\n})\n"],"names":["describe","app","authManager","adminUsersManager","userTest","tokens","beforeAll","appBootstrap","init","getHttpAdapter","getInstance","ready","get","AuthManager","AdminUsersManager","UserModel","generateUserTest","afterAll","expect","deleteUserOrGuest","id","login","deleteSpace","isGuest","resolves","not","toThrow","close","it","toBeDefined","dbCheckConnection","toBe","API_USERS_ME","res","inject","method","url","statusCode","toEqual","createUserOrGuest","USER_ROLE","USER","getTokens","headers","authorization","access","content","json","user","API_USERS_AVATAR","res1","res2","rawPayload","toBeInstanceOf","Buffer","byteLength","toBeGreaterThan","raw","req"],"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
  });
@@ -48,22 +44,40 @@ let WebSocketUsers = class WebSocketUsers {
48
44
  async handleConnection(socket) {
49
45
  if (this.shuttingDown) return;
50
46
  socket.join(`${_websocket.USER_ROOM_PREFIX}${socket.user.id}`);
51
- this.sendOnlineUser(socket.user, parseInt(socket.handshake.query.onlineStatus || '0')).catch((e)=>this.logger.error(`${this.handleConnection.name} - ${e}`));
52
- this.sendAllOnlineUsers(socket.user.id).catch((e)=>this.logger.error(`${this.handleConnection.name} - ${e}`));
53
- this.logger.log(`Connected: *${socket.user.login}* (${socket.user.id}) [${socket.id}] ${(0, _utils.getClientAddress)(socket)} ${socket.handshake.headers['user-agent']}`);
47
+ this.sendOnlineUser(socket.user, parseInt(socket.handshake.query.onlineStatus || '0')).catch((e)=>this.logger.error({
48
+ tag: this.handleConnection.name,
49
+ msg: `${e}`
50
+ }));
51
+ this.sendAllOnlineUsers(socket.user.id).catch((e)=>this.logger.error({
52
+ tag: this.handleConnection.name,
53
+ msg: `${e}`
54
+ }));
55
+ this.logger.log({
56
+ tag: this.handleConnection.name,
57
+ msg: `Connected: *${socket.user.login}* (${socket.user.id}) [${socket.id}] ${(0, _utils.getClientAddress)(socket)} ${socket.handshake.headers['user-agent']}`
58
+ });
54
59
  }
55
60
  async handleDisconnect(socket) {
56
61
  if (this.shuttingDown) return;
57
62
  socket.leave(`${_websocket.USER_ROOM_PREFIX}${socket.user.id}`);
58
- this.sendOfflineUser(socket.user.id).catch((e)=>this.logger.error(`${this.handleDisconnect.name} - ${e}`));
59
- this.logger.log(`Disconnected: *${socket.user.login}* (${socket.user.id}) [${socket.id}] ${(0, _utils.getClientAddress)(socket)} ${socket.handshake.headers['user-agent']}`);
63
+ this.sendOfflineUser(socket.user.id).catch((e)=>this.logger.error({
64
+ tag: this.handleDisconnect.name,
65
+ msg: `${e}`
66
+ }));
67
+ this.logger.log({
68
+ tag: this.handleDisconnect.name,
69
+ msg: `Disconnected: *${socket.user.login}* (${socket.user.id}) [${socket.id}] ${(0, _utils.getClientAddress)(socket)} ${socket.handshake.headers['user-agent']}`
70
+ });
60
71
  }
61
72
  setOnlineStatus(user, body) {
62
73
  if (body.store) {
63
74
  // store in db
64
75
  this.usersManager.setOnlineStatus(user, body.status);
65
76
  }
66
- this.sendOnlineStatus(user.id, body.status).catch((e)=>this.logger.error(`${this.setOnlineStatus.name} - ${e}`));
77
+ this.sendOnlineStatus(user.id, body.status).catch((e)=>this.logger.error({
78
+ tag: this.setOnlineStatus.name,
79
+ msg: `${e}`
80
+ }));
67
81
  }
68
82
  sendMessageToUsers(userIds, eventName, body) {
69
83
  if (userIds.length) {
@@ -96,7 +110,10 @@ let WebSocketUsers = class WebSocketUsers {
96
110
  await (0, _functions.sleep)(this.waitTime);
97
111
  // check if user room is empty before send event
98
112
  if ((await this.getOnlineUserIds()).indexOf(userId) === -1) {
99
- this.sendOnlineStatus(userId, _user.USER_ONLINE_STATUS.OFFLINE).catch((e)=>this.logger.error(`${this.sendOfflineUser.name} - ${e}`));
113
+ this.sendOnlineStatus(userId, _user.USER_ONLINE_STATUS.OFFLINE).catch((e)=>this.logger.error({
114
+ tag: this.sendOfflineUser.name,
115
+ msg: `${e}`
116
+ }));
100
117
  }
101
118
  }
102
119
  async sendAllOnlineUsers(toUserId) {