@sync-in/server 1.11.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1040) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/LICENSE +1 -1
  3. package/README.md +3 -11
  4. package/environment/environment.dist.min.yaml +1 -1
  5. package/environment/environment.dist.yaml +173 -28
  6. package/package.json +17 -16
  7. package/server/app.bootstrap.js +1 -5
  8. package/server/app.bootstrap.js.map +1 -1
  9. package/server/app.constants.js +1 -5
  10. package/server/app.constants.js.map +1 -1
  11. package/server/app.e2e-spec.js +1 -5
  12. package/server/app.e2e-spec.js.map +1 -1
  13. package/server/app.functions.js +1 -5
  14. package/server/app.functions.js.map +1 -1
  15. package/server/app.module.js +1 -5
  16. package/server/app.module.js.map +1 -1
  17. package/server/app.service.js +1 -5
  18. package/server/app.service.js.map +1 -1
  19. package/server/app.service.spec.js +2 -6
  20. package/server/app.service.spec.js.map +1 -1
  21. package/server/applications/admin/admin.module.js +1 -5
  22. package/server/applications/admin/admin.module.js.map +1 -1
  23. package/server/applications/admin/constants/routes.js +1 -5
  24. package/server/applications/admin/constants/routes.js.map +1 -1
  25. package/server/applications/admin/interfaces/check-update.interfaces.js +1 -5
  26. package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -1
  27. package/server/applications/admin/services/admin-scheduler.service.js +1 -5
  28. package/server/applications/admin/services/admin-scheduler.service.js.map +1 -1
  29. package/server/applications/admin/services/admin.service.js +13 -8
  30. package/server/applications/admin/services/admin.service.js.map +1 -1
  31. package/server/applications/admin/services/admin.service.spec.js +1 -5
  32. package/server/applications/admin/services/admin.service.spec.js.map +1 -1
  33. package/server/applications/admin/utils/check-update.js +1 -5
  34. package/server/applications/admin/utils/check-update.js.map +1 -1
  35. package/server/applications/applications.config.js +1 -5
  36. package/server/applications/applications.config.js.map +1 -1
  37. package/server/applications/applications.constants.js +5 -5
  38. package/server/applications/applications.constants.js.map +1 -1
  39. package/server/applications/applications.module.js +1 -5
  40. package/server/applications/applications.module.js.map +1 -1
  41. package/server/applications/comments/comments.controller.js +1 -5
  42. package/server/applications/comments/comments.controller.js.map +1 -1
  43. package/server/applications/comments/comments.controller.spec.js +1 -5
  44. package/server/applications/comments/comments.controller.spec.js.map +1 -1
  45. package/server/applications/comments/comments.module.js +1 -5
  46. package/server/applications/comments/comments.module.js.map +1 -1
  47. package/server/applications/comments/constants/routes.js +1 -5
  48. package/server/applications/comments/constants/routes.js.map +1 -1
  49. package/server/applications/comments/dto/comment.dto.js +1 -5
  50. package/server/applications/comments/dto/comment.dto.js.map +1 -1
  51. package/server/applications/comments/interfaces/comment-recent.interface.js +1 -5
  52. package/server/applications/comments/interfaces/comment-recent.interface.js.map +1 -1
  53. package/server/applications/comments/schemas/comment.interface.js +1 -5
  54. package/server/applications/comments/schemas/comment.interface.js.map +1 -1
  55. package/server/applications/comments/schemas/comments.schema.js +1 -5
  56. package/server/applications/comments/schemas/comments.schema.js.map +1 -1
  57. package/server/applications/comments/services/comments-manager.service.js +9 -7
  58. package/server/applications/comments/services/comments-manager.service.js.map +1 -1
  59. package/server/applications/comments/services/comments-manager.service.spec.js +10 -8
  60. package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
  61. package/server/applications/comments/services/comments-queries.service.js +1 -5
  62. package/server/applications/comments/services/comments-queries.service.js.map +1 -1
  63. package/server/applications/files/adapters/files-indexer-mysql.service.js +29 -12
  64. package/server/applications/files/adapters/files-indexer-mysql.service.js.map +1 -1
  65. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js +1 -5
  66. package/server/applications/files/adapters/files-indexer-mysql.service.spec.js.map +1 -1
  67. package/server/applications/files/constants/cache.js +1 -5
  68. package/server/applications/files/constants/cache.js.map +1 -1
  69. package/server/applications/files/constants/compress.js +1 -5
  70. package/server/applications/files/constants/compress.js.map +1 -1
  71. package/server/applications/files/constants/files.js +1 -5
  72. package/server/applications/files/constants/files.js.map +1 -1
  73. package/server/applications/files/constants/indexing.js +1 -5
  74. package/server/applications/files/constants/indexing.js.map +1 -1
  75. package/server/applications/files/constants/operations.js +1 -5
  76. package/server/applications/files/constants/operations.js.map +1 -1
  77. package/server/applications/files/constants/routes.js +1 -5
  78. package/server/applications/files/constants/routes.js.map +1 -1
  79. package/server/applications/files/constants/samples.js +1 -5
  80. package/server/applications/files/constants/samples.js.map +1 -1
  81. package/server/applications/files/dto/file-operations.dto.js +1 -5
  82. package/server/applications/files/dto/file-operations.dto.js.map +1 -1
  83. package/server/applications/files/events/file-task-event.js +1 -5
  84. package/server/applications/files/events/file-task-event.js.map +1 -1
  85. package/server/applications/files/files-tasks.controller.js +1 -5
  86. package/server/applications/files/files-tasks.controller.js.map +1 -1
  87. package/server/applications/files/files-tasks.controller.spec.js +1 -5
  88. package/server/applications/files/files-tasks.controller.spec.js.map +1 -1
  89. package/server/applications/files/files.config.js +1 -5
  90. package/server/applications/files/files.config.js.map +1 -1
  91. package/server/applications/files/files.controller.js +1 -5
  92. package/server/applications/files/files.controller.js.map +1 -1
  93. package/server/applications/files/files.controller.spec.js +1 -5
  94. package/server/applications/files/files.controller.spec.js.map +1 -1
  95. package/server/applications/files/files.module.js +1 -5
  96. package/server/applications/files/files.module.js.map +1 -1
  97. package/server/applications/files/interfaces/file-db-props.interface.js +1 -5
  98. package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
  99. package/server/applications/files/interfaces/file-lock.interface.js +1 -5
  100. package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
  101. package/server/applications/files/interfaces/file-parse-index.js +1 -5
  102. package/server/applications/files/interfaces/file-parse-index.js.map +1 -1
  103. package/server/applications/files/interfaces/file-props.interface.js +1 -5
  104. package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
  105. package/server/applications/files/interfaces/file-recent-location.interface.js +1 -5
  106. package/server/applications/files/interfaces/file-recent-location.interface.js.map +1 -1
  107. package/server/applications/files/interfaces/file-space.interface.js +1 -5
  108. package/server/applications/files/interfaces/file-space.interface.js.map +1 -1
  109. package/server/applications/files/interfaces/file-tree.interface.js +1 -5
  110. package/server/applications/files/interfaces/file-tree.interface.js.map +1 -1
  111. package/server/applications/files/models/file-error.js +1 -5
  112. package/server/applications/files/models/file-error.js.map +1 -1
  113. package/server/applications/files/models/file-lock-error.js +1 -5
  114. package/server/applications/files/models/file-lock-error.js.map +1 -1
  115. package/server/applications/files/models/file-task.js +1 -5
  116. package/server/applications/files/models/file-task.js.map +1 -1
  117. package/server/applications/files/models/files-indexer.js +1 -5
  118. package/server/applications/files/models/files-indexer.js.map +1 -1
  119. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +1 -5
  120. package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -1
  121. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +21 -10
  122. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -1
  123. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +1 -5
  124. package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -1
  125. package/server/applications/files/modules/collabora-online/collabora-online.config.js +1 -5
  126. package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -1
  127. package/server/applications/files/modules/collabora-online/collabora-online.constants.js +1 -5
  128. package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -1
  129. package/server/applications/files/modules/collabora-online/collabora-online.controller.js +1 -5
  130. package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -1
  131. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +1 -5
  132. package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -1
  133. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js +1 -5
  134. package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -1
  135. package/server/applications/files/modules/collabora-online/collabora-online.guard.js +1 -5
  136. package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -1
  137. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +1 -5
  138. package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -1
  139. package/server/applications/files/modules/collabora-online/collabora-online.interface.js +1 -5
  140. package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -1
  141. package/server/applications/files/modules/collabora-online/collabora-online.module.js +1 -5
  142. package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -1
  143. package/server/applications/files/modules/collabora-online/collabora-online.routes.js +1 -5
  144. package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -1
  145. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +1 -5
  146. package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -1
  147. package/server/applications/files/modules/collabora-online/collabora-online.utils.js +1 -5
  148. package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -1
  149. package/server/applications/files/modules/file-editor-providers.interface.js +6 -0
  150. package/server/applications/files/modules/file-editor-providers.interface.js.map +1 -0
  151. package/server/applications/files/modules/only-office/only-office-environment.decorator.js +1 -5
  152. package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -1
  153. package/server/applications/files/modules/only-office/only-office-manager.service.js +57 -19
  154. package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -1
  155. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +1 -5
  156. package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -1
  157. package/server/applications/files/modules/only-office/only-office.config.js +1 -5
  158. package/server/applications/files/modules/only-office/only-office.config.js.map +1 -1
  159. package/server/applications/files/modules/only-office/only-office.constants.js +1 -5
  160. package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -1
  161. package/server/applications/files/modules/only-office/only-office.controller.js +1 -5
  162. package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -1
  163. package/server/applications/files/modules/only-office/only-office.controller.spec.js +1 -5
  164. package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -1
  165. package/server/applications/files/modules/only-office/only-office.dtos.js +1 -5
  166. package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -1
  167. package/server/applications/files/modules/only-office/only-office.guard.js +1 -5
  168. package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -1
  169. package/server/applications/files/modules/only-office/only-office.guard.spec.js +1 -5
  170. package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -1
  171. package/server/applications/files/modules/only-office/only-office.interface.js +1 -5
  172. package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -1
  173. package/server/applications/files/modules/only-office/only-office.module.js +1 -5
  174. package/server/applications/files/modules/only-office/only-office.module.js.map +1 -1
  175. package/server/applications/files/modules/only-office/only-office.routes.js +1 -5
  176. package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -1
  177. package/server/applications/files/modules/only-office/only-office.strategy.js +1 -5
  178. package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -1
  179. package/server/applications/files/schemas/file-content.interface.js +1 -5
  180. package/server/applications/files/schemas/file-content.interface.js.map +1 -1
  181. package/server/applications/files/schemas/file-recent.interface.js +1 -5
  182. package/server/applications/files/schemas/file-recent.interface.js.map +1 -1
  183. package/server/applications/files/schemas/file.interface.js +1 -5
  184. package/server/applications/files/schemas/file.interface.js.map +1 -1
  185. package/server/applications/files/schemas/files-content.schema.js +1 -5
  186. package/server/applications/files/schemas/files-content.schema.js.map +1 -1
  187. package/server/applications/files/schemas/files-recents.schema.js +1 -5
  188. package/server/applications/files/schemas/files-recents.schema.js.map +1 -1
  189. package/server/applications/files/schemas/files.schema.js +1 -5
  190. package/server/applications/files/schemas/files.schema.js.map +1 -1
  191. package/server/applications/files/services/files-content-manager.service.js +45 -16
  192. package/server/applications/files/services/files-content-manager.service.js.map +1 -1
  193. package/server/applications/files/services/files-lock-manager.service.js +53 -18
  194. package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
  195. package/server/applications/files/services/files-lock-manager.service.spec.js +1 -5
  196. package/server/applications/files/services/files-lock-manager.service.spec.js.map +1 -1
  197. package/server/applications/files/services/files-manager.service.js +77 -24
  198. package/server/applications/files/services/files-manager.service.js.map +1 -1
  199. package/server/applications/files/services/files-manager.service.spec.js +1 -5
  200. package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
  201. package/server/applications/files/services/files-methods.service.js +5 -6
  202. package/server/applications/files/services/files-methods.service.js.map +1 -1
  203. package/server/applications/files/services/files-methods.service.spec.js +1 -5
  204. package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
  205. package/server/applications/files/services/files-parser.service.js +13 -8
  206. package/server/applications/files/services/files-parser.service.js.map +1 -1
  207. package/server/applications/files/services/files-parser.service.spec.js +1 -5
  208. package/server/applications/files/services/files-parser.service.spec.js.map +1 -1
  209. package/server/applications/files/services/files-queries.service.js +29 -12
  210. package/server/applications/files/services/files-queries.service.js.map +1 -1
  211. package/server/applications/files/services/files-recents.service.js +1 -5
  212. package/server/applications/files/services/files-recents.service.js.map +1 -1
  213. package/server/applications/files/services/files-recents.service.spec.js +1 -5
  214. package/server/applications/files/services/files-recents.service.spec.js.map +1 -1
  215. package/server/applications/files/services/files-scheduler.service.js +77 -24
  216. package/server/applications/files/services/files-scheduler.service.js.map +1 -1
  217. package/server/applications/files/services/files-search-manager.service.js +9 -7
  218. package/server/applications/files/services/files-search-manager.service.js.map +1 -1
  219. package/server/applications/files/services/files-search-manager.service.spec.js +1 -5
  220. package/server/applications/files/services/files-search-manager.service.spec.js.map +1 -1
  221. package/server/applications/files/services/files-tasks-manager.service.js +77 -24
  222. package/server/applications/files/services/files-tasks-manager.service.js.map +1 -1
  223. package/server/applications/files/services/files-tasks-manager.service.spec.js +1 -5
  224. package/server/applications/files/services/files-tasks-manager.service.spec.js.map +1 -1
  225. package/server/applications/files/utils/doc-textify/adapters/excel.js +1 -5
  226. package/server/applications/files/utils/doc-textify/adapters/excel.js.map +1 -1
  227. package/server/applications/files/utils/doc-textify/adapters/html.js +1 -5
  228. package/server/applications/files/utils/doc-textify/adapters/html.js.map +1 -1
  229. package/server/applications/files/utils/doc-textify/adapters/open-office.js +1 -5
  230. package/server/applications/files/utils/doc-textify/adapters/open-office.js.map +1 -1
  231. package/server/applications/files/utils/doc-textify/adapters/pdf.js +1 -5
  232. package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
  233. package/server/applications/files/utils/doc-textify/adapters/power-point.js +1 -5
  234. package/server/applications/files/utils/doc-textify/adapters/power-point.js.map +1 -1
  235. package/server/applications/files/utils/doc-textify/adapters/text.js +1 -5
  236. package/server/applications/files/utils/doc-textify/adapters/text.js.map +1 -1
  237. package/server/applications/files/utils/doc-textify/adapters/word.js +1 -5
  238. package/server/applications/files/utils/doc-textify/adapters/word.js.map +1 -1
  239. package/server/applications/files/utils/doc-textify/doc-textify.js +1 -5
  240. package/server/applications/files/utils/doc-textify/doc-textify.js.map +1 -1
  241. package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js +1 -5
  242. package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js.map +1 -1
  243. package/server/applications/files/utils/doc-textify/utils/clean.js +1 -5
  244. package/server/applications/files/utils/doc-textify/utils/clean.js.map +1 -1
  245. package/server/applications/files/utils/files-search.js +1 -5
  246. package/server/applications/files/utils/files-search.js.map +1 -1
  247. package/server/applications/files/utils/files-tree.js +1 -5
  248. package/server/applications/files/utils/files-tree.js.map +1 -1
  249. package/server/applications/files/utils/files.js +1 -5
  250. package/server/applications/files/utils/files.js.map +1 -1
  251. package/server/applications/files/utils/send-file.js +1 -5
  252. package/server/applications/files/utils/send-file.js.map +1 -1
  253. package/server/applications/files/utils/unzip-file.js +1 -5
  254. package/server/applications/files/utils/unzip-file.js.map +1 -1
  255. package/server/applications/files/utils/url-file.js +1 -5
  256. package/server/applications/files/utils/url-file.js.map +1 -1
  257. package/server/applications/links/constants/cache.js +1 -5
  258. package/server/applications/links/constants/cache.js.map +1 -1
  259. package/server/applications/links/constants/links.js +1 -5
  260. package/server/applications/links/constants/links.js.map +1 -1
  261. package/server/applications/links/constants/routes.js +1 -5
  262. package/server/applications/links/constants/routes.js.map +1 -1
  263. package/server/applications/links/dto/create-or-update-link.dto.js +1 -5
  264. package/server/applications/links/dto/create-or-update-link.dto.js.map +1 -1
  265. package/server/applications/links/interfaces/link-guest.interface.js +1 -5
  266. package/server/applications/links/interfaces/link-guest.interface.js.map +1 -1
  267. package/server/applications/links/interfaces/link-space.interface.js +1 -5
  268. package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
  269. package/server/applications/links/links.controller.js +1 -5
  270. package/server/applications/links/links.controller.js.map +1 -1
  271. package/server/applications/links/links.controller.spec.js +1 -5
  272. package/server/applications/links/links.controller.spec.js.map +1 -1
  273. package/server/applications/links/schemas/link.interface.js +1 -5
  274. package/server/applications/links/schemas/link.interface.js.map +1 -1
  275. package/server/applications/links/schemas/links.schema.js +1 -5
  276. package/server/applications/links/schemas/links.schema.js.map +1 -1
  277. package/server/applications/links/services/links-manager.service.js +55 -20
  278. package/server/applications/links/services/links-manager.service.js.map +1 -1
  279. package/server/applications/links/services/links-manager.service.spec.js +3 -7
  280. package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
  281. package/server/applications/links/services/links-queries.service.js +1 -5
  282. package/server/applications/links/services/links-queries.service.js.map +1 -1
  283. package/server/applications/notifications/constants/notifications.js +1 -5
  284. package/server/applications/notifications/constants/notifications.js.map +1 -1
  285. package/server/applications/notifications/constants/routes.js +1 -5
  286. package/server/applications/notifications/constants/routes.js.map +1 -1
  287. package/server/applications/notifications/constants/websocket.js +1 -5
  288. package/server/applications/notifications/constants/websocket.js.map +1 -1
  289. package/server/applications/notifications/i18n/de.js +1 -9
  290. package/server/applications/notifications/i18n/de.js.map +1 -1
  291. package/server/applications/notifications/i18n/es.js +1 -5
  292. package/server/applications/notifications/i18n/es.js.map +1 -1
  293. package/server/applications/notifications/i18n/fr.js +1 -5
  294. package/server/applications/notifications/i18n/fr.js.map +1 -1
  295. package/server/applications/notifications/i18n/hi.js +1 -5
  296. package/server/applications/notifications/i18n/hi.js.map +1 -1
  297. package/server/applications/notifications/i18n/index.js +1 -5
  298. package/server/applications/notifications/i18n/index.js.map +1 -1
  299. package/server/applications/notifications/i18n/it.js +1 -5
  300. package/server/applications/notifications/i18n/it.js.map +1 -1
  301. package/server/applications/notifications/i18n/ja.js +1 -5
  302. package/server/applications/notifications/i18n/ja.js.map +1 -1
  303. package/server/applications/notifications/i18n/ko.js +1 -5
  304. package/server/applications/notifications/i18n/ko.js.map +1 -1
  305. package/server/applications/notifications/i18n/pl.js +1 -5
  306. package/server/applications/notifications/i18n/pl.js.map +1 -1
  307. package/server/applications/notifications/i18n/pt.js +1 -5
  308. package/server/applications/notifications/i18n/pt.js.map +1 -1
  309. package/server/applications/notifications/i18n/pt_br.js +1 -5
  310. package/server/applications/notifications/i18n/pt_br.js.map +1 -1
  311. package/server/applications/notifications/i18n/ru.js +1 -5
  312. package/server/applications/notifications/i18n/ru.js.map +1 -1
  313. package/server/applications/notifications/i18n/tr.js +1 -5
  314. package/server/applications/notifications/i18n/tr.js.map +1 -1
  315. package/server/applications/notifications/i18n/zh.js +1 -5
  316. package/server/applications/notifications/i18n/zh.js.map +1 -1
  317. package/server/applications/notifications/interfaces/notification-properties.interface.js +1 -5
  318. package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
  319. package/server/applications/notifications/interfaces/user-mail-notification.interface.js +1 -5
  320. package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -1
  321. package/server/applications/notifications/mails/models.js +1 -5
  322. package/server/applications/notifications/mails/models.js.map +1 -1
  323. package/server/applications/notifications/mails/templates.js +1 -5
  324. package/server/applications/notifications/mails/templates.js.map +1 -1
  325. package/server/applications/notifications/mails/urls.js +1 -5
  326. package/server/applications/notifications/mails/urls.js.map +1 -1
  327. package/server/applications/notifications/notifications.controller.js +1 -5
  328. package/server/applications/notifications/notifications.controller.js.map +1 -1
  329. package/server/applications/notifications/notifications.controller.spec.js +1 -5
  330. package/server/applications/notifications/notifications.controller.spec.js.map +1 -1
  331. package/server/applications/notifications/notifications.gateway.js +1 -5
  332. package/server/applications/notifications/notifications.gateway.js.map +1 -1
  333. package/server/applications/notifications/notifications.module.js +1 -5
  334. package/server/applications/notifications/notifications.module.js.map +1 -1
  335. package/server/applications/notifications/schemas/notification.interface.js +1 -5
  336. package/server/applications/notifications/schemas/notification.interface.js.map +1 -1
  337. package/server/applications/notifications/schemas/notifications.schema.js +1 -5
  338. package/server/applications/notifications/schemas/notifications.schema.js.map +1 -1
  339. package/server/applications/notifications/services/notifications-manager.service.js +25 -11
  340. package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
  341. package/server/applications/notifications/services/notifications-manager.service.spec.js +20 -11
  342. package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
  343. package/server/applications/notifications/services/notifications-queries.service.js +1 -5
  344. package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
  345. package/server/applications/shares/constants/routes.js +1 -5
  346. package/server/applications/shares/constants/routes.js.map +1 -1
  347. package/server/applications/shares/constants/shares.js +1 -5
  348. package/server/applications/shares/constants/shares.js.map +1 -1
  349. package/server/applications/shares/dto/create-or-update-share.dto.js +1 -5
  350. package/server/applications/shares/dto/create-or-update-share.dto.js.map +1 -1
  351. package/server/applications/shares/interfaces/share-child.interface.js +1 -5
  352. package/server/applications/shares/interfaces/share-child.interface.js.map +1 -1
  353. package/server/applications/shares/interfaces/share-env.interface.js +1 -5
  354. package/server/applications/shares/interfaces/share-env.interface.js.map +1 -1
  355. package/server/applications/shares/interfaces/share-file.interface.js +1 -5
  356. package/server/applications/shares/interfaces/share-file.interface.js.map +1 -1
  357. package/server/applications/shares/interfaces/share-link.interface.js +1 -5
  358. package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
  359. package/server/applications/shares/interfaces/share-props.interface.js +1 -5
  360. package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
  361. package/server/applications/shares/models/share-child.model.js +1 -5
  362. package/server/applications/shares/models/share-child.model.js.map +1 -1
  363. package/server/applications/shares/schemas/share-members.interface.js +1 -5
  364. package/server/applications/shares/schemas/share-members.interface.js.map +1 -1
  365. package/server/applications/shares/schemas/share.interface.js +1 -5
  366. package/server/applications/shares/schemas/share.interface.js.map +1 -1
  367. package/server/applications/shares/schemas/shares-members.schema.js +1 -5
  368. package/server/applications/shares/schemas/shares-members.schema.js.map +1 -1
  369. package/server/applications/shares/schemas/shares.schema.js +1 -5
  370. package/server/applications/shares/schemas/shares.schema.js.map +1 -1
  371. package/server/applications/shares/services/shares-manager.service.js +214 -68
  372. package/server/applications/shares/services/shares-manager.service.js.map +1 -1
  373. package/server/applications/shares/services/shares-manager.service.spec.js +1 -5
  374. package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
  375. package/server/applications/shares/services/shares-queries.service.js +49 -17
  376. package/server/applications/shares/services/shares-queries.service.js.map +1 -1
  377. package/server/applications/shares/shares.controller.js +1 -5
  378. package/server/applications/shares/shares.controller.js.map +1 -1
  379. package/server/applications/shares/shares.controller.spec.js +1 -5
  380. package/server/applications/shares/shares.controller.spec.js.map +1 -1
  381. package/server/applications/shares/shares.module.js +1 -5
  382. package/server/applications/shares/shares.module.js.map +1 -1
  383. package/server/applications/spaces/constants/cache.js +1 -5
  384. package/server/applications/spaces/constants/cache.js.map +1 -1
  385. package/server/applications/spaces/constants/routes.js +1 -5
  386. package/server/applications/spaces/constants/routes.js.map +1 -1
  387. package/server/applications/spaces/constants/spaces.js +1 -5
  388. package/server/applications/spaces/constants/spaces.js.map +1 -1
  389. package/server/applications/spaces/decorators/space-override-permission.decorator.js +1 -5
  390. package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -1
  391. package/server/applications/spaces/decorators/space-skip-guard.decorator.js +1 -5
  392. package/server/applications/spaces/decorators/space-skip-guard.decorator.js.map +1 -1
  393. package/server/applications/spaces/decorators/space-skip-permissions.decorator.js +1 -5
  394. package/server/applications/spaces/decorators/space-skip-permissions.decorator.js.map +1 -1
  395. package/server/applications/spaces/decorators/space.decorator.js +1 -5
  396. package/server/applications/spaces/decorators/space.decorator.js.map +1 -1
  397. package/server/applications/spaces/dto/create-or-update-space.dto.js +1 -5
  398. package/server/applications/spaces/dto/create-or-update-space.dto.js.map +1 -1
  399. package/server/applications/spaces/dto/delete-space.dto.js +1 -5
  400. package/server/applications/spaces/dto/delete-space.dto.js.map +1 -1
  401. package/server/applications/spaces/dto/search-space.dto.js +1 -5
  402. package/server/applications/spaces/dto/search-space.dto.js.map +1 -1
  403. package/server/applications/spaces/dto/space-roots.dto.js +1 -5
  404. package/server/applications/spaces/dto/space-roots.dto.js.map +1 -1
  405. package/server/applications/spaces/guards/space.guard.js +17 -9
  406. package/server/applications/spaces/guards/space.guard.js.map +1 -1
  407. package/server/applications/spaces/guards/space.guard.spec.js +1 -5
  408. package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
  409. package/server/applications/spaces/interfaces/space-diff.interface.js +1 -5
  410. package/server/applications/spaces/interfaces/space-diff.interface.js.map +1 -1
  411. package/server/applications/spaces/interfaces/space-files.interface.js +1 -5
  412. package/server/applications/spaces/interfaces/space-files.interface.js.map +1 -1
  413. package/server/applications/spaces/interfaces/space-request.interface.js +1 -5
  414. package/server/applications/spaces/interfaces/space-request.interface.js.map +1 -1
  415. package/server/applications/spaces/interfaces/space-trash.interface.js +1 -5
  416. package/server/applications/spaces/interfaces/space-trash.interface.js.map +1 -1
  417. package/server/applications/spaces/models/space-env.model.js +1 -5
  418. package/server/applications/spaces/models/space-env.model.js.map +1 -1
  419. package/server/applications/spaces/models/space-props.model.js +1 -5
  420. package/server/applications/spaces/models/space-props.model.js.map +1 -1
  421. package/server/applications/spaces/models/space-root-props.model.js +1 -5
  422. package/server/applications/spaces/models/space-root-props.model.js.map +1 -1
  423. package/server/applications/spaces/models/space.model.js +1 -5
  424. package/server/applications/spaces/models/space.model.js.map +1 -1
  425. package/server/applications/spaces/schemas/space-members.interface.js +1 -5
  426. package/server/applications/spaces/schemas/space-members.interface.js.map +1 -1
  427. package/server/applications/spaces/schemas/space-root.interface.js +1 -5
  428. package/server/applications/spaces/schemas/space-root.interface.js.map +1 -1
  429. package/server/applications/spaces/schemas/space.interface.js +1 -5
  430. package/server/applications/spaces/schemas/space.interface.js.map +1 -1
  431. package/server/applications/spaces/schemas/spaces-members.schema.js +1 -5
  432. package/server/applications/spaces/schemas/spaces-members.schema.js.map +1 -1
  433. package/server/applications/spaces/schemas/spaces-roots.schema.js +1 -5
  434. package/server/applications/spaces/schemas/spaces-roots.schema.js.map +1 -1
  435. package/server/applications/spaces/schemas/spaces.schema.js +1 -5
  436. package/server/applications/spaces/schemas/spaces.schema.js.map +1 -1
  437. package/server/applications/spaces/services/spaces-browser.service.js +77 -24
  438. package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
  439. package/server/applications/spaces/services/spaces-browser.service.spec.js +1 -5
  440. package/server/applications/spaces/services/spaces-browser.service.spec.js.map +1 -1
  441. package/server/applications/spaces/services/spaces-manager.service.js +193 -53
  442. package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
  443. package/server/applications/spaces/services/spaces-manager.service.spec.js +1 -5
  444. package/server/applications/spaces/services/spaces-manager.service.spec.js.map +1 -1
  445. package/server/applications/spaces/services/spaces-queries.service.js +65 -21
  446. package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
  447. package/server/applications/spaces/services/spaces-scheduler.service.js +49 -17
  448. package/server/applications/spaces/services/spaces-scheduler.service.js.map +1 -1
  449. package/server/applications/spaces/spaces.controller.js +1 -5
  450. package/server/applications/spaces/spaces.controller.js.map +1 -1
  451. package/server/applications/spaces/spaces.controller.spec.js +1 -5
  452. package/server/applications/spaces/spaces.controller.spec.js.map +1 -1
  453. package/server/applications/spaces/spaces.module.js +1 -5
  454. package/server/applications/spaces/spaces.module.js.map +1 -1
  455. package/server/applications/spaces/utils/paths.js +1 -5
  456. package/server/applications/spaces/utils/paths.js.map +1 -1
  457. package/server/applications/spaces/utils/permissions.js +1 -5
  458. package/server/applications/spaces/utils/permissions.js.map +1 -1
  459. package/server/applications/spaces/utils/routes.js +1 -5
  460. package/server/applications/spaces/utils/routes.js.map +1 -1
  461. package/server/applications/sync/constants/auth.js +1 -5
  462. package/server/applications/sync/constants/auth.js.map +1 -1
  463. package/server/applications/sync/constants/routes.js +6 -5
  464. package/server/applications/sync/constants/routes.js.map +1 -1
  465. package/server/applications/sync/constants/store.js +1 -9
  466. package/server/applications/sync/constants/store.js.map +1 -1
  467. package/server/applications/sync/constants/sync.js +2 -6
  468. package/server/applications/sync/constants/sync.js.map +1 -1
  469. package/server/applications/sync/decorators/sync-context.decorator.js +1 -5
  470. package/server/applications/sync/decorators/sync-context.decorator.js.map +1 -1
  471. package/server/applications/sync/decorators/sync-environment.decorator.js +1 -5
  472. package/server/applications/sync/decorators/sync-environment.decorator.js.map +1 -1
  473. package/server/applications/sync/dtos/sync-client-auth.dto.js +12 -8
  474. package/server/applications/sync/dtos/sync-client-auth.dto.js.map +1 -1
  475. package/server/applications/sync/dtos/sync-client-info.dto.js +49 -0
  476. package/server/applications/sync/dtos/sync-client-info.dto.js.map +1 -0
  477. package/server/applications/sync/dtos/sync-client-registration.dto.js +34 -11
  478. package/server/applications/sync/dtos/sync-client-registration.dto.js.map +1 -1
  479. package/server/applications/sync/dtos/sync-operations.dto.js +1 -5
  480. package/server/applications/sync/dtos/sync-operations.dto.js.map +1 -1
  481. package/server/applications/sync/dtos/sync-path.dto.js +1 -5
  482. package/server/applications/sync/dtos/sync-path.dto.js.map +1 -1
  483. package/server/applications/sync/dtos/sync-upload.dto.js +1 -5
  484. package/server/applications/sync/dtos/sync-upload.dto.js.map +1 -1
  485. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js +1 -5
  486. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js.map +1 -1
  487. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js +1 -5
  488. package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js.map +1 -1
  489. package/server/applications/sync/interfaces/store-manifest.interface.js +1 -5
  490. package/server/applications/sync/interfaces/store-manifest.interface.js.map +1 -1
  491. package/server/applications/sync/interfaces/sync-client-auth.interface.js +1 -25
  492. package/server/applications/sync/interfaces/sync-client-auth.interface.js.map +1 -1
  493. package/server/applications/sync/interfaces/sync-client-paths.interface.js +1 -5
  494. package/server/applications/sync/interfaces/sync-client-paths.interface.js.map +1 -1
  495. package/server/applications/sync/interfaces/sync-client.interface.js +1 -5
  496. package/server/applications/sync/interfaces/sync-client.interface.js.map +1 -1
  497. package/server/applications/sync/interfaces/sync-diff.interface.js +1 -5
  498. package/server/applications/sync/interfaces/sync-diff.interface.js.map +1 -1
  499. package/server/applications/sync/interfaces/sync-path.interface.js +1 -5
  500. package/server/applications/sync/interfaces/sync-path.interface.js.map +1 -1
  501. package/server/applications/sync/schemas/sync-client.interface.js +1 -5
  502. package/server/applications/sync/schemas/sync-client.interface.js.map +1 -1
  503. package/server/applications/sync/schemas/sync-clients.schema.js +1 -5
  504. package/server/applications/sync/schemas/sync-clients.schema.js.map +1 -1
  505. package/server/applications/sync/schemas/sync-path.interface.js +1 -5
  506. package/server/applications/sync/schemas/sync-path.interface.js.map +1 -1
  507. package/server/applications/sync/schemas/sync-paths.schema.js +1 -5
  508. package/server/applications/sync/schemas/sync-paths.schema.js.map +1 -1
  509. package/server/applications/sync/services/sync-clients-manager.service.js +108 -44
  510. package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
  511. package/server/applications/sync/services/sync-clients-manager.service.spec.js +14 -17
  512. package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
  513. package/server/applications/sync/services/sync-manager.service.js +29 -12
  514. package/server/applications/sync/services/sync-manager.service.js.map +1 -1
  515. package/server/applications/sync/services/sync-manager.service.spec.js +1 -5
  516. package/server/applications/sync/services/sync-manager.service.spec.js.map +1 -1
  517. package/server/applications/sync/services/sync-paths-manager.service.js +27 -17
  518. package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
  519. package/server/applications/sync/services/sync-paths-manager.service.spec.js +11 -15
  520. package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
  521. package/server/applications/sync/services/sync-queries.service.js +1 -5
  522. package/server/applications/sync/services/sync-queries.service.js.map +1 -1
  523. package/server/applications/sync/sync.config.js +1 -5
  524. package/server/applications/sync/sync.config.js.map +1 -1
  525. package/server/applications/sync/sync.controller.js +21 -6
  526. package/server/applications/sync/sync.controller.js.map +1 -1
  527. package/server/applications/sync/sync.controller.spec.js +1 -5
  528. package/server/applications/sync/sync.controller.spec.js.map +1 -1
  529. package/server/applications/sync/sync.module.js +1 -5
  530. package/server/applications/sync/sync.module.js.map +1 -1
  531. package/server/applications/sync/utils/functions.js +1 -5
  532. package/server/applications/sync/utils/functions.js.map +1 -1
  533. package/server/applications/sync/utils/normalizedMap.js +1 -5
  534. package/server/applications/sync/utils/normalizedMap.js.map +1 -1
  535. package/server/applications/sync/utils/routes.js +1 -5
  536. package/server/applications/sync/utils/routes.js.map +1 -1
  537. package/server/applications/users/admin-users.controller.js +2 -6
  538. package/server/applications/users/admin-users.controller.js.map +1 -1
  539. package/server/applications/users/admin-users.controller.spec.js +6 -10
  540. package/server/applications/users/admin-users.controller.spec.js.map +1 -1
  541. package/server/applications/users/constants/group.js +1 -5
  542. package/server/applications/users/constants/group.js.map +1 -1
  543. package/server/applications/users/constants/member.js +1 -5
  544. package/server/applications/users/constants/member.js.map +1 -1
  545. package/server/applications/users/constants/routes.js +1 -5
  546. package/server/applications/users/constants/routes.js.map +1 -1
  547. package/server/applications/users/constants/user.js +1 -5
  548. package/server/applications/users/constants/user.js.map +1 -1
  549. package/server/applications/users/constants/websocket.js +1 -5
  550. package/server/applications/users/constants/websocket.js.map +1 -1
  551. package/server/applications/users/decorators/permissions.decorator.js +1 -5
  552. package/server/applications/users/decorators/permissions.decorator.js.map +1 -1
  553. package/server/applications/users/decorators/roles.decorator.js +1 -5
  554. package/server/applications/users/decorators/roles.decorator.js.map +1 -1
  555. package/server/applications/users/decorators/user.decorator.js +1 -5
  556. package/server/applications/users/decorators/user.decorator.js.map +1 -1
  557. package/server/applications/users/dto/create-or-update-group.dto.js +1 -5
  558. package/server/applications/users/dto/create-or-update-group.dto.js.map +1 -1
  559. package/server/applications/users/dto/create-or-update-user.dto.js +1 -5
  560. package/server/applications/users/dto/create-or-update-user.dto.js.map +1 -1
  561. package/server/applications/users/dto/delete-user.dto.js +1 -5
  562. package/server/applications/users/dto/delete-user.dto.js.map +1 -1
  563. package/server/applications/users/dto/search-members.dto.js +1 -5
  564. package/server/applications/users/dto/search-members.dto.js.map +1 -1
  565. package/server/applications/users/dto/user-properties.dto.js +1 -5
  566. package/server/applications/users/dto/user-properties.dto.js.map +1 -1
  567. package/server/applications/users/guards/permissions.guard.js +1 -5
  568. package/server/applications/users/guards/permissions.guard.js.map +1 -1
  569. package/server/applications/users/guards/permissions.guard.spec.js +1 -5
  570. package/server/applications/users/guards/permissions.guard.spec.js.map +1 -1
  571. package/server/applications/users/guards/roles.guard.js +1 -5
  572. package/server/applications/users/guards/roles.guard.js.map +1 -1
  573. package/server/applications/users/guards/roles.guard.spec.js +1 -5
  574. package/server/applications/users/guards/roles.guard.spec.js.map +1 -1
  575. package/server/applications/users/interfaces/admin-group.interface.js +1 -5
  576. package/server/applications/users/interfaces/admin-group.interface.js.map +1 -1
  577. package/server/applications/users/interfaces/admin-user.interface.js +1 -5
  578. package/server/applications/users/interfaces/admin-user.interface.js.map +1 -1
  579. package/server/applications/users/interfaces/group-browse.interface.js +1 -5
  580. package/server/applications/users/interfaces/group-browse.interface.js.map +1 -1
  581. package/server/applications/users/interfaces/group-member.js +1 -5
  582. package/server/applications/users/interfaces/group-member.js.map +1 -1
  583. package/server/applications/users/interfaces/guest-user.interface.js +1 -5
  584. package/server/applications/users/interfaces/guest-user.interface.js.map +1 -1
  585. package/server/applications/users/interfaces/member.interface.js +1 -5
  586. package/server/applications/users/interfaces/member.interface.js.map +1 -1
  587. package/server/applications/users/interfaces/owner.interface.js +1 -5
  588. package/server/applications/users/interfaces/owner.interface.js.map +1 -1
  589. package/server/applications/users/interfaces/user-secrets.interface.js +1 -5
  590. package/server/applications/users/interfaces/user-secrets.interface.js.map +1 -1
  591. package/server/applications/users/interfaces/websocket.interface.js +1 -5
  592. package/server/applications/users/interfaces/websocket.interface.js.map +1 -1
  593. package/server/applications/users/models/user.model.js +1 -5
  594. package/server/applications/users/models/user.model.js.map +1 -1
  595. package/server/applications/users/schemas/group.interface.js +1 -5
  596. package/server/applications/users/schemas/group.interface.js.map +1 -1
  597. package/server/applications/users/schemas/groups.schema.js +1 -5
  598. package/server/applications/users/schemas/groups.schema.js.map +1 -1
  599. package/server/applications/users/schemas/user-group.interface.js +1 -5
  600. package/server/applications/users/schemas/user-group.interface.js.map +1 -1
  601. package/server/applications/users/schemas/user.interface.js +1 -5
  602. package/server/applications/users/schemas/user.interface.js.map +1 -1
  603. package/server/applications/users/schemas/users-groups.schema.js +1 -5
  604. package/server/applications/users/schemas/users-groups.schema.js.map +1 -1
  605. package/server/applications/users/schemas/users-guests.schema.js +1 -5
  606. package/server/applications/users/schemas/users-guests.schema.js.map +1 -1
  607. package/server/applications/users/schemas/users.schema.js +1 -5
  608. package/server/applications/users/schemas/users.schema.js.map +1 -1
  609. package/server/applications/users/services/admin-users-manager.service.js +67 -23
  610. package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
  611. package/server/applications/users/services/admin-users-manager.service.spec.js +3 -7
  612. package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
  613. package/server/applications/users/services/admin-users-queries.service.js +65 -21
  614. package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
  615. package/server/applications/users/services/users-manager.service.js +81 -25
  616. package/server/applications/users/services/users-manager.service.js.map +1 -1
  617. package/server/applications/users/services/users-manager.service.spec.js +14 -12
  618. package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
  619. package/server/applications/users/services/users-queries.service.js +49 -17
  620. package/server/applications/users/services/users-queries.service.js.map +1 -1
  621. package/server/applications/users/users.controller.js +2 -6
  622. package/server/applications/users/users.controller.js.map +1 -1
  623. package/server/applications/users/users.controller.spec.js +5 -9
  624. package/server/applications/users/users.controller.spec.js.map +1 -1
  625. package/server/applications/users/users.e2e-spec.js +3 -7
  626. package/server/applications/users/users.e2e-spec.js.map +1 -1
  627. package/server/applications/users/users.gateway.js +29 -12
  628. package/server/applications/users/users.gateway.js.map +1 -1
  629. package/server/applications/users/users.gateway.spec.js +1 -5
  630. package/server/applications/users/users.gateway.spec.js.map +1 -1
  631. package/server/applications/users/users.module.js +1 -5
  632. package/server/applications/users/users.module.js.map +1 -1
  633. package/server/applications/users/utils/avatar.js +1 -5
  634. package/server/applications/users/utils/avatar.js.map +1 -1
  635. package/server/applications/users/utils/test.js +1 -5
  636. package/server/applications/users/utils/test.js.map +1 -1
  637. package/server/applications/webdav/constants/routes.js +1 -5
  638. package/server/applications/webdav/constants/routes.js.map +1 -1
  639. package/server/applications/webdav/constants/webdav.js +1 -5
  640. package/server/applications/webdav/constants/webdav.js.map +1 -1
  641. package/server/applications/webdav/decorators/if-header.decorator.js +1 -5
  642. package/server/applications/webdav/decorators/if-header.decorator.js.map +1 -1
  643. package/server/applications/webdav/decorators/webdav-context.decorator.js +1 -5
  644. package/server/applications/webdav/decorators/webdav-context.decorator.js.map +1 -1
  645. package/server/applications/webdav/filters/webdav.filter.js +1 -5
  646. package/server/applications/webdav/filters/webdav.filter.js.map +1 -1
  647. package/server/applications/webdav/filters/webdav.filter.spec.js +1 -5
  648. package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -1
  649. package/server/applications/webdav/guards/webdav-protocol.guard.js +54 -20
  650. package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
  651. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +54 -0
  652. package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
  653. package/server/applications/webdav/interfaces/if-header.interface.js +1 -5
  654. package/server/applications/webdav/interfaces/if-header.interface.js.map +1 -1
  655. package/server/applications/webdav/interfaces/webdav.interface.js +1 -5
  656. package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
  657. package/server/applications/webdav/models/webdav-file.model.js +1 -5
  658. package/server/applications/webdav/models/webdav-file.model.js.map +1 -1
  659. package/server/applications/webdav/services/webdav-methods.service.js +74 -26
  660. package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
  661. package/server/applications/webdav/services/webdav-methods.service.spec.js +15 -18
  662. package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
  663. package/server/applications/webdav/services/webdav-spaces.service.js +17 -9
  664. package/server/applications/webdav/services/webdav-spaces.service.js.map +1 -1
  665. package/server/applications/webdav/services/webdav-spaces.service.spec.js +1 -5
  666. package/server/applications/webdav/services/webdav-spaces.service.spec.js.map +1 -1
  667. package/server/applications/webdav/utils/bootstrap.js +1 -5
  668. package/server/applications/webdav/utils/bootstrap.js.map +1 -1
  669. package/server/applications/webdav/utils/if-header.js +1 -5
  670. package/server/applications/webdav/utils/if-header.js.map +1 -1
  671. package/server/applications/webdav/utils/routes.js +1 -5
  672. package/server/applications/webdav/utils/routes.js.map +1 -1
  673. package/server/applications/webdav/utils/webdav.js +1 -5
  674. package/server/applications/webdav/utils/webdav.js.map +1 -1
  675. package/server/applications/webdav/utils/xml.js +1 -5
  676. package/server/applications/webdav/utils/xml.js.map +1 -1
  677. package/server/applications/webdav/webdav.controller.js +1 -5
  678. package/server/applications/webdav/webdav.controller.js.map +1 -1
  679. package/server/applications/webdav/webdav.controller.spec.js +1 -5
  680. package/server/applications/webdav/webdav.controller.spec.js.map +1 -1
  681. package/server/applications/webdav/webdav.e2e-spec.js +1 -5
  682. package/server/applications/webdav/webdav.e2e-spec.js.map +1 -1
  683. package/server/applications/webdav/webdav.module.js +1 -5
  684. package/server/applications/webdav/webdav.module.js.map +1 -1
  685. package/server/authentication/auth.config.js +23 -123
  686. package/server/authentication/auth.config.js.map +1 -1
  687. package/server/authentication/auth.controller.js +27 -21
  688. package/server/authentication/auth.controller.js.map +1 -1
  689. package/server/authentication/auth.controller.spec.js +6 -10
  690. package/server/authentication/auth.controller.spec.js.map +1 -1
  691. package/server/authentication/auth.e2e-spec.js +1 -5
  692. package/server/authentication/auth.e2e-spec.js.map +1 -1
  693. package/server/authentication/auth.module.js +17 -20
  694. package/server/authentication/auth.module.js.map +1 -1
  695. package/server/authentication/{services/auth-manager.service.js → auth.service.js} +41 -18
  696. package/server/authentication/auth.service.js.map +1 -0
  697. package/server/authentication/{services/auth-manager.service.spec.js → auth.service.spec.js} +6 -10
  698. package/server/authentication/auth.service.spec.js.map +1 -0
  699. package/server/authentication/constants/auth.js +1 -5
  700. package/server/authentication/constants/auth.js.map +1 -1
  701. package/server/authentication/constants/routes.js +41 -30
  702. package/server/authentication/constants/routes.js.map +1 -1
  703. package/server/authentication/constants/scope.js +2 -5
  704. package/server/authentication/constants/scope.js.map +1 -1
  705. package/server/authentication/decorators/auth-token-optional.decorator.js +1 -5
  706. package/server/authentication/decorators/auth-token-optional.decorator.js.map +1 -1
  707. package/server/authentication/decorators/auth-token-skip.decorator.js +1 -5
  708. package/server/authentication/decorators/auth-token-skip.decorator.js.map +1 -1
  709. package/server/authentication/dto/login-response.dto.js +1 -10
  710. package/server/authentication/dto/login-response.dto.js.map +1 -1
  711. package/server/authentication/dto/token-response.dto.js +1 -5
  712. package/server/authentication/dto/token-response.dto.js.map +1 -1
  713. package/server/authentication/guards/auth-anonymous.guard.js +1 -5
  714. package/server/authentication/guards/auth-anonymous.guard.js.map +1 -1
  715. package/server/authentication/guards/auth-anonymous.guard.spec.js +1 -5
  716. package/server/authentication/guards/auth-anonymous.guard.spec.js.map +1 -1
  717. package/server/authentication/guards/auth-anonymous.strategy.js +1 -5
  718. package/server/authentication/guards/auth-anonymous.strategy.js.map +1 -1
  719. package/server/authentication/guards/auth-basic.guard.js +1 -5
  720. package/server/authentication/guards/auth-basic.guard.js.map +1 -1
  721. package/server/authentication/guards/auth-basic.guard.spec.js +13 -14
  722. package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
  723. package/server/authentication/guards/auth-basic.strategy.js +10 -11
  724. package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
  725. package/server/authentication/guards/auth-digest.guard.js +1 -5
  726. package/server/authentication/guards/auth-digest.guard.js.map +1 -1
  727. package/server/authentication/guards/auth-digest.strategy.js +1 -5
  728. package/server/authentication/guards/auth-digest.strategy.js.map +1 -1
  729. package/server/authentication/guards/auth-local.guard.js +1 -5
  730. package/server/authentication/guards/auth-local.guard.js.map +1 -1
  731. package/server/authentication/guards/auth-local.guard.spec.js +9 -13
  732. package/server/authentication/guards/auth-local.guard.spec.js.map +1 -1
  733. package/server/authentication/guards/auth-local.strategy.js +6 -10
  734. package/server/authentication/guards/auth-local.strategy.js.map +1 -1
  735. package/server/authentication/guards/auth-token-access.guard.js +1 -5
  736. package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
  737. package/server/authentication/guards/auth-token-access.guard.spec.js +3 -7
  738. package/server/authentication/guards/auth-token-access.guard.spec.js.map +1 -1
  739. package/server/authentication/guards/auth-token-access.strategy.js +3 -7
  740. package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
  741. package/server/authentication/guards/auth-token-refresh.guard.js +1 -5
  742. package/server/authentication/guards/auth-token-refresh.guard.js.map +1 -1
  743. package/server/authentication/guards/auth-token-refresh.guard.spec.js +3 -7
  744. package/server/authentication/guards/auth-token-refresh.guard.spec.js.map +1 -1
  745. package/server/authentication/guards/auth-token-refresh.strategy.js +3 -7
  746. package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
  747. package/server/authentication/guards/implementations/http-basic.strategy.js +1 -5
  748. package/server/authentication/guards/implementations/http-basic.strategy.js.map +1 -1
  749. package/server/authentication/guards/implementations/http-digest.strategy.js +1 -5
  750. package/server/authentication/guards/implementations/http-digest.strategy.js.map +1 -1
  751. package/server/authentication/interfaces/auth-request.interface.js +1 -5
  752. package/server/authentication/interfaces/auth-request.interface.js.map +1 -1
  753. package/server/authentication/interfaces/jwt-payload.interface.js +1 -5
  754. package/server/authentication/interfaces/jwt-payload.interface.js.map +1 -1
  755. package/server/authentication/interfaces/token.interface.js +1 -5
  756. package/server/authentication/interfaces/token.interface.js.map +1 -1
  757. package/server/authentication/providers/auth-providers.constants.js +18 -0
  758. package/server/authentication/providers/auth-providers.constants.js.map +1 -0
  759. package/server/authentication/providers/auth-providers.models.js +14 -0
  760. package/server/authentication/providers/auth-providers.models.js.map +1 -0
  761. package/server/authentication/providers/auth-providers.utils.js +42 -0
  762. package/server/authentication/providers/auth-providers.utils.js.map +1 -0
  763. package/server/authentication/providers/ldap/auth-ldap.config.js +143 -0
  764. package/server/authentication/providers/ldap/auth-ldap.config.js.map +1 -0
  765. package/server/authentication/{constants/auth-ldap.js → providers/ldap/auth-ldap.constants.js} +12 -6
  766. package/server/authentication/providers/ldap/auth-ldap.constants.js.map +1 -0
  767. package/server/authentication/providers/ldap/auth-provider-ldap.service.js +506 -0
  768. package/server/authentication/providers/ldap/auth-provider-ldap.service.js.map +1 -0
  769. package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js +674 -0
  770. package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js.map +1 -0
  771. package/server/authentication/{services/auth-methods/auth-method-database.service.js → providers/mysql/auth-provider-mysql.service.js} +16 -14
  772. package/server/authentication/providers/mysql/auth-provider-mysql.service.js.map +1 -0
  773. package/server/authentication/{services/auth-methods/auth-method-database.service.spec.js → providers/mysql/auth-provider-mysql.service.spec.js} +15 -19
  774. package/server/authentication/providers/mysql/auth-provider-mysql.service.spec.js.map +1 -0
  775. package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js +30 -0
  776. package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js.map +1 -0
  777. package/server/authentication/providers/oidc/auth-oidc.config.js +149 -0
  778. package/server/authentication/providers/oidc/auth-oidc.config.js.map +1 -0
  779. package/server/authentication/providers/oidc/auth-oidc.constants.js +39 -0
  780. package/server/authentication/providers/oidc/auth-oidc.constants.js.map +1 -0
  781. package/server/authentication/providers/oidc/auth-oidc.controller.js +83 -0
  782. package/server/authentication/providers/oidc/auth-oidc.controller.js.map +1 -0
  783. package/server/authentication/providers/oidc/auth-oidc.interfaces.js +6 -0
  784. package/server/authentication/providers/oidc/auth-oidc.interfaces.js.map +1 -0
  785. package/server/authentication/providers/oidc/auth-provider-oidc.module.js +36 -0
  786. package/server/authentication/providers/oidc/auth-provider-oidc.module.js.map +1 -0
  787. package/server/authentication/providers/oidc/auth-provider-oidc.service.js +373 -0
  788. package/server/authentication/providers/oidc/auth-provider-oidc.service.js.map +1 -0
  789. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js +270 -0
  790. package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js.map +1 -0
  791. package/server/authentication/{services/auth-methods/auth-method-two-fa.service.js → providers/two-fa/auth-provider-two-fa.service.js} +56 -38
  792. package/server/authentication/providers/two-fa/auth-provider-two-fa.service.js.map +1 -0
  793. package/server/authentication/{services/auth-methods/auth-method-two-fa.service.spec.js → providers/two-fa/auth-provider-two-fa.service.spec.js} +6 -10
  794. package/server/authentication/providers/two-fa/auth-provider-two-fa.service.spec.js.map +1 -0
  795. package/server/authentication/{guards → providers/two-fa}/auth-two-fa-guard.js +10 -14
  796. package/server/authentication/providers/two-fa/auth-two-fa-guard.js.map +1 -0
  797. package/server/authentication/providers/two-fa/auth-two-fa.config.js +57 -0
  798. package/server/authentication/providers/two-fa/auth-two-fa.config.js.map +1 -0
  799. package/server/authentication/{dto/two-fa-verify.dto.js → providers/two-fa/auth-two-fa.dtos.js} +8 -6
  800. package/server/authentication/providers/two-fa/auth-two-fa.dtos.js.map +1 -0
  801. package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js +6 -0
  802. package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js.map +1 -0
  803. package/server/authentication/utils/crypt-secret.js +1 -5
  804. package/server/authentication/utils/crypt-secret.js.map +1 -1
  805. package/server/common/constants.js +1 -5
  806. package/server/common/constants.js.map +1 -1
  807. package/server/common/decorators.js +1 -5
  808. package/server/common/decorators.js.map +1 -1
  809. package/server/common/functions.js +25 -9
  810. package/server/common/functions.js.map +1 -1
  811. package/server/common/i18n.js +1 -5
  812. package/server/common/i18n.js.map +1 -1
  813. package/server/common/image.js +1 -5
  814. package/server/common/image.js.map +1 -1
  815. package/server/common/interfaces.js +1 -5
  816. package/server/common/interfaces.js.map +1 -1
  817. package/server/common/qrcode.js +1 -5
  818. package/server/common/qrcode.js.map +1 -1
  819. package/server/common/shared.js +6 -6
  820. package/server/common/shared.js.map +1 -1
  821. package/server/configuration/config.constants.js +1 -5
  822. package/server/configuration/config.constants.js.map +1 -1
  823. package/server/configuration/config.environment.js +2 -6
  824. package/server/configuration/config.environment.js.map +1 -1
  825. package/server/configuration/config.interfaces.js +1 -5
  826. package/server/configuration/config.interfaces.js.map +1 -1
  827. package/server/configuration/config.loader.js +1 -5
  828. package/server/configuration/config.loader.js.map +1 -1
  829. package/server/configuration/config.logger.js +4 -8
  830. package/server/configuration/config.logger.js.map +1 -1
  831. package/server/configuration/config.validation.js +7 -5
  832. package/server/configuration/config.validation.js.map +1 -1
  833. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +9 -7
  834. package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
  835. package/server/infrastructure/cache/adapters/redis-cache.adapter.js +1 -5
  836. package/server/infrastructure/cache/adapters/redis-cache.adapter.js.map +1 -1
  837. package/server/infrastructure/cache/cache.config.js +1 -5
  838. package/server/infrastructure/cache/cache.config.js.map +1 -1
  839. package/server/infrastructure/cache/cache.decorator.js +9 -7
  840. package/server/infrastructure/cache/cache.decorator.js.map +1 -1
  841. package/server/infrastructure/cache/cache.e2e-spec.js +1 -5
  842. package/server/infrastructure/cache/cache.e2e-spec.js.map +1 -1
  843. package/server/infrastructure/cache/cache.module.js +1 -5
  844. package/server/infrastructure/cache/cache.module.js.map +1 -1
  845. package/server/infrastructure/cache/schemas/mysql-cache.interface.js +1 -5
  846. package/server/infrastructure/cache/schemas/mysql-cache.interface.js.map +1 -1
  847. package/server/infrastructure/cache/schemas/mysql-cache.schema.js +1 -5
  848. package/server/infrastructure/cache/schemas/mysql-cache.schema.js.map +1 -1
  849. package/server/infrastructure/cache/services/cache.service.js +1 -5
  850. package/server/infrastructure/cache/services/cache.service.js.map +1 -1
  851. package/server/infrastructure/context/context.module.js +1 -5
  852. package/server/infrastructure/context/context.module.js.map +1 -1
  853. package/server/infrastructure/context/interceptors/context.interceptor.js +1 -5
  854. package/server/infrastructure/context/interceptors/context.interceptor.js.map +1 -1
  855. package/server/infrastructure/context/interceptors/context.interceptor.spec.js +2 -6
  856. package/server/infrastructure/context/interceptors/context.interceptor.spec.js.map +1 -1
  857. package/server/infrastructure/context/interfaces/context-store.interface.js +1 -5
  858. package/server/infrastructure/context/interfaces/context-store.interface.js.map +1 -1
  859. package/server/infrastructure/context/services/context-manager.service.js +1 -5
  860. package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
  861. package/server/infrastructure/context/services/context-manager.service.spec.js +1 -5
  862. package/server/infrastructure/context/services/context-manager.service.spec.js.map +1 -1
  863. package/server/infrastructure/database/columns.js +1 -5
  864. package/server/infrastructure/database/columns.js.map +1 -1
  865. package/server/infrastructure/database/configuration.js +1 -5
  866. package/server/infrastructure/database/configuration.js.map +1 -1
  867. package/server/infrastructure/database/constants.js +2 -6
  868. package/server/infrastructure/database/constants.js.map +1 -1
  869. package/server/infrastructure/database/database.config.js +1 -5
  870. package/server/infrastructure/database/database.config.js.map +1 -1
  871. package/server/infrastructure/database/database.logger.js +1 -5
  872. package/server/infrastructure/database/database.logger.js.map +1 -1
  873. package/server/infrastructure/database/database.module.js +1 -5
  874. package/server/infrastructure/database/database.module.js.map +1 -1
  875. package/server/infrastructure/database/interfaces/database.interface.js +1 -5
  876. package/server/infrastructure/database/interfaces/database.interface.js.map +1 -1
  877. package/server/infrastructure/database/schema.js +1 -5
  878. package/server/infrastructure/database/schema.js.map +1 -1
  879. package/server/infrastructure/database/scripts/create-user.js +1 -5
  880. package/server/infrastructure/database/scripts/create-user.js.map +1 -1
  881. package/server/infrastructure/database/scripts/db.js +1 -5
  882. package/server/infrastructure/database/scripts/db.js.map +1 -1
  883. package/server/infrastructure/database/scripts/seed/main.js +1 -5
  884. package/server/infrastructure/database/scripts/seed/main.js.map +1 -1
  885. package/server/infrastructure/database/scripts/seed/usersgroups.js +1 -5
  886. package/server/infrastructure/database/scripts/seed/usersgroups.js.map +1 -1
  887. package/server/infrastructure/database/utils.js +1 -5
  888. package/server/infrastructure/database/utils.js.map +1 -1
  889. package/server/infrastructure/mailer/interfaces/mail.interface.js +1 -5
  890. package/server/infrastructure/mailer/interfaces/mail.interface.js.map +1 -1
  891. package/server/infrastructure/mailer/mailer.config.js +1 -5
  892. package/server/infrastructure/mailer/mailer.config.js.map +1 -1
  893. package/server/infrastructure/mailer/mailer.module.js +1 -5
  894. package/server/infrastructure/mailer/mailer.module.js.map +1 -1
  895. package/server/infrastructure/mailer/mailer.service.js +1 -5
  896. package/server/infrastructure/mailer/mailer.service.js.map +1 -1
  897. package/server/infrastructure/mailer/mailer.service.spec.js +2 -6
  898. package/server/infrastructure/mailer/mailer.service.spec.js.map +1 -1
  899. package/server/infrastructure/scheduler/scheduler.constants.js +1 -5
  900. package/server/infrastructure/scheduler/scheduler.constants.js.map +1 -1
  901. package/server/infrastructure/scheduler/scheduler.module.js +1 -5
  902. package/server/infrastructure/scheduler/scheduler.module.js.map +1 -1
  903. package/server/infrastructure/websocket/adapters/cluster.adapter.js +1 -5
  904. package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
  905. package/server/infrastructure/websocket/adapters/redis.adapter.js +1 -5
  906. package/server/infrastructure/websocket/adapters/redis.adapter.js.map +1 -1
  907. package/server/infrastructure/websocket/adapters/web-socket.adapter.js +1 -5
  908. package/server/infrastructure/websocket/adapters/web-socket.adapter.js.map +1 -1
  909. package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js +1 -5
  910. package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js.map +1 -1
  911. package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js +1 -5
  912. package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js.map +1 -1
  913. package/server/infrastructure/websocket/utils.js +1 -5
  914. package/server/infrastructure/websocket/utils.js.map +1 -1
  915. package/server/infrastructure/websocket/web-socket.config.js +1 -5
  916. package/server/infrastructure/websocket/web-socket.config.js.map +1 -1
  917. package/server/main.js +5 -0
  918. package/server/main.js.map +1 -1
  919. package/static/assets/pdfjs/build/pdf.mjs +724 -745
  920. package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
  921. package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
  922. package/static/assets/pdfjs/build/pdf.worker.mjs +706 -193
  923. package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
  924. package/static/assets/pdfjs/version +1 -1
  925. package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +5 -5
  926. package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +1 -0
  927. package/static/assets/pdfjs/web/locale/fur/viewer.ftl +5 -0
  928. package/static/assets/pdfjs/web/locale/kk/viewer.ftl +28 -0
  929. package/static/assets/pdfjs/web/locale/ml/viewer.ftl +4 -0
  930. package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -3
  931. package/static/assets/pdfjs/web/viewer.css +207 -65
  932. package/static/assets/pdfjs/web/viewer.html +11 -10
  933. package/static/assets/pdfjs/web/viewer.mjs +850 -270
  934. package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
  935. package/static/assets/pdfjs/web/wasm/LICENSE_JBIG2 +196 -0
  936. package/static/assets/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  937. package/static/assets/pdfjs/web/wasm/jbig2.wasm +0 -0
  938. package/static/chunk-22TZP6HW.js +1 -0
  939. package/static/{chunk-G7TLKY5X.js → chunk-27ATUHBH.js} +1 -1
  940. package/static/{chunk-CQOQXVYG.js → chunk-2CKLZ3FM.js} +1 -1
  941. package/static/{chunk-FVFOX6OP.js → chunk-2QZPX7LO.js} +1 -1
  942. package/static/{chunk-32AVRWC3.js → chunk-2R6IBBPZ.js} +1 -1
  943. package/static/{chunk-76JDXKD7.js → chunk-4FIGEBNL.js} +1 -1
  944. package/static/{chunk-ACCGBDUZ.js → chunk-4P3JABAP.js} +4 -4
  945. package/static/chunk-5CZOSAMZ.js +1 -0
  946. package/static/{chunk-2PDTP6N4.js → chunk-677WUBCT.js} +1 -1
  947. package/static/{chunk-K5VO5XTG.js → chunk-74CAHBFM.js} +1 -1
  948. package/static/{chunk-WTWGBCFO.js → chunk-7GWW6MJO.js} +1 -1
  949. package/static/{chunk-JXZOYX4N.js → chunk-A4UGPSWX.js} +1 -1
  950. package/static/{chunk-44D7RWET.js → chunk-AHO37FKW.js} +1 -1
  951. package/static/{chunk-WB2DECOA.js → chunk-AQCXMKP3.js} +1 -1
  952. package/static/chunk-B6PDYCRO.js +3 -0
  953. package/static/{chunk-JVGN5V5E.js → chunk-CU76ATCF.js} +1 -1
  954. package/static/{chunk-Q5K4ZUHK.js → chunk-CWYHOPOP.js} +1 -1
  955. package/static/{chunk-IOX3ANJR.js → chunk-E5WI5725.js} +1 -1
  956. package/static/{chunk-NUG54Y65.js → chunk-FC5HTKVM.js} +1 -1
  957. package/static/{chunk-LRK6RNPR.js → chunk-FOSM7EYI.js} +1 -1
  958. package/static/{chunk-B4UP2EQM.js → chunk-GAZO25PI.js} +1 -1
  959. package/static/{chunk-3WBCGTYW.js → chunk-GB7ABR5N.js} +1 -1
  960. package/static/{chunk-XFZ37WVK.js → chunk-GEHFKZQ5.js} +1 -1
  961. package/static/{chunk-4CQLN5HL.js → chunk-GQFMWVFD.js} +1 -1
  962. package/static/{chunk-YBEH442D.js → chunk-GVNTC564.js} +1 -1
  963. package/static/{chunk-WO6GBHBZ.js → chunk-HGL3NYP2.js} +2 -2
  964. package/static/{chunk-IAWRRL6J.js → chunk-HLIWPWRA.js} +1 -1
  965. package/static/{chunk-6LHJBXUE.js → chunk-HNYB3M4S.js} +1 -1
  966. package/static/{chunk-5WTIUYFF.js → chunk-HUXAUQMN.js} +1 -1
  967. package/static/{chunk-VBH3Y2M5.js → chunk-I2XA6PPK.js} +1 -1
  968. package/static/{chunk-I3XI72AV.js → chunk-ISV3BO6R.js} +1 -1
  969. package/static/{chunk-P7X53PEP.js → chunk-JV3AGU5B.js} +1 -1
  970. package/static/{chunk-ZFAXICUH.js → chunk-K25E7YGG.js} +1 -1
  971. package/static/{chunk-CAD3RHAY.js → chunk-K46PUTZB.js} +1 -1
  972. package/static/{chunk-GYFLVCFN.js → chunk-KERFLJ56.js} +1 -7
  973. package/static/{chunk-WSTGWBVW.js → chunk-KJD3KFF3.js} +1 -1
  974. package/static/{chunk-R4P4NBUL.js → chunk-KPKSI23S.js} +1 -1
  975. package/static/{chunk-M7IFVC5D.js → chunk-KZS7CTNR.js} +1 -1
  976. package/static/{chunk-P2IJCGWD.js → chunk-L5IHUVXL.js} +1 -1
  977. package/static/{chunk-DXESTGOH.js → chunk-L7RRX2M3.js} +1 -1
  978. package/static/{chunk-WE3ISL7O.js → chunk-LGWJ2WKU.js} +1 -1
  979. package/static/{chunk-OKI3N5AI.js → chunk-MLC7JK2H.js} +2 -2
  980. package/static/{chunk-NG7QWUFM.js → chunk-MOHNYW2A.js} +1 -1
  981. package/static/{chunk-SQYWQUL4.js → chunk-NCDUOVMW.js} +1 -1
  982. package/static/chunk-NGUAJIGI.js +1 -0
  983. package/static/{chunk-OYPJUVD6.js → chunk-NIPP6JDI.js} +1 -1
  984. package/static/{chunk-Y433XOAJ.js → chunk-NMTBMHUL.js} +1 -1
  985. package/static/chunk-O4XXMZFX.js +4 -0
  986. package/static/{chunk-IOP3ON2H.js → chunk-OANZITPM.js} +1 -1
  987. package/static/{chunk-WJFKUJJX.js → chunk-OGE4SAHU.js} +1 -1
  988. package/static/{chunk-7EHP6HO3.js → chunk-OI3ME22C.js} +1 -1
  989. package/static/{chunk-D4XDSS6P.js → chunk-Q3EGCMF5.js} +1 -1
  990. package/static/{chunk-TQBCGNFG.js → chunk-QF2NSHZA.js} +1 -1
  991. package/static/{chunk-RBBMH2FM.js → chunk-QKN6LAAA.js} +1 -1
  992. package/static/{chunk-J45SD6RC.js → chunk-QRFESU5O.js} +2 -2
  993. package/static/chunk-QVRVFYJH.js +1 -0
  994. package/static/{chunk-BAHNSFET.js → chunk-RFJIPIOK.js} +1 -1
  995. package/static/{chunk-IZ7TCHUW.js → chunk-RLL634K4.js} +1 -1
  996. package/static/{chunk-MOWL3ILT.js → chunk-RS2OFKWP.js} +1 -1
  997. package/static/{chunk-WM56LPJ3.js → chunk-RWAAC3A4.js} +1 -1
  998. package/static/{chunk-F3GMI6OL.js → chunk-S5Y64DDS.js} +1 -1
  999. package/static/{chunk-VNNLMUK7.js → chunk-SLG5KDU6.js} +1 -1
  1000. package/static/chunk-TJ4CVFEL.js +1 -0
  1001. package/static/{chunk-SAN35XTD.js → chunk-TWCGKSYE.js} +1 -1
  1002. package/static/{chunk-EUKVDBBK.js → chunk-UMDRE4S7.js} +1 -1
  1003. package/static/{chunk-YKCUUBZP.js → chunk-VRIOLRYR.js} +4 -4
  1004. package/static/chunk-VS4O2XDP.js +1 -0
  1005. package/static/{chunk-2MRTBCSV.js → chunk-VSBFNFOM.js} +1 -1
  1006. package/static/{chunk-CTPKDDVI.js → chunk-WN4WXCVK.js} +1 -1
  1007. package/static/{chunk-2AA3WMW5.js → chunk-WX7RXW7K.js} +1 -1
  1008. package/static/{chunk-J2BUPRCZ.js → chunk-XC4POKR3.js} +2 -2
  1009. package/static/{chunk-AXLDYLIO.js → chunk-Y4AUYQTG.js} +1 -1
  1010. package/static/{chunk-RPHWIW7S.js → chunk-YMIXHRJQ.js} +1 -7
  1011. package/static/{chunk-AFNUBQMD.js → chunk-ZUNKFAKP.js} +1 -1
  1012. package/static/index.html +3 -3
  1013. package/static/main-QN4UCOC5.js +5 -0
  1014. package/static/{styles-PD6764CP.css → styles-46GLIE7Y.css} +1 -1
  1015. package/server/authentication/constants/auth-ldap.js.map +0 -1
  1016. package/server/authentication/dto/two-fa-verify.dto.js.map +0 -1
  1017. package/server/authentication/guards/auth-two-fa-guard.js.map +0 -1
  1018. package/server/authentication/interfaces/two-fa-setup.interface.js +0 -10
  1019. package/server/authentication/interfaces/two-fa-setup.interface.js.map +0 -1
  1020. package/server/authentication/models/auth-method.js +0 -18
  1021. package/server/authentication/models/auth-method.js.map +0 -1
  1022. package/server/authentication/services/auth-manager.service.js.map +0 -1
  1023. package/server/authentication/services/auth-manager.service.spec.js.map +0 -1
  1024. package/server/authentication/services/auth-methods/auth-method-database.service.js.map +0 -1
  1025. package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +0 -1
  1026. package/server/authentication/services/auth-methods/auth-method-ldap.service.js +0 -326
  1027. package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +0 -1
  1028. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +0 -534
  1029. package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +0 -1
  1030. package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +0 -1
  1031. package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +0 -1
  1032. package/static/chunk-3I6NPM62.js +0 -1
  1033. package/static/chunk-GCPX3EFC.js +0 -1
  1034. package/static/chunk-KBUIDMCK.js +0 -1
  1035. package/static/chunk-KY6MNZLC.js +0 -1
  1036. package/static/chunk-MPWD4VMY.js +0 -1
  1037. package/static/chunk-QQAF3MLL.js +0 -1
  1038. package/static/chunk-VHZKPUWE.js +0 -4
  1039. package/static/chunk-YWLMFOB4.js +0 -3
  1040. package/static/main-ZXEMCBMI.js +0 -11
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _common = require("@nestjs/common");
6
+ const _testing = require("@nestjs/testing");
7
+ const _openidclient = require("openid-client");
8
+ const _user = require("../../../applications/users/constants/user");
9
+ const _adminusersmanagerservice = require("../../../applications/users/services/admin-users-manager.service");
10
+ const _usersmanagerservice = require("../../../applications/users/services/users-manager.service");
11
+ const _authoidcconstants = require("./auth-oidc.constants");
12
+ const _authprovideroidcservice = require("./auth-provider-oidc.service");
13
+ jest.mock('../../../configuration/config.environment', ()=>({
14
+ configuration: {
15
+ auth: {
16
+ oidc: {
17
+ issuerUrl: 'https://issuer.example.test',
18
+ clientId: 'client-id',
19
+ clientSecret: 'client-secret',
20
+ redirectUri: 'https://api.example.test/auth/oidc/callback',
21
+ security: {
22
+ scope: 'openid profile email',
23
+ tokenSigningAlg: 'RS256',
24
+ userInfoSigningAlg: 'RS256',
25
+ tokenEndpointAuthMethod: 'client_secret_basic',
26
+ skipSubjectCheck: false
27
+ },
28
+ options: {
29
+ enablePasswordAuth: false,
30
+ autoCreateUser: true,
31
+ adminRoleOrGroup: 'admins',
32
+ autoCreatePermissions: [
33
+ 'read'
34
+ ]
35
+ }
36
+ }
37
+ }
38
+ }
39
+ }));
40
+ jest.mock('openid-client', ()=>{
41
+ let AuthorizationResponseError = class AuthorizationResponseError extends Error {
42
+ constructor(message, options){
43
+ super(message);
44
+ this.code = 'authorization_response_error';
45
+ this.error_description = options?.cause?.get('error_description') ?? message;
46
+ }
47
+ };
48
+ return {
49
+ allowInsecureRequests: jest.fn(),
50
+ authorizationCodeGrant: jest.fn(),
51
+ AuthorizationResponseError,
52
+ calculatePKCECodeChallenge: jest.fn(),
53
+ ClientSecretBasic: jest.fn(),
54
+ ClientSecretPost: jest.fn(),
55
+ Configuration: class {
56
+ },
57
+ discovery: jest.fn(),
58
+ fetchUserInfo: jest.fn(),
59
+ IDToken: class {
60
+ },
61
+ None: jest.fn(),
62
+ randomNonce: jest.fn(),
63
+ randomPKCECodeVerifier: jest.fn(),
64
+ randomState: jest.fn(),
65
+ skipSubjectCheck: Symbol('skipSubjectCheck'),
66
+ UserInfoResponse: class {
67
+ }
68
+ };
69
+ });
70
+ describe(_authprovideroidcservice.AuthProviderOIDC.name, ()=>{
71
+ let service;
72
+ let usersManager;
73
+ let adminUsersManager;
74
+ const makeConfig = (supportsPKCE = true)=>({
75
+ serverMetadata: ()=>({
76
+ supportsPKCE: ()=>supportsPKCE,
77
+ authorization_endpoint: 'https://issuer.example.test/authorize'
78
+ })
79
+ });
80
+ const makeReply = ()=>({
81
+ header: jest.fn().mockReturnThis(),
82
+ setCookie: jest.fn(),
83
+ clearCookie: jest.fn()
84
+ });
85
+ beforeAll(async ()=>{
86
+ usersManager = {
87
+ findUser: jest.fn(),
88
+ logUser: jest.fn(),
89
+ updateAccesses: jest.fn().mockResolvedValue(undefined),
90
+ fromUserId: jest.fn()
91
+ };
92
+ adminUsersManager = {
93
+ createUserOrGuest: jest.fn(),
94
+ updateUserOrGuest: jest.fn()
95
+ };
96
+ const module = await _testing.Test.createTestingModule({
97
+ providers: [
98
+ {
99
+ provide: _usersmanagerservice.UsersManager,
100
+ useValue: usersManager
101
+ },
102
+ {
103
+ provide: _adminusersmanagerservice.AdminUsersManager,
104
+ useValue: adminUsersManager
105
+ },
106
+ _authprovideroidcservice.AuthProviderOIDC
107
+ ]
108
+ }).compile();
109
+ module.useLogger([
110
+ 'fatal'
111
+ ]);
112
+ service = module.get(_authprovideroidcservice.AuthProviderOIDC);
113
+ });
114
+ beforeEach(()=>{
115
+ jest.restoreAllMocks();
116
+ jest.clearAllMocks();
117
+ });
118
+ it('returns null when user is not found', async ()=>{
119
+ usersManager.findUser.mockResolvedValue(null);
120
+ const result = await service.validateUser('john', 'secret');
121
+ expect(result).toBeNull();
122
+ expect(usersManager.findUser).toHaveBeenCalledWith('john', false);
123
+ expect(usersManager.logUser).not.toHaveBeenCalled();
124
+ });
125
+ it('allows local password auth for guest users', async ()=>{
126
+ const guestUser = {
127
+ id: 1,
128
+ isGuest: true,
129
+ isAdmin: false
130
+ };
131
+ usersManager.findUser.mockResolvedValue(guestUser);
132
+ usersManager.logUser.mockResolvedValue(guestUser);
133
+ const result = await service.validateUser('guest', 'secret');
134
+ expect(usersManager.logUser).toHaveBeenCalledWith(guestUser, 'secret', undefined, undefined);
135
+ expect(result).toBe(guestUser);
136
+ });
137
+ it('builds the authorization url with PKCE data and cookies', async ()=>{
138
+ jest.spyOn(service, 'getConfig').mockResolvedValue(makeConfig(true));
139
+ _openidclient.randomState.mockReturnValue('state-1');
140
+ _openidclient.randomNonce.mockReturnValue('nonce-1');
141
+ _openidclient.randomPKCECodeVerifier.mockReturnValue('verifier-1');
142
+ _openidclient.calculatePKCECodeChallenge.mockResolvedValue('challenge-1');
143
+ const reply = makeReply();
144
+ const authUrl = await service.getAuthorizationUrl(reply);
145
+ expect(reply.header).toHaveBeenCalled();
146
+ expect(reply.setCookie).toHaveBeenCalledWith(_authoidcconstants.OAuthCookie.State, 'state-1', expect.any(Object));
147
+ expect(reply.setCookie).toHaveBeenCalledWith(_authoidcconstants.OAuthCookie.Nonce, 'nonce-1', expect.any(Object));
148
+ expect(reply.setCookie).toHaveBeenCalledWith(_authoidcconstants.OAuthCookie.CodeVerifier, 'verifier-1', expect.any(Object));
149
+ const url = new URL(authUrl);
150
+ expect(url.searchParams.get('code_challenge')).toBe('challenge-1');
151
+ expect(url.searchParams.get('client_id')).toBe('client-id');
152
+ });
153
+ it('handles callback success and clears cookies', async ()=>{
154
+ const config = makeConfig(true);
155
+ jest.spyOn(service, 'getConfig').mockResolvedValue(config);
156
+ const processSpy = jest.spyOn(service, 'processUserInfo').mockResolvedValue({
157
+ id: 7
158
+ });
159
+ _openidclient.authorizationCodeGrant.mockResolvedValue({
160
+ claims: ()=>({
161
+ sub: 'subject-1'
162
+ }),
163
+ access_token: 'access-token'
164
+ });
165
+ _openidclient.fetchUserInfo.mockResolvedValue({
166
+ sub: 'subject-1',
167
+ email: 'a@b.c',
168
+ preferred_username: 'alice'
169
+ });
170
+ const req = {
171
+ cookies: {
172
+ [_authoidcconstants.OAuthCookie.State]: 'state-1',
173
+ [_authoidcconstants.OAuthCookie.Nonce]: 'nonce-1',
174
+ [_authoidcconstants.OAuthCookie.CodeVerifier]: 'verifier-1'
175
+ },
176
+ ip: '127.0.0.1'
177
+ };
178
+ const reply = makeReply();
179
+ const result = await service.handleCallback(req, reply, {
180
+ code: 'abc'
181
+ });
182
+ expect(result).toEqual({
183
+ id: 7
184
+ });
185
+ expect(processSpy).toHaveBeenCalledWith({
186
+ sub: 'subject-1',
187
+ email: 'a@b.c',
188
+ preferred_username: 'alice'
189
+ }, '127.0.0.1');
190
+ expect(reply.clearCookie).toHaveBeenCalledWith(_authoidcconstants.OAuthCookie.State, {
191
+ path: '/'
192
+ });
193
+ expect(reply.clearCookie).toHaveBeenCalledWith(_authoidcconstants.OAuthCookie.Nonce, {
194
+ path: '/'
195
+ });
196
+ expect(reply.clearCookie).toHaveBeenCalledWith(_authoidcconstants.OAuthCookie.CodeVerifier, {
197
+ path: '/'
198
+ });
199
+ });
200
+ it('rejects callback when state is missing', async ()=>{
201
+ jest.spyOn(service, 'getConfig').mockResolvedValue(makeConfig(false));
202
+ const reply = makeReply();
203
+ const req = {
204
+ cookies: {},
205
+ ip: '127.0.0.1'
206
+ };
207
+ await expect(service.handleCallback(req, reply, {
208
+ code: 'abc'
209
+ })).rejects.toMatchObject({
210
+ status: _common.HttpStatus.BAD_REQUEST
211
+ });
212
+ expect(reply.clearCookie).toHaveBeenCalledWith(_authoidcconstants.OAuthCookie.State, {
213
+ path: '/'
214
+ });
215
+ });
216
+ it('maps AuthorizationResponseError to BAD_REQUEST', async ()=>{
217
+ jest.spyOn(service, 'getConfig').mockResolvedValue(makeConfig(false));
218
+ _openidclient.authorizationCodeGrant.mockRejectedValue(new _openidclient.AuthorizationResponseError('access_denied', {
219
+ cause: new URLSearchParams('error=access_denied&error_description=No access')
220
+ }));
221
+ const req = {
222
+ cookies: {
223
+ [_authoidcconstants.OAuthCookie.State]: 'state-1',
224
+ [_authoidcconstants.OAuthCookie.Nonce]: 'nonce-1'
225
+ },
226
+ ip: '127.0.0.1'
227
+ };
228
+ const reply = makeReply();
229
+ await expect(service.handleCallback(req, reply, {
230
+ code: 'abc'
231
+ })).rejects.toMatchObject({
232
+ status: _common.HttpStatus.BAD_REQUEST,
233
+ message: 'No access'
234
+ });
235
+ });
236
+ it('builds the redirect callback url with token expirations', ()=>{
237
+ const url = service.getRedirectCallbackUrl(10, 20);
238
+ const parsed = new URL(url);
239
+ expect(parsed.hash).toContain('access_expiration=10');
240
+ expect(parsed.hash).toContain('refresh_expiration=20');
241
+ });
242
+ it('creates identities with admin role when claims match', async ()=>{
243
+ usersManager.findUser.mockResolvedValue(null);
244
+ adminUsersManager.createUserOrGuest.mockResolvedValue({
245
+ id: 10,
246
+ login: 'bob'
247
+ });
248
+ usersManager.fromUserId.mockResolvedValue({
249
+ id: 10,
250
+ role: _user.USER_ROLE.ADMINISTRATOR,
251
+ login: 'bob',
252
+ setFullName: jest.fn()
253
+ });
254
+ const userInfo = {
255
+ sub: 'x',
256
+ email: 'b@c.d',
257
+ preferred_username: 'bob',
258
+ groups: [
259
+ 'admins'
260
+ ]
261
+ };
262
+ const result = await service.processUserInfo(userInfo, '127.0.0.1');
263
+ expect(adminUsersManager.createUserOrGuest).toHaveBeenCalledWith(expect.objectContaining({
264
+ role: _user.USER_ROLE.ADMINISTRATOR
265
+ }), _user.USER_ROLE.ADMINISTRATOR);
266
+ expect(result.role).toBe(_user.USER_ROLE.ADMINISTRATOR);
267
+ });
268
+ });
269
+
270
+ //# sourceMappingURL=auth-provider-oidc.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../backend/src/authentication/providers/oidc/auth-provider-oidc.service.spec.ts"],"sourcesContent":["import { HttpStatus } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport {\n authorizationCodeGrant,\n AuthorizationResponseError,\n calculatePKCECodeChallenge,\n fetchUserInfo,\n randomNonce,\n randomPKCECodeVerifier,\n randomState\n} from 'openid-client'\nimport { USER_ROLE } from '../../../applications/users/constants/user'\nimport { AdminUsersManager } from '../../../applications/users/services/admin-users-manager.service'\nimport { UsersManager } from '../../../applications/users/services/users-manager.service'\nimport { OAuthCookie } from './auth-oidc.constants'\nimport { AuthProviderOIDC } from './auth-provider-oidc.service'\n\njest.mock('../../../configuration/config.environment', () => ({\n configuration: {\n auth: {\n oidc: {\n issuerUrl: 'https://issuer.example.test',\n clientId: 'client-id',\n clientSecret: 'client-secret',\n redirectUri: 'https://api.example.test/auth/oidc/callback',\n security: {\n scope: 'openid profile email',\n tokenSigningAlg: 'RS256',\n userInfoSigningAlg: 'RS256',\n tokenEndpointAuthMethod: 'client_secret_basic',\n skipSubjectCheck: false\n },\n options: {\n enablePasswordAuth: false,\n autoCreateUser: true,\n adminRoleOrGroup: 'admins',\n autoCreatePermissions: ['read']\n }\n }\n }\n }\n}))\n\njest.mock('openid-client', () => {\n class AuthorizationResponseError extends Error {\n code: string\n error_description: string\n constructor(message: string, options: { cause: URLSearchParams }) {\n super(message)\n this.code = 'authorization_response_error'\n this.error_description = options?.cause?.get('error_description') ?? message\n }\n }\n\n return {\n allowInsecureRequests: jest.fn(),\n authorizationCodeGrant: jest.fn(),\n AuthorizationResponseError,\n calculatePKCECodeChallenge: jest.fn(),\n ClientSecretBasic: jest.fn(),\n ClientSecretPost: jest.fn(),\n Configuration: class {},\n discovery: jest.fn(),\n fetchUserInfo: jest.fn(),\n IDToken: class {},\n None: jest.fn(),\n randomNonce: jest.fn(),\n randomPKCECodeVerifier: jest.fn(),\n randomState: jest.fn(),\n skipSubjectCheck: Symbol('skipSubjectCheck'),\n UserInfoResponse: class {}\n }\n})\n\ndescribe(AuthProviderOIDC.name, () => {\n let service: AuthProviderOIDC\n let usersManager: {\n findUser: jest.Mock\n logUser: jest.Mock\n updateAccesses: jest.Mock\n fromUserId: jest.Mock\n }\n let adminUsersManager: {\n createUserOrGuest: jest.Mock\n updateUserOrGuest: jest.Mock\n }\n\n const makeConfig = (supportsPKCE = true) => ({\n serverMetadata: () => ({\n supportsPKCE: () => supportsPKCE,\n authorization_endpoint: 'https://issuer.example.test/authorize'\n })\n })\n\n const makeReply = () => ({\n header: jest.fn().mockReturnThis(),\n setCookie: jest.fn(),\n clearCookie: jest.fn()\n })\n\n beforeAll(async () => {\n usersManager = {\n findUser: jest.fn(),\n logUser: jest.fn(),\n updateAccesses: jest.fn().mockResolvedValue(undefined),\n fromUserId: jest.fn()\n }\n adminUsersManager = {\n createUserOrGuest: jest.fn(),\n updateUserOrGuest: jest.fn()\n }\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [{ provide: UsersManager, useValue: usersManager }, { provide: AdminUsersManager, useValue: adminUsersManager }, AuthProviderOIDC]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<AuthProviderOIDC>(AuthProviderOIDC)\n })\n\n beforeEach(() => {\n jest.restoreAllMocks()\n jest.clearAllMocks()\n })\n\n it('returns null when user is not found', async () => {\n usersManager.findUser.mockResolvedValue(null)\n\n const result = await service.validateUser('john', 'secret')\n\n expect(result).toBeNull()\n expect(usersManager.findUser).toHaveBeenCalledWith('john', false)\n expect(usersManager.logUser).not.toHaveBeenCalled()\n })\n\n it('allows local password auth for guest users', async () => {\n const guestUser = { id: 1, isGuest: true, isAdmin: false } as any\n usersManager.findUser.mockResolvedValue(guestUser)\n usersManager.logUser.mockResolvedValue(guestUser)\n\n const result = await service.validateUser('guest', 'secret')\n\n expect(usersManager.logUser).toHaveBeenCalledWith(guestUser, 'secret', undefined, undefined)\n expect(result).toBe(guestUser)\n })\n\n it('builds the authorization url with PKCE data and cookies', async () => {\n jest.spyOn(service, 'getConfig').mockResolvedValue(makeConfig(true) as any)\n ;(randomState as jest.Mock).mockReturnValue('state-1')\n ;(randomNonce as jest.Mock).mockReturnValue('nonce-1')\n ;(randomPKCECodeVerifier as jest.Mock).mockReturnValue('verifier-1')\n ;(calculatePKCECodeChallenge as jest.Mock).mockResolvedValue('challenge-1')\n const reply = makeReply()\n\n const authUrl = await service.getAuthorizationUrl(reply as any)\n\n expect(reply.header).toHaveBeenCalled()\n expect(reply.setCookie).toHaveBeenCalledWith(OAuthCookie.State, 'state-1', expect.any(Object))\n expect(reply.setCookie).toHaveBeenCalledWith(OAuthCookie.Nonce, 'nonce-1', expect.any(Object))\n expect(reply.setCookie).toHaveBeenCalledWith(OAuthCookie.CodeVerifier, 'verifier-1', expect.any(Object))\n const url = new URL(authUrl)\n expect(url.searchParams.get('code_challenge')).toBe('challenge-1')\n expect(url.searchParams.get('client_id')).toBe('client-id')\n })\n\n it('handles callback success and clears cookies', async () => {\n const config = makeConfig(true)\n jest.spyOn(service, 'getConfig').mockResolvedValue(config as any)\n const processSpy = jest.spyOn(service as any, 'processUserInfo').mockResolvedValue({ id: 7 } as any)\n ;(authorizationCodeGrant as jest.Mock).mockResolvedValue({\n claims: () => ({ sub: 'subject-1' }),\n access_token: 'access-token'\n })\n ;(fetchUserInfo as jest.Mock).mockResolvedValue({ sub: 'subject-1', email: 'a@b.c', preferred_username: 'alice' })\n const req = {\n cookies: {\n [OAuthCookie.State]: 'state-1',\n [OAuthCookie.Nonce]: 'nonce-1',\n [OAuthCookie.CodeVerifier]: 'verifier-1'\n },\n ip: '127.0.0.1'\n }\n const reply = makeReply()\n\n const result = await service.handleCallback(req as any, reply as any, { code: 'abc' })\n\n expect(result).toEqual({ id: 7 })\n expect(processSpy).toHaveBeenCalledWith({ sub: 'subject-1', email: 'a@b.c', preferred_username: 'alice' }, '127.0.0.1')\n expect(reply.clearCookie).toHaveBeenCalledWith(OAuthCookie.State, { path: '/' })\n expect(reply.clearCookie).toHaveBeenCalledWith(OAuthCookie.Nonce, { path: '/' })\n expect(reply.clearCookie).toHaveBeenCalledWith(OAuthCookie.CodeVerifier, { path: '/' })\n })\n\n it('rejects callback when state is missing', async () => {\n jest.spyOn(service, 'getConfig').mockResolvedValue(makeConfig(false) as any)\n const reply = makeReply()\n const req = { cookies: {}, ip: '127.0.0.1' }\n\n await expect(service.handleCallback(req as any, reply as any, { code: 'abc' })).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n expect(reply.clearCookie).toHaveBeenCalledWith(OAuthCookie.State, { path: '/' })\n })\n\n it('maps AuthorizationResponseError to BAD_REQUEST', async () => {\n jest.spyOn(service, 'getConfig').mockResolvedValue(makeConfig(false) as any)\n ;(authorizationCodeGrant as jest.Mock).mockRejectedValue(\n new AuthorizationResponseError('access_denied', {\n cause: new URLSearchParams('error=access_denied&error_description=No access')\n })\n )\n const req = {\n cookies: {\n [OAuthCookie.State]: 'state-1',\n [OAuthCookie.Nonce]: 'nonce-1'\n },\n ip: '127.0.0.1'\n }\n const reply = makeReply()\n\n await expect(service.handleCallback(req as any, reply as any, { code: 'abc' })).rejects.toMatchObject({\n status: HttpStatus.BAD_REQUEST,\n message: 'No access'\n })\n })\n\n it('builds the redirect callback url with token expirations', () => {\n const url = service.getRedirectCallbackUrl(10, 20)\n const parsed = new URL(url)\n expect(parsed.hash).toContain('access_expiration=10')\n expect(parsed.hash).toContain('refresh_expiration=20')\n })\n\n it('creates identities with admin role when claims match', async () => {\n usersManager.findUser.mockResolvedValue(null)\n adminUsersManager.createUserOrGuest.mockResolvedValue({ id: 10, login: 'bob' })\n usersManager.fromUserId.mockResolvedValue({ id: 10, role: USER_ROLE.ADMINISTRATOR, login: 'bob', setFullName: jest.fn() } as any)\n const userInfo = { sub: 'x', email: 'b@c.d', preferred_username: 'bob', groups: ['admins'] }\n\n const result = await (service as any).processUserInfo(userInfo, '127.0.0.1')\n\n expect(adminUsersManager.createUserOrGuest).toHaveBeenCalledWith(\n expect.objectContaining({ role: USER_ROLE.ADMINISTRATOR }),\n USER_ROLE.ADMINISTRATOR\n )\n expect(result.role).toBe(USER_ROLE.ADMINISTRATOR)\n })\n})\n"],"names":["jest","mock","configuration","auth","oidc","issuerUrl","clientId","clientSecret","redirectUri","security","scope","tokenSigningAlg","userInfoSigningAlg","tokenEndpointAuthMethod","skipSubjectCheck","options","enablePasswordAuth","autoCreateUser","adminRoleOrGroup","autoCreatePermissions","AuthorizationResponseError","Error","message","code","error_description","cause","get","allowInsecureRequests","fn","authorizationCodeGrant","calculatePKCECodeChallenge","ClientSecretBasic","ClientSecretPost","Configuration","discovery","fetchUserInfo","IDToken","None","randomNonce","randomPKCECodeVerifier","randomState","Symbol","UserInfoResponse","describe","AuthProviderOIDC","name","service","usersManager","adminUsersManager","makeConfig","supportsPKCE","serverMetadata","authorization_endpoint","makeReply","header","mockReturnThis","setCookie","clearCookie","beforeAll","findUser","logUser","updateAccesses","mockResolvedValue","undefined","fromUserId","createUserOrGuest","updateUserOrGuest","module","Test","createTestingModule","providers","provide","UsersManager","useValue","AdminUsersManager","compile","useLogger","beforeEach","restoreAllMocks","clearAllMocks","it","result","validateUser","expect","toBeNull","toHaveBeenCalledWith","not","toHaveBeenCalled","guestUser","id","isGuest","isAdmin","toBe","spyOn","mockReturnValue","reply","authUrl","getAuthorizationUrl","OAuthCookie","State","any","Object","Nonce","CodeVerifier","url","URL","searchParams","config","processSpy","claims","sub","access_token","email","preferred_username","req","cookies","ip","handleCallback","toEqual","path","rejects","toMatchObject","status","HttpStatus","BAD_REQUEST","mockRejectedValue","URLSearchParams","getRedirectCallbackUrl","parsed","hash","toContain","login","role","USER_ROLE","ADMINISTRATOR","setFullName","userInfo","groups","processUserInfo","objectContaining"],"mappings":"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"}
@@ -1,15 +1,11 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
9
- Object.defineProperty(exports, "AuthMethod2FA", {
5
+ Object.defineProperty(exports, "AuthProvider2FA", {
10
6
  enumerable: true,
11
7
  get: function() {
12
- return AuthMethod2FA;
8
+ return AuthProvider2FA;
13
9
  }
14
10
  });
15
11
  const _common = require("@nestjs/common");
@@ -33,7 +29,7 @@ function _ts_decorate(decorators, target, key, desc) {
33
29
  function _ts_metadata(k, v) {
34
30
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
35
31
  }
36
- let AuthMethod2FA = class AuthMethod2FA {
32
+ let AuthProvider2FA = class AuthProvider2FA {
37
33
  async initTwoFactor(user) {
38
34
  const { secret, qrDataUrl } = this.generateSecretAndQr(user.email);
39
35
  // store encrypted secret in cache for 5 minutes
@@ -89,7 +85,10 @@ let AuthMethod2FA = class AuthMethod2FA {
89
85
  const user = await this.loadUser(req.user.id, req.ip);
90
86
  secret = secret || user.secrets.twoFaSecret;
91
87
  const auth = verifyDto.isRecoveryCode ? await this.validateRecoveryCode(req.user.id, verifyDto.code, user.secrets.recoveryCodes) : this.validateTwoFactorCode(verifyDto.code, secret);
92
- this.usersManager.updateAccesses(user, req.ip, auth.success, true).catch((e)=>this.logger.error(`${this.verify.name} - ${e}`));
88
+ this.usersManager.updateAccesses(user, req.ip, auth.success, true).catch((e)=>this.logger.error({
89
+ tag: this.verify.name,
90
+ msg: `${e}`
91
+ }));
93
92
  return fromLogin ? [
94
93
  auth,
95
94
  user
@@ -109,14 +108,20 @@ let AuthMethod2FA = class AuthMethod2FA {
109
108
  } catch (e) {
110
109
  auth.success = false;
111
110
  auth.message = e.message;
112
- this.logger.error(`${this.adminResetUserTwoFa.name} - ${e}`);
111
+ this.logger.error({
112
+ tag: this.adminResetUserTwoFa.name,
113
+ msg: `${e}`
114
+ });
113
115
  }
114
116
  return auth;
115
117
  }
116
118
  async loadUser(userId, ip) {
117
119
  const user = await this.usersManager.fromUserId(userId);
118
120
  if (!user) {
119
- this.logger.warn(`User ${userId} (${ip}) not found`);
121
+ this.logger.warn({
122
+ tag: this.loadUser.name,
123
+ msg: `User ${userId} (${ip}) not found`
124
+ });
120
125
  throw new _common.HttpException(`User not found`, _common.HttpStatus.NOT_FOUND);
121
126
  }
122
127
  this.usersManager.validateUserAccess(user, ip);
@@ -126,7 +131,10 @@ let AuthMethod2FA = class AuthMethod2FA {
126
131
  // This function works with any authentication method, provided that
127
132
  // the authentication service implements proper user password updates in the database.
128
133
  if (!await this.usersManager.compareUserPassword(user.id, password)) {
129
- this.usersManager.updateAccesses(user, ip, false, true).catch((e)=>this.logger.error(`${this.enableTwoFactor.name} - ${e}`));
134
+ this.usersManager.updateAccesses(user, ip, false, true).catch((e)=>this.logger.error({
135
+ tag: this.verifyUserPassword.name,
136
+ msg: `${e}`
137
+ }));
130
138
  throw new _common.HttpException('Incorrect code or password', _common.HttpStatus.BAD_REQUEST);
131
139
  }
132
140
  }
@@ -147,7 +155,10 @@ let AuthMethod2FA = class AuthMethod2FA {
147
155
  });
148
156
  if (!auth.success) auth.message = 'Incorrect code or password';
149
157
  } catch (e) {
150
- this.logger.error(`${this.validateTwoFactorCode.name} - ${e}`);
158
+ this.logger.error({
159
+ tag: this.validateTwoFactorCode.name,
160
+ msg: `${e}`
161
+ });
151
162
  auth.message = e.message;
152
163
  }
153
164
  return auth;
@@ -159,28 +170,32 @@ let AuthMethod2FA = class AuthMethod2FA {
159
170
  };
160
171
  if (!encryptedCodes || encryptedCodes.length === 0) {
161
172
  auth.message = 'Invalid code';
162
- } else {
163
- try {
164
- for (const encCode of encryptedCodes){
165
- if (code === this.decryptSecret(encCode)) {
166
- auth.success = true;
167
- // removed used code
168
- encryptedCodes.splice(encryptedCodes.indexOf(encCode), 1);
169
- break;
170
- }
171
- }
172
- if (auth.success) {
173
- // update recovery codes
174
- await this.usersManager.updateSecrets(userId, {
175
- recoveryCodes: encryptedCodes
176
- });
177
- } else {
178
- auth.message = 'Invalid code';
173
+ return auth;
174
+ }
175
+ try {
176
+ for (const encCode of encryptedCodes){
177
+ const decryptedCode = this.decryptSecret(encCode);
178
+ if (code === decryptedCode) {
179
+ auth.success = true;
180
+ // removed used code
181
+ encryptedCodes.splice(encryptedCodes.indexOf(encCode), 1);
182
+ break;
179
183
  }
180
- } catch (e) {
181
- this.logger.error(`${this.validateRecoveryCode.name} - ${e}`);
182
- auth.message = e.message;
183
184
  }
185
+ if (auth.success) {
186
+ // update recovery codes
187
+ await this.usersManager.updateSecrets(userId, {
188
+ recoveryCodes: encryptedCodes
189
+ });
190
+ } else {
191
+ auth.message = 'Invalid code';
192
+ }
193
+ } catch (e) {
194
+ this.logger.error({
195
+ tag: this.validateRecoveryCode.name,
196
+ msg: `${e}`
197
+ });
198
+ auth.message = e.message;
184
199
  }
185
200
  return auth;
186
201
  }
@@ -228,17 +243,20 @@ let AuthMethod2FA = class AuthMethod2FA {
228
243
  };
229
244
  this.notificationsManager.sendEmailNotification([
230
245
  req.user
231
- ], notification).catch((e)=>this.logger.error(`${this.sendEmailNotification.name} - ${e}`));
246
+ ], notification).catch((e)=>this.logger.error({
247
+ tag: this.sendEmailNotification.name,
248
+ msg: `${e}`
249
+ }));
232
250
  }
233
251
  constructor(cache, usersManager, notificationsManager){
234
252
  this.cache = cache;
235
253
  this.usersManager = usersManager;
236
254
  this.notificationsManager = notificationsManager;
237
- this.logger = new _common.Logger(AuthMethod2FA.name);
255
+ this.logger = new _common.Logger(AuthProvider2FA.name);
238
256
  this.cacheKeyPrefix = 'auth-2fa-pending-user-';
239
257
  }
240
258
  };
241
- AuthMethod2FA = _ts_decorate([
259
+ AuthProvider2FA = _ts_decorate([
242
260
  (0, _common.Injectable)(),
243
261
  _ts_metadata("design:type", Function),
244
262
  _ts_metadata("design:paramtypes", [
@@ -246,6 +264,6 @@ AuthMethod2FA = _ts_decorate([
246
264
  typeof _usersmanagerservice.UsersManager === "undefined" ? Object : _usersmanagerservice.UsersManager,
247
265
  typeof _notificationsmanagerservice.NotificationsManager === "undefined" ? Object : _notificationsmanagerservice.NotificationsManager
248
266
  ])
249
- ], AuthMethod2FA);
267
+ ], AuthProvider2FA);
250
268
 
251
- //# sourceMappingURL=auth-method-two-fa.service.js.map
269
+ //# sourceMappingURL=auth-provider-two-fa.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../backend/src/authentication/providers/two-fa/auth-provider-two-fa.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { Totp } from 'time2fa'\nimport { NOTIFICATION_APP, NOTIFICATION_APP_EVENT } from '../../../applications/notifications/constants/notifications'\nimport { NotificationContent } from '../../../applications/notifications/interfaces/notification-properties.interface'\nimport { NotificationsManager } from '../../../applications/notifications/services/notifications-manager.service'\nimport { UserModel } from '../../../applications/users/models/user.model'\nimport { UsersManager } from '../../../applications/users/services/users-manager.service'\nimport { ACTION } from '../../../common/constants'\nimport { generateShortUUID } from '../../../common/functions'\nimport { qrcodeToDataURL } from '../../../common/qrcode'\nimport { configuration } from '../../../configuration/config.environment'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { TWO_FA_CODE_LENGTH } from '../../constants/auth'\nimport { FastifyAuthenticatedRequest } from '../../interfaces/auth-request.interface'\nimport { decryptSecret, encryptSecret } from '../../utils/crypt-secret'\nimport { TwoFaVerifyDto, TwoFaVerifyWithPasswordDto } from './auth-two-fa.dtos'\nimport { TwoFaEnableResult, TwoFaSetup, TwoFaVerifyResult } from './auth-two-fa.interfaces'\n\n@Injectable()\nexport class AuthProvider2FA {\n private readonly logger = new Logger(AuthProvider2FA.name)\n private readonly cacheKeyPrefix = 'auth-2fa-pending-user-'\n\n constructor(\n private readonly cache: Cache,\n private readonly usersManager: UsersManager,\n private readonly notificationsManager: NotificationsManager\n ) {}\n\n async initTwoFactor(user: UserModel): Promise<TwoFaSetup> {\n const { secret, qrDataUrl } = this.generateSecretAndQr(user.email)\n // store encrypted secret in cache for 5 minutes\n await this.cache.set(this.getCacheKey(user.id), this.encryptSecret(secret), 300)\n return { secret, qrDataUrl }\n }\n\n async enableTwoFactor(body: TwoFaVerifyWithPasswordDto, req: FastifyAuthenticatedRequest): Promise<TwoFaEnableResult> {\n // retrieve encrypted secret from cache\n const secret: string = await this.cache.get(this.getCacheKey(req.user.id))\n if (!secret) {\n throw new HttpException('The secret has expired', HttpStatus.BAD_REQUEST)\n }\n // load user\n const [auth, user] = await this.verify(body, req, true, secret)\n if (!auth.success) {\n throw new HttpException(auth.message, HttpStatus.FORBIDDEN)\n }\n // verify user password\n await this.verifyUserPassword(user, body.password, req.ip)\n // generate recovery codes\n const recoveryCodes = this.generateRecoveryCodes()\n // store and enable TwoFA & recovery codes\n await this.usersManager.updateSecrets(user.id, {\n twoFaSecret: secret,\n recoveryCodes: recoveryCodes.map((code) => this.encryptSecret(code))\n })\n this.sendEmailNotification(req, ACTION.ADD)\n return { ...auth, recoveryCodes: recoveryCodes }\n }\n\n async disableTwoFactor(body: TwoFaVerifyWithPasswordDto, req: FastifyAuthenticatedRequest): Promise<TwoFaVerifyResult> {\n // load user\n const [auth, user] = await this.verify(body, req, true)\n if (!auth.success) {\n throw new HttpException(auth.message, HttpStatus.FORBIDDEN)\n }\n // verify user password\n await this.verifyUserPassword(user, body.password, req.ip)\n // store and disable TwoFA & recovery codes\n await this.usersManager.updateSecrets(user.id, { twoFaSecret: undefined, recoveryCodes: undefined })\n this.sendEmailNotification(req, ACTION.DELETE)\n return auth\n }\n\n async verify(verifyDto: TwoFaVerifyDto, req: FastifyAuthenticatedRequest, fromLogin?: false, secret?: string): Promise<TwoFaVerifyResult>\n async verify(verifyDto: TwoFaVerifyDto, req: FastifyAuthenticatedRequest, fromLogin: true, secret?: string): Promise<[TwoFaVerifyResult, UserModel]>\n async verify(\n verifyDto: TwoFaVerifyDto,\n req: FastifyAuthenticatedRequest,\n fromLogin = false,\n secret?: string\n ): Promise<TwoFaVerifyResult | [TwoFaVerifyResult, UserModel]> {\n const user = await this.loadUser(req.user.id, req.ip)\n secret = secret || user.secrets.twoFaSecret\n const auth = verifyDto.isRecoveryCode\n ? await this.validateRecoveryCode(req.user.id, verifyDto.code, user.secrets.recoveryCodes)\n : this.validateTwoFactorCode(verifyDto.code, secret)\n this.usersManager.updateAccesses(user, req.ip, auth.success, true).catch((e: Error) => this.logger.error({ tag: this.verify.name, msg: `${e}` }))\n return fromLogin ? [auth, user] : auth\n }\n\n async adminResetUserTwoFa(userId: number) {\n const auth: TwoFaVerifyResult = { success: false, message: '' }\n try {\n await this.usersManager.updateSecrets(userId, { twoFaSecret: undefined, recoveryCodes: undefined })\n auth.success = true\n } catch (e) {\n auth.success = false\n auth.message = e.message\n this.logger.error({ tag: this.adminResetUserTwoFa.name, msg: `${e}` })\n }\n return auth\n }\n\n async loadUser(userId: number, ip: string) {\n const user: UserModel = await this.usersManager.fromUserId(userId)\n if (!user) {\n this.logger.warn({ tag: this.loadUser.name, msg: `User ${userId} (${ip}) not found` })\n throw new HttpException(`User not found`, HttpStatus.NOT_FOUND)\n }\n this.usersManager.validateUserAccess(user, ip)\n return user\n }\n\n async verifyUserPassword(user: UserModel, password: string, ip: string) {\n // This function works with any authentication method, provided that\n // the authentication service implements proper user password updates in the database.\n if (!(await this.usersManager.compareUserPassword(user.id, password))) {\n this.usersManager\n .updateAccesses(user, ip, false, true)\n .catch((e: Error) => this.logger.error({ tag: this.verifyUserPassword.name, msg: `${e}` }))\n throw new HttpException('Incorrect code or password', HttpStatus.BAD_REQUEST)\n }\n }\n\n validateTwoFactorCode(code: string, encryptedSecret: string): TwoFaVerifyResult {\n const auth: TwoFaVerifyResult = { success: false, message: '' }\n if (!encryptedSecret) {\n auth.message = 'Incorrect code or password'\n return auth\n }\n try {\n auth.success = Totp.validate({ passcode: code, secret: this.decryptSecret(encryptedSecret), drift: 1 })\n if (!auth.success) auth.message = 'Incorrect code or password'\n } catch (e) {\n this.logger.error({ tag: this.validateTwoFactorCode.name, msg: `${e}` })\n auth.message = e.message\n }\n return auth\n }\n\n async validateRecoveryCode(userId: number, code: string, encryptedCodes: string[]): Promise<TwoFaVerifyResult> {\n const auth: TwoFaVerifyResult = { success: false, message: '' }\n if (!encryptedCodes || encryptedCodes.length === 0) {\n auth.message = 'Invalid code'\n return auth\n }\n try {\n for (const encCode of encryptedCodes) {\n const decryptedCode = this.decryptSecret(encCode)\n if (code === decryptedCode) {\n auth.success = true\n // removed used code\n encryptedCodes.splice(encryptedCodes.indexOf(encCode), 1)\n break\n }\n }\n if (auth.success) {\n // update recovery codes\n await this.usersManager.updateSecrets(userId, { recoveryCodes: encryptedCodes })\n } else {\n auth.message = 'Invalid code'\n }\n } catch (e) {\n this.logger.error({ tag: this.validateRecoveryCode.name, msg: `${e}` })\n auth.message = e.message\n }\n return auth\n }\n\n private generateSecretAndQr(userEmail: string): TwoFaSetup {\n // Generate secret + otpauth URL + QR (DataURL)\n // Totp.generateKey returns { issuer, user, config, secret, url }\n const key = Totp.generateKey({ issuer: configuration.auth.mfa.totp.issuer, user: userEmail }, { digits: TWO_FA_CODE_LENGTH })\n const qrDataUrl = qrcodeToDataURL(key.url)\n return { secret: key.secret, qrDataUrl: qrDataUrl }\n }\n\n private getCacheKey(userId: number): string {\n return `${this.cacheKeyPrefix}${userId}`\n }\n\n private encryptSecret(secret: string): string {\n if (configuration.auth.encryptionKey) {\n return encryptSecret(secret, configuration.auth.encryptionKey)\n }\n return secret\n }\n\n private decryptSecret(secret: string): string {\n if (configuration.auth.encryptionKey) {\n return decryptSecret(secret, configuration.auth.encryptionKey)\n }\n return secret\n }\n\n private generateRecoveryCodes(count = 5): string[] {\n return Array.from({ length: count }, () => generateShortUUID())\n }\n\n private sendEmailNotification(req: FastifyAuthenticatedRequest, action: ACTION) {\n const notification: NotificationContent = {\n app: NOTIFICATION_APP.AUTH_2FA,\n event: NOTIFICATION_APP_EVENT.AUTH_2FA[action],\n element: req.headers['user-agent'],\n url: req.ip\n }\n this.notificationsManager\n .sendEmailNotification([req.user], notification)\n .catch((e: Error) => this.logger.error({ tag: this.sendEmailNotification.name, msg: `${e}` }))\n }\n}\n"],"names":["AuthProvider2FA","initTwoFactor","user","secret","qrDataUrl","generateSecretAndQr","email","cache","set","getCacheKey","id","encryptSecret","enableTwoFactor","body","req","get","HttpException","HttpStatus","BAD_REQUEST","auth","verify","success","message","FORBIDDEN","verifyUserPassword","password","ip","recoveryCodes","generateRecoveryCodes","usersManager","updateSecrets","twoFaSecret","map","code","sendEmailNotification","ACTION","ADD","disableTwoFactor","undefined","DELETE","verifyDto","fromLogin","loadUser","secrets","isRecoveryCode","validateRecoveryCode","validateTwoFactorCode","updateAccesses","catch","e","logger","error","tag","name","msg","adminResetUserTwoFa","userId","fromUserId","warn","NOT_FOUND","validateUserAccess","compareUserPassword","encryptedSecret","Totp","validate","passcode","decryptSecret","drift","encryptedCodes","length","encCode","decryptedCode","splice","indexOf","userEmail","key","generateKey","issuer","configuration","mfa","totp","digits","TWO_FA_CODE_LENGTH","qrcodeToDataURL","url","cacheKeyPrefix","encryptionKey","count","Array","from","generateShortUUID","action","notification","app","NOTIFICATION_APP","AUTH_2FA","event","NOTIFICATION_APP_EVENT","element","headers","notificationsManager","Logger"],"mappings":"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"}
@@ -1,8 +1,4 @@
1
- /*
2
- * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
3
- * This file is part of Sync-in | The open source file sync and share solution
4
- * See the LICENSE file for licensing details
5
- */ "use strict";
1
+ "use strict";
6
2
  Object.defineProperty(exports, "__esModule", {
7
3
  value: true
8
4
  });
@@ -13,7 +9,7 @@ const _notificationsmanagerservice = require("../../../applications/notification
13
9
  const _usersmanagerservice = require("../../../applications/users/services/users-manager.service");
14
10
  const _cacheservice = require("../../../infrastructure/cache/services/cache.service");
15
11
  const _cryptsecret = require("../../utils/crypt-secret");
16
- const _authmethodtwofaservice = require("./auth-method-two-fa.service");
12
+ const _authprovidertwofaservice = require("./auth-provider-two-fa.service");
17
13
  function _getRequireWildcardCache(nodeInterop) {
18
14
  if (typeof WeakMap !== "function") return null;
19
15
  var cacheBabelInterop = new WeakMap();
@@ -57,7 +53,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
57
53
  }
58
54
  jest.mock('../../utils/crypt-secret');
59
55
  jest.mock('../../../common/qrcode');
60
- describe(_authmethodtwofaservice.AuthMethod2FA.name, ()=>{
56
+ describe(_authprovidertwofaservice.AuthProvider2FA.name, ()=>{
61
57
  let service;
62
58
  let cache;
63
59
  let usersManager;
@@ -87,7 +83,7 @@ describe(_authmethodtwofaservice.AuthMethod2FA.name, ()=>{
87
83
  beforeEach(async ()=>{
88
84
  const module = await _testing.Test.createTestingModule({
89
85
  providers: [
90
- _authmethodtwofaservice.AuthMethod2FA,
86
+ _authprovidertwofaservice.AuthProvider2FA,
91
87
  {
92
88
  provide: _cacheservice.Cache,
93
89
  useValue: {
@@ -116,7 +112,7 @@ describe(_authmethodtwofaservice.AuthMethod2FA.name, ()=>{
116
112
  module.useLogger([
117
113
  'fatal'
118
114
  ]);
119
- service = module.get(_authmethodtwofaservice.AuthMethod2FA);
115
+ service = module.get(_authprovidertwofaservice.AuthProvider2FA);
120
116
  cache = module.get(_cacheservice.Cache);
121
117
  usersManager = module.get(_usersmanagerservice.UsersManager);
122
118
  notificationsManager = module.get(_notificationsmanagerservice.NotificationsManager);
@@ -384,4 +380,4 @@ describe(_authmethodtwofaservice.AuthMethod2FA.name, ()=>{
384
380
  });
385
381
  });
386
382
 
387
- //# sourceMappingURL=auth-method-two-fa.service.spec.js.map
383
+ //# sourceMappingURL=auth-provider-two-fa.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../backend/src/authentication/providers/two-fa/auth-provider-two-fa.service.spec.ts"],"sourcesContent":["import { HttpException, HttpStatus } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { Totp } from 'time2fa'\nimport { NotificationsManager } from '../../../applications/notifications/services/notifications-manager.service'\nimport { UserModel } from '../../../applications/users/models/user.model'\nimport { UsersManager } from '../../../applications/users/services/users-manager.service'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { FastifyAuthenticatedRequest } from '../../interfaces/auth-request.interface'\nimport { decryptSecret, encryptSecret } from '../../utils/crypt-secret'\nimport { AuthProvider2FA } from './auth-provider-two-fa.service'\nimport { TwoFaVerifyDto, TwoFaVerifyWithPasswordDto } from './auth-two-fa.dtos'\n\njest.mock('../../utils/crypt-secret')\njest.mock('../../../common/qrcode')\n\ndescribe(AuthProvider2FA.name, () => {\n let service: AuthProvider2FA\n let cache: jest.Mocked<Cache>\n let usersManager: jest.Mocked<UsersManager>\n let notificationsManager: jest.Mocked<NotificationsManager>\n\n const mockUser: Partial<UserModel> = {\n id: 1,\n login: 'testuser',\n email: 'test@example.com',\n secrets: {\n twoFaSecret: 'encrypted-secret',\n recoveryCodes: ['encrypted-code-1', 'encrypted-code-2']\n }\n }\n\n const mockRequest: Partial<FastifyAuthenticatedRequest> = {\n user: { id: 1, login: 'testuser' } as any,\n ip: '127.0.0.1',\n headers: { 'user-agent': 'test-agent' }\n }\n\n beforeEach(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n AuthProvider2FA,\n {\n provide: Cache,\n useValue: {\n get: jest.fn(),\n set: jest.fn()\n }\n },\n {\n provide: UsersManager,\n useValue: {\n fromUserId: jest.fn(),\n validateUserAccess: jest.fn(),\n compareUserPassword: jest.fn(),\n updateAccesses: jest.fn().mockResolvedValue(undefined),\n updateSecrets: jest.fn()\n }\n },\n {\n provide: NotificationsManager,\n useValue: {\n sendEmailNotification: jest.fn().mockResolvedValue(undefined)\n }\n }\n ]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<AuthProvider2FA>(AuthProvider2FA)\n cache = module.get(Cache)\n usersManager = module.get(UsersManager)\n notificationsManager = module.get(NotificationsManager)\n ;(encryptSecret as jest.Mock).mockImplementation((secret: string) => `encrypted-${secret}`)\n ;(decryptSecret as jest.Mock).mockImplementation((secret: string) => secret.replace('encrypted-', ''))\n\n const { qrcodeToDataURL } = await import('../../../common/qrcode')\n ;(qrcodeToDataURL as jest.Mock).mockReturnValue('data:image/png;base64,mock')\n })\n\n afterEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n\n describe('initTwoFactor', () => {\n it('should generate secret and QR code and store in cache', async () => {\n const result = await service.initTwoFactor(mockUser as UserModel)\n\n expect(result).toHaveProperty('secret')\n expect(result).toHaveProperty('qrDataUrl')\n expect(result.qrDataUrl).toBe('data:image/png;base64,mock')\n expect(cache.set).toHaveBeenCalledWith(`auth-2fa-pending-user-${mockUser.id}`, expect.any(String), 300)\n })\n })\n\n describe('enableTwoFactor', () => {\n const enableDto: TwoFaVerifyWithPasswordDto = {\n code: '123456',\n password: 'password123',\n isRecoveryCode: false\n }\n\n it('should throw error if secret has expired', async () => {\n cache.get.mockResolvedValue(null)\n\n await expect(service.enableTwoFactor(enableDto, mockRequest as FastifyAuthenticatedRequest)).rejects.toThrow(\n new HttpException('The secret has expired', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should throw error if verification fails', async () => {\n cache.get.mockResolvedValue('encrypted-secret')\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n jest.spyOn(service, 'validateTwoFactorCode').mockReturnValue({ success: false, message: 'Invalid code' })\n\n await expect(service.enableTwoFactor(enableDto, mockRequest as FastifyAuthenticatedRequest)).rejects.toThrow(\n new HttpException('Invalid code', HttpStatus.FORBIDDEN)\n )\n })\n\n it('should throw error if password is incorrect', async () => {\n cache.get.mockResolvedValue('encrypted-secret')\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n jest.spyOn(service, 'validateTwoFactorCode').mockReturnValue({ success: true, message: '' })\n usersManager.compareUserPassword.mockResolvedValue(false)\n\n await expect(service.enableTwoFactor(enableDto, mockRequest as FastifyAuthenticatedRequest)).rejects.toThrow(\n new HttpException('Incorrect code or password', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should enable 2FA and return recovery codes on success', async () => {\n cache.get.mockResolvedValue('encrypted-secret')\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n jest.spyOn(service, 'validateTwoFactorCode').mockReturnValue({ success: true, message: '' })\n usersManager.compareUserPassword.mockResolvedValue(true)\n\n const result = await service.enableTwoFactor(enableDto, mockRequest as FastifyAuthenticatedRequest)\n\n expect(result.success).toBe(true)\n expect(result.recoveryCodes).toHaveLength(5)\n expect(usersManager.updateSecrets).toHaveBeenCalledWith(mockUser.id, {\n twoFaSecret: 'encrypted-secret',\n recoveryCodes: expect.any(Array)\n })\n expect(notificationsManager.sendEmailNotification).toHaveBeenCalledWith([mockRequest.user], {\n app: 'auth_2fa',\n event: 'Two-factor authentication (2FA) on your account has been enabled',\n element: 'test-agent',\n url: '127.0.0.1'\n })\n })\n })\n\n describe('disableTwoFactor', () => {\n const disableDto: TwoFaVerifyWithPasswordDto = {\n code: '123456',\n password: 'password123',\n isRecoveryCode: false\n }\n\n it('should throw error if verification fails', async () => {\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n jest.spyOn(service, 'validateTwoFactorCode').mockReturnValue({ success: false, message: 'Invalid code' })\n\n await expect(service.disableTwoFactor(disableDto, mockRequest as FastifyAuthenticatedRequest)).rejects.toThrow(\n new HttpException('Invalid code', HttpStatus.FORBIDDEN)\n )\n })\n\n it('should throw error if password is incorrect', async () => {\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n jest.spyOn(service, 'validateTwoFactorCode').mockReturnValue({ success: true, message: '' })\n usersManager.compareUserPassword.mockResolvedValue(false)\n\n await expect(service.disableTwoFactor(disableDto, mockRequest as FastifyAuthenticatedRequest)).rejects.toThrow(\n new HttpException('Incorrect code or password', HttpStatus.BAD_REQUEST)\n )\n })\n\n it('should disable 2FA on success', async () => {\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n jest.spyOn(service, 'validateTwoFactorCode').mockReturnValue({ success: true, message: '' })\n usersManager.compareUserPassword.mockResolvedValue(true)\n\n const result = await service.disableTwoFactor(disableDto, mockRequest as FastifyAuthenticatedRequest)\n\n expect(result.success).toBe(true)\n expect(usersManager.updateSecrets).toHaveBeenCalledWith(mockUser.id, {\n twoFaSecret: undefined,\n recoveryCodes: undefined\n })\n expect(notificationsManager.sendEmailNotification).toHaveBeenCalledWith([mockRequest.user], {\n app: 'auth_2fa',\n event: 'Two-factor authentication (2FA) on your account has been disabled',\n element: 'test-agent',\n url: '127.0.0.1'\n })\n })\n })\n\n describe('verify', () => {\n const verifyDto: TwoFaVerifyDto = {\n code: '123456',\n isRecoveryCode: false\n }\n\n it('should verify 2FA code successfully', async () => {\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n jest.spyOn(service, 'validateTwoFactorCode').mockReturnValue({ success: true, message: '' })\n\n const result = await service.verify(verifyDto, mockRequest as FastifyAuthenticatedRequest)\n\n expect(result.success).toBe(true)\n expect(usersManager.updateAccesses).toHaveBeenCalledWith(mockUser, mockRequest.ip, true, true)\n })\n\n it('should verify recovery code successfully', async () => {\n const recoveryDto: TwoFaVerifyDto = { code: 'code-1', isRecoveryCode: true }\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n usersManager.updateSecrets.mockResolvedValue(undefined)\n\n await service.verify(recoveryDto, mockRequest as FastifyAuthenticatedRequest)\n\n expect(usersManager.updateSecrets).toHaveBeenCalled()\n })\n\n it('should fail when recovery codes are empty', async () => {\n const recoveryDto: TwoFaVerifyDto = { code: 'code-1', isRecoveryCode: true }\n const userWithoutCodes = { ...mockUser, secrets: { ...mockUser.secrets, recoveryCodes: [] } }\n usersManager.fromUserId.mockResolvedValue(userWithoutCodes as UserModel)\n\n const result = await service.verify(recoveryDto, mockRequest as FastifyAuthenticatedRequest)\n\n expect(result.success).toBe(false)\n expect(result.message).toBe('Invalid code')\n })\n\n it('should fail when recovery code does not match', async () => {\n const recoveryDto: TwoFaVerifyDto = { code: 'wrong-code', isRecoveryCode: true }\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n\n const result = await service.verify(recoveryDto, mockRequest as FastifyAuthenticatedRequest)\n\n expect(result.success).toBe(false)\n expect(result.message).toBe('Invalid code')\n })\n\n it('should handle errors during recovery code validation', async () => {\n const recoveryDto: TwoFaVerifyDto = { code: 'code-1', isRecoveryCode: true }\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n usersManager.updateSecrets.mockRejectedValue(new Error())\n\n const result = await service.verify(recoveryDto, mockRequest as FastifyAuthenticatedRequest)\n\n expect(result.success).toBe(false)\n expect(result.message).toBe('Invalid code')\n })\n\n it('should return user when fromLogin is true', async () => {\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n jest.spyOn(service, 'validateTwoFactorCode').mockReturnValue({ success: true, message: '' })\n\n const result = await service.verify(verifyDto, mockRequest as FastifyAuthenticatedRequest, true)\n\n expect(Array.isArray(result)).toBe(true)\n expect(result[0].success).toBe(true)\n expect(result[1]).toBe(mockUser)\n })\n })\n\n describe('adminResetUserTwoFa', () => {\n it('should reset user 2FA successfully', async () => {\n usersManager.updateSecrets.mockResolvedValue(undefined)\n\n const result = await service.adminResetUserTwoFa(1)\n\n expect(result.success).toBe(true)\n expect(usersManager.updateSecrets).toHaveBeenCalledWith(1, {\n twoFaSecret: undefined,\n recoveryCodes: undefined\n })\n })\n\n it('should handle errors during reset', async () => {\n usersManager.updateSecrets.mockRejectedValue(new Error('Database error'))\n\n const result = await service.adminResetUserTwoFa(1)\n\n expect(result.success).toBe(false)\n expect(result.message).toBe('Database error')\n })\n })\n\n describe('loadUser', () => {\n it('should load and validate user successfully', async () => {\n usersManager.fromUserId.mockResolvedValue(mockUser as UserModel)\n\n const result = await service.loadUser(1, '127.0.0.1')\n\n expect(result).toBe(mockUser)\n expect(usersManager.validateUserAccess).toHaveBeenCalledWith(mockUser, '127.0.0.1')\n })\n\n it('should throw error if user not found', async () => {\n usersManager.fromUserId.mockResolvedValue(null)\n\n await expect(service.loadUser(1, '127.0.0.1')).rejects.toThrow(new HttpException('User not found', HttpStatus.NOT_FOUND))\n })\n })\n\n describe('verifyUserPassword', () => {\n it('should verify password successfully', async () => {\n usersManager.compareUserPassword.mockResolvedValue(true)\n\n await expect(service.verifyUserPassword(mockUser as UserModel, 'password123', '127.0.0.1')).resolves.not.toThrow()\n })\n\n it('should throw error if password is incorrect', async () => {\n usersManager.compareUserPassword.mockResolvedValue(false)\n\n await expect(service.verifyUserPassword(mockUser as UserModel, 'wrong-password', '127.0.0.1')).rejects.toThrow(\n new HttpException('Incorrect code or password', HttpStatus.BAD_REQUEST)\n )\n expect(usersManager.updateAccesses).toHaveBeenCalledWith(mockUser, '127.0.0.1', false, true)\n })\n })\n\n describe('validateTwoFactorCode', () => {\n it('should validate code successfully', () => {\n jest.spyOn(Totp, 'validate').mockReturnValue(true)\n\n const result = service.validateTwoFactorCode('123456', 'encrypted-secret')\n\n expect(result.success).toBe(true)\n expect(result.message).toBe('')\n })\n\n it('should fail validation for incorrect code', () => {\n jest.spyOn(Totp, 'validate').mockReturnValue(false)\n\n const result = service.validateTwoFactorCode('wrong-code', 'encrypted-secret')\n\n expect(result.success).toBe(false)\n expect(result.message).toBe('Incorrect code or password')\n })\n\n it('should return error if secret is not provided', () => {\n const result = service.validateTwoFactorCode('123456', '')\n\n expect(result.success).toBe(false)\n expect(result.message).toBe('Incorrect code or password')\n })\n\n it('should handle validation errors', () => {\n jest.spyOn(Totp, 'validate').mockImplementation(() => {\n throw new Error('Validation error')\n })\n\n const result = service.validateTwoFactorCode('123456', 'encrypted-secret')\n\n expect(result.success).toBe(false)\n expect(result.message).toBe('Validation error')\n })\n })\n})\n"],"names":["jest","mock","describe","AuthProvider2FA","name","service","cache","usersManager","notificationsManager","mockUser","id","login","email","secrets","twoFaSecret","recoveryCodes","mockRequest","user","ip","headers","beforeEach","module","Test","createTestingModule","providers","provide","Cache","useValue","get","fn","set","UsersManager","fromUserId","validateUserAccess","compareUserPassword","updateAccesses","mockResolvedValue","undefined","updateSecrets","NotificationsManager","sendEmailNotification","compile","useLogger","encryptSecret","mockImplementation","secret","decryptSecret","replace","qrcodeToDataURL","mockReturnValue","afterEach","clearAllMocks","it","expect","toBeDefined","result","initTwoFactor","toHaveProperty","qrDataUrl","toBe","toHaveBeenCalledWith","any","String","enableDto","code","password","isRecoveryCode","enableTwoFactor","rejects","toThrow","HttpException","HttpStatus","BAD_REQUEST","spyOn","success","message","FORBIDDEN","toHaveLength","Array","app","event","element","url","disableDto","disableTwoFactor","verifyDto","verify","recoveryDto","toHaveBeenCalled","userWithoutCodes","mockRejectedValue","Error","isArray","adminResetUserTwoFa","loadUser","NOT_FOUND","verifyUserPassword","resolves","not","Totp","validateTwoFactorCode"],"mappings":"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"}