@sync-in/server 1.5.2 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +2 -1
  3. package/environment/environment.dist.min.yaml +1 -0
  4. package/environment/environment.dist.yaml +88 -30
  5. package/migrations/0002_sleepy_korath.sql +1 -0
  6. package/migrations/meta/0002_snapshot.json +2424 -0
  7. package/migrations/meta/_journal.json +7 -0
  8. package/package.json +14 -12
  9. package/server/app.bootstrap.js +1 -1
  10. package/server/app.bootstrap.js.map +1 -1
  11. package/server/applications/files/services/files-manager.service.js +1 -2
  12. package/server/applications/files/services/files-manager.service.js.map +1 -1
  13. package/server/applications/files/services/files-only-office-manager.service.js +5 -6
  14. package/server/applications/files/services/files-only-office-manager.service.js.map +1 -1
  15. package/server/applications/files/utils/files.js +6 -4
  16. package/server/applications/files/utils/files.js.map +1 -1
  17. package/server/applications/links/links.controller.js +2 -2
  18. package/server/applications/links/links.controller.js.map +1 -1
  19. package/server/applications/links/services/links-manager.service.js +2 -1
  20. package/server/applications/links/services/links-manager.service.js.map +1 -1
  21. package/server/applications/links/services/links-manager.service.spec.js +6 -3
  22. package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
  23. package/server/applications/notifications/constants/notifications.js +9 -0
  24. package/server/applications/notifications/constants/notifications.js.map +1 -1
  25. package/server/applications/notifications/i18n/fr.js +10 -1
  26. package/server/applications/notifications/i18n/fr.js.map +1 -1
  27. package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
  28. package/server/applications/notifications/mails/models.js +41 -3
  29. package/server/applications/notifications/mails/models.js.map +1 -1
  30. package/server/applications/notifications/mails/templates.js +1 -1
  31. package/server/applications/notifications/mails/templates.js.map +1 -1
  32. package/server/applications/notifications/schemas/notifications.schema.js +2 -1
  33. package/server/applications/notifications/schemas/notifications.schema.js.map +1 -1
  34. package/server/applications/notifications/services/notifications-manager.service.js +16 -13
  35. package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
  36. package/server/applications/notifications/services/notifications-manager.service.spec.js +9 -8
  37. package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
  38. package/server/applications/notifications/services/notifications-queries.service.js +1 -1
  39. package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
  40. package/server/applications/shares/services/shares-manager.service.js +3 -2
  41. package/server/applications/shares/services/shares-manager.service.js.map +1 -1
  42. package/server/applications/sync/constants/auth.js +2 -2
  43. package/server/applications/sync/constants/auth.js.map +1 -1
  44. package/server/applications/sync/dtos/sync-client-registration.dto.js +5 -0
  45. package/server/applications/sync/dtos/sync-client-registration.dto.js.map +1 -1
  46. package/server/applications/sync/dtos/sync-operations.dto.js +1 -2
  47. package/server/applications/sync/dtos/sync-operations.dto.js.map +1 -1
  48. package/server/applications/sync/schemas/sync-clients.schema.js +2 -1
  49. package/server/applications/sync/schemas/sync-clients.schema.js.map +1 -1
  50. package/server/applications/sync/schemas/sync-paths.schema.js +2 -1
  51. package/server/applications/sync/schemas/sync-paths.schema.js.map +1 -1
  52. package/server/applications/sync/services/sync-clients-manager.service.js +28 -20
  53. package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
  54. package/server/applications/sync/services/sync-clients-manager.service.spec.js +24 -18
  55. package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
  56. package/server/applications/sync/services/sync-queries.service.js +5 -5
  57. package/server/applications/sync/services/sync-queries.service.js.map +1 -1
  58. package/server/applications/users/admin-users.controller.js +48 -37
  59. package/server/applications/users/admin-users.controller.js.map +1 -1
  60. package/server/applications/users/admin-users.controller.spec.js +15 -0
  61. package/server/applications/users/admin-users.controller.spec.js.map +1 -1
  62. package/server/applications/users/constants/routes.js +5 -0
  63. package/server/applications/users/constants/routes.js.map +1 -1
  64. package/server/applications/users/constants/user.js +8 -0
  65. package/server/applications/users/constants/user.js.map +1 -1
  66. package/server/applications/users/dto/delete-user.dto.js +5 -23
  67. package/server/applications/users/dto/delete-user.dto.js.map +1 -1
  68. package/server/applications/users/dto/user-properties.dto.js +38 -3
  69. package/server/applications/users/dto/user-properties.dto.js.map +1 -1
  70. package/server/applications/users/interfaces/admin-user.interface.js.map +1 -1
  71. package/server/applications/users/interfaces/user-secrets.interface.js +10 -0
  72. package/server/applications/users/interfaces/user-secrets.interface.js.map +1 -0
  73. package/server/applications/users/models/user.model.js +84 -50
  74. package/server/applications/users/models/user.model.js.map +1 -1
  75. package/server/applications/users/schemas/user.interface.js.map +1 -1
  76. package/server/applications/users/schemas/users.schema.js +2 -0
  77. package/server/applications/users/schemas/users.schema.js.map +1 -1
  78. package/server/applications/users/services/admin-users-manager.service.js +7 -19
  79. package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
  80. package/server/applications/users/services/admin-users-manager.service.spec.js +7 -26
  81. package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
  82. package/server/applications/users/services/admin-users-queries.service.js +1 -0
  83. package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
  84. package/server/applications/users/services/users-manager.service.js +138 -28
  85. package/server/applications/users/services/users-manager.service.js.map +1 -1
  86. package/server/applications/users/services/users-manager.service.spec.js +11 -9
  87. package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
  88. package/server/applications/users/services/users-queries.service.js +63 -57
  89. package/server/applications/users/services/users-queries.service.js.map +1 -1
  90. package/server/applications/users/users.controller.js +48 -1
  91. package/server/applications/users/users.controller.js.map +1 -1
  92. package/server/applications/users/users.controller.spec.js +8 -1
  93. package/server/applications/users/users.controller.spec.js.map +1 -1
  94. package/server/applications/users/users.e2e-spec.js +2 -1
  95. package/server/applications/users/users.e2e-spec.js.map +1 -1
  96. package/server/applications/users/utils/avatar.js +48 -0
  97. package/server/applications/users/utils/avatar.js.map +1 -0
  98. package/server/authentication/auth.config.js +89 -26
  99. package/server/authentication/auth.config.js.map +1 -1
  100. package/server/authentication/auth.controller.js +117 -9
  101. package/server/authentication/auth.controller.js.map +1 -1
  102. package/server/authentication/auth.controller.spec.js +16 -1
  103. package/server/authentication/auth.controller.spec.js.map +1 -1
  104. package/server/authentication/auth.e2e-spec.js +4 -3
  105. package/server/authentication/auth.e2e-spec.js.map +1 -1
  106. package/server/authentication/auth.module.js +4 -1
  107. package/server/authentication/auth.module.js.map +1 -1
  108. package/server/authentication/constants/auth-ldap.js +44 -0
  109. package/server/authentication/constants/auth-ldap.js.map +1 -0
  110. package/server/authentication/constants/auth.js +37 -4
  111. package/server/authentication/constants/auth.js.map +1 -1
  112. package/server/authentication/constants/routes.js +21 -0
  113. package/server/authentication/constants/routes.js.map +1 -1
  114. package/server/authentication/constants/scope.js +20 -0
  115. package/server/authentication/constants/scope.js.map +1 -0
  116. package/server/authentication/dto/login-response.dto.js +27 -4
  117. package/server/authentication/dto/login-response.dto.js.map +1 -1
  118. package/server/authentication/dto/token-response.dto.js +5 -0
  119. package/server/authentication/dto/token-response.dto.js.map +1 -1
  120. package/server/{applications/users/dto/user-password.dto.js → authentication/dto/two-fa-verify.dto.js} +27 -9
  121. package/server/authentication/dto/two-fa-verify.dto.js.map +1 -0
  122. package/server/authentication/guards/auth-basic.strategy.js +6 -5
  123. package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
  124. package/server/authentication/guards/auth-token-access.strategy.js +3 -2
  125. package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
  126. package/server/authentication/guards/auth-token-refresh.strategy.js +3 -2
  127. package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
  128. package/server/authentication/guards/auth-two-fa-guard.js +81 -0
  129. package/server/authentication/guards/auth-two-fa-guard.js.map +1 -0
  130. package/server/authentication/interfaces/jwt-payload.interface.js +5 -0
  131. package/server/authentication/interfaces/jwt-payload.interface.js.map +1 -1
  132. package/server/authentication/interfaces/token.interface.js +2 -0
  133. package/server/authentication/interfaces/token.interface.js.map +1 -1
  134. package/server/authentication/interfaces/two-fa-setup.interface.js +10 -0
  135. package/server/authentication/interfaces/two-fa-setup.interface.js.map +1 -0
  136. package/server/authentication/models/auth-method.js.map +1 -1
  137. package/server/authentication/services/auth-manager.service.js +72 -49
  138. package/server/authentication/services/auth-manager.service.js.map +1 -1
  139. package/server/authentication/services/auth-methods/auth-method-database.service.js +3 -3
  140. package/server/authentication/services/auth-methods/auth-method-database.service.js.map +1 -1
  141. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js +5 -0
  142. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +1 -1
  143. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +151 -66
  144. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +1 -1
  145. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +52 -50
  146. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +1 -1
  147. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js +251 -0
  148. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +1 -0
  149. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js +41 -0
  150. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +1 -0
  151. package/server/authentication/utils/crypt-secret.js +68 -0
  152. package/server/authentication/utils/crypt-secret.js.map +1 -0
  153. package/server/common/functions.js +18 -2
  154. package/server/common/functions.js.map +1 -1
  155. package/server/common/qrcode.js +34 -0
  156. package/server/common/qrcode.js.map +1 -0
  157. package/server/common/shared.js +18 -0
  158. package/server/common/shared.js.map +1 -1
  159. package/server/configuration/config.environment.js +23 -6
  160. package/server/configuration/config.environment.js.map +1 -1
  161. package/server/configuration/config.interfaces.js +10 -0
  162. package/server/configuration/config.interfaces.js.map +1 -0
  163. package/server/configuration/config.loader.js.map +1 -1
  164. package/server/configuration/config.validation.js +13 -13
  165. package/server/configuration/config.validation.js.map +1 -1
  166. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +6 -6
  167. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
  168. package/server/infrastructure/cache/schemas/mysql-cache.schema.js +2 -1
  169. package/server/infrastructure/cache/schemas/mysql-cache.schema.js.map +1 -1
  170. package/server/infrastructure/cache/services/cache.service.js.map +1 -1
  171. package/server/infrastructure/database/columns.js +39 -0
  172. package/server/infrastructure/database/columns.js.map +1 -0
  173. package/server/infrastructure/database/database.config.js +0 -1
  174. package/server/infrastructure/database/database.config.js.map +1 -1
  175. package/server/infrastructure/mailer/interfaces/mail.interface.js.map +1 -1
  176. package/server/infrastructure/mailer/mailer.config.js +12 -0
  177. package/server/infrastructure/mailer/mailer.config.js.map +1 -1
  178. package/server/infrastructure/mailer/mailer.service.js +2 -1
  179. package/server/infrastructure/mailer/mailer.service.js.map +1 -1
  180. package/static/assets/mimes/text-x-c.svg +1 -0
  181. package/static/assets/pdfjs/build/pdf.mjs +2522 -914
  182. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  183. package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
  184. package/static/assets/pdfjs/build/pdf.worker.mjs +1024 -566
  185. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  186. package/static/assets/pdfjs/version +1 -1
  187. package/static/assets/pdfjs/web/debugger.mjs +116 -37
  188. package/static/assets/pdfjs/web/images/comment-popup-editButton.svg +5 -0
  189. package/static/assets/pdfjs/web/locale/ach/viewer.ftl +0 -12
  190. package/static/assets/pdfjs/web/locale/af/viewer.ftl +0 -12
  191. package/static/assets/pdfjs/web/locale/an/viewer.ftl +0 -16
  192. package/static/assets/pdfjs/web/locale/ar/viewer.ftl +0 -32
  193. package/static/assets/pdfjs/web/locale/ast/viewer.ftl +0 -19
  194. package/static/assets/pdfjs/web/locale/az/viewer.ftl +0 -16
  195. package/static/assets/pdfjs/web/locale/be/viewer.ftl +0 -32
  196. package/static/assets/pdfjs/web/locale/bg/viewer.ftl +0 -32
  197. package/static/assets/pdfjs/web/locale/bn/viewer.ftl +0 -16
  198. package/static/assets/pdfjs/web/locale/bo/viewer.ftl +0 -12
  199. package/static/assets/pdfjs/web/locale/br/viewer.ftl +0 -22
  200. package/static/assets/pdfjs/web/locale/brx/viewer.ftl +0 -16
  201. package/static/assets/pdfjs/web/locale/bs/viewer.ftl +0 -32
  202. package/static/assets/pdfjs/web/locale/ca/viewer.ftl +12 -23
  203. package/static/assets/pdfjs/web/locale/cak/viewer.ftl +0 -23
  204. package/static/assets/pdfjs/web/locale/ckb/viewer.ftl +0 -16
  205. package/static/assets/pdfjs/web/locale/cs/viewer.ftl +0 -32
  206. package/static/assets/pdfjs/web/locale/cy/viewer.ftl +0 -32
  207. package/static/assets/pdfjs/web/locale/da/viewer.ftl +3 -35
  208. package/static/assets/pdfjs/web/locale/de/viewer.ftl +0 -32
  209. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +0 -32
  210. package/static/assets/pdfjs/web/locale/el/viewer.ftl +0 -32
  211. package/static/assets/pdfjs/web/locale/en-CA/viewer.ftl +0 -32
  212. package/static/assets/pdfjs/web/locale/en-GB/viewer.ftl +0 -32
  213. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +25 -13
  214. package/static/assets/pdfjs/web/locale/eo/viewer.ftl +0 -32
  215. package/static/assets/pdfjs/web/locale/es-AR/viewer.ftl +0 -32
  216. package/static/assets/pdfjs/web/locale/es-CL/viewer.ftl +0 -32
  217. package/static/assets/pdfjs/web/locale/es-ES/viewer.ftl +5 -32
  218. package/static/assets/pdfjs/web/locale/es-MX/viewer.ftl +0 -32
  219. package/static/assets/pdfjs/web/locale/et/viewer.ftl +0 -16
  220. package/static/assets/pdfjs/web/locale/eu/viewer.ftl +38 -32
  221. package/static/assets/pdfjs/web/locale/fa/viewer.ftl +0 -19
  222. package/static/assets/pdfjs/web/locale/ff/viewer.ftl +0 -12
  223. package/static/assets/pdfjs/web/locale/fi/viewer.ftl +0 -32
  224. package/static/assets/pdfjs/web/locale/fr/viewer.ftl +0 -32
  225. package/static/assets/pdfjs/web/locale/fur/viewer.ftl +0 -32
  226. package/static/assets/pdfjs/web/locale/fy-NL/viewer.ftl +0 -32
  227. package/static/assets/pdfjs/web/locale/ga-IE/viewer.ftl +0 -12
  228. package/static/assets/pdfjs/web/locale/gd/viewer.ftl +0 -23
  229. package/static/assets/pdfjs/web/locale/gl/viewer.ftl +0 -32
  230. package/static/assets/pdfjs/web/locale/gn/viewer.ftl +0 -32
  231. package/static/assets/pdfjs/web/locale/gu-IN/viewer.ftl +0 -12
  232. package/static/assets/pdfjs/web/locale/he/viewer.ftl +0 -32
  233. package/static/assets/pdfjs/web/locale/hi-IN/viewer.ftl +0 -16
  234. package/static/assets/pdfjs/web/locale/hr/viewer.ftl +0 -32
  235. package/static/assets/pdfjs/web/locale/hsb/viewer.ftl +0 -32
  236. package/static/assets/pdfjs/web/locale/hu/viewer.ftl +0 -32
  237. package/static/assets/pdfjs/web/locale/hy-AM/viewer.ftl +372 -16
  238. package/static/assets/pdfjs/web/locale/hye/viewer.ftl +0 -16
  239. package/static/assets/pdfjs/web/locale/ia/viewer.ftl +0 -32
  240. package/static/assets/pdfjs/web/locale/id/viewer.ftl +38 -32
  241. package/static/assets/pdfjs/web/locale/is/viewer.ftl +27 -32
  242. package/static/assets/pdfjs/web/locale/it/viewer.ftl +0 -33
  243. package/static/assets/pdfjs/web/locale/ja/viewer.ftl +31 -33
  244. package/static/assets/pdfjs/web/locale/ka/viewer.ftl +0 -32
  245. package/static/assets/pdfjs/web/locale/kab/viewer.ftl +0 -32
  246. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +31 -32
  247. package/static/assets/pdfjs/web/locale/km/viewer.ftl +0 -12
  248. package/static/assets/pdfjs/web/locale/kn/viewer.ftl +0 -12
  249. package/static/assets/pdfjs/web/locale/ko/viewer.ftl +0 -32
  250. package/static/assets/pdfjs/web/locale/lij/viewer.ftl +0 -12
  251. package/static/assets/pdfjs/web/locale/lo/viewer.ftl +0 -23
  252. package/static/assets/pdfjs/web/locale/lt/viewer.ftl +0 -16
  253. package/static/assets/pdfjs/web/locale/ltg/viewer.ftl +0 -12
  254. package/static/assets/pdfjs/web/locale/lv/viewer.ftl +0 -12
  255. package/static/assets/pdfjs/web/locale/meh/viewer.ftl +0 -14
  256. package/static/assets/pdfjs/web/locale/mk/viewer.ftl +0 -19
  257. package/static/assets/pdfjs/web/locale/ml/viewer.ftl +0 -31
  258. package/static/assets/pdfjs/web/locale/mr/viewer.ftl +0 -16
  259. package/static/assets/pdfjs/web/locale/ms/viewer.ftl +0 -12
  260. package/static/assets/pdfjs/web/locale/my/viewer.ftl +0 -12
  261. package/static/assets/pdfjs/web/locale/nb-NO/viewer.ftl +0 -32
  262. package/static/assets/pdfjs/web/locale/ne-NP/viewer.ftl +0 -12
  263. package/static/assets/pdfjs/web/locale/nl/viewer.ftl +0 -32
  264. package/static/assets/pdfjs/web/locale/nn-NO/viewer.ftl +0 -32
  265. package/static/assets/pdfjs/web/locale/oc/viewer.ftl +0 -24
  266. package/static/assets/pdfjs/web/locale/pa-IN/viewer.ftl +0 -32
  267. package/static/assets/pdfjs/web/locale/pl/viewer.ftl +0 -32
  268. package/static/assets/pdfjs/web/locale/pt-BR/viewer.ftl +0 -32
  269. package/static/assets/pdfjs/web/locale/pt-PT/viewer.ftl +0 -32
  270. package/static/assets/pdfjs/web/locale/rm/viewer.ftl +0 -32
  271. package/static/assets/pdfjs/web/locale/ro/viewer.ftl +5 -37
  272. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +0 -32
  273. package/static/assets/pdfjs/web/locale/sat/viewer.ftl +0 -23
  274. package/static/assets/pdfjs/web/locale/sc/viewer.ftl +8 -27
  275. package/static/assets/pdfjs/web/locale/sco/viewer.ftl +0 -16
  276. package/static/assets/pdfjs/web/locale/si/viewer.ftl +0 -22
  277. package/static/assets/pdfjs/web/locale/sk/viewer.ftl +0 -32
  278. package/static/assets/pdfjs/web/locale/skr/viewer.ftl +0 -32
  279. package/static/assets/pdfjs/web/locale/sl/viewer.ftl +30 -32
  280. package/static/assets/pdfjs/web/locale/son/viewer.ftl +0 -12
  281. package/static/assets/pdfjs/web/locale/sq/viewer.ftl +0 -32
  282. package/static/assets/pdfjs/web/locale/sr/viewer.ftl +0 -32
  283. package/static/assets/pdfjs/web/locale/sv-SE/viewer.ftl +0 -32
  284. package/static/assets/pdfjs/web/locale/szl/viewer.ftl +0 -16
  285. package/static/assets/pdfjs/web/locale/ta/viewer.ftl +0 -12
  286. package/static/assets/pdfjs/web/locale/te/viewer.ftl +0 -16
  287. package/static/assets/pdfjs/web/locale/tg/viewer.ftl +0 -32
  288. package/static/assets/pdfjs/web/locale/th/viewer.ftl +38 -32
  289. package/static/assets/pdfjs/web/locale/tl/viewer.ftl +0 -16
  290. package/static/assets/pdfjs/web/locale/tr/viewer.ftl +0 -32
  291. package/static/assets/pdfjs/web/locale/trs/viewer.ftl +0 -12
  292. package/static/assets/pdfjs/web/locale/uk/viewer.ftl +0 -32
  293. package/static/assets/pdfjs/web/locale/ur/viewer.ftl +0 -16
  294. package/static/assets/pdfjs/web/locale/uz/viewer.ftl +0 -12
  295. package/static/assets/pdfjs/web/locale/vi/viewer.ftl +0 -32
  296. package/static/assets/pdfjs/web/locale/xh/viewer.ftl +0 -12
  297. package/static/assets/pdfjs/web/locale/zh-CN/viewer.ftl +0 -32
  298. package/static/assets/pdfjs/web/locale/zh-TW/viewer.ftl +0 -32
  299. package/static/assets/pdfjs/web/viewer.css +586 -437
  300. package/static/assets/pdfjs/web/viewer.html +12 -23
  301. package/static/assets/pdfjs/web/viewer.mjs +955 -514
  302. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  303. package/static/assets/pdfjs/web/wasm/openjpeg.wasm +0 -0
  304. package/static/assets/pdfjs/web/wasm/openjpeg_nowasm_fallback.js +10 -22
  305. package/static/{chunk-SPTF6FSM.js → chunk-27YQB3TE.js} +1 -1
  306. package/static/chunk-2I4CUFUA.js +1 -0
  307. package/static/chunk-2MTM6SWN.js +4 -0
  308. package/static/{chunk-7VRUZRJG.js → chunk-34MKICK5.js} +2 -2
  309. package/static/chunk-5O3DIUU3.js +1 -0
  310. package/static/{chunk-VJRTMDEJ.js → chunk-6NMVZIIT.js} +1 -1
  311. package/static/{chunk-L6MU6S2V.js → chunk-7DN7ZAPU.js} +1 -1
  312. package/static/{chunk-MVO4WZLK.js → chunk-7FUM3JGM.js} +1 -1
  313. package/static/{chunk-RSS6GYNE.js → chunk-7ITZXYYJ.js} +1 -1
  314. package/static/chunk-7P27WBGC.js +4 -0
  315. package/static/chunk-ATP3BFHV.js +562 -0
  316. package/static/chunk-AWQ2YTVC.js +1 -0
  317. package/static/chunk-DSOE3FEP.js +1 -0
  318. package/static/{chunk-2R6HHGUR.js → chunk-EFKMBLRE.js} +1 -1
  319. package/static/chunk-FUFKVHPU.js +1 -0
  320. package/static/{chunk-MRSWNAVB.js → chunk-HCDLWTMW.js} +1 -1
  321. package/static/chunk-IPAC4VAF.js +1 -0
  322. package/static/{chunk-ZC5NIT55.js → chunk-IQOALFYU.js} +1 -1
  323. package/static/chunk-JASU3CIH.js +1 -0
  324. package/static/{chunk-6OJZWYRZ.js → chunk-JQ5FTO2M.js} +1 -1
  325. package/static/chunk-JUNZFADM.js +1 -0
  326. package/static/{chunk-LLWSLOSX.js → chunk-LJUKI4SQ.js} +1 -1
  327. package/static/{chunk-WI7FOANP.js → chunk-LUWQFIWR.js} +1 -1
  328. package/static/{chunk-BIUNUYZ5.js → chunk-ORMRCEGT.js} +1 -1
  329. package/static/{chunk-IZL7JPTS.js → chunk-Q7D6RN4N.js} +1 -1
  330. package/static/{chunk-JYXLQRHG.js → chunk-QJX6ITLW.js} +1 -1
  331. package/static/{chunk-YJMN3B4N.js → chunk-QQ6UQQBR.js} +1 -1
  332. package/static/chunk-S2HDY3OL.js +1 -0
  333. package/static/{chunk-NE4NDO45.js → chunk-S75P2FFI.js} +1 -1
  334. package/static/{chunk-CRQNEHTX.js → chunk-T3EYFSVZ.js} +1 -1
  335. package/static/{chunk-MCLQFZ3S.js → chunk-U34OZUZ7.js} +1 -1
  336. package/static/chunk-Y7EH7G5K.js +1 -0
  337. package/static/{chunk-MGGT6MIJ.js → chunk-ZQQPUYLU.js} +1 -1
  338. package/static/index.html +2 -2
  339. package/static/main-7SQDDVMD.js +9 -0
  340. package/static/{styles-FYUSO6OJ.css → styles-A5VYX3CE.css} +1 -1
  341. package/server/applications/users/dto/user-password.dto.js.map +0 -1
  342. package/static/chunk-4U5A2DEP.js +0 -4
  343. package/static/chunk-54EAZ2UD.js +0 -1
  344. package/static/chunk-7ZRXJONB.js +0 -1
  345. package/static/chunk-F2J2IIJE.js +0 -1
  346. package/static/chunk-FNFGUIQH.js +0 -4
  347. package/static/chunk-GGLK52CG.js +0 -1
  348. package/static/chunk-HW2H3ISM.js +0 -559
  349. package/static/chunk-HX6BBYVD.js +0 -1
  350. package/static/chunk-JF7S3UYQ.js +0 -1
  351. package/static/chunk-KSHPKI4G.js +0 -1
  352. package/static/chunk-VPJ2V27B.js +0 -1
  353. package/static/chunk-VUI3KV7V.js +0 -1
  354. package/static/chunk-ZXS4V7J2.js +0 -1
  355. package/static/main-FFIWFD2F.js +0 -7
@@ -99,7 +99,7 @@ let SyncQueries = class SyncQueries {
99
99
  ownerId: _syncclientsschema.syncClients.ownerId,
100
100
  token: _syncclientsschema.syncClients.token,
101
101
  tokenExpiration: _syncclientsschema.syncClients.tokenExpiration,
102
- info: (0, _drizzleorm.sql)`${_syncclientsschema.syncClients.info}`.mapWith(JSON.parse),
102
+ info: _syncclientsschema.syncClients.info,
103
103
  enabled: _syncclientsschema.syncClients.enabled,
104
104
  currentAccess: _syncclientsschema.syncClients.currentAccess,
105
105
  currentIp: _syncclientsschema.syncClients.currentIp,
@@ -114,7 +114,7 @@ let SyncQueries = class SyncQueries {
114
114
  return this.db.select({
115
115
  id: _syncclientsschema.syncClients.id,
116
116
  tokenExpiration: _syncclientsschema.syncClients.tokenExpiration,
117
- info: (0, _drizzleorm.sql)`${_syncclientsschema.syncClients.info}`.mapWith(JSON.parse),
117
+ info: _syncclientsschema.syncClients.info,
118
118
  enabled: _syncclientsschema.syncClients.enabled,
119
119
  currentAccess: _syncclientsschema.syncClients.currentAccess,
120
120
  currentIp: _syncclientsschema.syncClients.currentIp,
@@ -124,7 +124,7 @@ let SyncQueries = class SyncQueries {
124
124
  isCurrentClient: (0, _drizzleorm.sql)`IF (${clientId} IS NOT NULL AND ${_syncclientsschema.syncClients.id} = ${clientId}, 1, 0)`.mapWith(Boolean),
125
125
  paths: (0, _utils.concatDistinctObjectsInArray)(_syncpathsschema.syncPaths.id, {
126
126
  id: _syncpathsschema.syncPaths.id,
127
- settings: (0, _drizzleorm.sql)`${_syncpathsschema.syncPaths.settings}`.mapWith(JSON.parse),
127
+ settings: _syncpathsschema.syncPaths.settings,
128
128
  createdAt: _syncpathsschema.syncPaths.createdAt
129
129
  })
130
130
  }).from(_syncclientsschema.syncClients).leftJoin(_syncpathsschema.syncPaths, (0, _drizzleorm.eq)(_syncpathsschema.syncPaths.clientId, _syncclientsschema.syncClients.id)).where((0, _drizzleorm.eq)(_syncclientsschema.syncClients.ownerId, owner.id)).groupBy(_syncclientsschema.syncClients.id).orderBy((0, _drizzleorm.desc)(_syncclientsschema.syncClients.currentAccess));
@@ -184,12 +184,12 @@ let SyncQueries = class SyncQueries {
184
184
  ELSE NULL
185
185
  END
186
186
  `.as('remotePath'),
187
- settings: (0, _drizzleorm.sql)`${_syncpathsschema.syncPaths.settings}`.mapWith(JSON.parse)
187
+ settings: _syncpathsschema.syncPaths.settings
188
188
  }).from(_syncpathsschema.syncPaths).leftJoin(_filesschema.files, (0, _drizzleorm.eq)(_filesschema.files.id, _syncpathsschema.syncPaths.fileId)).leftJoin(_spacesschema.spaces, (0, _drizzleorm.eq)(_spacesschema.spaces.id, _syncpathsschema.syncPaths.spaceId)).leftJoin(_spacesrootsschema.spacesRoots, (0, _drizzleorm.eq)(_spacesrootsschema.spacesRoots.id, _syncpathsschema.syncPaths.spaceRootId)).leftJoin(spaceRootFile, (0, _drizzleorm.eq)(spaceRootFile.id, _spacesrootsschema.spacesRoots.fileId)).leftJoin(_sharesschema.shares, (0, _drizzleorm.eq)(_sharesschema.shares.id, _syncpathsschema.syncPaths.shareId)).leftJoin(shareFile, (0, _drizzleorm.eq)(shareFile.id, _sharesschema.shares.fileId)).where((0, _drizzleorm.eq)(_syncpathsschema.syncPaths.clientId, clientId));
189
189
  }
190
190
  async getPathSettings(clientId, pathId) {
191
191
  const [path] = await this.db.select({
192
- settings: (0, _drizzleorm.sql)`${_syncpathsschema.syncPaths.settings}`.mapWith(JSON.parse)
192
+ settings: _syncpathsschema.syncPaths.settings
193
193
  }).from(_syncpathsschema.syncPaths).where((0, _drizzleorm.and)((0, _drizzleorm.eq)(_syncpathsschema.syncPaths.clientId, clientId), (0, _drizzleorm.eq)(_syncpathsschema.syncPaths.id, pathId))).limit(1);
194
194
  return path ? path.settings : null;
195
195
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/sync/services/sync-queries.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Inject, Injectable } from '@nestjs/common'\nimport { and, desc, eq, SQL, sql } from 'drizzle-orm'\nimport { alias } from 'drizzle-orm/mysql-core'\nimport crypto from 'node:crypto'\nimport { convertHumanTimeToSeconds } from '../../../common/functions'\nimport { currentTimeStamp } from '../../../common/shared'\nimport { CacheDecorator } from '../../../infrastructure/cache/cache.decorator'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport type { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { concatDistinctObjectsInArray, dbCheckAffectedRows, dbGetInsertedId } from '../../../infrastructure/database/utils'\nimport { filePathSQL, files } from '../../files/schemas/files.schema'\nimport { shares } from '../../shares/schemas/shares.schema'\nimport { spacesRoots } from '../../spaces/schemas/spaces-roots.schema'\nimport { spaces } from '../../spaces/schemas/spaces.schema'\nimport type { UserModel } from '../../users/models/user.model'\nimport { CLIENT_TOKEN_EXPIRATION_TIME } from '../constants/auth'\nimport { SYNC_REPOSITORY } from '../constants/sync'\nimport { SyncClientPaths } from '../interfaces/sync-client-paths.interface'\nimport { SyncClientInfo } from '../interfaces/sync-client.interface'\nimport { SyncDBProps, SyncPathSettings } from '../interfaces/sync-path.interface'\nimport { SyncClient } from '../schemas/sync-client.interface'\nimport { syncClients } from '../schemas/sync-clients.schema'\nimport { SyncPath } from '../schemas/sync-path.interface'\nimport { syncPaths } from '../schemas/sync-paths.schema'\n\n@Injectable()\nexport class SyncQueries {\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly cache: Cache\n ) {}\n\n async clientExistsForOwner(ownerId: number, clientId: string): Promise<boolean> {\n const [client] = await this.db\n .select({ id: syncClients.id })\n .from(syncClients)\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1)\n return !!client?.id\n }\n\n async getOrCreateClient(ownerId: number, clientId: string, info: SyncClientInfo, ip: string): Promise<string> {\n const client = await this.getClient(clientId, ownerId)\n if (client) {\n if (currentTimeStamp() < client.tokenExpiration) {\n return client.token\n }\n // renew token if it has expired\n const token = crypto.randomUUID()\n dbCheckAffectedRows(\n await this.db\n .update(syncClients)\n .set({\n token: token,\n tokenExpiration: currentTimeStamp() + convertHumanTimeToSeconds(CLIENT_TOKEN_EXPIRATION_TIME)\n })\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1),\n 1\n )\n return token\n } else {\n // create client\n const token = crypto.randomUUID()\n dbCheckAffectedRows(\n await this.db.insert(syncClients).values({\n id: clientId,\n ownerId: ownerId,\n token: token,\n tokenExpiration: currentTimeStamp() + convertHumanTimeToSeconds(CLIENT_TOKEN_EXPIRATION_TIME),\n info: info,\n currentAccess: new Date(),\n currentIp: ip\n } as SyncClient),\n 1\n )\n return token\n }\n }\n\n async getClient(clientId: string, ownerId?: number, token?: string): Promise<SyncClient> {\n const where: SQL[] = [\n eq(syncClients.id, clientId),\n ...(ownerId ? [eq(syncClients.ownerId, ownerId)] : []),\n ...(token ? [eq(syncClients.token, token)] : [])\n ]\n const [client] = await this.db\n .select({\n id: syncClients.id,\n ownerId: syncClients.ownerId,\n token: syncClients.token,\n tokenExpiration: syncClients.tokenExpiration,\n info: sql`${syncClients.info}`.mapWith(JSON.parse),\n enabled: syncClients.enabled,\n currentAccess: syncClients.currentAccess,\n currentIp: syncClients.currentIp,\n lastAccess: syncClients.lastAccess,\n lastIp: syncClients.lastIp,\n createdAt: syncClients.createdAt\n })\n .from(syncClients)\n .where(and(...where))\n .limit(1)\n return client\n }\n\n async getClients(owner: UserModel): Promise<SyncClientPaths[]> {\n const clientId = owner.clientId || null\n return this.db\n .select({\n id: syncClients.id,\n tokenExpiration: syncClients.tokenExpiration,\n info: sql`${syncClients.info}`.mapWith(JSON.parse),\n enabled: syncClients.enabled,\n currentAccess: syncClients.currentAccess,\n currentIp: syncClients.currentIp,\n lastAccess: syncClients.lastAccess,\n lastIp: syncClients.lastIp,\n createdAt: syncClients.createdAt,\n isCurrentClient: sql<boolean>`IF (${clientId} IS NOT NULL AND ${syncClients.id} = ${clientId}, 1, 0)`.mapWith(Boolean),\n paths: concatDistinctObjectsInArray(syncPaths.id, {\n id: syncPaths.id,\n settings: sql`${syncPaths.settings}`.mapWith(JSON.parse),\n createdAt: syncPaths.createdAt\n })\n })\n .from(syncClients)\n .leftJoin(syncPaths, eq(syncPaths.clientId, syncClients.id))\n .where(eq(syncClients.ownerId, owner.id))\n .groupBy(syncClients.id)\n .orderBy(desc(syncClients.currentAccess))\n }\n\n async deleteClient(ownerId: number, clientId: string) {\n dbCheckAffectedRows(\n await this.db\n .delete(syncClients)\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1),\n 1\n )\n }\n\n async renewClientTokenAndExpiration(clientId: string, token: string, expiration: number) {\n dbCheckAffectedRows(await this.db.update(syncClients).set({ token: token, tokenExpiration: expiration }).where(eq(syncClients.id, clientId)), 1)\n }\n\n async updateClientInfo(client: SyncClient, info: SyncClientInfo, ip: string) {\n await this.db\n .update(syncClients)\n .set({\n lastAccess: client.currentAccess,\n currentAccess: new Date(),\n lastIp: client.currentIp,\n currentIp: ip,\n info: info\n } as SyncClient)\n .where(eq(syncClients.id, client.id))\n }\n\n getPaths(clientId: string): Promise<{ id: number; settings: SyncPathSettings; remotePath: string }[]> {\n const shareFile: any = alias(files, 'shareFile')\n const spaceRootFile: any = alias(files, 'spaceRootFile')\n return this.db\n .select({\n id: syncPaths.id,\n remotePath: sql<string>`\n CASE WHEN ${syncPaths.ownerId} IS NOT NULL THEN CONCAT_WS('/', ${SYNC_REPOSITORY.PERSONAL}, ${filePathSQL(files)})\n WHEN ${syncPaths.spaceId} IS NOT NULL THEN CONCAT_WS('/', \n ${SYNC_REPOSITORY.SPACES}, \n ${spaces.alias}, \n CASE WHEN ${syncPaths.spaceRootId} IS NULL \n THEN CONCAT_WS('/', IF (${files.path} = '.', NULL, ${files.path}), ${files.name})\n ELSE\n CASE WHEN ${syncPaths.fileId} IS NULL \n THEN ${spacesRoots.alias}\n ELSE\n IF (${spacesRoots.externalPath} IS NOT NULL, \n CONCAT_WS('/', ${spacesRoots.alias}, IF (${files.path} = '.', NULL, ${files.path}), ${files.name}), \n CONCAT_WS('/', REGEXP_REPLACE(${files.path}, ${filePathSQL(spaceRootFile)}, ${spacesRoots.alias}), ${files.name})\n )\n END\n END\n )\n WHEN ${syncPaths.shareId} IS NOT NULL THEN CONCAT_WS('/',\n ${SYNC_REPOSITORY.SHARES},\n CASE WHEN ${syncPaths.fileId} IS NULL THEN ${shares.alias}\n ELSE \n IF (${shareFile.id} IS NOT NULL,\n IF (${files.id} = ${shareFile.id}, NULL, REGEXP_REPLACE(${files.path}, ${filePathSQL(shareFile)}, ${shares.alias})),\n CONCAT_WS('/', ${shares.alias}, IF (${files.path} = '.', NULL, ${files.path}))\n )\n END,\n IF (${files.id} = ${shareFile.id}, ${shares.name}, ${files.name})\n )\n ELSE NULL\n END\n `.as('remotePath'),\n settings: sql`${syncPaths.settings}`.mapWith(JSON.parse)\n })\n .from(syncPaths)\n .leftJoin(files, eq(files.id, syncPaths.fileId))\n .leftJoin(spaces, eq(spaces.id, syncPaths.spaceId))\n .leftJoin(spacesRoots, eq(spacesRoots.id, syncPaths.spaceRootId))\n .leftJoin(spaceRootFile, eq(spaceRootFile.id, spacesRoots.fileId))\n .leftJoin(shares, eq(shares.id, syncPaths.shareId))\n .leftJoin(shareFile, eq(shareFile.id, shares.fileId))\n .where(eq(syncPaths.clientId, clientId))\n }\n\n @CacheDecorator(900)\n async getPathSettings(clientId: string, pathId: number): Promise<SyncPathSettings> {\n const [path] = await this.db\n .select({\n settings: sql`${syncPaths.settings}`.mapWith(JSON.parse)\n })\n .from(syncPaths)\n .where(and(eq(syncPaths.clientId, clientId), eq(syncPaths.id, pathId)))\n .limit(1)\n return path ? path.settings : null\n }\n\n async createPath(clientId: string, dbProps: SyncDBProps, settings: SyncPathSettings): Promise<SyncPath['id']> {\n return dbGetInsertedId(await this.db.insert(syncPaths).values({ clientId: clientId, settings: settings, ...dbProps } as SyncPath))\n }\n\n async deletePath(clientId: string, pathId: number): Promise<void> {\n dbCheckAffectedRows(await this.db.delete(syncPaths).where(and(eq(syncPaths.id, pathId), eq(syncPaths.clientId, clientId))), 1)\n }\n\n async updatePathSettings(clientId: string, pathId: number, settings: SyncPathSettings) {\n dbCheckAffectedRows(\n await this.db\n .update(syncPaths)\n .set({ settings: settings })\n .where(and(eq(syncPaths.id, pathId), eq(syncPaths.clientId, clientId))),\n 1\n )\n }\n\n clearCachePathSettings(clientId: string, pathId: number): void {\n this.cache.del(this.cache.genSlugKey(this.constructor.name, this.getPathSettings.name, clientId, pathId)).catch((e: Error) => console.error(e))\n }\n}\n"],"names":["SyncQueries","clientExistsForOwner","ownerId","clientId","client","db","select","id","syncClients","from","where","and","eq","limit","getOrCreateClient","info","ip","getClient","currentTimeStamp","tokenExpiration","token","crypto","randomUUID","dbCheckAffectedRows","update","set","convertHumanTimeToSeconds","CLIENT_TOKEN_EXPIRATION_TIME","insert","values","currentAccess","Date","currentIp","sql","mapWith","JSON","parse","enabled","lastAccess","lastIp","createdAt","getClients","owner","isCurrentClient","Boolean","paths","concatDistinctObjectsInArray","syncPaths","settings","leftJoin","groupBy","orderBy","desc","deleteClient","delete","renewClientTokenAndExpiration","expiration","updateClientInfo","getPaths","shareFile","alias","files","spaceRootFile","remotePath","SYNC_REPOSITORY","PERSONAL","filePathSQL","spaceId","SPACES","spaces","spaceRootId","path","name","fileId","spacesRoots","externalPath","shareId","SHARES","shares","as","getPathSettings","pathId","createPath","dbProps","dbGetInsertedId","deletePath","updatePathSettings","clearCachePathSettings","cache","del","genSlugKey","catch","e","console","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/sync/services/sync-queries.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Inject, Injectable } from '@nestjs/common'\nimport { and, desc, eq, SQL, sql } from 'drizzle-orm'\nimport { alias } from 'drizzle-orm/mysql-core'\nimport crypto from 'node:crypto'\nimport { convertHumanTimeToSeconds } from '../../../common/functions'\nimport { currentTimeStamp } from '../../../common/shared'\nimport { CacheDecorator } from '../../../infrastructure/cache/cache.decorator'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport type { DBSchema } from '../../../infrastructure/database/interfaces/database.interface'\nimport { concatDistinctObjectsInArray, dbCheckAffectedRows, dbGetInsertedId } from '../../../infrastructure/database/utils'\nimport { filePathSQL, files } from '../../files/schemas/files.schema'\nimport { shares } from '../../shares/schemas/shares.schema'\nimport { spacesRoots } from '../../spaces/schemas/spaces-roots.schema'\nimport { spaces } from '../../spaces/schemas/spaces.schema'\nimport type { UserModel } from '../../users/models/user.model'\nimport { CLIENT_TOKEN_EXPIRATION_TIME } from '../constants/auth'\nimport { SYNC_REPOSITORY } from '../constants/sync'\nimport { SyncClientPaths } from '../interfaces/sync-client-paths.interface'\nimport { SyncClientInfo } from '../interfaces/sync-client.interface'\nimport { SyncDBProps, SyncPathSettings } from '../interfaces/sync-path.interface'\nimport { SyncClient } from '../schemas/sync-client.interface'\nimport { syncClients } from '../schemas/sync-clients.schema'\nimport { SyncPath } from '../schemas/sync-path.interface'\nimport { syncPaths } from '../schemas/sync-paths.schema'\n\n@Injectable()\nexport class SyncQueries {\n constructor(\n @Inject(DB_TOKEN_PROVIDER) private readonly db: DBSchema,\n private readonly cache: Cache\n ) {}\n\n async clientExistsForOwner(ownerId: number, clientId: string): Promise<boolean> {\n const [client] = await this.db\n .select({ id: syncClients.id })\n .from(syncClients)\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1)\n return !!client?.id\n }\n\n async getOrCreateClient(ownerId: number, clientId: string, info: SyncClientInfo, ip: string): Promise<string> {\n const client = await this.getClient(clientId, ownerId)\n if (client) {\n if (currentTimeStamp() < client.tokenExpiration) {\n return client.token\n }\n // renew token if it has expired\n const token = crypto.randomUUID()\n dbCheckAffectedRows(\n await this.db\n .update(syncClients)\n .set({\n token: token,\n tokenExpiration: currentTimeStamp() + convertHumanTimeToSeconds(CLIENT_TOKEN_EXPIRATION_TIME)\n })\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1),\n 1\n )\n return token\n } else {\n // create client\n const token = crypto.randomUUID()\n dbCheckAffectedRows(\n await this.db.insert(syncClients).values({\n id: clientId,\n ownerId: ownerId,\n token: token,\n tokenExpiration: currentTimeStamp() + convertHumanTimeToSeconds(CLIENT_TOKEN_EXPIRATION_TIME),\n info: info,\n currentAccess: new Date(),\n currentIp: ip\n } as SyncClient),\n 1\n )\n return token\n }\n }\n\n async getClient(clientId: string, ownerId?: number, token?: string): Promise<SyncClient> {\n const where: SQL[] = [\n eq(syncClients.id, clientId),\n ...(ownerId ? [eq(syncClients.ownerId, ownerId)] : []),\n ...(token ? [eq(syncClients.token, token)] : [])\n ]\n const [client] = await this.db\n .select({\n id: syncClients.id,\n ownerId: syncClients.ownerId,\n token: syncClients.token,\n tokenExpiration: syncClients.tokenExpiration,\n info: syncClients.info,\n enabled: syncClients.enabled,\n currentAccess: syncClients.currentAccess,\n currentIp: syncClients.currentIp,\n lastAccess: syncClients.lastAccess,\n lastIp: syncClients.lastIp,\n createdAt: syncClients.createdAt\n })\n .from(syncClients)\n .where(and(...where))\n .limit(1)\n return client\n }\n\n async getClients(owner: UserModel): Promise<SyncClientPaths[]> {\n const clientId = owner.clientId || null\n return this.db\n .select({\n id: syncClients.id,\n tokenExpiration: syncClients.tokenExpiration,\n info: syncClients.info,\n enabled: syncClients.enabled,\n currentAccess: syncClients.currentAccess,\n currentIp: syncClients.currentIp,\n lastAccess: syncClients.lastAccess,\n lastIp: syncClients.lastIp,\n createdAt: syncClients.createdAt,\n isCurrentClient: sql<boolean>`IF (${clientId} IS NOT NULL AND ${syncClients.id} = ${clientId}, 1, 0)`.mapWith(Boolean),\n paths: concatDistinctObjectsInArray(syncPaths.id, {\n id: syncPaths.id,\n settings: syncPaths.settings,\n createdAt: syncPaths.createdAt\n })\n })\n .from(syncClients)\n .leftJoin(syncPaths, eq(syncPaths.clientId, syncClients.id))\n .where(eq(syncClients.ownerId, owner.id))\n .groupBy(syncClients.id)\n .orderBy(desc(syncClients.currentAccess))\n }\n\n async deleteClient(ownerId: number, clientId: string) {\n dbCheckAffectedRows(\n await this.db\n .delete(syncClients)\n .where(and(eq(syncClients.ownerId, ownerId), eq(syncClients.id, clientId)))\n .limit(1),\n 1\n )\n }\n\n async renewClientTokenAndExpiration(clientId: string, token: string, expiration: number) {\n dbCheckAffectedRows(await this.db.update(syncClients).set({ token: token, tokenExpiration: expiration }).where(eq(syncClients.id, clientId)), 1)\n }\n\n async updateClientInfo(client: SyncClient, info: SyncClientInfo, ip: string) {\n await this.db\n .update(syncClients)\n .set({\n lastAccess: client.currentAccess,\n currentAccess: new Date(),\n lastIp: client.currentIp,\n currentIp: ip,\n info: info\n } as SyncClient)\n .where(eq(syncClients.id, client.id))\n }\n\n getPaths(clientId: string): Promise<{ id: number; settings: SyncPathSettings; remotePath: string }[]> {\n const shareFile: any = alias(files, 'shareFile')\n const spaceRootFile: any = alias(files, 'spaceRootFile')\n return this.db\n .select({\n id: syncPaths.id,\n remotePath: sql<string>`\n CASE WHEN ${syncPaths.ownerId} IS NOT NULL THEN CONCAT_WS('/', ${SYNC_REPOSITORY.PERSONAL}, ${filePathSQL(files)})\n WHEN ${syncPaths.spaceId} IS NOT NULL THEN CONCAT_WS('/', \n ${SYNC_REPOSITORY.SPACES}, \n ${spaces.alias}, \n CASE WHEN ${syncPaths.spaceRootId} IS NULL \n THEN CONCAT_WS('/', IF (${files.path} = '.', NULL, ${files.path}), ${files.name})\n ELSE\n CASE WHEN ${syncPaths.fileId} IS NULL \n THEN ${spacesRoots.alias}\n ELSE\n IF (${spacesRoots.externalPath} IS NOT NULL, \n CONCAT_WS('/', ${spacesRoots.alias}, IF (${files.path} = '.', NULL, ${files.path}), ${files.name}), \n CONCAT_WS('/', REGEXP_REPLACE(${files.path}, ${filePathSQL(spaceRootFile)}, ${spacesRoots.alias}), ${files.name})\n )\n END\n END\n )\n WHEN ${syncPaths.shareId} IS NOT NULL THEN CONCAT_WS('/',\n ${SYNC_REPOSITORY.SHARES},\n CASE WHEN ${syncPaths.fileId} IS NULL THEN ${shares.alias}\n ELSE \n IF (${shareFile.id} IS NOT NULL,\n IF (${files.id} = ${shareFile.id}, NULL, REGEXP_REPLACE(${files.path}, ${filePathSQL(shareFile)}, ${shares.alias})),\n CONCAT_WS('/', ${shares.alias}, IF (${files.path} = '.', NULL, ${files.path}))\n )\n END,\n IF (${files.id} = ${shareFile.id}, ${shares.name}, ${files.name})\n )\n ELSE NULL\n END\n `.as('remotePath'),\n settings: syncPaths.settings\n })\n .from(syncPaths)\n .leftJoin(files, eq(files.id, syncPaths.fileId))\n .leftJoin(spaces, eq(spaces.id, syncPaths.spaceId))\n .leftJoin(spacesRoots, eq(spacesRoots.id, syncPaths.spaceRootId))\n .leftJoin(spaceRootFile, eq(spaceRootFile.id, spacesRoots.fileId))\n .leftJoin(shares, eq(shares.id, syncPaths.shareId))\n .leftJoin(shareFile, eq(shareFile.id, shares.fileId))\n .where(eq(syncPaths.clientId, clientId))\n }\n\n @CacheDecorator(900)\n async getPathSettings(clientId: string, pathId: number): Promise<SyncPathSettings> {\n const [path] = await this.db\n .select({\n settings: syncPaths.settings\n })\n .from(syncPaths)\n .where(and(eq(syncPaths.clientId, clientId), eq(syncPaths.id, pathId)))\n .limit(1)\n return path ? path.settings : null\n }\n\n async createPath(clientId: string, dbProps: SyncDBProps, settings: SyncPathSettings): Promise<SyncPath['id']> {\n return dbGetInsertedId(await this.db.insert(syncPaths).values({ clientId: clientId, settings: settings, ...dbProps } as SyncPath))\n }\n\n async deletePath(clientId: string, pathId: number): Promise<void> {\n dbCheckAffectedRows(await this.db.delete(syncPaths).where(and(eq(syncPaths.id, pathId), eq(syncPaths.clientId, clientId))), 1)\n }\n\n async updatePathSettings(clientId: string, pathId: number, settings: SyncPathSettings) {\n dbCheckAffectedRows(\n await this.db\n .update(syncPaths)\n .set({ settings: settings })\n .where(and(eq(syncPaths.id, pathId), eq(syncPaths.clientId, clientId))),\n 1\n )\n }\n\n clearCachePathSettings(clientId: string, pathId: number): void {\n this.cache.del(this.cache.genSlugKey(this.constructor.name, this.getPathSettings.name, clientId, pathId)).catch((e: Error) => console.error(e))\n }\n}\n"],"names":["SyncQueries","clientExistsForOwner","ownerId","clientId","client","db","select","id","syncClients","from","where","and","eq","limit","getOrCreateClient","info","ip","getClient","currentTimeStamp","tokenExpiration","token","crypto","randomUUID","dbCheckAffectedRows","update","set","convertHumanTimeToSeconds","CLIENT_TOKEN_EXPIRATION_TIME","insert","values","currentAccess","Date","currentIp","enabled","lastAccess","lastIp","createdAt","getClients","owner","isCurrentClient","sql","mapWith","Boolean","paths","concatDistinctObjectsInArray","syncPaths","settings","leftJoin","groupBy","orderBy","desc","deleteClient","delete","renewClientTokenAndExpiration","expiration","updateClientInfo","getPaths","shareFile","alias","files","spaceRootFile","remotePath","SYNC_REPOSITORY","PERSONAL","filePathSQL","spaceId","SPACES","spaces","spaceRootId","path","name","fileId","spacesRoots","externalPath","shareId","SHARES","shares","as","getPathSettings","pathId","createPath","dbProps","dbGetInsertedId","deletePath","updatePathSettings","clearCachePathSettings","cache","del","genSlugKey","catch","e","console","error"],"mappings":"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"}
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "AdminUsersController", {
14
14
  });
15
15
  const _common = require("@nestjs/common");
16
16
  const _fastify = require("fastify");
17
+ const _authtwofaguard = require("../../authentication/guards/auth-two-fa-guard");
17
18
  const _group = require("./constants/group");
18
19
  const _routes = require("./constants/routes");
19
20
  const _user = require("./constants/user");
@@ -23,7 +24,6 @@ const _createorupdategroupdto = require("./dto/create-or-update-group.dto");
23
24
  const _createorupdateuserdto = require("./dto/create-or-update-user.dto");
24
25
  const _deleteuserdto = require("./dto/delete-user.dto");
25
26
  const _searchmembersdto = require("./dto/search-members.dto");
26
- const _userpassworddto = require("./dto/user-password.dto");
27
27
  const _rolesguard = require("./guards/roles.guard");
28
28
  const _usermodel = require("./models/user.model");
29
29
  const _adminusersmanagerservice = require("./services/admin-users-manager.service");
@@ -43,73 +43,79 @@ function _ts_param(paramIndex, decorator) {
43
43
  }
44
44
  let AdminUsersController = class AdminUsersController {
45
45
  listUsers() {
46
- return this.usersAdminManager.listUsers();
46
+ return this.adminUsersManager.listUsers();
47
47
  }
48
48
  getUser(userId) {
49
- return this.usersAdminManager.getUser(userId);
49
+ return this.adminUsersManager.getUser(userId);
50
50
  }
51
51
  createUser(createUserDto) {
52
- return this.usersAdminManager.createUserOrGuest(createUserDto, typeof createUserDto?.role !== 'undefined' ? createUserDto.role : _user.USER_ROLE.USER, true);
52
+ return this.adminUsersManager.createUserOrGuest(createUserDto, typeof createUserDto?.role !== 'undefined' ? createUserDto.role : _user.USER_ROLE.USER, true);
53
53
  }
54
54
  updateUser(userId, updateUserDto) {
55
- return this.usersAdminManager.updateUserOrGuest(userId, updateUserDto);
55
+ return this.adminUsersManager.updateUserOrGuest(userId, updateUserDto);
56
56
  }
57
- deleteUser(admin, userId, adminDeleteUserDto) {
58
- return this.usersAdminManager.deleteUserFromAdmin(admin, userId, adminDeleteUserDto);
57
+ deleteUser(userId, deleteUserDto) {
58
+ return this.adminUsersManager.deleteUserOrGuestFromAdmin(userId, {
59
+ ...deleteUserDto,
60
+ isGuest: false
61
+ });
59
62
  }
60
63
  listGuests() {
61
- return this.usersAdminManager.listGuests();
64
+ return this.adminUsersManager.listGuests();
62
65
  }
63
66
  getGuest(guestId) {
64
- return this.usersAdminManager.getGuest(guestId);
67
+ return this.adminUsersManager.getGuest(guestId);
65
68
  }
66
69
  createGuest(user, createGuestDto) {
67
- return this.usersAdminManager.createGuest(user, createGuestDto);
70
+ return this.adminUsersManager.createGuest(user, createGuestDto);
68
71
  }
69
72
  updateGuest(guestId, updateGuestDto) {
70
- return this.usersAdminManager.updateGuest(guestId, updateGuestDto);
73
+ return this.adminUsersManager.updateGuest(guestId, updateGuestDto);
71
74
  }
72
- deleteGuest(guestId) {
73
- return this.usersAdminManager.deleteGuest(guestId);
75
+ deleteGuest(guestId, deleteUserDto) {
76
+ return this.adminUsersManager.deleteUserOrGuestFromAdmin(guestId, {
77
+ ...deleteUserDto,
78
+ isGuest: true
79
+ });
74
80
  }
75
81
  searchMembers(searchMembersDto) {
76
- return this.usersAdminManager.searchMembers(searchMembersDto);
82
+ return this.adminUsersManager.searchMembers(searchMembersDto);
77
83
  }
78
84
  browseGroups(name) {
79
- return this.usersAdminManager.browseGroups(name);
85
+ return this.adminUsersManager.browseGroups(name);
80
86
  }
81
87
  browsePersonalGroups(name) {
82
- return this.usersAdminManager.browseGroups(name, _group.GROUP_TYPE.PERSONAL);
88
+ return this.adminUsersManager.browseGroups(name, _group.GROUP_TYPE.PERSONAL);
83
89
  }
84
90
  getGroup(groupId) {
85
- return this.usersAdminManager.getGroup(groupId);
91
+ return this.adminUsersManager.getGroup(groupId);
86
92
  }
87
93
  createGroup(createGroupDto) {
88
- return this.usersAdminManager.createGroup(createGroupDto);
94
+ return this.adminUsersManager.createGroup(createGroupDto);
89
95
  }
90
96
  updateGroup(groupId, updateGroupDto) {
91
- return this.usersAdminManager.updateGroup(groupId, updateGroupDto);
97
+ return this.adminUsersManager.updateGroup(groupId, updateGroupDto);
92
98
  }
93
99
  deleteGroup(groupId) {
94
- return this.usersAdminManager.deleteGroup(groupId);
100
+ return this.adminUsersManager.deleteGroup(groupId);
95
101
  }
96
102
  addUsersToGroup(groupId, userIds) {
97
- return this.usersAdminManager.addUsersToGroup(groupId, userIds);
103
+ return this.adminUsersManager.addUsersToGroup(groupId, userIds);
98
104
  }
99
105
  removeUserFromGroup(groupId, userId) {
100
- return this.usersAdminManager.removeUserFromGroup(groupId, userId);
106
+ return this.adminUsersManager.removeUserFromGroup(groupId, userId);
101
107
  }
102
108
  updateUserFromGroup(groupId, userId, updateUserFromGroupDto) {
103
- return this.usersAdminManager.updateUserFromGroup(groupId, userId, updateUserFromGroupDto);
109
+ return this.adminUsersManager.updateUserFromGroup(groupId, userId, updateUserFromGroupDto);
104
110
  }
105
- impersonateUser(admin, userId, adminPasswordDto, res) {
106
- return this.usersAdminManager.impersonateUser(admin, userId, adminPasswordDto, res);
111
+ impersonateUser(admin, userId, res) {
112
+ return this.adminUsersManager.impersonateUser(admin, userId, res);
107
113
  }
108
114
  logOutImpersonateUser(user, res) {
109
- return this.usersAdminManager.logoutImpersonateUser(user, res);
115
+ return this.adminUsersManager.logoutImpersonateUser(user, res);
110
116
  }
111
- constructor(usersAdminManager){
112
- this.usersAdminManager = usersAdminManager;
117
+ constructor(adminUsersManager){
118
+ this.adminUsersManager = adminUsersManager;
113
119
  }
114
120
  };
115
121
  _ts_decorate([
@@ -129,6 +135,7 @@ _ts_decorate([
129
135
  ], AdminUsersController.prototype, "getUser", null);
130
136
  _ts_decorate([
131
137
  (0, _common.Post)(_routes.ADMIN_USERS_ROUTE.USERS),
138
+ (0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
132
139
  _ts_param(0, (0, _common.Body)()),
133
140
  _ts_metadata("design:type", Function),
134
141
  _ts_metadata("design:paramtypes", [
@@ -138,6 +145,7 @@ _ts_decorate([
138
145
  ], AdminUsersController.prototype, "createUser", null);
139
146
  _ts_decorate([
140
147
  (0, _common.Put)(`${_routes.ADMIN_USERS_ROUTE.USERS}/:id`),
148
+ (0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
141
149
  _ts_param(0, (0, _common.Param)('id', _common.ParseIntPipe)),
142
150
  _ts_param(1, (0, _common.Body)()),
143
151
  _ts_metadata("design:type", Function),
@@ -149,14 +157,13 @@ _ts_decorate([
149
157
  ], AdminUsersController.prototype, "updateUser", null);
150
158
  _ts_decorate([
151
159
  (0, _common.Delete)(`${_routes.ADMIN_USERS_ROUTE.USERS}/:id`),
152
- _ts_param(0, (0, _userdecorator.GetUser)()),
153
- _ts_param(1, (0, _common.Param)('id', _common.ParseIntPipe)),
154
- _ts_param(2, (0, _common.Body)()),
160
+ (0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuard),
161
+ _ts_param(0, (0, _common.Param)('id', _common.ParseIntPipe)),
162
+ _ts_param(1, (0, _common.Body)()),
155
163
  _ts_metadata("design:type", Function),
156
164
  _ts_metadata("design:paramtypes", [
157
- typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
158
165
  Number,
159
- typeof _deleteuserdto.AdminDeleteUserDto === "undefined" ? Object : _deleteuserdto.AdminDeleteUserDto
166
+ typeof _deleteuserdto.DeleteUserDto === "undefined" ? Object : _deleteuserdto.DeleteUserDto
160
167
  ]),
161
168
  _ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
162
169
  ], AdminUsersController.prototype, "deleteUser", null);
@@ -177,6 +184,7 @@ _ts_decorate([
177
184
  ], AdminUsersController.prototype, "getGuest", null);
178
185
  _ts_decorate([
179
186
  (0, _common.Post)(_routes.ADMIN_USERS_ROUTE.GUESTS),
187
+ (0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
180
188
  _ts_param(0, (0, _userdecorator.GetUser)()),
181
189
  _ts_param(1, (0, _common.Body)()),
182
190
  _ts_metadata("design:type", Function),
@@ -188,6 +196,7 @@ _ts_decorate([
188
196
  ], AdminUsersController.prototype, "createGuest", null);
189
197
  _ts_decorate([
190
198
  (0, _common.Put)(`${_routes.ADMIN_USERS_ROUTE.GUESTS}/:id`),
199
+ (0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuardWithoutPassword),
191
200
  _ts_param(0, (0, _common.Param)('id', _common.ParseIntPipe)),
192
201
  _ts_param(1, (0, _common.Body)()),
193
202
  _ts_metadata("design:type", Function),
@@ -199,10 +208,13 @@ _ts_decorate([
199
208
  ], AdminUsersController.prototype, "updateGuest", null);
200
209
  _ts_decorate([
201
210
  (0, _common.Delete)(`${_routes.ADMIN_USERS_ROUTE.GUESTS}/:id`),
211
+ (0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuard),
202
212
  _ts_param(0, (0, _common.Param)('id', _common.ParseIntPipe)),
213
+ _ts_param(1, (0, _common.Body)()),
203
214
  _ts_metadata("design:type", Function),
204
215
  _ts_metadata("design:paramtypes", [
205
- Number
216
+ Number,
217
+ typeof _deleteuserdto.DeleteUserDto === "undefined" ? Object : _deleteuserdto.DeleteUserDto
206
218
  ]),
207
219
  _ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
208
220
  ], AdminUsersController.prototype, "deleteGuest", null);
@@ -308,17 +320,16 @@ _ts_decorate([
308
320
  ], AdminUsersController.prototype, "updateUserFromGroup", null);
309
321
  _ts_decorate([
310
322
  (0, _common.Post)(`${_routes.ADMIN_USERS_ROUTE.IMPERSONATE}/:id`),
323
+ (0, _common.UseGuards)(_authtwofaguard.AuthTwoFaGuard),
311
324
  _ts_param(0, (0, _userdecorator.GetUser)()),
312
325
  _ts_param(1, (0, _common.Param)('id', _common.ParseIntPipe)),
313
- _ts_param(2, (0, _common.Body)()),
314
- _ts_param(3, (0, _common.Res)({
326
+ _ts_param(2, (0, _common.Res)({
315
327
  passthrough: true
316
328
  })),
317
329
  _ts_metadata("design:type", Function),
318
330
  _ts_metadata("design:paramtypes", [
319
331
  typeof _usermodel.UserModel === "undefined" ? Object : _usermodel.UserModel,
320
332
  Number,
321
- typeof _userpassworddto.UserPasswordDto === "undefined" ? Object : _userpassworddto.UserPasswordDto,
322
333
  typeof _fastify.FastifyReply === "undefined" ? Object : _fastify.FastifyReply
323
334
  ]),
324
335
  _ts_metadata("design:returntype", typeof Promise === "undefined" ? Object : Promise)
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/users/admin-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, Param, ParseIntPipe, Patch, Post, Put, Res, Search, UseGuards } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { LoginResponseDto } from '../../authentication/dto/login-response.dto'\nimport { GROUP_TYPE } from './constants/group'\nimport { ADMIN_USERS_ROUTE } from './constants/routes'\nimport { USER_ROLE } from './constants/user'\nimport { UserHaveRole } from './decorators/roles.decorator'\nimport { GetUser } from './decorators/user.decorator'\nimport { CreateOrUpdateGroupDto } from './dto/create-or-update-group.dto'\nimport { CreateUserDto, UpdateUserDto, UpdateUserFromGroupDto } from './dto/create-or-update-user.dto'\nimport { AdminDeleteUserDto } from './dto/delete-user.dto'\nimport { SearchMembersDto } from './dto/search-members.dto'\nimport { UserPasswordDto } from './dto/user-password.dto'\nimport { UserRolesGuard } from './guards/roles.guard'\nimport { AdminGroup } from './interfaces/admin-group.interface'\nimport { AdminUser } from './interfaces/admin-user.interface'\nimport { GroupBrowse } from './interfaces/group-browse.interface'\nimport { GuestUser } from './interfaces/guest-user.interface'\nimport { Member } from './interfaces/member.interface'\nimport { UserModel } from './models/user.model'\nimport { AdminUsersManager } from './services/admin-users-manager.service'\n\n@Controller(ADMIN_USERS_ROUTE.BASE)\n@UserHaveRole(USER_ROLE.ADMINISTRATOR)\n@UseGuards(UserRolesGuard)\nexport class AdminUsersController {\n constructor(private readonly usersAdminManager: AdminUsersManager) {}\n\n @Get(`${ADMIN_USERS_ROUTE.USERS}/${ADMIN_USERS_ROUTE.LIST}`)\n listUsers(): Promise<AdminUser[]> {\n return this.usersAdminManager.listUsers()\n }\n\n @Get(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n getUser(@Param('id', ParseIntPipe) userId: number): Promise<AdminUser> {\n return this.usersAdminManager.getUser(userId)\n }\n\n @Post(ADMIN_USERS_ROUTE.USERS)\n createUser(@Body() createUserDto: CreateUserDto): Promise<AdminUser> {\n return this.usersAdminManager.createUserOrGuest(\n createUserDto,\n typeof createUserDto?.role !== 'undefined' ? createUserDto.role : USER_ROLE.USER,\n true\n )\n }\n\n @Put(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n updateUser(@Param('id', ParseIntPipe) userId: number, @Body() updateUserDto: UpdateUserDto): Promise<AdminUser> {\n return this.usersAdminManager.updateUserOrGuest(userId, updateUserDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n deleteUser(@GetUser() admin: UserModel, @Param('id', ParseIntPipe) userId: number, @Body() adminDeleteUserDto: AdminDeleteUserDto): Promise<void> {\n return this.usersAdminManager.deleteUserFromAdmin(admin, userId, adminDeleteUserDto)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GUESTS}/${ADMIN_USERS_ROUTE.LIST}`)\n listGuests(): Promise<AdminUser[]> {\n return this.usersAdminManager.listGuests()\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n getGuest(@Param('id', ParseIntPipe) guestId: number): Promise<AdminUser> {\n return this.usersAdminManager.getGuest(guestId)\n }\n\n @Post(ADMIN_USERS_ROUTE.GUESTS)\n createGuest(@GetUser() user: UserModel, @Body() createGuestDto: CreateUserDto): Promise<GuestUser> {\n return this.usersAdminManager.createGuest(user, createGuestDto)\n }\n\n @Put(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n updateGuest(@Param('id', ParseIntPipe) guestId: number, @Body() updateGuestDto: UpdateUserDto): Promise<GuestUser> {\n return this.usersAdminManager.updateGuest(guestId, updateGuestDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n deleteGuest(@Param('id', ParseIntPipe) guestId: number): Promise<void> {\n return this.usersAdminManager.deleteGuest(guestId)\n }\n\n @Search(ADMIN_USERS_ROUTE.MEMBERS)\n searchMembers(@Body() searchMembersDto: SearchMembersDto): Promise<Member[]> {\n return this.usersAdminManager.searchMembers(searchMembersDto)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GROUPS}/${ADMIN_USERS_ROUTE.BROWSE}/:name?`)\n browseGroups(@Param('name') name?: string): Promise<GroupBrowse> {\n return this.usersAdminManager.browseGroups(name)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.PGROUPS}/${ADMIN_USERS_ROUTE.BROWSE}/:name?`)\n browsePersonalGroups(@Param('name') name?: string): Promise<GroupBrowse> {\n return this.usersAdminManager.browseGroups(name, GROUP_TYPE.PERSONAL)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n getGroup(@Param('id', ParseIntPipe) groupId: number): Promise<AdminGroup> {\n return this.usersAdminManager.getGroup(groupId)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.GROUPS}`)\n createGroup(@Body() createGroupDto: CreateOrUpdateGroupDto): Promise<AdminGroup> {\n return this.usersAdminManager.createGroup(createGroupDto)\n }\n\n @Put(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n updateGroup(@Param('id', ParseIntPipe) groupId: number, @Body() updateGroupDto: CreateOrUpdateGroupDto): Promise<AdminGroup> {\n return this.usersAdminManager.updateGroup(groupId, updateGroupDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n deleteGroup(@Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.usersAdminManager.deleteGroup(groupId)\n }\n\n @Patch(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}`)\n addUsersToGroup(@Param('groupId', ParseIntPipe) groupId: number, @Body() userIds: number[]): Promise<void> {\n return this.usersAdminManager.addUsersToGroup(groupId, userIds)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}/:userId`)\n removeUserFromGroup(@Param('groupId', ParseIntPipe) groupId: number, @Param('userId', ParseIntPipe) userId: number): Promise<void> {\n return this.usersAdminManager.removeUserFromGroup(groupId, userId)\n }\n\n @Patch(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}/:userId`)\n updateUserFromGroup(\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number,\n @Body() updateUserFromGroupDto: UpdateUserFromGroupDto\n ): Promise<void> {\n return this.usersAdminManager.updateUserFromGroup(groupId, userId, updateUserFromGroupDto)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.IMPERSONATE}/:id`)\n impersonateUser(\n @GetUser() admin: UserModel,\n @Param('id', ParseIntPipe) userId: number,\n @Body() adminPasswordDto: UserPasswordDto,\n @Res({ passthrough: true }) res: FastifyReply\n ): Promise<LoginResponseDto> {\n return this.usersAdminManager.impersonateUser(admin, userId, adminPasswordDto, res)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.IMPERSONATE}/${ADMIN_USERS_ROUTE.LOGOUT}`)\n @UserHaveRole(USER_ROLE.GUEST)\n logOutImpersonateUser(@GetUser() user: UserModel, @Res({ passthrough: true }) res: FastifyReply): Promise<LoginResponseDto> {\n return this.usersAdminManager.logoutImpersonateUser(user, res)\n }\n}\n"],"names":["AdminUsersController","listUsers","usersAdminManager","getUser","userId","createUser","createUserDto","createUserOrGuest","role","USER_ROLE","USER","updateUser","updateUserDto","updateUserOrGuest","deleteUser","admin","adminDeleteUserDto","deleteUserFromAdmin","listGuests","getGuest","guestId","createGuest","user","createGuestDto","updateGuest","updateGuestDto","deleteGuest","searchMembers","searchMembersDto","browseGroups","name","browsePersonalGroups","GROUP_TYPE","PERSONAL","getGroup","groupId","createGroup","createGroupDto","updateGroup","updateGroupDto","deleteGroup","addUsersToGroup","userIds","removeUserFromGroup","updateUserFromGroup","updateUserFromGroupDto","impersonateUser","adminPasswordDto","res","logOutImpersonateUser","logoutImpersonateUser","ADMIN_USERS_ROUTE","USERS","LIST","GUESTS","MEMBERS","GROUPS","BROWSE","PGROUPS","IMPERSONATE","passthrough","LOGOUT","GUEST","BASE","ADMINISTRATOR"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/users/admin-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, Param, ParseIntPipe, Patch, Post, Put, Res, Search, UseGuards } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { LoginResponseDto } from '../../authentication/dto/login-response.dto'\nimport { AuthTwoFaGuard, AuthTwoFaGuardWithoutPassword } from '../../authentication/guards/auth-two-fa-guard'\nimport { GROUP_TYPE } from './constants/group'\nimport { ADMIN_USERS_ROUTE } from './constants/routes'\nimport { USER_ROLE } from './constants/user'\nimport { UserHaveRole } from './decorators/roles.decorator'\nimport { GetUser } from './decorators/user.decorator'\nimport { CreateOrUpdateGroupDto } from './dto/create-or-update-group.dto'\nimport { CreateUserDto, UpdateUserDto, UpdateUserFromGroupDto } from './dto/create-or-update-user.dto'\nimport { DeleteUserDto } from './dto/delete-user.dto'\nimport { SearchMembersDto } from './dto/search-members.dto'\nimport { UserRolesGuard } from './guards/roles.guard'\nimport { AdminGroup } from './interfaces/admin-group.interface'\nimport { AdminUser } from './interfaces/admin-user.interface'\nimport { GroupBrowse } from './interfaces/group-browse.interface'\nimport { GuestUser } from './interfaces/guest-user.interface'\nimport { Member } from './interfaces/member.interface'\nimport { UserModel } from './models/user.model'\nimport { AdminUsersManager } from './services/admin-users-manager.service'\n\n@Controller(ADMIN_USERS_ROUTE.BASE)\n@UserHaveRole(USER_ROLE.ADMINISTRATOR)\n@UseGuards(UserRolesGuard)\nexport class AdminUsersController {\n constructor(private readonly adminUsersManager: AdminUsersManager) {}\n\n @Get(`${ADMIN_USERS_ROUTE.USERS}/${ADMIN_USERS_ROUTE.LIST}`)\n listUsers(): Promise<AdminUser[]> {\n return this.adminUsersManager.listUsers()\n }\n\n @Get(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n getUser(@Param('id', ParseIntPipe) userId: number): Promise<AdminUser> {\n return this.adminUsersManager.getUser(userId)\n }\n\n @Post(ADMIN_USERS_ROUTE.USERS)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n createUser(@Body() createUserDto: CreateUserDto): Promise<AdminUser> {\n return this.adminUsersManager.createUserOrGuest(\n createUserDto,\n typeof createUserDto?.role !== 'undefined' ? createUserDto.role : USER_ROLE.USER,\n true\n )\n }\n\n @Put(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n updateUser(@Param('id', ParseIntPipe) userId: number, @Body() updateUserDto: UpdateUserDto): Promise<AdminUser> {\n return this.adminUsersManager.updateUserOrGuest(userId, updateUserDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.USERS}/:id`)\n @UseGuards(AuthTwoFaGuard)\n deleteUser(@Param('id', ParseIntPipe) userId: number, @Body() deleteUserDto: DeleteUserDto): Promise<void> {\n return this.adminUsersManager.deleteUserOrGuestFromAdmin(userId, { ...deleteUserDto, isGuest: false })\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GUESTS}/${ADMIN_USERS_ROUTE.LIST}`)\n listGuests(): Promise<AdminUser[]> {\n return this.adminUsersManager.listGuests()\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n getGuest(@Param('id', ParseIntPipe) guestId: number): Promise<AdminUser> {\n return this.adminUsersManager.getGuest(guestId)\n }\n\n @Post(ADMIN_USERS_ROUTE.GUESTS)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n createGuest(@GetUser() user: UserModel, @Body() createGuestDto: CreateUserDto): Promise<GuestUser> {\n return this.adminUsersManager.createGuest(user, createGuestDto)\n }\n\n @Put(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n @UseGuards(AuthTwoFaGuardWithoutPassword)\n updateGuest(@Param('id', ParseIntPipe) guestId: number, @Body() updateGuestDto: UpdateUserDto): Promise<GuestUser> {\n return this.adminUsersManager.updateGuest(guestId, updateGuestDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GUESTS}/:id`)\n @UseGuards(AuthTwoFaGuard)\n deleteGuest(@Param('id', ParseIntPipe) guestId: number, @Body() deleteUserDto: DeleteUserDto): Promise<void> {\n return this.adminUsersManager.deleteUserOrGuestFromAdmin(guestId, { ...deleteUserDto, isGuest: true })\n }\n\n @Search(ADMIN_USERS_ROUTE.MEMBERS)\n searchMembers(@Body() searchMembersDto: SearchMembersDto): Promise<Member[]> {\n return this.adminUsersManager.searchMembers(searchMembersDto)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GROUPS}/${ADMIN_USERS_ROUTE.BROWSE}/:name?`)\n browseGroups(@Param('name') name?: string): Promise<GroupBrowse> {\n return this.adminUsersManager.browseGroups(name)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.PGROUPS}/${ADMIN_USERS_ROUTE.BROWSE}/:name?`)\n browsePersonalGroups(@Param('name') name?: string): Promise<GroupBrowse> {\n return this.adminUsersManager.browseGroups(name, GROUP_TYPE.PERSONAL)\n }\n\n @Get(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n getGroup(@Param('id', ParseIntPipe) groupId: number): Promise<AdminGroup> {\n return this.adminUsersManager.getGroup(groupId)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.GROUPS}`)\n createGroup(@Body() createGroupDto: CreateOrUpdateGroupDto): Promise<AdminGroup> {\n return this.adminUsersManager.createGroup(createGroupDto)\n }\n\n @Put(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n updateGroup(@Param('id', ParseIntPipe) groupId: number, @Body() updateGroupDto: CreateOrUpdateGroupDto): Promise<AdminGroup> {\n return this.adminUsersManager.updateGroup(groupId, updateGroupDto)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GROUPS}/:id`)\n deleteGroup(@Param('id', ParseIntPipe) groupId: number): Promise<void> {\n return this.adminUsersManager.deleteGroup(groupId)\n }\n\n @Patch(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}`)\n addUsersToGroup(@Param('groupId', ParseIntPipe) groupId: number, @Body() userIds: number[]): Promise<void> {\n return this.adminUsersManager.addUsersToGroup(groupId, userIds)\n }\n\n @Delete(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}/:userId`)\n removeUserFromGroup(@Param('groupId', ParseIntPipe) groupId: number, @Param('userId', ParseIntPipe) userId: number): Promise<void> {\n return this.adminUsersManager.removeUserFromGroup(groupId, userId)\n }\n\n @Patch(`${ADMIN_USERS_ROUTE.GROUPS}/:groupId/${ADMIN_USERS_ROUTE.USERS}/:userId`)\n updateUserFromGroup(\n @Param('groupId', ParseIntPipe) groupId: number,\n @Param('userId', ParseIntPipe) userId: number,\n @Body() updateUserFromGroupDto: UpdateUserFromGroupDto\n ): Promise<void> {\n return this.adminUsersManager.updateUserFromGroup(groupId, userId, updateUserFromGroupDto)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.IMPERSONATE}/:id`)\n @UseGuards(AuthTwoFaGuard)\n impersonateUser(\n @GetUser() admin: UserModel,\n @Param('id', ParseIntPipe) userId: number,\n @Res({ passthrough: true }) res: FastifyReply\n ): Promise<LoginResponseDto> {\n return this.adminUsersManager.impersonateUser(admin, userId, res)\n }\n\n @Post(`${ADMIN_USERS_ROUTE.IMPERSONATE}/${ADMIN_USERS_ROUTE.LOGOUT}`)\n @UserHaveRole(USER_ROLE.GUEST)\n logOutImpersonateUser(@GetUser() user: UserModel, @Res({ passthrough: true }) res: FastifyReply): Promise<LoginResponseDto> {\n return this.adminUsersManager.logoutImpersonateUser(user, res)\n }\n}\n"],"names":["AdminUsersController","listUsers","adminUsersManager","getUser","userId","createUser","createUserDto","createUserOrGuest","role","USER_ROLE","USER","updateUser","updateUserDto","updateUserOrGuest","deleteUser","deleteUserDto","deleteUserOrGuestFromAdmin","isGuest","listGuests","getGuest","guestId","createGuest","user","createGuestDto","updateGuest","updateGuestDto","deleteGuest","searchMembers","searchMembersDto","browseGroups","name","browsePersonalGroups","GROUP_TYPE","PERSONAL","getGroup","groupId","createGroup","createGroupDto","updateGroup","updateGroupDto","deleteGroup","addUsersToGroup","userIds","removeUserFromGroup","updateUserFromGroup","updateUserFromGroupDto","impersonateUser","admin","res","logOutImpersonateUser","logoutImpersonateUser","ADMIN_USERS_ROUTE","USERS","LIST","GUESTS","MEMBERS","GROUPS","BROWSE","PGROUPS","IMPERSONATE","passthrough","LOGOUT","GUEST","BASE","ADMINISTRATOR"],"mappings":"AAAA;;;;CAIC;;;;+BA2BYA;;;eAAAA;;;wBAzBgG;yBAChF;gCAEiC;uBACnC;wBACO;sBACR;gCACG;+BACL;wCACe;uCAC8B;+BACvC;kCACG;4BACF;2BAML;0CACQ;;;;;;;;;;;;;;;AAK3B,IAAA,AAAMA,uBAAN,MAAMA;IAIXC,YAAkC;QAChC,OAAO,IAAI,CAACC,iBAAiB,CAACD,SAAS;IACzC;IAGAE,QAAQ,AAA2BC,MAAc,EAAsB;QACrE,OAAO,IAAI,CAACF,iBAAiB,CAACC,OAAO,CAACC;IACxC;IAIAC,WAAW,AAAQC,aAA4B,EAAsB;QACnE,OAAO,IAAI,CAACJ,iBAAiB,CAACK,iBAAiB,CAC7CD,eACA,OAAOA,eAAeE,SAAS,cAAcF,cAAcE,IAAI,GAAGC,eAAS,CAACC,IAAI,EAChF;IAEJ;IAIAC,WAAW,AAA2BP,MAAc,EAAE,AAAQQ,aAA4B,EAAsB;QAC9G,OAAO,IAAI,CAACV,iBAAiB,CAACW,iBAAiB,CAACT,QAAQQ;IAC1D;IAIAE,WAAW,AAA2BV,MAAc,EAAE,AAAQW,aAA4B,EAAiB;QACzG,OAAO,IAAI,CAACb,iBAAiB,CAACc,0BAA0B,CAACZ,QAAQ;YAAE,GAAGW,aAAa;YAAEE,SAAS;QAAM;IACtG;IAGAC,aAAmC;QACjC,OAAO,IAAI,CAAChB,iBAAiB,CAACgB,UAAU;IAC1C;IAGAC,SAAS,AAA2BC,OAAe,EAAsB;QACvE,OAAO,IAAI,CAAClB,iBAAiB,CAACiB,QAAQ,CAACC;IACzC;IAIAC,YAAY,AAAWC,IAAe,EAAE,AAAQC,cAA6B,EAAsB;QACjG,OAAO,IAAI,CAACrB,iBAAiB,CAACmB,WAAW,CAACC,MAAMC;IAClD;IAIAC,YAAY,AAA2BJ,OAAe,EAAE,AAAQK,cAA6B,EAAsB;QACjH,OAAO,IAAI,CAACvB,iBAAiB,CAACsB,WAAW,CAACJ,SAASK;IACrD;IAIAC,YAAY,AAA2BN,OAAe,EAAE,AAAQL,aAA4B,EAAiB;QAC3G,OAAO,IAAI,CAACb,iBAAiB,CAACc,0BAA0B,CAACI,SAAS;YAAE,GAAGL,aAAa;YAAEE,SAAS;QAAK;IACtG;IAGAU,cAAc,AAAQC,gBAAkC,EAAqB;QAC3E,OAAO,IAAI,CAAC1B,iBAAiB,CAACyB,aAAa,CAACC;IAC9C;IAGAC,aAAa,AAAeC,IAAa,EAAwB;QAC/D,OAAO,IAAI,CAAC5B,iBAAiB,CAAC2B,YAAY,CAACC;IAC7C;IAGAC,qBAAqB,AAAeD,IAAa,EAAwB;QACvE,OAAO,IAAI,CAAC5B,iBAAiB,CAAC2B,YAAY,CAACC,MAAME,iBAAU,CAACC,QAAQ;IACtE;IAGAC,SAAS,AAA2BC,OAAe,EAAuB;QACxE,OAAO,IAAI,CAACjC,iBAAiB,CAACgC,QAAQ,CAACC;IACzC;IAGAC,YAAY,AAAQC,cAAsC,EAAuB;QAC/E,OAAO,IAAI,CAACnC,iBAAiB,CAACkC,WAAW,CAACC;IAC5C;IAGAC,YAAY,AAA2BH,OAAe,EAAE,AAAQI,cAAsC,EAAuB;QAC3H,OAAO,IAAI,CAACrC,iBAAiB,CAACoC,WAAW,CAACH,SAASI;IACrD;IAGAC,YAAY,AAA2BL,OAAe,EAAiB;QACrE,OAAO,IAAI,CAACjC,iBAAiB,CAACsC,WAAW,CAACL;IAC5C;IAGAM,gBAAgB,AAAgCN,OAAe,EAAE,AAAQO,OAAiB,EAAiB;QACzG,OAAO,IAAI,CAACxC,iBAAiB,CAACuC,eAAe,CAACN,SAASO;IACzD;IAGAC,oBAAoB,AAAgCR,OAAe,EAAE,AAA+B/B,MAAc,EAAiB;QACjI,OAAO,IAAI,CAACF,iBAAiB,CAACyC,mBAAmB,CAACR,SAAS/B;IAC7D;IAGAwC,oBACE,AAAgCT,OAAe,EAC/C,AAA+B/B,MAAc,EAC7C,AAAQyC,sBAA8C,EACvC;QACf,OAAO,IAAI,CAAC3C,iBAAiB,CAAC0C,mBAAmB,CAACT,SAAS/B,QAAQyC;IACrE;IAIAC,gBACE,AAAWC,KAAgB,EAC3B,AAA2B3C,MAAc,EACzC,AAA4B4C,GAAiB,EAClB;QAC3B,OAAO,IAAI,CAAC9C,iBAAiB,CAAC4C,eAAe,CAACC,OAAO3C,QAAQ4C;IAC/D;IAIAC,sBAAsB,AAAW3B,IAAe,EAAE,AAA4B0B,GAAiB,EAA6B;QAC1H,OAAO,IAAI,CAAC9C,iBAAiB,CAACgD,qBAAqB,CAAC5B,MAAM0B;IAC5D;IAlIA,YAAY,AAAiB9C,iBAAoC,CAAE;aAAtCA,oBAAAA;IAAuC;AAmItE;;wBAjIUiD,yBAAiB,CAACC,KAAK,CAAC,CAAC,EAAED,yBAAiB,CAACE,IAAI;;;;;;wBAKjDF,yBAAiB,CAACC,KAAK,CAAC,IAAI;;;;;;;;;gDAKZA;;;;;;;;;;wBAUhBD,yBAAiB,CAACC,KAAK,CAAC,IAAI;;;;;;;;;;;;2BAMzBD,yBAAiB,CAACC,KAAK,CAAC,IAAI;;;;;;;;;;;;wBAM/BD,yBAAiB,CAACG,MAAM,CAAC,CAAC,EAAEH,yBAAiB,CAACE,IAAI;;;;;;wBAKlDF,yBAAiB,CAACG,MAAM,CAAC,IAAI;;;;;;;;;gDAKbA;;;;;;;;;;;;wBAMhBH,yBAAiB,CAACG,MAAM,CAAC,IAAI;;;;;;;;;;;;2BAM1BH,yBAAiB,CAACG,MAAM,CAAC,IAAI;;;;;;;;;;;;kDAMdC;;;;;;;;;wBAKlBJ,yBAAiB,CAACK,MAAM,CAAC,CAAC,EAAEL,yBAAiB,CAACM,MAAM,CAAC,OAAO;;;;;;;;;wBAK5DN,yBAAiB,CAACO,OAAO,CAAC,CAAC,EAAEP,yBAAiB,CAACM,MAAM,CAAC,OAAO;;;;;;;;;wBAK7DN,yBAAiB,CAACK,MAAM,CAAC,IAAI;;;;;;;;;yBAK5BL,yBAAiB,CAACK,MAAM;;;;;;;;;wBAKzBL,yBAAiB,CAACK,MAAM,CAAC,IAAI;;;;;;;;;;;2BAK1BL,yBAAiB,CAACK,MAAM,CAAC,IAAI;;;;;;;;;0BAK9BL,yBAAiB,CAACK,MAAM,CAAC,UAAU,EAAEL,yBAAiB,CAACC,KAAK;;;;;;;;;;;2BAK3DD,yBAAiB,CAACK,MAAM,CAAC,UAAU,EAAEL,yBAAiB,CAACC,KAAK,CAAC,QAAQ;;;;;;;;;;;0BAKtED,yBAAiB,CAACK,MAAM,CAAC,UAAU,EAAEL,yBAAiB,CAACC,KAAK,CAAC,QAAQ;;;;;;;;;;;;;yBAStED,yBAAiB,CAACQ,WAAW,CAAC,IAAI;;;;;QAKlCC,aAAa;;;;;;;;;;;yBAKbT,yBAAiB,CAACQ,WAAW,CAAC,CAAC,EAAER,yBAAiB,CAACU,MAAM;sDAC1CC;;;QACiCF,aAAa;;;;;;;;;;sDApI1CG;sDACNC"}
@@ -9,10 +9,13 @@ Object.defineProperty(exports, "__esModule", {
9
9
  const _config = require("@nestjs/config");
10
10
  const _jwt = require("@nestjs/jwt");
11
11
  const _testing = require("@nestjs/testing");
12
+ const _authtwofaguard = require("../../authentication/guards/auth-two-fa-guard");
12
13
  const _authmanagerservice = require("../../authentication/services/auth-manager.service");
14
+ const _authmethodtwofaservice = require("../../authentication/services/auth-methods/auth-method-two-fa.service");
13
15
  const _configenvironment = require("../../configuration/config.environment");
14
16
  const _cacheservice = require("../../infrastructure/cache/services/cache.service");
15
17
  const _constants = require("../../infrastructure/database/constants");
18
+ const _notificationsmanagerservice = require("../notifications/services/notifications-manager.service");
16
19
  const _adminuserscontroller = require("./admin-users.controller");
17
20
  const _adminusersmanagerservice = require("./services/admin-users-manager.service");
18
21
  const _adminusersqueriesservice = require("./services/admin-users-queries.service");
@@ -42,6 +45,18 @@ describe(_adminuserscontroller.AdminUsersController.name, ()=>{
42
45
  provide: _cacheservice.Cache,
43
46
  useValue: {}
44
47
  },
48
+ {
49
+ provide: _authmethodtwofaservice.AuthMethod2FA,
50
+ useValue: {}
51
+ },
52
+ {
53
+ provide: _authtwofaguard.AuthTwoFaGuard,
54
+ useValue: {}
55
+ },
56
+ {
57
+ provide: _notificationsmanagerservice.NotificationsManager,
58
+ useValue: {}
59
+ },
45
60
  _jwt.JwtService,
46
61
  _authmanagerservice.AuthManager,
47
62
  _adminusersmanagerservice.AdminUsersManager,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../backend/src/applications/users/admin-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 { exportConfiguration } from '../../configuration/config.environment'\nimport { Cache } from '../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../infrastructure/database/constants'\nimport { AdminUsersController } from './admin-users.controller'\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'\n\ndescribe(AdminUsersController.name, () => {\n let controller: AdminUsersController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n imports: [await ConfigModule.forRoot({ load: [exportConfiguration], isGlobal: true })],\n controllers: [AdminUsersController],\n providers: [\n { provide: DB_TOKEN_PROVIDER, useValue: {} },\n {\n provide: Cache,\n useValue: {}\n },\n JwtService,\n AuthManager,\n AdminUsersManager,\n AdminUsersQueries,\n UsersManager,\n UsersQueries\n ]\n }).compile()\n\n controller = module.get<AdminUsersController>(AdminUsersController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n})\n"],"names":["describe","AdminUsersController","name","controller","beforeAll","module","Test","createTestingModule","imports","ConfigModule","forRoot","load","exportConfiguration","isGlobal","controllers","providers","provide","DB_TOKEN_PROVIDER","useValue","Cache","JwtService","AuthManager","AdminUsersManager","AdminUsersQueries","UsersManager","UsersQueries","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;wBAE4B;qBACF;yBACS;oCACR;mCACQ;8BACd;2BACY;sCACG;0CACH;0CACA;qCACL;qCACA;AAE7BA,SAASC,0CAAoB,CAACC,IAAI,EAAE;IAClC,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,SAAS;gBAAC,MAAMC,oBAAY,CAACC,OAAO,CAAC;oBAAEC,MAAM;wBAACC,sCAAmB;qBAAC;oBAAEC,UAAU;gBAAK;aAAG;YACtFC,aAAa;gBAACb,0CAAoB;aAAC;YACnCc,WAAW;gBACT;oBAAEC,SAASC,4BAAiB;oBAAEC,UAAU,CAAC;gBAAE;gBAC3C;oBACEF,SAASG,mBAAK;oBACdD,UAAU,CAAC;gBACb;gBACAE,eAAU;gBACVC,+BAAW;gBACXC,2CAAiB;gBACjBC,2CAAiB;gBACjBC,iCAAY;gBACZC,iCAAY;aACb;QACH,GAAGC,OAAO;QAEVvB,aAAaE,OAAOsB,GAAG,CAAuB1B,0CAAoB;IACpE;IAEA2B,GAAG,qBAAqB;QACtBC,OAAO1B,YAAY2B,WAAW;IAChC;AACF"}
1
+ {"version":3,"sources":["../../../../backend/src/applications/users/admin-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 { AuthTwoFaGuard } from '../../authentication/guards/auth-two-fa-guard'\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 { AdminUsersController } from './admin-users.controller'\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'\n\ndescribe(AdminUsersController.name, () => {\n let controller: AdminUsersController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n imports: [await ConfigModule.forRoot({ load: [exportConfiguration], isGlobal: true })],\n controllers: [AdminUsersController],\n providers: [\n { provide: DB_TOKEN_PROVIDER, useValue: {} },\n {\n provide: Cache,\n useValue: {}\n },\n { provide: AuthMethod2FA, useValue: {} },\n { provide: AuthTwoFaGuard, useValue: {} },\n { provide: NotificationsManager, useValue: {} },\n JwtService,\n AuthManager,\n AdminUsersManager,\n AdminUsersQueries,\n UsersManager,\n UsersQueries\n ]\n }).compile()\n\n controller = module.get<AdminUsersController>(AdminUsersController)\n })\n\n it('should be defined', () => {\n expect(controller).toBeDefined()\n })\n})\n"],"names":["describe","AdminUsersController","name","controller","beforeAll","module","Test","createTestingModule","imports","ConfigModule","forRoot","load","exportConfiguration","isGlobal","controllers","providers","provide","DB_TOKEN_PROVIDER","useValue","Cache","AuthMethod2FA","AuthTwoFaGuard","NotificationsManager","JwtService","AuthManager","AdminUsersManager","AdminUsersQueries","UsersManager","UsersQueries","compile","get","it","expect","toBeDefined"],"mappings":"AAAA;;;;CAIC;;;;wBAE4B;qBACF;yBACS;gCACL;oCACH;wCACE;mCACM;8BACd;2BACY;6CACG;sCACA;0CACH;0CACA;qCACL;qCACA;AAE7BA,SAASC,0CAAoB,CAACC,IAAI,EAAE;IAClC,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,SAAS;gBAAC,MAAMC,oBAAY,CAACC,OAAO,CAAC;oBAAEC,MAAM;wBAACC,sCAAmB;qBAAC;oBAAEC,UAAU;gBAAK;aAAG;YACtFC,aAAa;gBAACb,0CAAoB;aAAC;YACnCc,WAAW;gBACT;oBAAEC,SAASC,4BAAiB;oBAAEC,UAAU,CAAC;gBAAE;gBAC3C;oBACEF,SAASG,mBAAK;oBACdD,UAAU,CAAC;gBACb;gBACA;oBAAEF,SAASI,qCAAa;oBAAEF,UAAU,CAAC;gBAAE;gBACvC;oBAAEF,SAASK,8BAAc;oBAAEH,UAAU,CAAC;gBAAE;gBACxC;oBAAEF,SAASM,iDAAoB;oBAAEJ,UAAU,CAAC;gBAAE;gBAC9CK,eAAU;gBACVC,+BAAW;gBACXC,2CAAiB;gBACjBC,2CAAiB;gBACjBC,iCAAY;gBACZC,iCAAY;aACb;QACH,GAAGC,OAAO;QAEV1B,aAAaE,OAAOyB,GAAG,CAAuB7B,0CAAoB;IACpE;IAEA8B,GAAG,qBAAqB;QACtBC,OAAO7B,YAAY8B,WAAW;IAChC;AACF"}
@@ -55,6 +55,9 @@ _export(exports, {
55
55
  get API_USERS_ME () {
56
56
  return API_USERS_ME;
57
57
  },
58
+ get API_USERS_MY_APP_PASSWORDS () {
59
+ return API_USERS_MY_APP_PASSWORDS;
60
+ },
58
61
  get API_USERS_MY_AVATAR () {
59
62
  return API_USERS_MY_AVATAR;
60
63
  },
@@ -89,6 +92,7 @@ const USERS_ROUTE = {
89
92
  ME: 'me',
90
93
  LANGUAGE: 'language',
91
94
  PASSWORD: 'password',
95
+ APP_PASSWORDS: 'app_passwords',
92
96
  NOTIFICATION: 'notification',
93
97
  AVATAR: 'avatar',
94
98
  GROUPS: 'groups',
@@ -100,6 +104,7 @@ const USERS_ROUTE = {
100
104
  const API_USERS_ME = `${USERS_ROUTE.BASE}/${USERS_ROUTE.ME}`;
101
105
  const API_USERS_MY_LANGUAGE = `${API_USERS_ME}/${USERS_ROUTE.LANGUAGE}`;
102
106
  const API_USERS_MY_PASSWORD = `${API_USERS_ME}/${USERS_ROUTE.PASSWORD}`;
107
+ const API_USERS_MY_APP_PASSWORDS = `${API_USERS_ME}/${USERS_ROUTE.APP_PASSWORDS}`;
103
108
  const API_USERS_MY_NOTIFICATION = `${API_USERS_ME}/${USERS_ROUTE.NOTIFICATION}`;
104
109
  const API_USERS_MY_AVATAR = `${API_USERS_ME}/${USERS_ROUTE.AVATAR}`;
105
110
  const API_USERS_MY_GROUPS = `${API_USERS_ME}/${USERS_ROUTE.GROUPS}`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/users/constants/routes.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { ADMIN_ROUTE } from '../../admin/constants/routes'\n\nexport const USERS_ROUTE = {\n BASE: '/api/users',\n ME: 'me',\n LANGUAGE: 'language',\n PASSWORD: 'password',\n NOTIFICATION: 'notification',\n AVATAR: 'avatar',\n GROUPS: 'groups',\n USERS: 'users',\n GUESTS: 'guests',\n BROWSE: 'browse',\n GROUPS_LEAVE: 'leave'\n} as const\n\nexport const API_USERS_ME = `${USERS_ROUTE.BASE}/${USERS_ROUTE.ME}`\nexport const API_USERS_MY_LANGUAGE = `${API_USERS_ME}/${USERS_ROUTE.LANGUAGE}`\nexport const API_USERS_MY_PASSWORD = `${API_USERS_ME}/${USERS_ROUTE.PASSWORD}`\nexport const API_USERS_MY_NOTIFICATION = `${API_USERS_ME}/${USERS_ROUTE.NOTIFICATION}`\nexport const API_USERS_MY_AVATAR = `${API_USERS_ME}/${USERS_ROUTE.AVATAR}`\nexport const API_USERS_MY_GROUPS = `${API_USERS_ME}/${USERS_ROUTE.GROUPS}`\nexport const API_USERS_MY_GROUPS_BROWSE = `${API_USERS_MY_GROUPS}/${USERS_ROUTE.BROWSE}`\nexport const API_USERS_MY_GROUPS_LEAVE = `${API_USERS_MY_GROUPS}/${USERS_ROUTE.GROUPS_LEAVE}`\nexport const API_USERS_MY_GUESTS = `${API_USERS_ME}/${USERS_ROUTE.GUESTS}`\nexport const API_USERS_AVATAR = `${USERS_ROUTE.BASE}/${USERS_ROUTE.AVATAR}`\n\nexport const ADMIN_USERS_ROUTE = {\n BASE: ADMIN_ROUTE.BASE,\n LIST: 'list',\n USERS: 'users',\n GUESTS: 'guests',\n GROUPS: 'groups',\n PGROUPS: 'personal_groups',\n MEMBERS: 'members',\n IMPERSONATE: 'impersonate',\n LOGOUT: 'logout',\n BROWSE: 'browse'\n} as const\nexport const API_ADMIN_USERS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.USERS}`\nexport const API_ADMIN_USERS_LIST = `${API_ADMIN_USERS}/${ADMIN_USERS_ROUTE.LIST}`\nexport const API_ADMIN_GUESTS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.GUESTS}`\nexport const API_ADMIN_GUESTS_LIST = `${API_ADMIN_GUESTS}/${ADMIN_USERS_ROUTE.LIST}`\nexport const API_ADMIN_GROUPS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.GROUPS}`\nexport const API_ADMIN_PGROUPS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.PGROUPS}`\nexport const API_ADMIN_GROUPS_BROWSE = `${API_ADMIN_GROUPS}/${ADMIN_USERS_ROUTE.BROWSE}`\nexport const API_ADMIN_PERSONAL_GROUPS_BROWSE = `${API_ADMIN_PGROUPS}/${ADMIN_USERS_ROUTE.BROWSE}`\nexport const API_ADMIN_MEMBERS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.MEMBERS}`\nexport const API_ADMIN_IMPERSONATE = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.IMPERSONATE}`\nexport const API_ADMIN_IMPERSONATE_LOGOUT = `${API_ADMIN_IMPERSONATE}/${ADMIN_USERS_ROUTE.LOGOUT}`\n"],"names":["ADMIN_USERS_ROUTE","API_ADMIN_GROUPS","API_ADMIN_GROUPS_BROWSE","API_ADMIN_GUESTS","API_ADMIN_GUESTS_LIST","API_ADMIN_IMPERSONATE","API_ADMIN_IMPERSONATE_LOGOUT","API_ADMIN_MEMBERS","API_ADMIN_PERSONAL_GROUPS_BROWSE","API_ADMIN_PGROUPS","API_ADMIN_USERS","API_ADMIN_USERS_LIST","API_USERS_AVATAR","API_USERS_ME","API_USERS_MY_AVATAR","API_USERS_MY_GROUPS","API_USERS_MY_GROUPS_BROWSE","API_USERS_MY_GROUPS_LEAVE","API_USERS_MY_GUESTS","API_USERS_MY_LANGUAGE","API_USERS_MY_NOTIFICATION","API_USERS_MY_PASSWORD","USERS_ROUTE","BASE","ME","LANGUAGE","PASSWORD","NOTIFICATION","AVATAR","GROUPS","USERS","GUESTS","BROWSE","GROUPS_LEAVE","ADMIN_ROUTE","LIST","PGROUPS","MEMBERS","IMPERSONATE","LOGOUT"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QA6BYA;eAAAA;;QAgBAC;eAAAA;;QAEAC;eAAAA;;QAJAC;eAAAA;;QACAC;eAAAA;;QAMAC;eAAAA;;QACAC;eAAAA;;QAFAC;eAAAA;;QADAC;eAAAA;;QAFAC;eAAAA;;QALAC;eAAAA;;QACAC;eAAAA;;QAfAC;eAAAA;;QATAC;eAAAA;;QAIAC;eAAAA;;QACAC;eAAAA;;QACAC;eAAAA;;QACAC;eAAAA;;QACAC;eAAAA;;QAPAC;eAAAA;;QAEAC;eAAAA;;QADAC;eAAAA;;QAhBAC;eAAAA;;;wBAFe;AAErB,MAAMA,cAAc;IACzBC,MAAM;IACNC,IAAI;IACJC,UAAU;IACVC,UAAU;IACVC,cAAc;IACdC,QAAQ;IACRC,QAAQ;IACRC,OAAO;IACPC,QAAQ;IACRC,QAAQ;IACRC,cAAc;AAChB;AAEO,MAAMpB,eAAe,GAAGS,YAAYC,IAAI,CAAC,CAAC,EAAED,YAAYE,EAAE,EAAE;AAC5D,MAAML,wBAAwB,GAAGN,aAAa,CAAC,EAAES,YAAYG,QAAQ,EAAE;AACvE,MAAMJ,wBAAwB,GAAGR,aAAa,CAAC,EAAES,YAAYI,QAAQ,EAAE;AACvE,MAAMN,4BAA4B,GAAGP,aAAa,CAAC,EAAES,YAAYK,YAAY,EAAE;AAC/E,MAAMb,sBAAsB,GAAGD,aAAa,CAAC,EAAES,YAAYM,MAAM,EAAE;AACnE,MAAMb,sBAAsB,GAAGF,aAAa,CAAC,EAAES,YAAYO,MAAM,EAAE;AACnE,MAAMb,6BAA6B,GAAGD,oBAAoB,CAAC,EAAEO,YAAYU,MAAM,EAAE;AACjF,MAAMf,4BAA4B,GAAGF,oBAAoB,CAAC,EAAEO,YAAYW,YAAY,EAAE;AACtF,MAAMf,sBAAsB,GAAGL,aAAa,CAAC,EAAES,YAAYS,MAAM,EAAE;AACnE,MAAMnB,mBAAmB,GAAGU,YAAYC,IAAI,CAAC,CAAC,EAAED,YAAYM,MAAM,EAAE;AAEpE,MAAM5B,oBAAoB;IAC/BuB,MAAMW,mBAAW,CAACX,IAAI;IACtBY,MAAM;IACNL,OAAO;IACPC,QAAQ;IACRF,QAAQ;IACRO,SAAS;IACTC,SAAS;IACTC,aAAa;IACbC,QAAQ;IACRP,QAAQ;AACV;AACO,MAAMtB,kBAAkB,GAAGV,kBAAkBuB,IAAI,CAAC,CAAC,EAAEvB,kBAAkB8B,KAAK,EAAE;AAC9E,MAAMnB,uBAAuB,GAAGD,gBAAgB,CAAC,EAAEV,kBAAkBmC,IAAI,EAAE;AAC3E,MAAMhC,mBAAmB,GAAGH,kBAAkBuB,IAAI,CAAC,CAAC,EAAEvB,kBAAkB+B,MAAM,EAAE;AAChF,MAAM3B,wBAAwB,GAAGD,iBAAiB,CAAC,EAAEH,kBAAkBmC,IAAI,EAAE;AAC7E,MAAMlC,mBAAmB,GAAGD,kBAAkBuB,IAAI,CAAC,CAAC,EAAEvB,kBAAkB6B,MAAM,EAAE;AAChF,MAAMpB,oBAAoB,GAAGT,kBAAkBuB,IAAI,CAAC,CAAC,EAAEvB,kBAAkBoC,OAAO,EAAE;AAClF,MAAMlC,0BAA0B,GAAGD,iBAAiB,CAAC,EAAED,kBAAkBgC,MAAM,EAAE;AACjF,MAAMxB,mCAAmC,GAAGC,kBAAkB,CAAC,EAAET,kBAAkBgC,MAAM,EAAE;AAC3F,MAAMzB,oBAAoB,GAAGP,kBAAkBuB,IAAI,CAAC,CAAC,EAAEvB,kBAAkBqC,OAAO,EAAE;AAClF,MAAMhC,wBAAwB,GAAGL,kBAAkBuB,IAAI,CAAC,CAAC,EAAEvB,kBAAkBsC,WAAW,EAAE;AAC1F,MAAMhC,+BAA+B,GAAGD,sBAAsB,CAAC,EAAEL,kBAAkBuC,MAAM,EAAE"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/users/constants/routes.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { ADMIN_ROUTE } from '../../admin/constants/routes'\n\nexport const USERS_ROUTE = {\n BASE: '/api/users',\n ME: 'me',\n LANGUAGE: 'language',\n PASSWORD: 'password',\n APP_PASSWORDS: 'app_passwords',\n NOTIFICATION: 'notification',\n AVATAR: 'avatar',\n GROUPS: 'groups',\n USERS: 'users',\n GUESTS: 'guests',\n BROWSE: 'browse',\n GROUPS_LEAVE: 'leave'\n} as const\n\nexport const API_USERS_ME = `${USERS_ROUTE.BASE}/${USERS_ROUTE.ME}`\nexport const API_USERS_MY_LANGUAGE = `${API_USERS_ME}/${USERS_ROUTE.LANGUAGE}`\nexport const API_USERS_MY_PASSWORD = `${API_USERS_ME}/${USERS_ROUTE.PASSWORD}`\nexport const API_USERS_MY_APP_PASSWORDS = `${API_USERS_ME}/${USERS_ROUTE.APP_PASSWORDS}`\nexport const API_USERS_MY_NOTIFICATION = `${API_USERS_ME}/${USERS_ROUTE.NOTIFICATION}`\nexport const API_USERS_MY_AVATAR = `${API_USERS_ME}/${USERS_ROUTE.AVATAR}`\nexport const API_USERS_MY_GROUPS = `${API_USERS_ME}/${USERS_ROUTE.GROUPS}`\nexport const API_USERS_MY_GROUPS_BROWSE = `${API_USERS_MY_GROUPS}/${USERS_ROUTE.BROWSE}`\nexport const API_USERS_MY_GROUPS_LEAVE = `${API_USERS_MY_GROUPS}/${USERS_ROUTE.GROUPS_LEAVE}`\nexport const API_USERS_MY_GUESTS = `${API_USERS_ME}/${USERS_ROUTE.GUESTS}`\nexport const API_USERS_AVATAR = `${USERS_ROUTE.BASE}/${USERS_ROUTE.AVATAR}`\n\nexport const ADMIN_USERS_ROUTE = {\n BASE: ADMIN_ROUTE.BASE,\n LIST: 'list',\n USERS: 'users',\n GUESTS: 'guests',\n GROUPS: 'groups',\n PGROUPS: 'personal_groups',\n MEMBERS: 'members',\n IMPERSONATE: 'impersonate',\n LOGOUT: 'logout',\n BROWSE: 'browse'\n} as const\nexport const API_ADMIN_USERS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.USERS}`\nexport const API_ADMIN_USERS_LIST = `${API_ADMIN_USERS}/${ADMIN_USERS_ROUTE.LIST}`\nexport const API_ADMIN_GUESTS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.GUESTS}`\nexport const API_ADMIN_GUESTS_LIST = `${API_ADMIN_GUESTS}/${ADMIN_USERS_ROUTE.LIST}`\nexport const API_ADMIN_GROUPS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.GROUPS}`\nexport const API_ADMIN_PGROUPS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.PGROUPS}`\nexport const API_ADMIN_GROUPS_BROWSE = `${API_ADMIN_GROUPS}/${ADMIN_USERS_ROUTE.BROWSE}`\nexport const API_ADMIN_PERSONAL_GROUPS_BROWSE = `${API_ADMIN_PGROUPS}/${ADMIN_USERS_ROUTE.BROWSE}`\nexport const API_ADMIN_MEMBERS = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.MEMBERS}`\nexport const API_ADMIN_IMPERSONATE = `${ADMIN_USERS_ROUTE.BASE}/${ADMIN_USERS_ROUTE.IMPERSONATE}`\nexport const API_ADMIN_IMPERSONATE_LOGOUT = `${API_ADMIN_IMPERSONATE}/${ADMIN_USERS_ROUTE.LOGOUT}`\n"],"names":["ADMIN_USERS_ROUTE","API_ADMIN_GROUPS","API_ADMIN_GROUPS_BROWSE","API_ADMIN_GUESTS","API_ADMIN_GUESTS_LIST","API_ADMIN_IMPERSONATE","API_ADMIN_IMPERSONATE_LOGOUT","API_ADMIN_MEMBERS","API_ADMIN_PERSONAL_GROUPS_BROWSE","API_ADMIN_PGROUPS","API_ADMIN_USERS","API_ADMIN_USERS_LIST","API_USERS_AVATAR","API_USERS_ME","API_USERS_MY_APP_PASSWORDS","API_USERS_MY_AVATAR","API_USERS_MY_GROUPS","API_USERS_MY_GROUPS_BROWSE","API_USERS_MY_GROUPS_LEAVE","API_USERS_MY_GUESTS","API_USERS_MY_LANGUAGE","API_USERS_MY_NOTIFICATION","API_USERS_MY_PASSWORD","USERS_ROUTE","BASE","ME","LANGUAGE","PASSWORD","APP_PASSWORDS","NOTIFICATION","AVATAR","GROUPS","USERS","GUESTS","BROWSE","GROUPS_LEAVE","ADMIN_ROUTE","LIST","PGROUPS","MEMBERS","IMPERSONATE","LOGOUT"],"mappings":"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"}
@@ -51,6 +51,9 @@ _export(exports, {
51
51
  },
52
52
  get USER_ROLE () {
53
53
  return USER_ROLE;
54
+ },
55
+ get USER_SECRET () {
56
+ return USER_SECRET;
54
57
  }
55
58
  });
56
59
  const USER_PASSWORD_MIN_LENGTH = 8;
@@ -114,5 +117,10 @@ const USER_NOTIFICATION_TEXT = {
114
117
  APPLICATION: 'application',
115
118
  APPLICATION_EMAIL: 'application & email'
116
119
  };
120
+ const USER_SECRET = {
121
+ TWO_FA_SECRET: 'twoFaSecret',
122
+ RECOVERY_CODES: 'recoveryCodes',
123
+ APP_PASSWORDS: 'appPasswords'
124
+ };
117
125
 
118
126
  //# sourceMappingURL=user.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../backend/src/applications/users/constants/user.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nexport const USER_PASSWORD_MIN_LENGTH = 8\nexport const USER_MAX_PASSWORD_ATTEMPTS = 10\nexport const USER_LOGIN_VALIDATION = /^[a-zA-Z0-9\\-\\\\._]{2,255}$/\n\nexport const USER_PATH = {\n TMP: 'tmp',\n TASKS: 'tasks'\n} as const\n\nexport enum USER_ROLE {\n ADMINISTRATOR,\n USER,\n GUEST,\n LINK\n}\n\nexport enum USER_GROUP_ROLE {\n MEMBER,\n MANAGER\n}\n\nexport const USER_PERMS_SEP = ','\n\nexport enum USER_PERMISSION {\n PERSONAL_SPACE = 'personal_space',\n SPACES = 'spaces_access',\n SPACES_ADMIN = 'spaces_admin',\n SHARES = 'shares_access',\n SHARES_ADMIN = 'shares_admin',\n GUESTS_ADMIN = 'guests_admin',\n PERSONAL_GROUPS_ADMIN = 'personal_groups_admin',\n DESKTOP_APP = 'desktop_app_access',\n DESKTOP_APP_SYNC = 'desktop_app_sync',\n WEBDAV = 'webdav_access'\n}\n\nexport enum GUEST_PERMISSION {\n SPACES = USER_PERMISSION.SPACES,\n SHARES = USER_PERMISSION.SHARES,\n WEBDAV = USER_PERMISSION.WEBDAV\n}\n\nexport enum USER_ONLINE_STATUS {\n AVAILABLE,\n BUSY,\n ABSENT,\n OFFLINE\n}\n\nexport const USER_ONLINE_STATUS_LIST = ['available', 'busy', 'absent', 'offline']\n\nexport enum USER_NOTIFICATION {\n APPLICATION,\n APPLICATION_EMAIL\n}\n\nexport const USER_NOTIFICATION_TEXT = {\n APPLICATION: 'application',\n APPLICATION_EMAIL: 'application & email'\n} as const\n"],"names":["GUEST_PERMISSION","USER_GROUP_ROLE","USER_LOGIN_VALIDATION","USER_MAX_PASSWORD_ATTEMPTS","USER_NOTIFICATION","USER_NOTIFICATION_TEXT","USER_ONLINE_STATUS","USER_ONLINE_STATUS_LIST","USER_PASSWORD_MIN_LENGTH","USER_PATH","USER_PERMISSION","USER_PERMS_SEP","USER_ROLE","TMP","TASKS","APPLICATION","APPLICATION_EMAIL"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsCWA;eAAAA;;QApBAC;eAAAA;;QAdCC;eAAAA;;QADAC;eAAAA;;QAkDDC;eAAAA;;QAKCC;eAAAA;;QAdDC;eAAAA;;QAOCC;eAAAA;;QAjDAC;eAAAA;;QAIAC;eAAAA;;QAmBDC;eAAAA;;QAFCC;eAAAA;;QAZDC;eAAAA;;;AATL,MAAMJ,2BAA2B;AACjC,MAAML,6BAA6B;AACnC,MAAMD,wBAAwB;AAE9B,MAAMO,YAAY;IACvBI,KAAK;IACLC,OAAO;AACT;AAEO,IAAA,AAAKF,mCAAAA;;;;;WAAAA;;AAOL,IAAA,AAAKX,yCAAAA;;;WAAAA;;AAKL,MAAMU,iBAAiB;AAEvB,IAAA,AAAKD,yCAAAA;;;;;;;;;;;WAAAA;;AAaL,IAAA,AAAKV,0CAAAA;;;;WAAAA;;AAML,IAAA,AAAKM,4CAAAA;;;;;WAAAA;;AAOL,MAAMC,0BAA0B;IAAC;IAAa;IAAQ;IAAU;CAAU;AAE1E,IAAA,AAAKH,2CAAAA;;;WAAAA;;AAKL,MAAMC,yBAAyB;IACpCU,aAAa;IACbC,mBAAmB;AACrB"}
1
+ {"version":3,"sources":["../../../../../backend/src/applications/users/constants/user.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nexport const USER_PASSWORD_MIN_LENGTH = 8\nexport const USER_MAX_PASSWORD_ATTEMPTS = 10\nexport const USER_LOGIN_VALIDATION = /^[a-zA-Z0-9\\-\\\\._]{2,255}$/\n\nexport const USER_PATH = {\n TMP: 'tmp',\n TASKS: 'tasks'\n} as const\n\nexport enum USER_ROLE {\n ADMINISTRATOR,\n USER,\n GUEST,\n LINK\n}\n\nexport enum USER_GROUP_ROLE {\n MEMBER,\n MANAGER\n}\n\nexport const USER_PERMS_SEP = ','\n\nexport enum USER_PERMISSION {\n PERSONAL_SPACE = 'personal_space',\n SPACES = 'spaces_access',\n SPACES_ADMIN = 'spaces_admin',\n SHARES = 'shares_access',\n SHARES_ADMIN = 'shares_admin',\n GUESTS_ADMIN = 'guests_admin',\n PERSONAL_GROUPS_ADMIN = 'personal_groups_admin',\n DESKTOP_APP = 'desktop_app_access',\n DESKTOP_APP_SYNC = 'desktop_app_sync',\n WEBDAV = 'webdav_access'\n}\n\nexport enum GUEST_PERMISSION {\n SPACES = USER_PERMISSION.SPACES,\n SHARES = USER_PERMISSION.SHARES,\n WEBDAV = USER_PERMISSION.WEBDAV\n}\n\nexport enum USER_ONLINE_STATUS {\n AVAILABLE,\n BUSY,\n ABSENT,\n OFFLINE\n}\n\nexport const USER_ONLINE_STATUS_LIST = ['available', 'busy', 'absent', 'offline']\n\nexport enum USER_NOTIFICATION {\n APPLICATION,\n APPLICATION_EMAIL\n}\n\nexport const USER_NOTIFICATION_TEXT = {\n APPLICATION: 'application',\n APPLICATION_EMAIL: 'application & email'\n} as const\n\nexport const USER_SECRET = {\n TWO_FA_SECRET: 'twoFaSecret',\n RECOVERY_CODES: 'recoveryCodes',\n APP_PASSWORDS: 'appPasswords'\n} as const\n"],"names":["GUEST_PERMISSION","USER_GROUP_ROLE","USER_LOGIN_VALIDATION","USER_MAX_PASSWORD_ATTEMPTS","USER_NOTIFICATION","USER_NOTIFICATION_TEXT","USER_ONLINE_STATUS","USER_ONLINE_STATUS_LIST","USER_PASSWORD_MIN_LENGTH","USER_PATH","USER_PERMISSION","USER_PERMS_SEP","USER_ROLE","USER_SECRET","TMP","TASKS","APPLICATION","APPLICATION_EMAIL","TWO_FA_SECRET","RECOVERY_CODES","APP_PASSWORDS"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;QAsCWA;eAAAA;;QApBAC;eAAAA;;QAdCC;eAAAA;;QADAC;eAAAA;;QAkDDC;eAAAA;;QAKCC;eAAAA;;QAdDC;eAAAA;;QAOCC;eAAAA;;QAjDAC;eAAAA;;QAIAC;eAAAA;;QAmBDC;eAAAA;;QAFCC;eAAAA;;QAZDC;eAAAA;;QAoDCC;eAAAA;;;AA7DN,MAAML,2BAA2B;AACjC,MAAML,6BAA6B;AACnC,MAAMD,wBAAwB;AAE9B,MAAMO,YAAY;IACvBK,KAAK;IACLC,OAAO;AACT;AAEO,IAAA,AAAKH,mCAAAA;;;;;WAAAA;;AAOL,IAAA,AAAKX,yCAAAA;;;WAAAA;;AAKL,MAAMU,iBAAiB;AAEvB,IAAA,AAAKD,yCAAAA;;;;;;;;;;;WAAAA;;AAaL,IAAA,AAAKV,0CAAAA;;;;WAAAA;;AAML,IAAA,AAAKM,4CAAAA;;;;;WAAAA;;AAOL,MAAMC,0BAA0B;IAAC;IAAa;IAAQ;IAAU;CAAU;AAE1E,IAAA,AAAKH,2CAAAA;;;WAAAA;;AAKL,MAAMC,yBAAyB;IACpCW,aAAa;IACbC,mBAAmB;AACrB;AAEO,MAAMJ,cAAc;IACzBK,eAAe;IACfC,gBAAgB;IAChBC,eAAe;AACjB"}
@@ -6,17 +6,9 @@
6
6
  Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
- function _export(target, all) {
10
- for(var name in all)Object.defineProperty(target, name, {
11
- enumerable: true,
12
- get: Object.getOwnPropertyDescriptor(all, name).get
13
- });
14
- }
15
- _export(exports, {
16
- get AdminDeleteUserDto () {
17
- return AdminDeleteUserDto;
18
- },
19
- get DeleteUserDto () {
9
+ Object.defineProperty(exports, "DeleteUserDto", {
10
+ enumerable: true,
11
+ get: function() {
20
12
  return DeleteUserDto;
21
13
  }
22
14
  });
@@ -31,24 +23,14 @@ function _ts_metadata(k, v) {
31
23
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
32
24
  }
33
25
  let DeleteUserDto = class DeleteUserDto {
34
- constructor(){
35
- this.isGuest = false;
36
- }
37
26
  };
38
27
  _ts_decorate([
39
28
  (0, _classvalidator.IsBoolean)(),
40
29
  _ts_metadata("design:type", Boolean)
41
30
  ], DeleteUserDto.prototype, "deleteSpace", void 0);
42
31
  _ts_decorate([
43
- (0, _classvalidator.IsOptional)(),
44
- (0, _classvalidator.IsBoolean)()
32
+ (0, _classvalidator.IsBoolean)(),
33
+ _ts_metadata("design:type", Boolean)
45
34
  ], DeleteUserDto.prototype, "isGuest", void 0);
46
- let AdminDeleteUserDto = class AdminDeleteUserDto extends DeleteUserDto {
47
- };
48
- _ts_decorate([
49
- (0, _classvalidator.IsNotEmpty)(),
50
- (0, _classvalidator.IsString)(),
51
- _ts_metadata("design:type", String)
52
- ], AdminDeleteUserDto.prototype, "adminPassword", void 0);
53
35
 
54
36
  //# sourceMappingURL=delete-user.dto.js.map