@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.
- package/CHANGELOG.md +37 -0
- package/LICENSE +1 -1
- package/README.md +3 -11
- package/environment/environment.dist.min.yaml +1 -1
- package/environment/environment.dist.yaml +173 -28
- package/package.json +17 -16
- package/server/app.bootstrap.js +1 -5
- package/server/app.bootstrap.js.map +1 -1
- package/server/app.constants.js +1 -5
- package/server/app.constants.js.map +1 -1
- package/server/app.e2e-spec.js +1 -5
- package/server/app.e2e-spec.js.map +1 -1
- package/server/app.functions.js +1 -5
- package/server/app.functions.js.map +1 -1
- package/server/app.module.js +1 -5
- package/server/app.module.js.map +1 -1
- package/server/app.service.js +1 -5
- package/server/app.service.js.map +1 -1
- package/server/app.service.spec.js +2 -6
- package/server/app.service.spec.js.map +1 -1
- package/server/applications/admin/admin.module.js +1 -5
- package/server/applications/admin/admin.module.js.map +1 -1
- package/server/applications/admin/constants/routes.js +1 -5
- package/server/applications/admin/constants/routes.js.map +1 -1
- package/server/applications/admin/interfaces/check-update.interfaces.js +1 -5
- package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -1
- package/server/applications/admin/services/admin-scheduler.service.js +1 -5
- package/server/applications/admin/services/admin-scheduler.service.js.map +1 -1
- package/server/applications/admin/services/admin.service.js +13 -8
- package/server/applications/admin/services/admin.service.js.map +1 -1
- package/server/applications/admin/services/admin.service.spec.js +1 -5
- package/server/applications/admin/services/admin.service.spec.js.map +1 -1
- package/server/applications/admin/utils/check-update.js +1 -5
- package/server/applications/admin/utils/check-update.js.map +1 -1
- package/server/applications/applications.config.js +1 -5
- package/server/applications/applications.config.js.map +1 -1
- package/server/applications/applications.constants.js +5 -5
- package/server/applications/applications.constants.js.map +1 -1
- package/server/applications/applications.module.js +1 -5
- package/server/applications/applications.module.js.map +1 -1
- package/server/applications/comments/comments.controller.js +1 -5
- package/server/applications/comments/comments.controller.js.map +1 -1
- package/server/applications/comments/comments.controller.spec.js +1 -5
- package/server/applications/comments/comments.controller.spec.js.map +1 -1
- package/server/applications/comments/comments.module.js +1 -5
- package/server/applications/comments/comments.module.js.map +1 -1
- package/server/applications/comments/constants/routes.js +1 -5
- package/server/applications/comments/constants/routes.js.map +1 -1
- package/server/applications/comments/dto/comment.dto.js +1 -5
- package/server/applications/comments/dto/comment.dto.js.map +1 -1
- package/server/applications/comments/interfaces/comment-recent.interface.js +1 -5
- package/server/applications/comments/interfaces/comment-recent.interface.js.map +1 -1
- package/server/applications/comments/schemas/comment.interface.js +1 -5
- package/server/applications/comments/schemas/comment.interface.js.map +1 -1
- package/server/applications/comments/schemas/comments.schema.js +1 -5
- package/server/applications/comments/schemas/comments.schema.js.map +1 -1
- package/server/applications/comments/services/comments-manager.service.js +9 -7
- package/server/applications/comments/services/comments-manager.service.js.map +1 -1
- package/server/applications/comments/services/comments-manager.service.spec.js +10 -8
- package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
- package/server/applications/comments/services/comments-queries.service.js +1 -5
- package/server/applications/comments/services/comments-queries.service.js.map +1 -1
- package/server/applications/files/adapters/files-indexer-mysql.service.js +29 -12
- package/server/applications/files/adapters/files-indexer-mysql.service.js.map +1 -1
- package/server/applications/files/adapters/files-indexer-mysql.service.spec.js +1 -5
- package/server/applications/files/adapters/files-indexer-mysql.service.spec.js.map +1 -1
- package/server/applications/files/constants/cache.js +1 -5
- package/server/applications/files/constants/cache.js.map +1 -1
- package/server/applications/files/constants/compress.js +1 -5
- package/server/applications/files/constants/compress.js.map +1 -1
- package/server/applications/files/constants/files.js +1 -5
- package/server/applications/files/constants/files.js.map +1 -1
- package/server/applications/files/constants/indexing.js +1 -5
- package/server/applications/files/constants/indexing.js.map +1 -1
- package/server/applications/files/constants/operations.js +1 -5
- package/server/applications/files/constants/operations.js.map +1 -1
- package/server/applications/files/constants/routes.js +1 -5
- package/server/applications/files/constants/routes.js.map +1 -1
- package/server/applications/files/constants/samples.js +1 -5
- package/server/applications/files/constants/samples.js.map +1 -1
- package/server/applications/files/dto/file-operations.dto.js +1 -5
- package/server/applications/files/dto/file-operations.dto.js.map +1 -1
- package/server/applications/files/events/file-task-event.js +1 -5
- package/server/applications/files/events/file-task-event.js.map +1 -1
- package/server/applications/files/files-tasks.controller.js +1 -5
- package/server/applications/files/files-tasks.controller.js.map +1 -1
- package/server/applications/files/files-tasks.controller.spec.js +1 -5
- package/server/applications/files/files-tasks.controller.spec.js.map +1 -1
- package/server/applications/files/files.config.js +1 -5
- package/server/applications/files/files.config.js.map +1 -1
- package/server/applications/files/files.controller.js +1 -5
- package/server/applications/files/files.controller.js.map +1 -1
- package/server/applications/files/files.controller.spec.js +1 -5
- package/server/applications/files/files.controller.spec.js.map +1 -1
- package/server/applications/files/files.module.js +1 -5
- package/server/applications/files/files.module.js.map +1 -1
- package/server/applications/files/interfaces/file-db-props.interface.js +1 -5
- package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-lock.interface.js +1 -5
- package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-parse-index.js +1 -5
- package/server/applications/files/interfaces/file-parse-index.js.map +1 -1
- package/server/applications/files/interfaces/file-props.interface.js +1 -5
- package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-recent-location.interface.js +1 -5
- package/server/applications/files/interfaces/file-recent-location.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-space.interface.js +1 -5
- package/server/applications/files/interfaces/file-space.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-tree.interface.js +1 -5
- package/server/applications/files/interfaces/file-tree.interface.js.map +1 -1
- package/server/applications/files/models/file-error.js +1 -5
- package/server/applications/files/models/file-error.js.map +1 -1
- package/server/applications/files/models/file-lock-error.js +1 -5
- package/server/applications/files/models/file-lock-error.js.map +1 -1
- package/server/applications/files/models/file-task.js +1 -5
- package/server/applications/files/models/file-task.js.map +1 -1
- package/server/applications/files/models/files-indexer.js +1 -5
- package/server/applications/files/models/files-indexer.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +21 -10
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.config.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.constants.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.controller.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.dtos.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.guard.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.interface.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.module.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.routes.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.utils.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -1
- package/server/applications/files/modules/file-editor-providers.interface.js +6 -0
- package/server/applications/files/modules/file-editor-providers.interface.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office-environment.decorator.js +1 -5
- package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office-manager.service.js +57 -19
- package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +1 -5
- package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.config.js +1 -5
- package/server/applications/files/modules/only-office/only-office.config.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.constants.js +1 -5
- package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.controller.js +1 -5
- package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.controller.spec.js +1 -5
- package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.dtos.js +1 -5
- package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.guard.js +1 -5
- package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.guard.spec.js +1 -5
- package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.interface.js +1 -5
- package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.module.js +1 -5
- package/server/applications/files/modules/only-office/only-office.module.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.routes.js +1 -5
- package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.strategy.js +1 -5
- package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -1
- package/server/applications/files/schemas/file-content.interface.js +1 -5
- package/server/applications/files/schemas/file-content.interface.js.map +1 -1
- package/server/applications/files/schemas/file-recent.interface.js +1 -5
- package/server/applications/files/schemas/file-recent.interface.js.map +1 -1
- package/server/applications/files/schemas/file.interface.js +1 -5
- package/server/applications/files/schemas/file.interface.js.map +1 -1
- package/server/applications/files/schemas/files-content.schema.js +1 -5
- package/server/applications/files/schemas/files-content.schema.js.map +1 -1
- package/server/applications/files/schemas/files-recents.schema.js +1 -5
- package/server/applications/files/schemas/files-recents.schema.js.map +1 -1
- package/server/applications/files/schemas/files.schema.js +1 -5
- package/server/applications/files/schemas/files.schema.js.map +1 -1
- package/server/applications/files/services/files-content-manager.service.js +45 -16
- package/server/applications/files/services/files-content-manager.service.js.map +1 -1
- package/server/applications/files/services/files-lock-manager.service.js +53 -18
- package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
- package/server/applications/files/services/files-lock-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-lock-manager.service.spec.js.map +1 -1
- package/server/applications/files/services/files-manager.service.js +77 -24
- package/server/applications/files/services/files-manager.service.js.map +1 -1
- package/server/applications/files/services/files-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
- package/server/applications/files/services/files-methods.service.js +5 -6
- package/server/applications/files/services/files-methods.service.js.map +1 -1
- package/server/applications/files/services/files-methods.service.spec.js +1 -5
- package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
- package/server/applications/files/services/files-parser.service.js +13 -8
- package/server/applications/files/services/files-parser.service.js.map +1 -1
- package/server/applications/files/services/files-parser.service.spec.js +1 -5
- package/server/applications/files/services/files-parser.service.spec.js.map +1 -1
- package/server/applications/files/services/files-queries.service.js +29 -12
- package/server/applications/files/services/files-queries.service.js.map +1 -1
- package/server/applications/files/services/files-recents.service.js +1 -5
- package/server/applications/files/services/files-recents.service.js.map +1 -1
- package/server/applications/files/services/files-recents.service.spec.js +1 -5
- package/server/applications/files/services/files-recents.service.spec.js.map +1 -1
- package/server/applications/files/services/files-scheduler.service.js +77 -24
- package/server/applications/files/services/files-scheduler.service.js.map +1 -1
- package/server/applications/files/services/files-search-manager.service.js +9 -7
- package/server/applications/files/services/files-search-manager.service.js.map +1 -1
- package/server/applications/files/services/files-search-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-search-manager.service.spec.js.map +1 -1
- package/server/applications/files/services/files-tasks-manager.service.js +77 -24
- package/server/applications/files/services/files-tasks-manager.service.js.map +1 -1
- package/server/applications/files/services/files-tasks-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-tasks-manager.service.spec.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/excel.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/excel.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/html.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/html.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/open-office.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/open-office.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/pdf.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/power-point.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/power-point.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/text.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/text.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/word.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/word.js.map +1 -1
- package/server/applications/files/utils/doc-textify/doc-textify.js +1 -5
- package/server/applications/files/utils/doc-textify/doc-textify.js.map +1 -1
- package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js +1 -5
- package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js.map +1 -1
- package/server/applications/files/utils/doc-textify/utils/clean.js +1 -5
- package/server/applications/files/utils/doc-textify/utils/clean.js.map +1 -1
- package/server/applications/files/utils/files-search.js +1 -5
- package/server/applications/files/utils/files-search.js.map +1 -1
- package/server/applications/files/utils/files-tree.js +1 -5
- package/server/applications/files/utils/files-tree.js.map +1 -1
- package/server/applications/files/utils/files.js +1 -5
- package/server/applications/files/utils/files.js.map +1 -1
- package/server/applications/files/utils/send-file.js +1 -5
- package/server/applications/files/utils/send-file.js.map +1 -1
- package/server/applications/files/utils/unzip-file.js +1 -5
- package/server/applications/files/utils/unzip-file.js.map +1 -1
- package/server/applications/files/utils/url-file.js +1 -5
- package/server/applications/files/utils/url-file.js.map +1 -1
- package/server/applications/links/constants/cache.js +1 -5
- package/server/applications/links/constants/cache.js.map +1 -1
- package/server/applications/links/constants/links.js +1 -5
- package/server/applications/links/constants/links.js.map +1 -1
- package/server/applications/links/constants/routes.js +1 -5
- package/server/applications/links/constants/routes.js.map +1 -1
- package/server/applications/links/dto/create-or-update-link.dto.js +1 -5
- package/server/applications/links/dto/create-or-update-link.dto.js.map +1 -1
- package/server/applications/links/interfaces/link-guest.interface.js +1 -5
- package/server/applications/links/interfaces/link-guest.interface.js.map +1 -1
- package/server/applications/links/interfaces/link-space.interface.js +1 -5
- package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
- package/server/applications/links/links.controller.js +1 -5
- package/server/applications/links/links.controller.js.map +1 -1
- package/server/applications/links/links.controller.spec.js +1 -5
- package/server/applications/links/links.controller.spec.js.map +1 -1
- package/server/applications/links/schemas/link.interface.js +1 -5
- package/server/applications/links/schemas/link.interface.js.map +1 -1
- package/server/applications/links/schemas/links.schema.js +1 -5
- package/server/applications/links/schemas/links.schema.js.map +1 -1
- package/server/applications/links/services/links-manager.service.js +55 -20
- package/server/applications/links/services/links-manager.service.js.map +1 -1
- package/server/applications/links/services/links-manager.service.spec.js +3 -7
- package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
- package/server/applications/links/services/links-queries.service.js +1 -5
- package/server/applications/links/services/links-queries.service.js.map +1 -1
- package/server/applications/notifications/constants/notifications.js +1 -5
- package/server/applications/notifications/constants/notifications.js.map +1 -1
- package/server/applications/notifications/constants/routes.js +1 -5
- package/server/applications/notifications/constants/routes.js.map +1 -1
- package/server/applications/notifications/constants/websocket.js +1 -5
- package/server/applications/notifications/constants/websocket.js.map +1 -1
- package/server/applications/notifications/i18n/de.js +1 -9
- package/server/applications/notifications/i18n/de.js.map +1 -1
- package/server/applications/notifications/i18n/es.js +1 -5
- package/server/applications/notifications/i18n/es.js.map +1 -1
- package/server/applications/notifications/i18n/fr.js +1 -5
- package/server/applications/notifications/i18n/fr.js.map +1 -1
- package/server/applications/notifications/i18n/hi.js +1 -5
- package/server/applications/notifications/i18n/hi.js.map +1 -1
- package/server/applications/notifications/i18n/index.js +1 -5
- package/server/applications/notifications/i18n/index.js.map +1 -1
- package/server/applications/notifications/i18n/it.js +1 -5
- package/server/applications/notifications/i18n/it.js.map +1 -1
- package/server/applications/notifications/i18n/ja.js +1 -5
- package/server/applications/notifications/i18n/ja.js.map +1 -1
- package/server/applications/notifications/i18n/ko.js +1 -5
- package/server/applications/notifications/i18n/ko.js.map +1 -1
- package/server/applications/notifications/i18n/pl.js +1 -5
- package/server/applications/notifications/i18n/pl.js.map +1 -1
- package/server/applications/notifications/i18n/pt.js +1 -5
- package/server/applications/notifications/i18n/pt.js.map +1 -1
- package/server/applications/notifications/i18n/pt_br.js +1 -5
- package/server/applications/notifications/i18n/pt_br.js.map +1 -1
- package/server/applications/notifications/i18n/ru.js +1 -5
- package/server/applications/notifications/i18n/ru.js.map +1 -1
- package/server/applications/notifications/i18n/tr.js +1 -5
- package/server/applications/notifications/i18n/tr.js.map +1 -1
- package/server/applications/notifications/i18n/zh.js +1 -5
- package/server/applications/notifications/i18n/zh.js.map +1 -1
- package/server/applications/notifications/interfaces/notification-properties.interface.js +1 -5
- package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
- package/server/applications/notifications/interfaces/user-mail-notification.interface.js +1 -5
- package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -1
- package/server/applications/notifications/mails/models.js +1 -5
- package/server/applications/notifications/mails/models.js.map +1 -1
- package/server/applications/notifications/mails/templates.js +1 -5
- package/server/applications/notifications/mails/templates.js.map +1 -1
- package/server/applications/notifications/mails/urls.js +1 -5
- package/server/applications/notifications/mails/urls.js.map +1 -1
- package/server/applications/notifications/notifications.controller.js +1 -5
- package/server/applications/notifications/notifications.controller.js.map +1 -1
- package/server/applications/notifications/notifications.controller.spec.js +1 -5
- package/server/applications/notifications/notifications.controller.spec.js.map +1 -1
- package/server/applications/notifications/notifications.gateway.js +1 -5
- package/server/applications/notifications/notifications.gateway.js.map +1 -1
- package/server/applications/notifications/notifications.module.js +1 -5
- package/server/applications/notifications/notifications.module.js.map +1 -1
- package/server/applications/notifications/schemas/notification.interface.js +1 -5
- package/server/applications/notifications/schemas/notification.interface.js.map +1 -1
- package/server/applications/notifications/schemas/notifications.schema.js +1 -5
- package/server/applications/notifications/schemas/notifications.schema.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.js +25 -11
- package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.spec.js +20 -11
- package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
- package/server/applications/notifications/services/notifications-queries.service.js +1 -5
- package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
- package/server/applications/shares/constants/routes.js +1 -5
- package/server/applications/shares/constants/routes.js.map +1 -1
- package/server/applications/shares/constants/shares.js +1 -5
- package/server/applications/shares/constants/shares.js.map +1 -1
- package/server/applications/shares/dto/create-or-update-share.dto.js +1 -5
- package/server/applications/shares/dto/create-or-update-share.dto.js.map +1 -1
- package/server/applications/shares/interfaces/share-child.interface.js +1 -5
- package/server/applications/shares/interfaces/share-child.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-env.interface.js +1 -5
- package/server/applications/shares/interfaces/share-env.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-file.interface.js +1 -5
- package/server/applications/shares/interfaces/share-file.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-link.interface.js +1 -5
- package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-props.interface.js +1 -5
- package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
- package/server/applications/shares/models/share-child.model.js +1 -5
- package/server/applications/shares/models/share-child.model.js.map +1 -1
- package/server/applications/shares/schemas/share-members.interface.js +1 -5
- package/server/applications/shares/schemas/share-members.interface.js.map +1 -1
- package/server/applications/shares/schemas/share.interface.js +1 -5
- package/server/applications/shares/schemas/share.interface.js.map +1 -1
- package/server/applications/shares/schemas/shares-members.schema.js +1 -5
- package/server/applications/shares/schemas/shares-members.schema.js.map +1 -1
- package/server/applications/shares/schemas/shares.schema.js +1 -5
- package/server/applications/shares/schemas/shares.schema.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.js +214 -68
- package/server/applications/shares/services/shares-manager.service.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.spec.js +1 -5
- package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
- package/server/applications/shares/services/shares-queries.service.js +49 -17
- package/server/applications/shares/services/shares-queries.service.js.map +1 -1
- package/server/applications/shares/shares.controller.js +1 -5
- package/server/applications/shares/shares.controller.js.map +1 -1
- package/server/applications/shares/shares.controller.spec.js +1 -5
- package/server/applications/shares/shares.controller.spec.js.map +1 -1
- package/server/applications/shares/shares.module.js +1 -5
- package/server/applications/shares/shares.module.js.map +1 -1
- package/server/applications/spaces/constants/cache.js +1 -5
- package/server/applications/spaces/constants/cache.js.map +1 -1
- package/server/applications/spaces/constants/routes.js +1 -5
- package/server/applications/spaces/constants/routes.js.map +1 -1
- package/server/applications/spaces/constants/spaces.js +1 -5
- package/server/applications/spaces/constants/spaces.js.map +1 -1
- package/server/applications/spaces/decorators/space-override-permission.decorator.js +1 -5
- package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -1
- package/server/applications/spaces/decorators/space-skip-guard.decorator.js +1 -5
- package/server/applications/spaces/decorators/space-skip-guard.decorator.js.map +1 -1
- package/server/applications/spaces/decorators/space-skip-permissions.decorator.js +1 -5
- package/server/applications/spaces/decorators/space-skip-permissions.decorator.js.map +1 -1
- package/server/applications/spaces/decorators/space.decorator.js +1 -5
- package/server/applications/spaces/decorators/space.decorator.js.map +1 -1
- package/server/applications/spaces/dto/create-or-update-space.dto.js +1 -5
- package/server/applications/spaces/dto/create-or-update-space.dto.js.map +1 -1
- package/server/applications/spaces/dto/delete-space.dto.js +1 -5
- package/server/applications/spaces/dto/delete-space.dto.js.map +1 -1
- package/server/applications/spaces/dto/search-space.dto.js +1 -5
- package/server/applications/spaces/dto/search-space.dto.js.map +1 -1
- package/server/applications/spaces/dto/space-roots.dto.js +1 -5
- package/server/applications/spaces/dto/space-roots.dto.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.js +17 -9
- package/server/applications/spaces/guards/space.guard.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.spec.js +1 -5
- package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
- package/server/applications/spaces/interfaces/space-diff.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-diff.interface.js.map +1 -1
- package/server/applications/spaces/interfaces/space-files.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-files.interface.js.map +1 -1
- package/server/applications/spaces/interfaces/space-request.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-request.interface.js.map +1 -1
- package/server/applications/spaces/interfaces/space-trash.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-trash.interface.js.map +1 -1
- package/server/applications/spaces/models/space-env.model.js +1 -5
- package/server/applications/spaces/models/space-env.model.js.map +1 -1
- package/server/applications/spaces/models/space-props.model.js +1 -5
- package/server/applications/spaces/models/space-props.model.js.map +1 -1
- package/server/applications/spaces/models/space-root-props.model.js +1 -5
- package/server/applications/spaces/models/space-root-props.model.js.map +1 -1
- package/server/applications/spaces/models/space.model.js +1 -5
- package/server/applications/spaces/models/space.model.js.map +1 -1
- package/server/applications/spaces/schemas/space-members.interface.js +1 -5
- package/server/applications/spaces/schemas/space-members.interface.js.map +1 -1
- package/server/applications/spaces/schemas/space-root.interface.js +1 -5
- package/server/applications/spaces/schemas/space-root.interface.js.map +1 -1
- package/server/applications/spaces/schemas/space.interface.js +1 -5
- package/server/applications/spaces/schemas/space.interface.js.map +1 -1
- package/server/applications/spaces/schemas/spaces-members.schema.js +1 -5
- package/server/applications/spaces/schemas/spaces-members.schema.js.map +1 -1
- package/server/applications/spaces/schemas/spaces-roots.schema.js +1 -5
- package/server/applications/spaces/schemas/spaces-roots.schema.js.map +1 -1
- package/server/applications/spaces/schemas/spaces.schema.js +1 -5
- package/server/applications/spaces/schemas/spaces.schema.js.map +1 -1
- package/server/applications/spaces/services/spaces-browser.service.js +77 -24
- package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-browser.service.spec.js +1 -5
- package/server/applications/spaces/services/spaces-browser.service.spec.js.map +1 -1
- package/server/applications/spaces/services/spaces-manager.service.js +193 -53
- package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-manager.service.spec.js +1 -5
- package/server/applications/spaces/services/spaces-manager.service.spec.js.map +1 -1
- package/server/applications/spaces/services/spaces-queries.service.js +65 -21
- package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-scheduler.service.js +49 -17
- package/server/applications/spaces/services/spaces-scheduler.service.js.map +1 -1
- package/server/applications/spaces/spaces.controller.js +1 -5
- package/server/applications/spaces/spaces.controller.js.map +1 -1
- package/server/applications/spaces/spaces.controller.spec.js +1 -5
- package/server/applications/spaces/spaces.controller.spec.js.map +1 -1
- package/server/applications/spaces/spaces.module.js +1 -5
- package/server/applications/spaces/spaces.module.js.map +1 -1
- package/server/applications/spaces/utils/paths.js +1 -5
- package/server/applications/spaces/utils/paths.js.map +1 -1
- package/server/applications/spaces/utils/permissions.js +1 -5
- package/server/applications/spaces/utils/permissions.js.map +1 -1
- package/server/applications/spaces/utils/routes.js +1 -5
- package/server/applications/spaces/utils/routes.js.map +1 -1
- package/server/applications/sync/constants/auth.js +1 -5
- package/server/applications/sync/constants/auth.js.map +1 -1
- package/server/applications/sync/constants/routes.js +6 -5
- package/server/applications/sync/constants/routes.js.map +1 -1
- package/server/applications/sync/constants/store.js +1 -9
- package/server/applications/sync/constants/store.js.map +1 -1
- package/server/applications/sync/constants/sync.js +2 -6
- package/server/applications/sync/constants/sync.js.map +1 -1
- package/server/applications/sync/decorators/sync-context.decorator.js +1 -5
- package/server/applications/sync/decorators/sync-context.decorator.js.map +1 -1
- package/server/applications/sync/decorators/sync-environment.decorator.js +1 -5
- package/server/applications/sync/decorators/sync-environment.decorator.js.map +1 -1
- package/server/applications/sync/dtos/sync-client-auth.dto.js +12 -8
- package/server/applications/sync/dtos/sync-client-auth.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-client-info.dto.js +49 -0
- package/server/applications/sync/dtos/sync-client-info.dto.js.map +1 -0
- package/server/applications/sync/dtos/sync-client-registration.dto.js +34 -11
- package/server/applications/sync/dtos/sync-client-registration.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-operations.dto.js +1 -5
- package/server/applications/sync/dtos/sync-operations.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-path.dto.js +1 -5
- package/server/applications/sync/dtos/sync-path.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-upload.dto.js +1 -5
- package/server/applications/sync/dtos/sync-upload.dto.js.map +1 -1
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js +1 -5
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js.map +1 -1
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js +1 -5
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js.map +1 -1
- package/server/applications/sync/interfaces/store-manifest.interface.js +1 -5
- package/server/applications/sync/interfaces/store-manifest.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-client-auth.interface.js +1 -25
- package/server/applications/sync/interfaces/sync-client-auth.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-client-paths.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-client-paths.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-client.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-client.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-diff.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-diff.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-path.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-path.interface.js.map +1 -1
- package/server/applications/sync/schemas/sync-client.interface.js +1 -5
- package/server/applications/sync/schemas/sync-client.interface.js.map +1 -1
- package/server/applications/sync/schemas/sync-clients.schema.js +1 -5
- package/server/applications/sync/schemas/sync-clients.schema.js.map +1 -1
- package/server/applications/sync/schemas/sync-path.interface.js +1 -5
- package/server/applications/sync/schemas/sync-path.interface.js.map +1 -1
- package/server/applications/sync/schemas/sync-paths.schema.js +1 -5
- package/server/applications/sync/schemas/sync-paths.schema.js.map +1 -1
- package/server/applications/sync/services/sync-clients-manager.service.js +108 -44
- package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-clients-manager.service.spec.js +14 -17
- package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-manager.service.js +29 -12
- package/server/applications/sync/services/sync-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-manager.service.spec.js +1 -5
- package/server/applications/sync/services/sync-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.js +27 -17
- package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.spec.js +11 -15
- package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-queries.service.js +1 -5
- package/server/applications/sync/services/sync-queries.service.js.map +1 -1
- package/server/applications/sync/sync.config.js +1 -5
- package/server/applications/sync/sync.config.js.map +1 -1
- package/server/applications/sync/sync.controller.js +21 -6
- package/server/applications/sync/sync.controller.js.map +1 -1
- package/server/applications/sync/sync.controller.spec.js +1 -5
- package/server/applications/sync/sync.controller.spec.js.map +1 -1
- package/server/applications/sync/sync.module.js +1 -5
- package/server/applications/sync/sync.module.js.map +1 -1
- package/server/applications/sync/utils/functions.js +1 -5
- package/server/applications/sync/utils/functions.js.map +1 -1
- package/server/applications/sync/utils/normalizedMap.js +1 -5
- package/server/applications/sync/utils/normalizedMap.js.map +1 -1
- package/server/applications/sync/utils/routes.js +1 -5
- package/server/applications/sync/utils/routes.js.map +1 -1
- package/server/applications/users/admin-users.controller.js +2 -6
- package/server/applications/users/admin-users.controller.js.map +1 -1
- package/server/applications/users/admin-users.controller.spec.js +6 -10
- package/server/applications/users/admin-users.controller.spec.js.map +1 -1
- package/server/applications/users/constants/group.js +1 -5
- package/server/applications/users/constants/group.js.map +1 -1
- package/server/applications/users/constants/member.js +1 -5
- package/server/applications/users/constants/member.js.map +1 -1
- package/server/applications/users/constants/routes.js +1 -5
- package/server/applications/users/constants/routes.js.map +1 -1
- package/server/applications/users/constants/user.js +1 -5
- package/server/applications/users/constants/user.js.map +1 -1
- package/server/applications/users/constants/websocket.js +1 -5
- package/server/applications/users/constants/websocket.js.map +1 -1
- package/server/applications/users/decorators/permissions.decorator.js +1 -5
- package/server/applications/users/decorators/permissions.decorator.js.map +1 -1
- package/server/applications/users/decorators/roles.decorator.js +1 -5
- package/server/applications/users/decorators/roles.decorator.js.map +1 -1
- package/server/applications/users/decorators/user.decorator.js +1 -5
- package/server/applications/users/decorators/user.decorator.js.map +1 -1
- package/server/applications/users/dto/create-or-update-group.dto.js +1 -5
- package/server/applications/users/dto/create-or-update-group.dto.js.map +1 -1
- package/server/applications/users/dto/create-or-update-user.dto.js +1 -5
- package/server/applications/users/dto/create-or-update-user.dto.js.map +1 -1
- package/server/applications/users/dto/delete-user.dto.js +1 -5
- package/server/applications/users/dto/delete-user.dto.js.map +1 -1
- package/server/applications/users/dto/search-members.dto.js +1 -5
- package/server/applications/users/dto/search-members.dto.js.map +1 -1
- package/server/applications/users/dto/user-properties.dto.js +1 -5
- package/server/applications/users/dto/user-properties.dto.js.map +1 -1
- package/server/applications/users/guards/permissions.guard.js +1 -5
- package/server/applications/users/guards/permissions.guard.js.map +1 -1
- package/server/applications/users/guards/permissions.guard.spec.js +1 -5
- package/server/applications/users/guards/permissions.guard.spec.js.map +1 -1
- package/server/applications/users/guards/roles.guard.js +1 -5
- package/server/applications/users/guards/roles.guard.js.map +1 -1
- package/server/applications/users/guards/roles.guard.spec.js +1 -5
- package/server/applications/users/guards/roles.guard.spec.js.map +1 -1
- package/server/applications/users/interfaces/admin-group.interface.js +1 -5
- package/server/applications/users/interfaces/admin-group.interface.js.map +1 -1
- package/server/applications/users/interfaces/admin-user.interface.js +1 -5
- package/server/applications/users/interfaces/admin-user.interface.js.map +1 -1
- package/server/applications/users/interfaces/group-browse.interface.js +1 -5
- package/server/applications/users/interfaces/group-browse.interface.js.map +1 -1
- package/server/applications/users/interfaces/group-member.js +1 -5
- package/server/applications/users/interfaces/group-member.js.map +1 -1
- package/server/applications/users/interfaces/guest-user.interface.js +1 -5
- package/server/applications/users/interfaces/guest-user.interface.js.map +1 -1
- package/server/applications/users/interfaces/member.interface.js +1 -5
- package/server/applications/users/interfaces/member.interface.js.map +1 -1
- package/server/applications/users/interfaces/owner.interface.js +1 -5
- package/server/applications/users/interfaces/owner.interface.js.map +1 -1
- package/server/applications/users/interfaces/user-secrets.interface.js +1 -5
- package/server/applications/users/interfaces/user-secrets.interface.js.map +1 -1
- package/server/applications/users/interfaces/websocket.interface.js +1 -5
- package/server/applications/users/interfaces/websocket.interface.js.map +1 -1
- package/server/applications/users/models/user.model.js +1 -5
- package/server/applications/users/models/user.model.js.map +1 -1
- package/server/applications/users/schemas/group.interface.js +1 -5
- package/server/applications/users/schemas/group.interface.js.map +1 -1
- package/server/applications/users/schemas/groups.schema.js +1 -5
- package/server/applications/users/schemas/groups.schema.js.map +1 -1
- package/server/applications/users/schemas/user-group.interface.js +1 -5
- package/server/applications/users/schemas/user-group.interface.js.map +1 -1
- package/server/applications/users/schemas/user.interface.js +1 -5
- package/server/applications/users/schemas/user.interface.js.map +1 -1
- package/server/applications/users/schemas/users-groups.schema.js +1 -5
- package/server/applications/users/schemas/users-groups.schema.js.map +1 -1
- package/server/applications/users/schemas/users-guests.schema.js +1 -5
- package/server/applications/users/schemas/users-guests.schema.js.map +1 -1
- package/server/applications/users/schemas/users.schema.js +1 -5
- package/server/applications/users/schemas/users.schema.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.js +67 -23
- package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.spec.js +3 -7
- package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/admin-users-queries.service.js +65 -21
- package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
- package/server/applications/users/services/users-manager.service.js +81 -25
- package/server/applications/users/services/users-manager.service.js.map +1 -1
- package/server/applications/users/services/users-manager.service.spec.js +14 -12
- package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/users-queries.service.js +49 -17
- package/server/applications/users/services/users-queries.service.js.map +1 -1
- package/server/applications/users/users.controller.js +2 -6
- package/server/applications/users/users.controller.js.map +1 -1
- package/server/applications/users/users.controller.spec.js +5 -9
- package/server/applications/users/users.controller.spec.js.map +1 -1
- package/server/applications/users/users.e2e-spec.js +3 -7
- package/server/applications/users/users.e2e-spec.js.map +1 -1
- package/server/applications/users/users.gateway.js +29 -12
- package/server/applications/users/users.gateway.js.map +1 -1
- package/server/applications/users/users.gateway.spec.js +1 -5
- package/server/applications/users/users.gateway.spec.js.map +1 -1
- package/server/applications/users/users.module.js +1 -5
- package/server/applications/users/users.module.js.map +1 -1
- package/server/applications/users/utils/avatar.js +1 -5
- package/server/applications/users/utils/avatar.js.map +1 -1
- package/server/applications/users/utils/test.js +1 -5
- package/server/applications/users/utils/test.js.map +1 -1
- package/server/applications/webdav/constants/routes.js +1 -5
- package/server/applications/webdav/constants/routes.js.map +1 -1
- package/server/applications/webdav/constants/webdav.js +1 -5
- package/server/applications/webdav/constants/webdav.js.map +1 -1
- package/server/applications/webdav/decorators/if-header.decorator.js +1 -5
- package/server/applications/webdav/decorators/if-header.decorator.js.map +1 -1
- package/server/applications/webdav/decorators/webdav-context.decorator.js +1 -5
- package/server/applications/webdav/decorators/webdav-context.decorator.js.map +1 -1
- package/server/applications/webdav/filters/webdav.filter.js +1 -5
- package/server/applications/webdav/filters/webdav.filter.js.map +1 -1
- package/server/applications/webdav/filters/webdav.filter.spec.js +1 -5
- package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.js +54 -20
- package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +54 -0
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
- package/server/applications/webdav/interfaces/if-header.interface.js +1 -5
- package/server/applications/webdav/interfaces/if-header.interface.js.map +1 -1
- package/server/applications/webdav/interfaces/webdav.interface.js +1 -5
- package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
- package/server/applications/webdav/models/webdav-file.model.js +1 -5
- package/server/applications/webdav/models/webdav-file.model.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.js +74 -26
- package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.spec.js +15 -18
- package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
- package/server/applications/webdav/services/webdav-spaces.service.js +17 -9
- package/server/applications/webdav/services/webdav-spaces.service.js.map +1 -1
- package/server/applications/webdav/services/webdav-spaces.service.spec.js +1 -5
- package/server/applications/webdav/services/webdav-spaces.service.spec.js.map +1 -1
- package/server/applications/webdav/utils/bootstrap.js +1 -5
- package/server/applications/webdav/utils/bootstrap.js.map +1 -1
- package/server/applications/webdav/utils/if-header.js +1 -5
- package/server/applications/webdav/utils/if-header.js.map +1 -1
- package/server/applications/webdav/utils/routes.js +1 -5
- package/server/applications/webdav/utils/routes.js.map +1 -1
- package/server/applications/webdav/utils/webdav.js +1 -5
- package/server/applications/webdav/utils/webdav.js.map +1 -1
- package/server/applications/webdav/utils/xml.js +1 -5
- package/server/applications/webdav/utils/xml.js.map +1 -1
- package/server/applications/webdav/webdav.controller.js +1 -5
- package/server/applications/webdav/webdav.controller.js.map +1 -1
- package/server/applications/webdav/webdav.controller.spec.js +1 -5
- package/server/applications/webdav/webdav.controller.spec.js.map +1 -1
- package/server/applications/webdav/webdav.e2e-spec.js +1 -5
- package/server/applications/webdav/webdav.e2e-spec.js.map +1 -1
- package/server/applications/webdav/webdav.module.js +1 -5
- package/server/applications/webdav/webdav.module.js.map +1 -1
- package/server/authentication/auth.config.js +23 -123
- package/server/authentication/auth.config.js.map +1 -1
- package/server/authentication/auth.controller.js +27 -21
- package/server/authentication/auth.controller.js.map +1 -1
- package/server/authentication/auth.controller.spec.js +6 -10
- package/server/authentication/auth.controller.spec.js.map +1 -1
- package/server/authentication/auth.e2e-spec.js +1 -5
- package/server/authentication/auth.e2e-spec.js.map +1 -1
- package/server/authentication/auth.module.js +17 -20
- package/server/authentication/auth.module.js.map +1 -1
- package/server/authentication/{services/auth-manager.service.js → auth.service.js} +41 -18
- package/server/authentication/auth.service.js.map +1 -0
- package/server/authentication/{services/auth-manager.service.spec.js → auth.service.spec.js} +6 -10
- package/server/authentication/auth.service.spec.js.map +1 -0
- package/server/authentication/constants/auth.js +1 -5
- package/server/authentication/constants/auth.js.map +1 -1
- package/server/authentication/constants/routes.js +41 -30
- package/server/authentication/constants/routes.js.map +1 -1
- package/server/authentication/constants/scope.js +2 -5
- package/server/authentication/constants/scope.js.map +1 -1
- package/server/authentication/decorators/auth-token-optional.decorator.js +1 -5
- package/server/authentication/decorators/auth-token-optional.decorator.js.map +1 -1
- package/server/authentication/decorators/auth-token-skip.decorator.js +1 -5
- package/server/authentication/decorators/auth-token-skip.decorator.js.map +1 -1
- package/server/authentication/dto/login-response.dto.js +1 -10
- package/server/authentication/dto/login-response.dto.js.map +1 -1
- package/server/authentication/dto/token-response.dto.js +1 -5
- package/server/authentication/dto/token-response.dto.js.map +1 -1
- package/server/authentication/guards/auth-anonymous.guard.js +1 -5
- package/server/authentication/guards/auth-anonymous.guard.js.map +1 -1
- package/server/authentication/guards/auth-anonymous.guard.spec.js +1 -5
- package/server/authentication/guards/auth-anonymous.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-anonymous.strategy.js +1 -5
- package/server/authentication/guards/auth-anonymous.strategy.js.map +1 -1
- package/server/authentication/guards/auth-basic.guard.js +1 -5
- package/server/authentication/guards/auth-basic.guard.js.map +1 -1
- package/server/authentication/guards/auth-basic.guard.spec.js +13 -14
- package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-basic.strategy.js +10 -11
- package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
- package/server/authentication/guards/auth-digest.guard.js +1 -5
- package/server/authentication/guards/auth-digest.guard.js.map +1 -1
- package/server/authentication/guards/auth-digest.strategy.js +1 -5
- package/server/authentication/guards/auth-digest.strategy.js.map +1 -1
- package/server/authentication/guards/auth-local.guard.js +1 -5
- package/server/authentication/guards/auth-local.guard.js.map +1 -1
- package/server/authentication/guards/auth-local.guard.spec.js +9 -13
- package/server/authentication/guards/auth-local.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-local.strategy.js +6 -10
- package/server/authentication/guards/auth-local.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-access.guard.js +1 -5
- package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
- package/server/authentication/guards/auth-token-access.guard.spec.js +3 -7
- package/server/authentication/guards/auth-token-access.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-token-access.strategy.js +3 -7
- package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.guard.js +1 -5
- package/server/authentication/guards/auth-token-refresh.guard.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.guard.spec.js +3 -7
- package/server/authentication/guards/auth-token-refresh.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.strategy.js +3 -7
- package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
- package/server/authentication/guards/implementations/http-basic.strategy.js +1 -5
- package/server/authentication/guards/implementations/http-basic.strategy.js.map +1 -1
- package/server/authentication/guards/implementations/http-digest.strategy.js +1 -5
- package/server/authentication/guards/implementations/http-digest.strategy.js.map +1 -1
- package/server/authentication/interfaces/auth-request.interface.js +1 -5
- package/server/authentication/interfaces/auth-request.interface.js.map +1 -1
- package/server/authentication/interfaces/jwt-payload.interface.js +1 -5
- package/server/authentication/interfaces/jwt-payload.interface.js.map +1 -1
- package/server/authentication/interfaces/token.interface.js +1 -5
- package/server/authentication/interfaces/token.interface.js.map +1 -1
- package/server/authentication/providers/auth-providers.constants.js +18 -0
- package/server/authentication/providers/auth-providers.constants.js.map +1 -0
- package/server/authentication/providers/auth-providers.models.js +14 -0
- package/server/authentication/providers/auth-providers.models.js.map +1 -0
- package/server/authentication/providers/auth-providers.utils.js +42 -0
- package/server/authentication/providers/auth-providers.utils.js.map +1 -0
- package/server/authentication/providers/ldap/auth-ldap.config.js +143 -0
- package/server/authentication/providers/ldap/auth-ldap.config.js.map +1 -0
- package/server/authentication/{constants/auth-ldap.js → providers/ldap/auth-ldap.constants.js} +12 -6
- package/server/authentication/providers/ldap/auth-ldap.constants.js.map +1 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.js +506 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.js.map +1 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js +674 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-database.service.js → providers/mysql/auth-provider-mysql.service.js} +16 -14
- package/server/authentication/providers/mysql/auth-provider-mysql.service.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-database.service.spec.js → providers/mysql/auth-provider-mysql.service.spec.js} +15 -19
- package/server/authentication/providers/mysql/auth-provider-mysql.service.spec.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js +30 -0
- package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.config.js +149 -0
- package/server/authentication/providers/oidc/auth-oidc.config.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.constants.js +39 -0
- package/server/authentication/providers/oidc/auth-oidc.constants.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.controller.js +83 -0
- package/server/authentication/providers/oidc/auth-oidc.controller.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.interfaces.js +6 -0
- package/server/authentication/providers/oidc/auth-oidc.interfaces.js.map +1 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.module.js +36 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.module.js.map +1 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.js +373 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.js.map +1 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js +270 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-two-fa.service.js → providers/two-fa/auth-provider-two-fa.service.js} +56 -38
- package/server/authentication/providers/two-fa/auth-provider-two-fa.service.js.map +1 -0
- 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
- package/server/authentication/providers/two-fa/auth-provider-two-fa.service.spec.js.map +1 -0
- package/server/authentication/{guards → providers/two-fa}/auth-two-fa-guard.js +10 -14
- package/server/authentication/providers/two-fa/auth-two-fa-guard.js.map +1 -0
- package/server/authentication/providers/two-fa/auth-two-fa.config.js +57 -0
- package/server/authentication/providers/two-fa/auth-two-fa.config.js.map +1 -0
- package/server/authentication/{dto/two-fa-verify.dto.js → providers/two-fa/auth-two-fa.dtos.js} +8 -6
- package/server/authentication/providers/two-fa/auth-two-fa.dtos.js.map +1 -0
- package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js +6 -0
- package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js.map +1 -0
- package/server/authentication/utils/crypt-secret.js +1 -5
- package/server/authentication/utils/crypt-secret.js.map +1 -1
- package/server/common/constants.js +1 -5
- package/server/common/constants.js.map +1 -1
- package/server/common/decorators.js +1 -5
- package/server/common/decorators.js.map +1 -1
- package/server/common/functions.js +25 -9
- package/server/common/functions.js.map +1 -1
- package/server/common/i18n.js +1 -5
- package/server/common/i18n.js.map +1 -1
- package/server/common/image.js +1 -5
- package/server/common/image.js.map +1 -1
- package/server/common/interfaces.js +1 -5
- package/server/common/interfaces.js.map +1 -1
- package/server/common/qrcode.js +1 -5
- package/server/common/qrcode.js.map +1 -1
- package/server/common/shared.js +6 -6
- package/server/common/shared.js.map +1 -1
- package/server/configuration/config.constants.js +1 -5
- package/server/configuration/config.constants.js.map +1 -1
- package/server/configuration/config.environment.js +2 -6
- package/server/configuration/config.environment.js.map +1 -1
- package/server/configuration/config.interfaces.js +1 -5
- package/server/configuration/config.interfaces.js.map +1 -1
- package/server/configuration/config.loader.js +1 -5
- package/server/configuration/config.loader.js.map +1 -1
- package/server/configuration/config.logger.js +4 -8
- package/server/configuration/config.logger.js.map +1 -1
- package/server/configuration/config.validation.js +7 -5
- package/server/configuration/config.validation.js.map +1 -1
- package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +9 -7
- package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
- package/server/infrastructure/cache/adapters/redis-cache.adapter.js +1 -5
- package/server/infrastructure/cache/adapters/redis-cache.adapter.js.map +1 -1
- package/server/infrastructure/cache/cache.config.js +1 -5
- package/server/infrastructure/cache/cache.config.js.map +1 -1
- package/server/infrastructure/cache/cache.decorator.js +9 -7
- package/server/infrastructure/cache/cache.decorator.js.map +1 -1
- package/server/infrastructure/cache/cache.e2e-spec.js +1 -5
- package/server/infrastructure/cache/cache.e2e-spec.js.map +1 -1
- package/server/infrastructure/cache/cache.module.js +1 -5
- package/server/infrastructure/cache/cache.module.js.map +1 -1
- package/server/infrastructure/cache/schemas/mysql-cache.interface.js +1 -5
- package/server/infrastructure/cache/schemas/mysql-cache.interface.js.map +1 -1
- package/server/infrastructure/cache/schemas/mysql-cache.schema.js +1 -5
- package/server/infrastructure/cache/schemas/mysql-cache.schema.js.map +1 -1
- package/server/infrastructure/cache/services/cache.service.js +1 -5
- package/server/infrastructure/cache/services/cache.service.js.map +1 -1
- package/server/infrastructure/context/context.module.js +1 -5
- package/server/infrastructure/context/context.module.js.map +1 -1
- package/server/infrastructure/context/interceptors/context.interceptor.js +1 -5
- package/server/infrastructure/context/interceptors/context.interceptor.js.map +1 -1
- package/server/infrastructure/context/interceptors/context.interceptor.spec.js +2 -6
- package/server/infrastructure/context/interceptors/context.interceptor.spec.js.map +1 -1
- package/server/infrastructure/context/interfaces/context-store.interface.js +1 -5
- package/server/infrastructure/context/interfaces/context-store.interface.js.map +1 -1
- package/server/infrastructure/context/services/context-manager.service.js +1 -5
- package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
- package/server/infrastructure/context/services/context-manager.service.spec.js +1 -5
- package/server/infrastructure/context/services/context-manager.service.spec.js.map +1 -1
- package/server/infrastructure/database/columns.js +1 -5
- package/server/infrastructure/database/columns.js.map +1 -1
- package/server/infrastructure/database/configuration.js +1 -5
- package/server/infrastructure/database/configuration.js.map +1 -1
- package/server/infrastructure/database/constants.js +2 -6
- package/server/infrastructure/database/constants.js.map +1 -1
- package/server/infrastructure/database/database.config.js +1 -5
- package/server/infrastructure/database/database.config.js.map +1 -1
- package/server/infrastructure/database/database.logger.js +1 -5
- package/server/infrastructure/database/database.logger.js.map +1 -1
- package/server/infrastructure/database/database.module.js +1 -5
- package/server/infrastructure/database/database.module.js.map +1 -1
- package/server/infrastructure/database/interfaces/database.interface.js +1 -5
- package/server/infrastructure/database/interfaces/database.interface.js.map +1 -1
- package/server/infrastructure/database/schema.js +1 -5
- package/server/infrastructure/database/schema.js.map +1 -1
- package/server/infrastructure/database/scripts/create-user.js +1 -5
- package/server/infrastructure/database/scripts/create-user.js.map +1 -1
- package/server/infrastructure/database/scripts/db.js +1 -5
- package/server/infrastructure/database/scripts/db.js.map +1 -1
- package/server/infrastructure/database/scripts/seed/main.js +1 -5
- package/server/infrastructure/database/scripts/seed/main.js.map +1 -1
- package/server/infrastructure/database/scripts/seed/usersgroups.js +1 -5
- package/server/infrastructure/database/scripts/seed/usersgroups.js.map +1 -1
- package/server/infrastructure/database/utils.js +1 -5
- package/server/infrastructure/database/utils.js.map +1 -1
- package/server/infrastructure/mailer/interfaces/mail.interface.js +1 -5
- package/server/infrastructure/mailer/interfaces/mail.interface.js.map +1 -1
- package/server/infrastructure/mailer/mailer.config.js +1 -5
- package/server/infrastructure/mailer/mailer.config.js.map +1 -1
- package/server/infrastructure/mailer/mailer.module.js +1 -5
- package/server/infrastructure/mailer/mailer.module.js.map +1 -1
- package/server/infrastructure/mailer/mailer.service.js +1 -5
- package/server/infrastructure/mailer/mailer.service.js.map +1 -1
- package/server/infrastructure/mailer/mailer.service.spec.js +2 -6
- package/server/infrastructure/mailer/mailer.service.spec.js.map +1 -1
- package/server/infrastructure/scheduler/scheduler.constants.js +1 -5
- package/server/infrastructure/scheduler/scheduler.constants.js.map +1 -1
- package/server/infrastructure/scheduler/scheduler.module.js +1 -5
- package/server/infrastructure/scheduler/scheduler.module.js.map +1 -1
- package/server/infrastructure/websocket/adapters/cluster.adapter.js +1 -5
- package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
- package/server/infrastructure/websocket/adapters/redis.adapter.js +1 -5
- package/server/infrastructure/websocket/adapters/redis.adapter.js.map +1 -1
- package/server/infrastructure/websocket/adapters/web-socket.adapter.js +1 -5
- package/server/infrastructure/websocket/adapters/web-socket.adapter.js.map +1 -1
- package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js +1 -5
- package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js.map +1 -1
- package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js +1 -5
- package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js.map +1 -1
- package/server/infrastructure/websocket/utils.js +1 -5
- package/server/infrastructure/websocket/utils.js.map +1 -1
- package/server/infrastructure/websocket/web-socket.config.js +1 -5
- package/server/infrastructure/websocket/web-socket.config.js.map +1 -1
- package/server/main.js +5 -0
- package/server/main.js.map +1 -1
- package/static/assets/pdfjs/build/pdf.mjs +724 -745
- package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
- package/static/assets/pdfjs/build/pdf.worker.mjs +706 -193
- package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
- package/static/assets/pdfjs/version +1 -1
- package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +5 -5
- package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +1 -0
- package/static/assets/pdfjs/web/locale/fur/viewer.ftl +5 -0
- package/static/assets/pdfjs/web/locale/kk/viewer.ftl +28 -0
- package/static/assets/pdfjs/web/locale/ml/viewer.ftl +4 -0
- package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -3
- package/static/assets/pdfjs/web/viewer.css +207 -65
- package/static/assets/pdfjs/web/viewer.html +11 -10
- package/static/assets/pdfjs/web/viewer.mjs +850 -270
- package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
- package/static/assets/pdfjs/web/wasm/LICENSE_JBIG2 +196 -0
- package/static/assets/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2 +13 -0
- package/static/assets/pdfjs/web/wasm/jbig2.wasm +0 -0
- package/static/chunk-22TZP6HW.js +1 -0
- package/static/{chunk-G7TLKY5X.js → chunk-27ATUHBH.js} +1 -1
- package/static/{chunk-CQOQXVYG.js → chunk-2CKLZ3FM.js} +1 -1
- package/static/{chunk-FVFOX6OP.js → chunk-2QZPX7LO.js} +1 -1
- package/static/{chunk-32AVRWC3.js → chunk-2R6IBBPZ.js} +1 -1
- package/static/{chunk-76JDXKD7.js → chunk-4FIGEBNL.js} +1 -1
- package/static/{chunk-ACCGBDUZ.js → chunk-4P3JABAP.js} +4 -4
- package/static/chunk-5CZOSAMZ.js +1 -0
- package/static/{chunk-2PDTP6N4.js → chunk-677WUBCT.js} +1 -1
- package/static/{chunk-K5VO5XTG.js → chunk-74CAHBFM.js} +1 -1
- package/static/{chunk-WTWGBCFO.js → chunk-7GWW6MJO.js} +1 -1
- package/static/{chunk-JXZOYX4N.js → chunk-A4UGPSWX.js} +1 -1
- package/static/{chunk-44D7RWET.js → chunk-AHO37FKW.js} +1 -1
- package/static/{chunk-WB2DECOA.js → chunk-AQCXMKP3.js} +1 -1
- package/static/chunk-B6PDYCRO.js +3 -0
- package/static/{chunk-JVGN5V5E.js → chunk-CU76ATCF.js} +1 -1
- package/static/{chunk-Q5K4ZUHK.js → chunk-CWYHOPOP.js} +1 -1
- package/static/{chunk-IOX3ANJR.js → chunk-E5WI5725.js} +1 -1
- package/static/{chunk-NUG54Y65.js → chunk-FC5HTKVM.js} +1 -1
- package/static/{chunk-LRK6RNPR.js → chunk-FOSM7EYI.js} +1 -1
- package/static/{chunk-B4UP2EQM.js → chunk-GAZO25PI.js} +1 -1
- package/static/{chunk-3WBCGTYW.js → chunk-GB7ABR5N.js} +1 -1
- package/static/{chunk-XFZ37WVK.js → chunk-GEHFKZQ5.js} +1 -1
- package/static/{chunk-4CQLN5HL.js → chunk-GQFMWVFD.js} +1 -1
- package/static/{chunk-YBEH442D.js → chunk-GVNTC564.js} +1 -1
- package/static/{chunk-WO6GBHBZ.js → chunk-HGL3NYP2.js} +2 -2
- package/static/{chunk-IAWRRL6J.js → chunk-HLIWPWRA.js} +1 -1
- package/static/{chunk-6LHJBXUE.js → chunk-HNYB3M4S.js} +1 -1
- package/static/{chunk-5WTIUYFF.js → chunk-HUXAUQMN.js} +1 -1
- package/static/{chunk-VBH3Y2M5.js → chunk-I2XA6PPK.js} +1 -1
- package/static/{chunk-I3XI72AV.js → chunk-ISV3BO6R.js} +1 -1
- package/static/{chunk-P7X53PEP.js → chunk-JV3AGU5B.js} +1 -1
- package/static/{chunk-ZFAXICUH.js → chunk-K25E7YGG.js} +1 -1
- package/static/{chunk-CAD3RHAY.js → chunk-K46PUTZB.js} +1 -1
- package/static/{chunk-GYFLVCFN.js → chunk-KERFLJ56.js} +1 -7
- package/static/{chunk-WSTGWBVW.js → chunk-KJD3KFF3.js} +1 -1
- package/static/{chunk-R4P4NBUL.js → chunk-KPKSI23S.js} +1 -1
- package/static/{chunk-M7IFVC5D.js → chunk-KZS7CTNR.js} +1 -1
- package/static/{chunk-P2IJCGWD.js → chunk-L5IHUVXL.js} +1 -1
- package/static/{chunk-DXESTGOH.js → chunk-L7RRX2M3.js} +1 -1
- package/static/{chunk-WE3ISL7O.js → chunk-LGWJ2WKU.js} +1 -1
- package/static/{chunk-OKI3N5AI.js → chunk-MLC7JK2H.js} +2 -2
- package/static/{chunk-NG7QWUFM.js → chunk-MOHNYW2A.js} +1 -1
- package/static/{chunk-SQYWQUL4.js → chunk-NCDUOVMW.js} +1 -1
- package/static/chunk-NGUAJIGI.js +1 -0
- package/static/{chunk-OYPJUVD6.js → chunk-NIPP6JDI.js} +1 -1
- package/static/{chunk-Y433XOAJ.js → chunk-NMTBMHUL.js} +1 -1
- package/static/chunk-O4XXMZFX.js +4 -0
- package/static/{chunk-IOP3ON2H.js → chunk-OANZITPM.js} +1 -1
- package/static/{chunk-WJFKUJJX.js → chunk-OGE4SAHU.js} +1 -1
- package/static/{chunk-7EHP6HO3.js → chunk-OI3ME22C.js} +1 -1
- package/static/{chunk-D4XDSS6P.js → chunk-Q3EGCMF5.js} +1 -1
- package/static/{chunk-TQBCGNFG.js → chunk-QF2NSHZA.js} +1 -1
- package/static/{chunk-RBBMH2FM.js → chunk-QKN6LAAA.js} +1 -1
- package/static/{chunk-J45SD6RC.js → chunk-QRFESU5O.js} +2 -2
- package/static/chunk-QVRVFYJH.js +1 -0
- package/static/{chunk-BAHNSFET.js → chunk-RFJIPIOK.js} +1 -1
- package/static/{chunk-IZ7TCHUW.js → chunk-RLL634K4.js} +1 -1
- package/static/{chunk-MOWL3ILT.js → chunk-RS2OFKWP.js} +1 -1
- package/static/{chunk-WM56LPJ3.js → chunk-RWAAC3A4.js} +1 -1
- package/static/{chunk-F3GMI6OL.js → chunk-S5Y64DDS.js} +1 -1
- package/static/{chunk-VNNLMUK7.js → chunk-SLG5KDU6.js} +1 -1
- package/static/chunk-TJ4CVFEL.js +1 -0
- package/static/{chunk-SAN35XTD.js → chunk-TWCGKSYE.js} +1 -1
- package/static/{chunk-EUKVDBBK.js → chunk-UMDRE4S7.js} +1 -1
- package/static/{chunk-YKCUUBZP.js → chunk-VRIOLRYR.js} +4 -4
- package/static/chunk-VS4O2XDP.js +1 -0
- package/static/{chunk-2MRTBCSV.js → chunk-VSBFNFOM.js} +1 -1
- package/static/{chunk-CTPKDDVI.js → chunk-WN4WXCVK.js} +1 -1
- package/static/{chunk-2AA3WMW5.js → chunk-WX7RXW7K.js} +1 -1
- package/static/{chunk-J2BUPRCZ.js → chunk-XC4POKR3.js} +2 -2
- package/static/{chunk-AXLDYLIO.js → chunk-Y4AUYQTG.js} +1 -1
- package/static/{chunk-RPHWIW7S.js → chunk-YMIXHRJQ.js} +1 -7
- package/static/{chunk-AFNUBQMD.js → chunk-ZUNKFAKP.js} +1 -1
- package/static/index.html +3 -3
- package/static/main-QN4UCOC5.js +5 -0
- package/static/{styles-PD6764CP.css → styles-46GLIE7Y.css} +1 -1
- package/server/authentication/constants/auth-ldap.js.map +0 -1
- package/server/authentication/dto/two-fa-verify.dto.js.map +0 -1
- package/server/authentication/guards/auth-two-fa-guard.js.map +0 -1
- package/server/authentication/interfaces/two-fa-setup.interface.js +0 -10
- package/server/authentication/interfaces/two-fa-setup.interface.js.map +0 -1
- package/server/authentication/models/auth-method.js +0 -18
- package/server/authentication/models/auth-method.js.map +0 -1
- package/server/authentication/services/auth-manager.service.js.map +0 -1
- package/server/authentication/services/auth-manager.service.spec.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js +0 -326
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +0 -534
- package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +0 -1
- package/static/chunk-3I6NPM62.js +0 -1
- package/static/chunk-GCPX3EFC.js +0 -1
- package/static/chunk-KBUIDMCK.js +0 -1
- package/static/chunk-KY6MNZLC.js +0 -1
- package/static/chunk-MPWD4VMY.js +0 -1
- package/static/chunk-QQAF3MLL.js +0 -1
- package/static/chunk-VHZKPUWE.js +0 -4
- package/static/chunk-YWLMFOB4.js +0 -3
- package/static/main-ZXEMCBMI.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/users/services/users-manager.service.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { Test, TestingModule } from '@nestjs/testing'\nimport bcrypt from 'bcryptjs'\nimport path from 'node:path'\nimport { Readable } from 'node:stream'\nimport { AuthManager } from '../../../authentication/services/auth-manager.service'\nimport { comparePassword } from '../../../common/functions'\nimport * as imageModule from '../../../common/image'\nimport { pngMimeType, svgMimeType } from '../../../common/image'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport * as filesUtilsModule from '../../files/utils/files'\nimport { fileName, isPathExists } from '../../files/utils/files'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { MEMBER_TYPE } from '../constants/member'\nimport { USER_GROUP_ROLE, USER_MAX_PASSWORD_ATTEMPTS, USER_ROLE } from '../constants/user'\nimport { CreateUserDto } from '../dto/create-or-update-user.dto'\nimport { DeleteUserDto } from '../dto/delete-user.dto'\nimport { UserModel } from '../models/user.model'\nimport { generateUserTest } from '../utils/test'\nimport { AdminUsersManager } from './admin-users-manager.service'\nimport { AdminUsersQueries } from './admin-users-queries.service'\nimport { UsersManager } from './users-manager.service'\nimport { UsersQueries } from './users-queries.service'\n\njest.mock('../../../common/functions', () => {\n const actual = jest.requireActual('../../../common/functions')\n return { ...actual, comparePassword: jest.fn() }\n})\njest.mock('bcryptjs', () => ({ __esModule: true, default: { hash: jest.fn(() => Promise.resolve('hashed-password')) } }))\njest.mock('../../../common/image', () => {\n const actual = jest.requireActual('../../../common/image')\n return {\n ...actual,\n generateAvatar: jest.fn(() => Readable.from([Buffer.from('PNGDATA')]))\n }\n})\n\ndescribe(UsersManager.name, () => {\n let usersManager: UsersManager\n let adminUsersManager: AdminUsersManager\n let adminUsersQueries: AdminUsersQueries\n let usersQueriesService: UsersQueries\n let userTest: UserModel\n let deleteUserDto: DeleteUserDto\n const flush = () => new Promise<void>((r) => setImmediate(r))\n const okStream = (d = 'OK') => {\n const s: any = Readable.from([Buffer.from(d)])\n s.truncated = false\n return s\n }\n const errStream = (msg = 'err', truncated = false) => {\n const s: any = new Readable({\n read() {\n this.destroy(new Error(msg))\n }\n })\n s.truncated = truncated\n return s\n }\n const mkReq = (mimetype: string, stream: any, user = userTest) => ({ user, file: jest.fn().mockResolvedValue({ mimetype, file: stream }) })\n const ensurePaths = async () => {\n if (!(await isPathExists(userTest.homePath))) {\n await userTest.makePaths()\n }\n }\n\n const notificationsManager = {\n sendEmailNotification: jest.fn().mockResolvedValue(undefined)\n }\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n AdminUsersManager,\n AdminUsersQueries,\n UsersManager,\n UsersQueries,\n { provide: NotificationsManager, useValue: notificationsManager },\n { provide: AuthManager, useValue: {} },\n { provide: DB_TOKEN_PROVIDER, useValue: {} },\n { provide: Cache, useValue: {} }\n ]\n }).compile()\n module.useLogger(['fatal'])\n usersManager = module.get(UsersManager)\n adminUsersManager = module.get(AdminUsersManager)\n adminUsersQueries = module.get(AdminUsersQueries)\n usersQueriesService = module.get(UsersQueries)\n userTest = new UserModel(generateUserTest(), false)\n deleteUserDto = { deleteSpace: true, isGuest: false } satisfies DeleteUserDto\n })\n\n afterEach(() => jest.restoreAllMocks())\n\n afterAll(async () => {\n await expect(adminUsersManager.deleteUserSpace(userTest.login)).resolves.not.toThrow()\n })\n\n it('instances + findUser/me/fromUserId + impersonation', async () => {\n expect(usersManager && adminUsersManager && usersQueriesService && userTest).toBeDefined()\n usersQueriesService.from = jest.fn().mockReturnValue(userTest)\n const u1: any = await usersManager.findUser(userTest.login, true)\n expect(u1).toBeInstanceOf(UserModel)\n expect(u1.password).toBeUndefined()\n const u2 = await usersManager.findUser(userTest.login, false)\n expect(u2).toBeInstanceOf(UserModel)\n expect(u2.password).toBeDefined()\n const me1: any = await usersManager.me(userTest)\n expect(me1.user.password).toBeUndefined()\n usersQueriesService.from = jest.fn().mockReturnValue(null)\n await expect(usersManager.findUser('unknown')).resolves.toBeNull()\n await expect(usersManager.me({ id: 0 } as UserModel)).rejects.toThrow()\n usersQueriesService.from = jest.fn().mockResolvedValue(null)\n await expect(usersManager.fromUserId(123)).resolves.toBeNull()\n const authUser = new UserModel({ ...generateUserTest(), id: 42, clientId: 'CID', impersonatedFromId: 1 } as any, true)\n const fromUser = new UserModel({ ...generateUserTest(), id: 42 }, true)\n usersQueriesService.from = jest.fn().mockResolvedValue(fromUser)\n const me2 = await usersManager.me(authUser)\n expect(me2.user.impersonated).toBe(true)\n expect(me2.user.clientId).toBe('CID')\n })\n\n it('paths + avatars (default/generate) + create/delete user', async () => {\n await expect(ensurePaths()).resolves.not.toThrow()\n expect(await isPathExists(userTest.filesPath)).toBe(true)\n usersQueriesService.from = jest.fn().mockReturnValueOnce(userTest)\n const [p0, m0] = await usersManager.getAvatar(userTest.login)\n expect(fileName(p0)).toBe('avatar.svg')\n expect(m0).toBe(svgMimeType)\n usersQueriesService.from = jest.fn().mockReturnValueOnce(null)\n await expect(usersManager.getAvatar('#', true)).rejects.toThrow('does not exist')\n usersQueriesService.from = jest.fn().mockReturnValue(userTest)\n expect(await usersManager.getAvatar(userTest.login, true)).toBeUndefined()\n const [p1, m1] = await usersManager.getAvatar(userTest.login)\n expect(fileName(p1)).toBe('avatar.png')\n expect(m1).toBe(pngMimeType)\n\n usersQueriesService.checkUserExists = jest.fn().mockReturnValue(undefined)\n usersQueriesService.createUserOrGuest = jest.fn().mockReturnValue(888)\n usersQueriesService.clearWhiteListCaches = jest.fn()\n const created = await adminUsersManager.createUserOrGuest(userTest satisfies CreateUserDto, USER_ROLE.USER)\n expect(created).toBeInstanceOf(UserModel)\n expect(await isPathExists(created.filesPath)).toBe(true)\n\n usersQueriesService.checkUserExists = jest\n .fn()\n .mockReturnValueOnce({ login: userTest.login, email: '' })\n .mockReturnValueOnce({ login: '', email: userTest.email })\n .mockReturnValueOnce(undefined)\n await expect(adminUsersManager.createUserOrGuest(userTest satisfies CreateUserDto, USER_ROLE.USER)).rejects.toThrow()\n await expect(adminUsersManager.createUserOrGuest(userTest satisfies CreateUserDto, USER_ROLE.USER)).rejects.toThrow()\n usersQueriesService.createUserOrGuest = jest.fn().mockImplementation(() => {\n throw new Error('testing')\n })\n await expect(adminUsersManager.createUserOrGuest(userTest satisfies CreateUserDto, USER_ROLE.USER)).rejects.toThrow()\n\n adminUsersQueries.deleteUser = jest.fn().mockReturnValue(true)\n await expect(adminUsersManager.deleteUserOrGuest(userTest.id, userTest.login, deleteUserDto)).resolves.not.toThrow()\n expect(await isPathExists(userTest.filesPath)).toBe(false)\n adminUsersQueries.deleteUser = jest.fn().mockReturnValue(false)\n await expect(adminUsersManager.deleteUserOrGuest(userTest.id, userTest.login, deleteUserDto)).resolves.not.toThrow()\n adminUsersQueries.deleteUser = jest.fn().mockImplementation(() => {\n throw new Error('testing')\n })\n await expect(adminUsersManager.deleteUserOrGuest(userTest.id, userTest.login, deleteUserDto)).rejects.toThrow()\n })\n\n it('logUser branches: forbidden/locked/bad/good', async () => {\n const linkUser = new UserModel({ ...generateUserTest(), role: USER_ROLE.LINK }, false)\n await expect(usersManager.logUser(linkUser, 'x', '127.0.0.1')).rejects.toThrow('Account is not allowed')\n\n const uLocked = new UserModel({ ...generateUserTest(), isActive: false, passwordAttempts: 5 }, false)\n const errSpy = jest.spyOn((usersManager as any)['logger'], 'error').mockImplementation(() => undefined as any)\n const updSpy1 = jest.spyOn(usersManager, 'updateAccesses').mockRejectedValue(new Error('reject-locked'))\n await expect(usersManager.logUser(uLocked, 'pwd', 'ip')).rejects.toThrow('Account locked')\n await flush()\n expect(errSpy).toHaveBeenCalledWith(expect.stringContaining('reject-locked'))\n expect(updSpy1).toHaveBeenCalledWith(uLocked, 'ip', false)\n ;(comparePassword as jest.Mock).mockResolvedValue(false)\n const uBad = new UserModel({ ...generateUserTest(), isActive: true, passwordAttempts: 0 }, false)\n const errSpy2 = jest.spyOn((usersManager as any)['logger'], 'error').mockImplementation(() => undefined as any)\n const updSpy2 = jest.spyOn(usersManager, 'updateAccesses').mockRejectedValue(new Error('reject-auth'))\n const out = await usersManager.logUser(uBad, 'bad', '1.1.1.1')\n expect(out).toBeNull()\n await flush()\n expect(errSpy2).toHaveBeenCalledWith(expect.stringContaining('reject-auth'))\n expect(updSpy2).toHaveBeenCalledWith(uBad, '1.1.1.1', false)\n ;(comparePassword as jest.Mock).mockResolvedValue(true)\n const uGood = new UserModel({ ...generateUserTest(), isActive: true, passwordAttempts: 0 }, false)\n const updSpy3 = jest.spyOn(usersManager, 'updateAccesses').mockResolvedValue(undefined)\n const pathsSpy = jest.spyOn(uGood, 'makePaths').mockResolvedValue(undefined)\n const out2 = await usersManager.logUser(uGood, 'good', '8.8.8.8')\n expect(out2).toBe(uGood)\n expect(updSpy3).toHaveBeenCalledWith(uGood, '8.8.8.8', true)\n expect(pathsSpy).toHaveBeenCalled()\n })\n\n it('compareUserPassword + updateLanguage + updatePassword branches', async () => {\n usersQueriesService.compareUserPassword = jest.fn().mockResolvedValue(true)\n await expect(usersManager.compareUserPassword(1, 'p')).resolves.toBe(true)\n expect(usersQueriesService.compareUserPassword).toHaveBeenCalledWith(1, 'p')\n\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(false)\n await expect(usersManager.updateLanguage(userTest, { language: '' })).rejects.toThrow('Unable to update language')\n expect(usersQueriesService.updateUserOrGuest).toHaveBeenCalledWith(userTest.id, { language: null })\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updateLanguage(userTest, { language: 'fr' })).resolves.toBeUndefined()\n\n usersQueriesService.selectUserProperties = jest.fn().mockResolvedValue(null)\n await expect(usersManager.updatePassword(userTest, { oldPassword: 'a', newPassword: 'b' })).rejects.toThrow('Unable to check password')\n usersQueriesService.selectUserProperties = jest.fn().mockResolvedValue({ password: 'HASH' })\n ;(comparePassword as jest.Mock).mockResolvedValue(false)\n await expect(usersManager.updatePassword(userTest, { oldPassword: 'a', newPassword: 'b' })).rejects.toThrow('Password mismatch')\n ;(comparePassword as jest.Mock).mockResolvedValue(true)\n ;(bcrypt.hash as unknown as jest.Mock).mockResolvedValue('HASHED')\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updatePassword(userTest, { oldPassword: 'a', newPassword: 'b' })).resolves.toBeUndefined()\n expect(usersQueriesService.updateUserOrGuest).toHaveBeenCalledWith(userTest.id, { password: 'HASHED' })\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(false)\n usersQueriesService.selectUserProperties = jest.fn().mockResolvedValue({ password: 'HASH' })\n ;(comparePassword as jest.Mock).mockResolvedValue(true)\n ;(bcrypt.hash as unknown as jest.Mock).mockResolvedValue('HASHED2')\n await expect(usersManager.updatePassword(userTest, { oldPassword: 'a', newPassword: 'b' })).rejects.toThrow('Unable to update password')\n })\n\n it('updateNotification + updateAccesses branches', async () => {\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(false)\n await expect(usersManager.updateNotification(userTest, { notification: 1 })).rejects.toThrow('Unable to update notification')\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updateNotification(userTest, { notification: 2 })).resolves.toBeUndefined()\n\n const prevAccess1 = new Date('2021-01-01T00:00:00Z')\n const u1 = new UserModel(\n { ...generateUserTest(), isActive: true, passwordAttempts: 3, currentIp: '1.2.3.4', currentAccess: prevAccess1 } as any,\n false\n )\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updateAccesses(u1, '5.6.7.8', true)).resolves.toBeUndefined()\n const payload1 = (usersQueriesService.updateUserOrGuest as jest.Mock).mock.calls[0][1]\n expect(payload1).toMatchObject({ lastIp: '1.2.3.4', currentIp: '5.6.7.8', passwordAttempts: 0, isActive: true })\n expect(payload1.lastAccess).toBe(prevAccess1)\n expect(payload1.currentAccess).toBeInstanceOf(Date)\n\n const prevAccess2 = new Date('2022-02-02T00:00:00Z')\n const u2 = new UserModel(\n {\n ...generateUserTest(),\n isActive: true,\n passwordAttempts: USER_MAX_PASSWORD_ATTEMPTS - 1,\n currentIp: 'old.ip',\n currentAccess: prevAccess2\n } as any,\n false\n )\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updateAccesses(u2, 'new.ip', false)).resolves.toBeUndefined()\n const payload2 = (usersQueriesService.updateUserOrGuest as jest.Mock).mock.calls[0][1]\n expect(payload2.passwordAttempts).toBe(USER_MAX_PASSWORD_ATTEMPTS)\n expect(payload2.isActive).toBe(false)\n expect(payload2.lastAccess).toBe(prevAccess2)\n expect(payload2.lastIp).toBe('old.ip')\n expect(payload2.currentIp).toBe('new.ip')\n expect(payload2.currentAccess).toBeInstanceOf(Date)\n })\n\n it('avatars advanced: generateIsNotExists, failure branches, base64 fallback', async () => {\n await ensurePaths()\n usersManager.findUser = jest.fn().mockResolvedValue({ getInitials: () => 'UT' } as unknown as UserModel)\n const [p, m] = (await usersManager.getAvatar(userTest.login, false, true)) as [string, string]\n expect(fileName(p)).toBe('avatar.png')\n expect(m).toBe(pngMimeType)\n jest.spyOn(imageModule, 'generateAvatar').mockImplementation(() => errStream('gen error'))\n await expect(usersManager.getAvatar(userTest.login, true)).rejects.toThrow('Unable to create avatar')\n usersManager.findUser = jest.fn().mockResolvedValue(null)\n await expect(usersManager.getAvatar(userTest.login, true)).rejects.toThrow('avatar not found')\n })\n\n it('updateAvatar branches: mime error, stream error, truncated, move fail, success', async () => {\n await ensurePaths()\n await expect(usersManager.updateAvatar(mkReq('text/plain', okStream('X')) as any)).rejects.toThrow('Unsupported file type')\n await expect(usersManager.updateAvatar(mkReq('image/png', errStream('stream error')) as any)).rejects.toThrow('Unable to upload avatar')\n\n const t = okStream('OK')\n t.truncated = true\n const mvSpy = jest.spyOn(filesUtilsModule, 'moveFiles').mockResolvedValue(undefined)\n await expect(usersManager.updateAvatar(mkReq('image/png', t) as any)).rejects.toThrow('Image is too large (5MB max)')\n expect(mvSpy).not.toHaveBeenCalled()\n\n jest.spyOn(filesUtilsModule, 'moveFiles').mockRejectedValue(new Error('mv fail'))\n await expect(usersManager.updateAvatar(mkReq('image/png', okStream()) as any)).rejects.toThrow('Unable to create avatar')\n\n const mvSpy2 = jest.spyOn(filesUtilsModule, 'moveFiles').mockResolvedValue(undefined)\n await expect(usersManager.updateAvatar(mkReq('image/png', okStream()) as any)).resolves.toBeUndefined()\n const expectedSrc = path.join(userTest.tmpPath, 'avatar.png')\n const expectedDst = path.join(userTest.homePath, 'avatar.png')\n expect(mvSpy2).toHaveBeenCalledWith(expectedSrc, expectedDst, true)\n })\n\n it('setOnlineStatus + browseGroups + getGroup', async () => {\n usersQueriesService.setOnlineStatus = jest.fn().mockRejectedValue(new Error('boom'))\n expect(() => usersManager.setOnlineStatus({ id: 1 } as any, 1 as any)).not.toThrow()\n\n usersQueriesService.browseRootGroups = jest.fn().mockResolvedValue([{ id: 1 }])\n const root = await usersManager.browseGroups(userTest, '')\n expect(root.parentGroup).toBeUndefined()\n expect(root.members.length).toBe(1)\n usersQueriesService.groupFromName = jest.fn().mockResolvedValue(null)\n await expect(usersManager.browseGroups(userTest, 'unknown')).rejects.toThrow('Group not found')\n const group = { id: 42, name: 'Team' }\n usersQueriesService.groupFromName = jest.fn().mockResolvedValue(group)\n usersQueriesService.browseGroupMembers = jest.fn().mockResolvedValue([{ id: 7 }, { id: 8 }])\n const g2 = await usersManager.browseGroups(userTest, 'Team')\n expect(g2.parentGroup).toEqual(group)\n expect(g2.members).toEqual([{ id: 7 }, { id: 8 }])\n expect(usersQueriesService.browseGroupMembers).toHaveBeenCalledWith(42)\n\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({ id: 1, members: [] })\n await expect(usersManager.getGroup(userTest, 1)).resolves.toEqual({ id: 1, members: [] })\n usersQueriesService.getGroup = jest.fn().mockResolvedValue({ id: 2 })\n await expect(usersManager.getGroup(userTest, 2, false)).resolves.toEqual({ id: 2 })\n usersQueriesService.getGroup = jest.fn().mockResolvedValue(null)\n await expect(usersManager.getGroup(userTest, 3, false)).rejects.toThrow('You are not allowed to do this action')\n })\n\n it('create/update personal group', async () => {\n await expect(usersManager.createPersonalGroup(userTest, { name: '' } as any)).rejects.toThrow('Group name is missing')\n usersQueriesService.checkGroupNameExists = jest.fn().mockResolvedValue(true)\n await expect(usersManager.createPersonalGroup(userTest, { name: 'A' })).rejects.toThrow('Name already used')\n usersQueriesService.checkGroupNameExists = jest.fn().mockResolvedValue(false)\n usersQueriesService.createPersonalGroup = jest.fn().mockResolvedValue(10)\n usersQueriesService.clearWhiteListCaches = jest.fn()\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 10 })\n const logSpy = jest.spyOn((usersManager as any)['logger'], 'log').mockImplementation(() => undefined as any)\n await expect(usersManager.createPersonalGroup(userTest, { name: 'OK' })).resolves.toEqual({ id: 10 })\n expect(logSpy).toHaveBeenCalled()\n usersQueriesService.createPersonalGroup = jest.fn().mockRejectedValue(new Error('db down'))\n await expect(usersManager.createPersonalGroup(userTest, { name: 'OK' })).rejects.toThrow('Unable to create group')\n\n await expect(usersManager.updatePersonalGroup(userTest, 1, {} as any)).rejects.toThrow('No changes to update')\n usersManager.getGroup = jest.fn().mockResolvedValueOnce({ id: 1, type: MEMBER_TYPE.GROUP })\n await expect(usersManager.updatePersonalGroup(userTest, 1, { name: 'x' })).rejects.toThrow('You are not allowed to do this action')\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP })\n usersQueriesService.checkGroupNameExists = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updatePersonalGroup(userTest, 1, { name: 'dup' })).rejects.toThrow('Name already used')\n usersQueriesService.checkGroupNameExists = jest.fn().mockResolvedValue(false)\n usersQueriesService.updateGroup = jest.fn().mockRejectedValue(new Error('oops'))\n await expect(usersManager.updatePersonalGroup(userTest, 1, { name: 'ok' })).rejects.toThrow('oops')\n usersQueriesService.updateGroup = jest.fn().mockResolvedValue(true)\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP })\n await expect(usersManager.updatePersonalGroup(userTest, 1, { name: 'ok' })).resolves.not.toThrow()\n expect(usersManager.getGroup).toHaveBeenCalledWith(userTest, 1, false, userTest.isAdmin)\n })\n\n it('addUsersToGroup (GROUP/PGROUP)', async () => {\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.GROUP, members: [{ id: 2 }, { id: 3 }] })\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([3, 4, 5])\n await expect(usersManager.addUsersToGroup(userTest, 1, [2, 3])).rejects.toThrow('No users to add to group')\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n await expect(usersManager.addUsersToGroup(userTest, 1, [3, 4, 5])).resolves.toBeUndefined()\n expect(usersQueriesService.updateGroupMembers).toHaveBeenCalledWith(1, {\n add: [\n { id: 4, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 5, groupRole: USER_GROUP_ROLE.MEMBER }\n ]\n })\n expect(usersQueriesService.usersWhitelist).toHaveBeenCalledWith(userTest.id, USER_ROLE.USER)\n\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 2, type: MEMBER_TYPE.PGROUP, members: [] })\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([10, 11])\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n await expect(usersManager.addUsersToGroup(userTest, 2, [10, 11])).resolves.toBeUndefined()\n expect(usersQueriesService.usersWhitelist).toHaveBeenCalledWith(userTest.id, undefined)\n expect(usersQueriesService.updateGroupMembers).toHaveBeenCalledWith(2, {\n add: [\n { id: 10, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 11, groupRole: USER_GROUP_ROLE.MEMBER }\n ]\n })\n })\n\n it('updateUserFromPersonalGroup', async () => {\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.GROUP, members: [] })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: 1 })).rejects.toThrow('You are not allowed to do this action')\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP, members: [] })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: 1 })).rejects.toThrow('User was not found')\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER },\n { id: 10, groupRole: USER_GROUP_ROLE.MEMBER }\n ]\n })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: USER_GROUP_ROLE.MEMBER })).rejects.toThrow(\n /group must have at least one manager/i\n )\n const spy = jest.spyOn(adminUsersManager, 'updateUserFromGroup').mockResolvedValue(undefined)\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 10, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 11, groupRole: USER_GROUP_ROLE.MEMBER }\n ]\n })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: USER_GROUP_ROLE.MANAGER })).resolves.toBeUndefined()\n expect(spy).toHaveBeenCalledWith(1, 9, { role: 1 })\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP, members: [{ id: 9, groupRole: USER_GROUP_ROLE.MEMBER }] })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: USER_GROUP_ROLE.MEMBER })).resolves.toBeUndefined()\n ;(spy as jest.Mock).mockClear()\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER },\n { id: 10, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: USER_GROUP_ROLE.MEMBER })).resolves.toBeUndefined()\n expect(spy).toHaveBeenCalledWith(1, 9, { role: USER_GROUP_ROLE.MEMBER })\n ;(spy as jest.Mock).mockClear()\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER },\n { id: 10, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: USER_GROUP_ROLE.MANAGER })).resolves.toBeUndefined()\n expect(spy).not.toHaveBeenCalled()\n })\n\n it('removeUserFromGroup', async () => {\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, members: [] })\n await expect(usersManager.removeUserFromGroup(userTest, 1, 9)).rejects.toThrow('User was not found')\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.GROUP, members: [{ id: 9, groupRole: USER_GROUP_ROLE.MANAGER }] })\n await expect(usersManager.removeUserFromGroup(userTest, 1, 9)).rejects.toThrow('You are not allowed to do this action')\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP, members: [{ id: 9, groupRole: USER_GROUP_ROLE.MANAGER }] })\n await expect(usersManager.removeUserFromGroup(userTest, 1, 9)).rejects.toThrow('Group must have at least one manager')\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 10, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n await expect(usersManager.removeUserFromGroup(userTest, 1, 9)).resolves.toBeUndefined()\n expect(usersQueriesService.updateGroupMembers).toHaveBeenCalledWith(1, { remove: [9] })\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER },\n { id: 10, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n await expect(usersManager.removeUserFromGroup(userTest, 1, 9)).resolves.toBeUndefined()\n expect(usersQueriesService.updateGroupMembers).toHaveBeenCalledWith(1, { remove: [9] })\n })\n\n it('leave/delete personal group', async () => {\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue(null)\n await expect(usersManager.leavePersonalGroup(userTest, 1)).rejects.toThrow('You are not allowed to do this action')\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.GROUP, members: [{ id: userTest.id }] })\n await expect(usersManager.leavePersonalGroup(userTest, 1)).rejects.toThrow('You are not allowed to do this action')\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP, members: [] })\n await expect(usersManager.leavePersonalGroup(userTest, 1)).rejects.toThrow('User was not found')\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [{ id: userTest.id, groupRole: USER_GROUP_ROLE.MANAGER }]\n })\n await expect(usersManager.leavePersonalGroup(userTest, 1)).rejects.toThrow('Group must have at least one manager')\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({\n id: 1,\n type: 2,\n members: [\n { id: userTest.id, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n const lSpy = jest.spyOn((usersManager as any)['logger'], 'log').mockImplementation(() => undefined as any)\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n await expect(usersManager.leavePersonalGroup(userTest, 1)).resolves.toBeUndefined()\n expect(lSpy).toHaveBeenCalledWith(expect.stringMatching(/has left group/))\n usersQueriesService.updateGroupMembers = jest.fn().mockRejectedValue(new Error('DB'))\n await expect(usersManager.leavePersonalGroup(userTest, 1)).rejects.toThrow('DB')\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: userTest.id, groupRole: USER_GROUP_ROLE.MANAGER },\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n await expect(usersManager.leavePersonalGroup(userTest, 1)).resolves.toBeUndefined()\n\n usersQueriesService.canDeletePersonalGroup = jest.fn().mockResolvedValue(false)\n await expect(usersManager.deletePersonalGroup(userTest, 7)).rejects.toThrow('You are not allowed to do this action')\n usersQueriesService.canDeletePersonalGroup = jest.fn().mockResolvedValue(true)\n const wSpy = jest.spyOn((usersManager as any)['logger'], 'warn').mockImplementation(() => undefined as any)\n usersQueriesService.deletePersonalGroup = jest.fn().mockResolvedValue(false)\n await expect(usersManager.deletePersonalGroup(userTest, 7)).rejects.toThrow('Unable to delete group')\n expect(wSpy).toHaveBeenCalledWith(expect.stringMatching(/does not exist/))\n const lgSpy = jest.spyOn((usersManager as any)['logger'], 'log').mockImplementation(() => undefined as any)\n usersQueriesService.deletePersonalGroup = jest.fn().mockResolvedValue(true)\n await expect(usersManager.deletePersonalGroup(userTest, 7)).resolves.toBeUndefined()\n expect(lgSpy).toHaveBeenCalledWith(expect.stringMatching(/was deleted/))\n })\n\n it('guests + proxies', async () => {\n usersQueriesService.listGuests = jest.fn().mockResolvedValue([{ id: 1 }])\n await expect(usersManager.listGuests(userTest)).resolves.toEqual([{ id: 1 }])\n const checkSpy = jest.spyOn(adminUsersManager, 'checkUser').mockImplementation(() => undefined)\n usersQueriesService.listGuests = jest.fn().mockResolvedValue({ id: 9 })\n await expect(usersManager.getGuest(userTest, 9)).resolves.toEqual({ id: 9 })\n expect(checkSpy).toHaveBeenCalled()\n\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([userTest.id, 100])\n usersQueriesService.clearWhiteListCaches = jest.fn()\n const createSpy = jest.spyOn(adminUsersManager, 'createUserOrGuest').mockResolvedValue({ id: 55 } as any)\n const dto1: CreateUserDto = { ...userTest, managers: [100], password: 'x' }\n const r = await usersManager.createGuest(userTest, dto1)\n expect(createSpy).toHaveBeenCalled()\n expect(usersQueriesService.clearWhiteListCaches).toHaveBeenCalledWith([userTest.id])\n expect(r).toEqual({ id: 55 })\n const args1 = (createSpy as jest.Mock).mock.calls[0][0]\n expect(args1.managers).toEqual(expect.arrayContaining([userTest.id]))\n ;(createSpy as jest.Mock).mockClear()\n const dto2: CreateUserDto = { ...userTest, managers: [userTest.id, 100], password: 'y' }\n await usersManager.createGuest(userTest, dto2)\n const args2 = (createSpy as jest.Mock).mock.calls[0][0]\n expect((args2.managers as number[]).filter((m: number) => m === userTest.id)).toHaveLength(1)\n\n await expect(usersManager.updateGuest(userTest, 9, {} as any)).rejects.toThrow('No changes to update')\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([1])\n await expect(usersManager.updateGuest(userTest, 9, { managers: [2] } as any)).rejects.toThrow('Guest must have at least one manager')\n usersQueriesService.isGuestManager = jest.fn().mockResolvedValue(false)\n await expect(usersManager.updateGuest(userTest, 9, { email: 'a' } as any)).rejects.toThrow('You are not allowed to do this action')\n usersQueriesService.isGuestManager = jest.fn().mockResolvedValue(true)\n jest.spyOn(adminUsersManager, 'updateUserOrGuest').mockResolvedValue({ managers: [{ id: 999 }] } as any)\n await expect(usersManager.updateGuest(userTest, 9, { email: 'a' } as any)).resolves.toBeNull()\n jest.spyOn(adminUsersManager, 'updateUserOrGuest').mockResolvedValue({ managers: [{ id: userTest.id }] } as any)\n await expect(usersManager.updateGuest(userTest, 9, { email: 'a' } as any)).resolves.toEqual({ managers: [{ id: userTest.id }] })\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([userTest.id, 77])\n usersQueriesService.isGuestManager = jest.fn().mockResolvedValue(true)\n jest.spyOn(adminUsersManager, 'updateUserOrGuest').mockResolvedValue({ managers: [{ id: userTest.id }, { id: 77 }] } as any)\n await expect(usersManager.updateGuest(userTest, 9, { managers: [userTest.id, 77] } as any)).resolves.toEqual({\n managers: [{ id: userTest.id }, { id: 77 }]\n })\n\n usersQueriesService.isGuestManager = jest.fn().mockResolvedValue(null)\n await expect(usersManager.deleteGuest(userTest, 9)).rejects.toThrow('You are not allowed to do this action')\n usersQueriesService.isGuestManager = jest.fn().mockResolvedValue({ id: 9, login: 'guest' })\n const delSpy = jest.spyOn(adminUsersManager, 'deleteUserOrGuest').mockResolvedValue(undefined)\n await expect(usersManager.deleteGuest(userTest, 9)).resolves.toBeUndefined()\n expect(delSpy).toHaveBeenCalledWith(9, 'guest', { deleteSpace: true, isGuest: true })\n\n usersQueriesService.searchUsersOrGroups = jest.fn().mockResolvedValue([{ id: 1 }])\n await expect(usersManager.searchMembers(userTest, { search: '' } as any)).resolves.toEqual([{ id: 1 }])\n\n usersQueriesService.getOnlineUsers = jest.fn().mockResolvedValue([{ id: 123 }])\n await expect(usersManager.getOnlineUsers([123])).resolves.toEqual([{ id: 123 }])\n expect(usersQueriesService.getOnlineUsers).toHaveBeenCalledWith([123])\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([10, 11])\n await expect(usersManager.usersWhitelist(userTest.id)).resolves.toEqual([10, 11])\n expect(usersQueriesService.usersWhitelist).toHaveBeenCalledWith(userTest.id)\n })\n})\n"],"names":["jest","mock","actual","requireActual","comparePassword","fn","__esModule","default","hash","Promise","resolve","generateAvatar","Readable","from","Buffer","describe","UsersManager","name","usersManager","adminUsersManager","adminUsersQueries","usersQueriesService","userTest","deleteUserDto","flush","r","setImmediate","okStream","d","s","truncated","errStream","msg","read","destroy","Error","mkReq","mimetype","stream","user","file","mockResolvedValue","ensurePaths","isPathExists","homePath","makePaths","notificationsManager","sendEmailNotification","undefined","beforeAll","module","Test","createTestingModule","providers","AdminUsersManager","AdminUsersQueries","UsersQueries","provide","NotificationsManager","useValue","AuthManager","DB_TOKEN_PROVIDER","Cache","compile","useLogger","get","UserModel","generateUserTest","deleteSpace","isGuest","afterEach","restoreAllMocks","afterAll","expect","deleteUserSpace","login","resolves","not","toThrow","it","toBeDefined","mockReturnValue","u1","findUser","toBeInstanceOf","password","toBeUndefined","u2","me1","me","toBeNull","id","rejects","fromUserId","authUser","clientId","impersonatedFromId","fromUser","me2","impersonated","toBe","filesPath","mockReturnValueOnce","p0","m0","getAvatar","fileName","svgMimeType","p1","m1","pngMimeType","checkUserExists","createUserOrGuest","clearWhiteListCaches","created","USER_ROLE","USER","email","mockImplementation","deleteUser","deleteUserOrGuest","linkUser","role","LINK","logUser","uLocked","isActive","passwordAttempts","errSpy","spyOn","updSpy1","mockRejectedValue","toHaveBeenCalledWith","stringContaining","uBad","errSpy2","updSpy2","out","uGood","updSpy3","pathsSpy","out2","toHaveBeenCalled","compareUserPassword","updateUserOrGuest","updateLanguage","language","selectUserProperties","updatePassword","oldPassword","newPassword","bcrypt","updateNotification","notification","prevAccess1","Date","currentIp","currentAccess","updateAccesses","payload1","calls","toMatchObject","lastIp","lastAccess","prevAccess2","USER_MAX_PASSWORD_ATTEMPTS","payload2","getInitials","p","m","imageModule","updateAvatar","t","mvSpy","filesUtilsModule","mvSpy2","expectedSrc","path","join","tmpPath","expectedDst","setOnlineStatus","browseRootGroups","root","browseGroups","parentGroup","members","length","groupFromName","group","browseGroupMembers","g2","toEqual","getGroupWithMembers","getGroup","createPersonalGroup","checkGroupNameExists","logSpy","updatePersonalGroup","mockResolvedValueOnce","type","MEMBER_TYPE","GROUP","PGROUP","updateGroup","isAdmin","usersWhitelist","addUsersToGroup","updateGroupMembers","add","groupRole","USER_GROUP_ROLE","MEMBER","updateUserFromPersonalGroup","MANAGER","spy","mockClear","removeUserFromGroup","remove","leavePersonalGroup","lSpy","stringMatching","canDeletePersonalGroup","deletePersonalGroup","wSpy","lgSpy","listGuests","checkSpy","getGuest","createSpy","dto1","managers","createGuest","args1","arrayContaining","dto2","args2","filter","toHaveLength","updateGuest","isGuestManager","deleteGuest","delSpy","searchUsersOrGroups","searchMembers","search","getOnlineUsers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/users/services/users-manager.service.spec.ts"],"sourcesContent":["import { Test, TestingModule } from '@nestjs/testing'\nimport bcrypt from 'bcryptjs'\nimport path from 'node:path'\nimport { Readable } from 'node:stream'\nimport { AuthManager } from '../../../authentication/auth.service'\nimport { comparePassword } from '../../../common/functions'\nimport * as imageModule from '../../../common/image'\nimport { pngMimeType, svgMimeType } from '../../../common/image'\nimport { Cache } from '../../../infrastructure/cache/services/cache.service'\nimport { DB_TOKEN_PROVIDER } from '../../../infrastructure/database/constants'\nimport * as filesUtilsModule from '../../files/utils/files'\nimport { fileName, isPathExists } from '../../files/utils/files'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { MEMBER_TYPE } from '../constants/member'\nimport { USER_GROUP_ROLE, USER_MAX_PASSWORD_ATTEMPTS, USER_ROLE } from '../constants/user'\nimport { CreateUserDto } from '../dto/create-or-update-user.dto'\nimport { DeleteUserDto } from '../dto/delete-user.dto'\nimport { UserModel } from '../models/user.model'\nimport { generateUserTest } from '../utils/test'\nimport { AdminUsersManager } from './admin-users-manager.service'\nimport { AdminUsersQueries } from './admin-users-queries.service'\nimport { UsersManager } from './users-manager.service'\nimport { UsersQueries } from './users-queries.service'\n\njest.mock('../../../common/functions', () => {\n const actual = jest.requireActual('../../../common/functions')\n return { ...actual, comparePassword: jest.fn() }\n})\njest.mock('bcryptjs', () => ({ __esModule: true, default: { hash: jest.fn(() => Promise.resolve('hashed-password')) } }))\njest.mock('../../../common/image', () => {\n const actual = jest.requireActual('../../../common/image')\n return {\n ...actual,\n generateAvatar: jest.fn(() => Readable.from([Buffer.from('PNGDATA')]))\n }\n})\n\ndescribe(UsersManager.name, () => {\n let usersManager: UsersManager\n let adminUsersManager: AdminUsersManager\n let adminUsersQueries: AdminUsersQueries\n let usersQueriesService: UsersQueries\n let userTest: UserModel\n let deleteUserDto: DeleteUserDto\n const flush = () => new Promise<void>((r) => setImmediate(r))\n const okStream = (d = 'OK') => {\n const s: any = Readable.from([Buffer.from(d)])\n s.truncated = false\n return s\n }\n const errStream = (msg = 'err', truncated = false) => {\n const s: any = new Readable({\n read() {\n this.destroy(new Error(msg))\n }\n })\n s.truncated = truncated\n return s\n }\n const mkReq = (mimetype: string, stream: any, user = userTest) => ({ user, file: jest.fn().mockResolvedValue({ mimetype, file: stream }) })\n const ensurePaths = async () => {\n if (!(await isPathExists(userTest.homePath))) {\n await userTest.makePaths()\n }\n }\n\n const notificationsManager = {\n sendEmailNotification: jest.fn().mockResolvedValue(undefined)\n }\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n AdminUsersManager,\n AdminUsersQueries,\n UsersManager,\n UsersQueries,\n { provide: NotificationsManager, useValue: notificationsManager },\n { provide: AuthManager, useValue: {} },\n { provide: DB_TOKEN_PROVIDER, useValue: {} },\n { provide: Cache, useValue: {} }\n ]\n }).compile()\n module.useLogger(['fatal'])\n usersManager = module.get(UsersManager)\n adminUsersManager = module.get(AdminUsersManager)\n adminUsersQueries = module.get(AdminUsersQueries)\n usersQueriesService = module.get(UsersQueries)\n userTest = new UserModel(generateUserTest(), false)\n deleteUserDto = { deleteSpace: true, isGuest: false } satisfies DeleteUserDto\n })\n\n afterEach(() => jest.restoreAllMocks())\n\n afterAll(async () => {\n await expect(adminUsersManager.deleteUserSpace(userTest.login)).resolves.not.toThrow()\n })\n\n it('instances + findUser/me/fromUserId + impersonation', async () => {\n expect(usersManager && adminUsersManager && usersQueriesService && userTest).toBeDefined()\n usersQueriesService.from = jest.fn().mockReturnValue(userTest)\n const u1: any = await usersManager.findUser(userTest.login, true)\n expect(u1).toBeInstanceOf(UserModel)\n expect(u1.password).toBeUndefined()\n const u2 = await usersManager.findUser(userTest.login, false)\n expect(u2).toBeInstanceOf(UserModel)\n expect(u2.password).toBeDefined()\n const me1: any = await usersManager.me(userTest)\n expect(me1.user.password).toBeUndefined()\n usersQueriesService.from = jest.fn().mockReturnValue(null)\n await expect(usersManager.findUser('unknown')).resolves.toBeNull()\n await expect(usersManager.me({ id: 0 } as UserModel)).rejects.toThrow()\n usersQueriesService.from = jest.fn().mockResolvedValue(null)\n await expect(usersManager.fromUserId(123)).resolves.toBeNull()\n const authUser = new UserModel({ ...generateUserTest(), id: 42, clientId: 'CID', impersonatedFromId: 1 } as any, true)\n const fromUser = new UserModel({ ...generateUserTest(), id: 42 }, true)\n usersQueriesService.from = jest.fn().mockResolvedValue(fromUser)\n const me2 = await usersManager.me(authUser)\n expect(me2.user.impersonated).toBe(true)\n expect(me2.user.clientId).toBe('CID')\n })\n\n it('paths + avatars (default/generate) + create/delete user', async () => {\n await expect(ensurePaths()).resolves.not.toThrow()\n expect(await isPathExists(userTest.filesPath)).toBe(true)\n usersQueriesService.from = jest.fn().mockReturnValueOnce(userTest)\n const [p0, m0] = await usersManager.getAvatar(userTest.login)\n expect(fileName(p0)).toBe('avatar.svg')\n expect(m0).toBe(svgMimeType)\n usersQueriesService.from = jest.fn().mockReturnValueOnce(null)\n await expect(usersManager.getAvatar('#', true)).rejects.toThrow('does not exist')\n usersQueriesService.from = jest.fn().mockReturnValue(userTest)\n expect(await usersManager.getAvatar(userTest.login, true)).toBeUndefined()\n const [p1, m1] = await usersManager.getAvatar(userTest.login)\n expect(fileName(p1)).toBe('avatar.png')\n expect(m1).toBe(pngMimeType)\n\n usersQueriesService.checkUserExists = jest.fn().mockReturnValue(undefined)\n usersQueriesService.createUserOrGuest = jest.fn().mockReturnValue(888)\n usersQueriesService.clearWhiteListCaches = jest.fn()\n const created = await adminUsersManager.createUserOrGuest(userTest satisfies CreateUserDto, USER_ROLE.USER)\n expect(created).toBeInstanceOf(UserModel)\n expect(await isPathExists(created.filesPath)).toBe(true)\n\n usersQueriesService.checkUserExists = jest\n .fn()\n .mockReturnValueOnce({ login: userTest.login, email: '' })\n .mockReturnValueOnce({ login: '', email: userTest.email })\n .mockReturnValueOnce(undefined)\n await expect(adminUsersManager.createUserOrGuest(userTest satisfies CreateUserDto, USER_ROLE.USER)).rejects.toThrow()\n await expect(adminUsersManager.createUserOrGuest(userTest satisfies CreateUserDto, USER_ROLE.USER)).rejects.toThrow()\n usersQueriesService.createUserOrGuest = jest.fn().mockImplementation(() => {\n throw new Error('testing')\n })\n await expect(adminUsersManager.createUserOrGuest(userTest satisfies CreateUserDto, USER_ROLE.USER)).rejects.toThrow()\n\n adminUsersQueries.deleteUser = jest.fn().mockReturnValue(true)\n await expect(adminUsersManager.deleteUserOrGuest(userTest.id, userTest.login, deleteUserDto)).resolves.not.toThrow()\n expect(await isPathExists(userTest.filesPath)).toBe(false)\n adminUsersQueries.deleteUser = jest.fn().mockReturnValue(false)\n await expect(adminUsersManager.deleteUserOrGuest(userTest.id, userTest.login, deleteUserDto)).resolves.not.toThrow()\n adminUsersQueries.deleteUser = jest.fn().mockImplementation(() => {\n throw new Error('testing')\n })\n await expect(adminUsersManager.deleteUserOrGuest(userTest.id, userTest.login, deleteUserDto)).rejects.toThrow()\n })\n\n it('logUser branches: forbidden/locked/bad/good', async () => {\n const linkUser = new UserModel({ ...generateUserTest(), role: USER_ROLE.LINK }, false)\n await expect(usersManager.logUser(linkUser, 'x', '127.0.0.1')).rejects.toThrow('Account is not allowed')\n\n const uLocked = new UserModel({ ...generateUserTest(), isActive: false, passwordAttempts: 5 }, false)\n const errSpy = jest.spyOn((usersManager as any)['logger'], 'error').mockImplementation(() => undefined as any)\n const updSpy1 = jest.spyOn(usersManager, 'updateAccesses').mockRejectedValue(new Error('reject-locked'))\n await expect(usersManager.logUser(uLocked, 'pwd', 'ip')).rejects.toThrow('Account locked')\n await flush()\n expect(errSpy.mock.calls.some(([payload]: { msg: string }[]) => payload?.msg?.includes('reject-locked'))).toBe(true)\n expect(updSpy1).toHaveBeenCalledWith(uLocked, 'ip', false)\n ;(comparePassword as jest.Mock).mockResolvedValue(false)\n const uBad = new UserModel({ ...generateUserTest(), isActive: true, passwordAttempts: 0 }, false)\n const errSpy2 = jest.spyOn((usersManager as any)['logger'], 'error').mockImplementation(() => undefined as any)\n const updSpy2 = jest.spyOn(usersManager, 'updateAccesses').mockRejectedValue(new Error('reject-auth'))\n const out = await usersManager.logUser(uBad, 'bad', '1.1.1.1')\n expect(out).toBeNull()\n await flush()\n expect(errSpy2.mock.calls.some(([payload]: { msg: string }[]) => payload?.msg?.includes('reject-auth'))).toBe(true)\n expect(updSpy2).toHaveBeenCalledWith(uBad, '1.1.1.1', false)\n ;(comparePassword as jest.Mock).mockResolvedValue(true)\n const uGood = new UserModel({ ...generateUserTest(), isActive: true, passwordAttempts: 0 }, false)\n const updSpy3 = jest.spyOn(usersManager, 'updateAccesses').mockResolvedValue(undefined)\n const pathsSpy = jest.spyOn(uGood, 'makePaths').mockResolvedValue(undefined)\n const out2 = await usersManager.logUser(uGood, 'good', '8.8.8.8')\n expect(out2).toBe(uGood)\n expect(updSpy3).toHaveBeenCalledWith(uGood, '8.8.8.8', true)\n expect(pathsSpy).toHaveBeenCalled()\n })\n\n it('compareUserPassword + updateLanguage + updatePassword branches', async () => {\n usersQueriesService.compareUserPassword = jest.fn().mockResolvedValue(true)\n await expect(usersManager.compareUserPassword(1, 'p')).resolves.toBe(true)\n expect(usersQueriesService.compareUserPassword).toHaveBeenCalledWith(1, 'p')\n\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(false)\n await expect(usersManager.updateLanguage(userTest, { language: '' })).rejects.toThrow('Unable to update language')\n expect(usersQueriesService.updateUserOrGuest).toHaveBeenCalledWith(userTest.id, { language: null })\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updateLanguage(userTest, { language: 'fr' })).resolves.toBeUndefined()\n\n usersQueriesService.selectUserProperties = jest.fn().mockResolvedValue(null)\n await expect(usersManager.updatePassword(userTest, { oldPassword: 'a', newPassword: 'b' })).rejects.toThrow('Unable to check password')\n usersQueriesService.selectUserProperties = jest.fn().mockResolvedValue({ password: 'HASH' })\n ;(comparePassword as jest.Mock).mockResolvedValue(false)\n await expect(usersManager.updatePassword(userTest, { oldPassword: 'a', newPassword: 'b' })).rejects.toThrow('Password mismatch')\n ;(comparePassword as jest.Mock).mockResolvedValue(true)\n ;(bcrypt.hash as unknown as jest.Mock).mockResolvedValue('HASHED')\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updatePassword(userTest, { oldPassword: 'a', newPassword: 'b' })).resolves.toBeUndefined()\n expect(usersQueriesService.updateUserOrGuest).toHaveBeenCalledWith(userTest.id, { password: 'HASHED' })\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(false)\n usersQueriesService.selectUserProperties = jest.fn().mockResolvedValue({ password: 'HASH' })\n ;(comparePassword as jest.Mock).mockResolvedValue(true)\n ;(bcrypt.hash as unknown as jest.Mock).mockResolvedValue('HASHED2')\n await expect(usersManager.updatePassword(userTest, { oldPassword: 'a', newPassword: 'b' })).rejects.toThrow('Unable to update password')\n })\n\n it('updateNotification + updateAccesses branches', async () => {\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(false)\n await expect(usersManager.updateNotification(userTest, { notification: 1 })).rejects.toThrow('Unable to update notification')\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updateNotification(userTest, { notification: 2 })).resolves.toBeUndefined()\n\n const prevAccess1 = new Date('2021-01-01T00:00:00Z')\n const u1 = new UserModel(\n { ...generateUserTest(), isActive: true, passwordAttempts: 3, currentIp: '1.2.3.4', currentAccess: prevAccess1 } as any,\n false\n )\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updateAccesses(u1, '5.6.7.8', true)).resolves.toBeUndefined()\n const payload1 = (usersQueriesService.updateUserOrGuest as jest.Mock).mock.calls[0][1]\n expect(payload1).toMatchObject({ lastIp: '1.2.3.4', currentIp: '5.6.7.8', passwordAttempts: 0, isActive: true })\n expect(payload1.lastAccess).toBe(prevAccess1)\n expect(payload1.currentAccess).toBeInstanceOf(Date)\n\n const prevAccess2 = new Date('2022-02-02T00:00:00Z')\n const u2 = new UserModel(\n {\n ...generateUserTest(),\n isActive: true,\n passwordAttempts: USER_MAX_PASSWORD_ATTEMPTS - 1,\n currentIp: 'old.ip',\n currentAccess: prevAccess2\n } as any,\n false\n )\n usersQueriesService.updateUserOrGuest = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updateAccesses(u2, 'new.ip', false)).resolves.toBeUndefined()\n const payload2 = (usersQueriesService.updateUserOrGuest as jest.Mock).mock.calls[0][1]\n expect(payload2.passwordAttempts).toBe(USER_MAX_PASSWORD_ATTEMPTS)\n expect(payload2.isActive).toBe(false)\n expect(payload2.lastAccess).toBe(prevAccess2)\n expect(payload2.lastIp).toBe('old.ip')\n expect(payload2.currentIp).toBe('new.ip')\n expect(payload2.currentAccess).toBeInstanceOf(Date)\n })\n\n it('avatars advanced: generateIsNotExists, failure branches, base64 fallback', async () => {\n await ensurePaths()\n usersManager.findUser = jest.fn().mockResolvedValue({ getInitials: () => 'UT' } as unknown as UserModel)\n const [p, m] = (await usersManager.getAvatar(userTest.login, false, true)) as [string, string]\n expect(fileName(p)).toBe('avatar.png')\n expect(m).toBe(pngMimeType)\n jest.spyOn(imageModule, 'generateAvatar').mockImplementation(() => errStream('gen error'))\n await expect(usersManager.getAvatar(userTest.login, true)).rejects.toThrow('Unable to create avatar')\n usersManager.findUser = jest.fn().mockResolvedValue(null)\n await expect(usersManager.getAvatar(userTest.login, true)).rejects.toThrow('avatar not found')\n })\n\n it('updateAvatar branches: mime error, stream error, truncated, move fail, success', async () => {\n await ensurePaths()\n await expect(usersManager.updateAvatar(mkReq('text/plain', okStream('X')) as any)).rejects.toThrow('Unsupported file type')\n await expect(usersManager.updateAvatar(mkReq('image/png', errStream('stream error')) as any)).rejects.toThrow('Unable to upload avatar')\n\n const t = okStream('OK')\n t.truncated = true\n const mvSpy = jest.spyOn(filesUtilsModule, 'moveFiles').mockResolvedValue(undefined)\n await expect(usersManager.updateAvatar(mkReq('image/png', t) as any)).rejects.toThrow('Image is too large (5MB max)')\n expect(mvSpy).not.toHaveBeenCalled()\n\n jest.spyOn(filesUtilsModule, 'moveFiles').mockRejectedValue(new Error('mv fail'))\n await expect(usersManager.updateAvatar(mkReq('image/png', okStream()) as any)).rejects.toThrow('Unable to create avatar')\n\n const mvSpy2 = jest.spyOn(filesUtilsModule, 'moveFiles').mockResolvedValue(undefined)\n await expect(usersManager.updateAvatar(mkReq('image/png', okStream()) as any)).resolves.toBeUndefined()\n const expectedSrc = path.join(userTest.tmpPath, 'avatar.png')\n const expectedDst = path.join(userTest.homePath, 'avatar.png')\n expect(mvSpy2).toHaveBeenCalledWith(expectedSrc, expectedDst, true)\n })\n\n it('setOnlineStatus + browseGroups + getGroup', async () => {\n usersQueriesService.setOnlineStatus = jest.fn().mockRejectedValue(new Error('boom'))\n expect(() => usersManager.setOnlineStatus({ id: 1 } as any, 1 as any)).not.toThrow()\n\n usersQueriesService.browseRootGroups = jest.fn().mockResolvedValue([{ id: 1 }])\n const root = await usersManager.browseGroups(userTest, '')\n expect(root.parentGroup).toBeUndefined()\n expect(root.members.length).toBe(1)\n usersQueriesService.groupFromName = jest.fn().mockResolvedValue(null)\n await expect(usersManager.browseGroups(userTest, 'unknown')).rejects.toThrow('Group not found')\n const group = { id: 42, name: 'Team' }\n usersQueriesService.groupFromName = jest.fn().mockResolvedValue(group)\n usersQueriesService.browseGroupMembers = jest.fn().mockResolvedValue([{ id: 7 }, { id: 8 }])\n const g2 = await usersManager.browseGroups(userTest, 'Team')\n expect(g2.parentGroup).toEqual(group)\n expect(g2.members).toEqual([{ id: 7 }, { id: 8 }])\n expect(usersQueriesService.browseGroupMembers).toHaveBeenCalledWith(42)\n\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({ id: 1, members: [] })\n await expect(usersManager.getGroup(userTest, 1)).resolves.toEqual({ id: 1, members: [] })\n usersQueriesService.getGroup = jest.fn().mockResolvedValue({ id: 2 })\n await expect(usersManager.getGroup(userTest, 2, false)).resolves.toEqual({ id: 2 })\n usersQueriesService.getGroup = jest.fn().mockResolvedValue(null)\n await expect(usersManager.getGroup(userTest, 3, false)).rejects.toThrow('You are not allowed to do this action')\n })\n\n it('create/update personal group', async () => {\n await expect(usersManager.createPersonalGroup(userTest, { name: '' } as any)).rejects.toThrow('Group name is missing')\n usersQueriesService.checkGroupNameExists = jest.fn().mockResolvedValue(true)\n await expect(usersManager.createPersonalGroup(userTest, { name: 'A' })).rejects.toThrow('Name already used')\n usersQueriesService.checkGroupNameExists = jest.fn().mockResolvedValue(false)\n usersQueriesService.createPersonalGroup = jest.fn().mockResolvedValue(10)\n usersQueriesService.clearWhiteListCaches = jest.fn()\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 10 })\n const logSpy = jest.spyOn((usersManager as any)['logger'], 'log').mockImplementation(() => undefined as any)\n await expect(usersManager.createPersonalGroup(userTest, { name: 'OK' })).resolves.toEqual({ id: 10 })\n expect(logSpy).toHaveBeenCalled()\n usersQueriesService.createPersonalGroup = jest.fn().mockRejectedValue(new Error('db down'))\n await expect(usersManager.createPersonalGroup(userTest, { name: 'OK' })).rejects.toThrow('Unable to create group')\n\n await expect(usersManager.updatePersonalGroup(userTest, 1, {} as any)).rejects.toThrow('No changes to update')\n usersManager.getGroup = jest.fn().mockResolvedValueOnce({ id: 1, type: MEMBER_TYPE.GROUP })\n await expect(usersManager.updatePersonalGroup(userTest, 1, { name: 'x' })).rejects.toThrow('You are not allowed to do this action')\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP })\n usersQueriesService.checkGroupNameExists = jest.fn().mockResolvedValue(true)\n await expect(usersManager.updatePersonalGroup(userTest, 1, { name: 'dup' })).rejects.toThrow('Name already used')\n usersQueriesService.checkGroupNameExists = jest.fn().mockResolvedValue(false)\n usersQueriesService.updateGroup = jest.fn().mockRejectedValue(new Error('oops'))\n await expect(usersManager.updatePersonalGroup(userTest, 1, { name: 'ok' })).rejects.toThrow('oops')\n usersQueriesService.updateGroup = jest.fn().mockResolvedValue(true)\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP })\n await expect(usersManager.updatePersonalGroup(userTest, 1, { name: 'ok' })).resolves.not.toThrow()\n expect(usersManager.getGroup).toHaveBeenCalledWith(userTest, 1, false, userTest.isAdmin)\n })\n\n it('addUsersToGroup (GROUP/PGROUP)', async () => {\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.GROUP, members: [{ id: 2 }, { id: 3 }] })\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([3, 4, 5])\n await expect(usersManager.addUsersToGroup(userTest, 1, [2, 3])).rejects.toThrow('No users to add to group')\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n await expect(usersManager.addUsersToGroup(userTest, 1, [3, 4, 5])).resolves.toBeUndefined()\n expect(usersQueriesService.updateGroupMembers).toHaveBeenCalledWith(1, {\n add: [\n { id: 4, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 5, groupRole: USER_GROUP_ROLE.MEMBER }\n ]\n })\n expect(usersQueriesService.usersWhitelist).toHaveBeenCalledWith(userTest.id, USER_ROLE.USER)\n\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 2, type: MEMBER_TYPE.PGROUP, members: [] })\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([10, 11])\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n await expect(usersManager.addUsersToGroup(userTest, 2, [10, 11])).resolves.toBeUndefined()\n expect(usersQueriesService.usersWhitelist).toHaveBeenCalledWith(userTest.id, undefined)\n expect(usersQueriesService.updateGroupMembers).toHaveBeenCalledWith(2, {\n add: [\n { id: 10, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 11, groupRole: USER_GROUP_ROLE.MEMBER }\n ]\n })\n })\n\n it('updateUserFromPersonalGroup', async () => {\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.GROUP, members: [] })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: 1 })).rejects.toThrow('You are not allowed to do this action')\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP, members: [] })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: 1 })).rejects.toThrow('User was not found')\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER },\n { id: 10, groupRole: USER_GROUP_ROLE.MEMBER }\n ]\n })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: USER_GROUP_ROLE.MEMBER })).rejects.toThrow(\n /group must have at least one manager/i\n )\n const spy = jest.spyOn(adminUsersManager, 'updateUserFromGroup').mockResolvedValue(undefined)\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 10, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 11, groupRole: USER_GROUP_ROLE.MEMBER }\n ]\n })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: USER_GROUP_ROLE.MANAGER })).resolves.toBeUndefined()\n expect(spy).toHaveBeenCalledWith(1, 9, { role: 1 })\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP, members: [{ id: 9, groupRole: USER_GROUP_ROLE.MEMBER }] })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: USER_GROUP_ROLE.MEMBER })).resolves.toBeUndefined()\n ;(spy as jest.Mock).mockClear()\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER },\n { id: 10, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: USER_GROUP_ROLE.MEMBER })).resolves.toBeUndefined()\n expect(spy).toHaveBeenCalledWith(1, 9, { role: USER_GROUP_ROLE.MEMBER })\n ;(spy as jest.Mock).mockClear()\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER },\n { id: 10, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n await expect(usersManager.updateUserFromPersonalGroup(userTest, 1, 9, { role: USER_GROUP_ROLE.MANAGER })).resolves.toBeUndefined()\n expect(spy).not.toHaveBeenCalled()\n })\n\n it('removeUserFromGroup', async () => {\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, members: [] })\n await expect(usersManager.removeUserFromGroup(userTest, 1, 9)).rejects.toThrow('User was not found')\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.GROUP, members: [{ id: 9, groupRole: USER_GROUP_ROLE.MANAGER }] })\n await expect(usersManager.removeUserFromGroup(userTest, 1, 9)).rejects.toThrow('You are not allowed to do this action')\n usersManager.getGroup = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP, members: [{ id: 9, groupRole: USER_GROUP_ROLE.MANAGER }] })\n await expect(usersManager.removeUserFromGroup(userTest, 1, 9)).rejects.toThrow('Group must have at least one manager')\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 10, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n await expect(usersManager.removeUserFromGroup(userTest, 1, 9)).resolves.toBeUndefined()\n expect(usersQueriesService.updateGroupMembers).toHaveBeenCalledWith(1, { remove: [9] })\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n usersManager.getGroup = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER },\n { id: 10, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n await expect(usersManager.removeUserFromGroup(userTest, 1, 9)).resolves.toBeUndefined()\n expect(usersQueriesService.updateGroupMembers).toHaveBeenCalledWith(1, { remove: [9] })\n })\n\n it('leave/delete personal group', async () => {\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue(null)\n await expect(usersManager.leavePersonalGroup(userTest, 1)).rejects.toThrow('You are not allowed to do this action')\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.GROUP, members: [{ id: userTest.id }] })\n await expect(usersManager.leavePersonalGroup(userTest, 1)).rejects.toThrow('You are not allowed to do this action')\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({ id: 1, type: MEMBER_TYPE.PGROUP, members: [] })\n await expect(usersManager.leavePersonalGroup(userTest, 1)).rejects.toThrow('User was not found')\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [{ id: userTest.id, groupRole: USER_GROUP_ROLE.MANAGER }]\n })\n await expect(usersManager.leavePersonalGroup(userTest, 1)).rejects.toThrow('Group must have at least one manager')\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({\n id: 1,\n type: 2,\n members: [\n { id: userTest.id, groupRole: USER_GROUP_ROLE.MEMBER },\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n const lSpy = jest.spyOn((usersManager as any)['logger'], 'log').mockImplementation(() => undefined as any)\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n await expect(usersManager.leavePersonalGroup(userTest, 1)).resolves.toBeUndefined()\n expect(lSpy).toHaveBeenCalledWith(expect.objectContaining({ msg: expect.stringMatching(/has left group/) }))\n usersQueriesService.updateGroupMembers = jest.fn().mockRejectedValue(new Error('DB'))\n await expect(usersManager.leavePersonalGroup(userTest, 1)).rejects.toThrow('DB')\n usersQueriesService.getGroupWithMembers = jest.fn().mockResolvedValue({\n id: 1,\n type: MEMBER_TYPE.PGROUP,\n members: [\n { id: userTest.id, groupRole: USER_GROUP_ROLE.MANAGER },\n { id: 9, groupRole: USER_GROUP_ROLE.MANAGER }\n ]\n })\n usersQueriesService.updateGroupMembers = jest.fn().mockResolvedValue(undefined)\n await expect(usersManager.leavePersonalGroup(userTest, 1)).resolves.toBeUndefined()\n\n usersQueriesService.canDeletePersonalGroup = jest.fn().mockResolvedValue(false)\n await expect(usersManager.deletePersonalGroup(userTest, 7)).rejects.toThrow('You are not allowed to do this action')\n usersQueriesService.canDeletePersonalGroup = jest.fn().mockResolvedValue(true)\n const wSpy = jest.spyOn((usersManager as any)['logger'], 'warn').mockImplementation(() => undefined as any)\n usersQueriesService.deletePersonalGroup = jest.fn().mockResolvedValue(false)\n await expect(usersManager.deletePersonalGroup(userTest, 7)).rejects.toThrow('Unable to delete group')\n expect(wSpy).toHaveBeenCalledWith(expect.objectContaining({ msg: expect.stringMatching(/does not exist/) }))\n const lgSpy = jest.spyOn((usersManager as any)['logger'], 'log').mockImplementation(() => undefined as any)\n usersQueriesService.deletePersonalGroup = jest.fn().mockResolvedValue(true)\n await expect(usersManager.deletePersonalGroup(userTest, 7)).resolves.toBeUndefined()\n expect(lgSpy).toHaveBeenCalledWith(expect.objectContaining({ msg: expect.stringMatching(/was deleted/) }))\n })\n\n it('guests + proxies', async () => {\n usersQueriesService.listGuests = jest.fn().mockResolvedValue([{ id: 1 }])\n await expect(usersManager.listGuests(userTest)).resolves.toEqual([{ id: 1 }])\n const checkSpy = jest.spyOn(adminUsersManager, 'checkUser').mockImplementation(() => undefined)\n usersQueriesService.listGuests = jest.fn().mockResolvedValue({ id: 9 })\n await expect(usersManager.getGuest(userTest, 9)).resolves.toEqual({ id: 9 })\n expect(checkSpy).toHaveBeenCalled()\n\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([userTest.id, 100])\n usersQueriesService.clearWhiteListCaches = jest.fn()\n const createSpy = jest.spyOn(adminUsersManager, 'createUserOrGuest').mockResolvedValue({ id: 55 } as any)\n const dto1: CreateUserDto = { ...userTest, managers: [100], password: 'x' }\n const r = await usersManager.createGuest(userTest, dto1)\n expect(createSpy).toHaveBeenCalled()\n expect(usersQueriesService.clearWhiteListCaches).toHaveBeenCalledWith([userTest.id])\n expect(r).toEqual({ id: 55 })\n const args1 = (createSpy as jest.Mock).mock.calls[0][0]\n expect(args1.managers).toEqual(expect.arrayContaining([userTest.id]))\n ;(createSpy as jest.Mock).mockClear()\n const dto2: CreateUserDto = { ...userTest, managers: [userTest.id, 100], password: 'y' }\n await usersManager.createGuest(userTest, dto2)\n const args2 = (createSpy as jest.Mock).mock.calls[0][0]\n expect((args2.managers as number[]).filter((m: number) => m === userTest.id)).toHaveLength(1)\n\n await expect(usersManager.updateGuest(userTest, 9, {} as any)).rejects.toThrow('No changes to update')\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([1])\n await expect(usersManager.updateGuest(userTest, 9, { managers: [2] } as any)).rejects.toThrow('Guest must have at least one manager')\n usersQueriesService.isGuestManager = jest.fn().mockResolvedValue(false)\n await expect(usersManager.updateGuest(userTest, 9, { email: 'a' } as any)).rejects.toThrow('You are not allowed to do this action')\n usersQueriesService.isGuestManager = jest.fn().mockResolvedValue(true)\n jest.spyOn(adminUsersManager, 'updateUserOrGuest').mockResolvedValue({ managers: [{ id: 999 }] } as any)\n await expect(usersManager.updateGuest(userTest, 9, { email: 'a' } as any)).resolves.toBeNull()\n jest.spyOn(adminUsersManager, 'updateUserOrGuest').mockResolvedValue({ managers: [{ id: userTest.id }] } as any)\n await expect(usersManager.updateGuest(userTest, 9, { email: 'a' } as any)).resolves.toEqual({ managers: [{ id: userTest.id }] })\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([userTest.id, 77])\n usersQueriesService.isGuestManager = jest.fn().mockResolvedValue(true)\n jest.spyOn(adminUsersManager, 'updateUserOrGuest').mockResolvedValue({ managers: [{ id: userTest.id }, { id: 77 }] } as any)\n await expect(usersManager.updateGuest(userTest, 9, { managers: [userTest.id, 77] } as any)).resolves.toEqual({\n managers: [{ id: userTest.id }, { id: 77 }]\n })\n\n usersQueriesService.isGuestManager = jest.fn().mockResolvedValue(null)\n await expect(usersManager.deleteGuest(userTest, 9)).rejects.toThrow('You are not allowed to do this action')\n usersQueriesService.isGuestManager = jest.fn().mockResolvedValue({ id: 9, login: 'guest' })\n const delSpy = jest.spyOn(adminUsersManager, 'deleteUserOrGuest').mockResolvedValue(undefined)\n await expect(usersManager.deleteGuest(userTest, 9)).resolves.toBeUndefined()\n expect(delSpy).toHaveBeenCalledWith(9, 'guest', { deleteSpace: true, isGuest: true })\n\n usersQueriesService.searchUsersOrGroups = jest.fn().mockResolvedValue([{ id: 1 }])\n await expect(usersManager.searchMembers(userTest, { search: '' } as any)).resolves.toEqual([{ id: 1 }])\n\n usersQueriesService.getOnlineUsers = jest.fn().mockResolvedValue([{ id: 123 }])\n await expect(usersManager.getOnlineUsers([123])).resolves.toEqual([{ id: 123 }])\n expect(usersQueriesService.getOnlineUsers).toHaveBeenCalledWith([123])\n usersQueriesService.usersWhitelist = jest.fn().mockResolvedValue([10, 11])\n await expect(usersManager.usersWhitelist(userTest.id)).resolves.toEqual([10, 11])\n expect(usersQueriesService.usersWhitelist).toHaveBeenCalledWith(userTest.id)\n })\n})\n"],"names":["jest","mock","actual","requireActual","comparePassword","fn","__esModule","default","hash","Promise","resolve","generateAvatar","Readable","from","Buffer","describe","UsersManager","name","usersManager","adminUsersManager","adminUsersQueries","usersQueriesService","userTest","deleteUserDto","flush","r","setImmediate","okStream","d","s","truncated","errStream","msg","read","destroy","Error","mkReq","mimetype","stream","user","file","mockResolvedValue","ensurePaths","isPathExists","homePath","makePaths","notificationsManager","sendEmailNotification","undefined","beforeAll","module","Test","createTestingModule","providers","AdminUsersManager","AdminUsersQueries","UsersQueries","provide","NotificationsManager","useValue","AuthManager","DB_TOKEN_PROVIDER","Cache","compile","useLogger","get","UserModel","generateUserTest","deleteSpace","isGuest","afterEach","restoreAllMocks","afterAll","expect","deleteUserSpace","login","resolves","not","toThrow","it","toBeDefined","mockReturnValue","u1","findUser","toBeInstanceOf","password","toBeUndefined","u2","me1","me","toBeNull","id","rejects","fromUserId","authUser","clientId","impersonatedFromId","fromUser","me2","impersonated","toBe","filesPath","mockReturnValueOnce","p0","m0","getAvatar","fileName","svgMimeType","p1","m1","pngMimeType","checkUserExists","createUserOrGuest","clearWhiteListCaches","created","USER_ROLE","USER","email","mockImplementation","deleteUser","deleteUserOrGuest","linkUser","role","LINK","logUser","uLocked","isActive","passwordAttempts","errSpy","spyOn","updSpy1","mockRejectedValue","calls","some","payload","includes","toHaveBeenCalledWith","uBad","errSpy2","updSpy2","out","uGood","updSpy3","pathsSpy","out2","toHaveBeenCalled","compareUserPassword","updateUserOrGuest","updateLanguage","language","selectUserProperties","updatePassword","oldPassword","newPassword","bcrypt","updateNotification","notification","prevAccess1","Date","currentIp","currentAccess","updateAccesses","payload1","toMatchObject","lastIp","lastAccess","prevAccess2","USER_MAX_PASSWORD_ATTEMPTS","payload2","getInitials","p","m","imageModule","updateAvatar","t","mvSpy","filesUtilsModule","mvSpy2","expectedSrc","path","join","tmpPath","expectedDst","setOnlineStatus","browseRootGroups","root","browseGroups","parentGroup","members","length","groupFromName","group","browseGroupMembers","g2","toEqual","getGroupWithMembers","getGroup","createPersonalGroup","checkGroupNameExists","logSpy","updatePersonalGroup","mockResolvedValueOnce","type","MEMBER_TYPE","GROUP","PGROUP","updateGroup","isAdmin","usersWhitelist","addUsersToGroup","updateGroupMembers","add","groupRole","USER_GROUP_ROLE","MEMBER","updateUserFromPersonalGroup","MANAGER","spy","mockClear","removeUserFromGroup","remove","leavePersonalGroup","lSpy","objectContaining","stringMatching","canDeletePersonalGroup","deletePersonalGroup","wSpy","lgSpy","listGuests","checkSpy","getGuest","createSpy","dto1","managers","createGuest","args1","arrayContaining","dto2","args2","filter","toHaveLength","updateGuest","isGuestManager","deleteGuest","delSpy","searchUsersOrGroups","searchMembers","search","getOnlineUsers"],"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
|
});
|
|
@@ -167,10 +163,16 @@ let UsersQueries = class UsersQueries {
|
|
|
167
163
|
role: userRole
|
|
168
164
|
}
|
|
169
165
|
}).where((0, _drizzleorm.eq)(_usersschema.users.id, userId)), 1);
|
|
170
|
-
this.logger.verbose(
|
|
166
|
+
this.logger.verbose({
|
|
167
|
+
tag: this.updateUserOrGuest.name,
|
|
168
|
+
msg: `user (${userId}) was updated : ${JSON.stringify((0, _functions.anonymizePassword)(set))}`
|
|
169
|
+
});
|
|
171
170
|
return true;
|
|
172
171
|
} catch (e) {
|
|
173
|
-
this.logger.error(
|
|
172
|
+
this.logger.error({
|
|
173
|
+
tag: this.updateUserOrGuest.name,
|
|
174
|
+
msg: `user (${userId}) was not updated : ${JSON.stringify((0, _functions.anonymizePassword)(set))} : ${e}`
|
|
175
|
+
});
|
|
174
176
|
return false;
|
|
175
177
|
}
|
|
176
178
|
}
|
|
@@ -298,9 +300,15 @@ let UsersQueries = class UsersQueries {
|
|
|
298
300
|
if (Object.keys(set).length) {
|
|
299
301
|
try {
|
|
300
302
|
await this.db.update(_groupsschema.groups).set(set).where((0, _drizzleorm.eq)(_groupsschema.groups.id, groupId));
|
|
301
|
-
this.logger.log(
|
|
303
|
+
this.logger.log({
|
|
304
|
+
tag: this.updateGroup.name,
|
|
305
|
+
msg: `group (${groupId}) was updated : ${JSON.stringify(set)}`
|
|
306
|
+
});
|
|
302
307
|
} catch (e) {
|
|
303
|
-
this.logger.error(
|
|
308
|
+
this.logger.error({
|
|
309
|
+
tag: this.updateGroup.name,
|
|
310
|
+
msg: `group (${groupId}) was not updated : ${JSON.stringify(set)} : ${e}`
|
|
311
|
+
});
|
|
304
312
|
throw new Error('Group was not updated');
|
|
305
313
|
}
|
|
306
314
|
}
|
|
@@ -315,9 +323,15 @@ let UsersQueries = class UsersQueries {
|
|
|
315
323
|
})));
|
|
316
324
|
// clear cache
|
|
317
325
|
this.clearWhiteListCaches(members.add.map((m)=>m.id));
|
|
318
|
-
this.logger.log(
|
|
326
|
+
this.logger.log({
|
|
327
|
+
tag: this.updateGroupMembers.name,
|
|
328
|
+
msg: `users ${JSON.stringify(members.add.map((m)=>m.id))} was added to group (${groupId})`
|
|
329
|
+
});
|
|
319
330
|
} catch (e) {
|
|
320
|
-
this.logger.error(
|
|
331
|
+
this.logger.error({
|
|
332
|
+
tag: this.updateGroupMembers.name,
|
|
333
|
+
msg: `users ${JSON.stringify(members.add.map((m)=>m.id))} was not added to group (${groupId}) : ${e}`
|
|
334
|
+
});
|
|
321
335
|
throw new Error('Group members was not added');
|
|
322
336
|
}
|
|
323
337
|
}
|
|
@@ -326,9 +340,15 @@ let UsersQueries = class UsersQueries {
|
|
|
326
340
|
await this.db.delete(_usersgroupsschema.usersGroups).where((0, _drizzleorm.and)((0, _drizzleorm.eq)(_usersgroupsschema.usersGroups.groupId, groupId), (0, _drizzleorm.inArray)(_usersgroupsschema.usersGroups.userId, members.remove))).limit(members.remove.length);
|
|
327
341
|
// clear cache
|
|
328
342
|
this.clearWhiteListCaches(members.remove);
|
|
329
|
-
this.logger.log(
|
|
343
|
+
this.logger.log({
|
|
344
|
+
tag: this.updateGroupMembers.name,
|
|
345
|
+
msg: `users ${JSON.stringify(members.remove)} was removed from group (${groupId})`
|
|
346
|
+
});
|
|
330
347
|
} catch (e) {
|
|
331
|
-
this.logger.error(
|
|
348
|
+
this.logger.error({
|
|
349
|
+
tag: this.updateGroupMembers.name,
|
|
350
|
+
msg: `users ${JSON.stringify(members.remove)} was not removed from group (${groupId}) : ${e}`
|
|
351
|
+
});
|
|
332
352
|
throw new Error('Group members was not removed');
|
|
333
353
|
}
|
|
334
354
|
}
|
|
@@ -463,15 +483,27 @@ let UsersQueries = class UsersQueries {
|
|
|
463
483
|
]){
|
|
464
484
|
this.cache.keys(pattern).then((keys)=>{
|
|
465
485
|
if (!keys.length) return;
|
|
466
|
-
this.logger.verbose(
|
|
467
|
-
|
|
468
|
-
|
|
486
|
+
this.logger.verbose({
|
|
487
|
+
tag: this.clearWhiteListCaches.name,
|
|
488
|
+
msg: `${JSON.stringify(keys)}`
|
|
489
|
+
});
|
|
490
|
+
this.cache.mdel(keys).catch((e)=>this.logger.error({
|
|
491
|
+
tag: this.clearWhiteListCaches.name,
|
|
492
|
+
msg: `${e}`
|
|
493
|
+
}));
|
|
494
|
+
}).catch((e)=>this.logger.error({
|
|
495
|
+
tag: this.clearWhiteListCaches.name,
|
|
496
|
+
msg: `${e}`
|
|
497
|
+
}));
|
|
469
498
|
}
|
|
470
499
|
} else {
|
|
471
500
|
this.cache.mdel([
|
|
472
501
|
...userIds.map((id)=>this.cache.genSlugKey(this.constructor.name, this.usersWhitelist.name, id)),
|
|
473
502
|
...userIds.map((id)=>this.cache.genSlugKey(this.constructor.name, this.groupsWhitelist.name, id))
|
|
474
|
-
]).catch((e)=>this.logger.error(
|
|
503
|
+
]).catch((e)=>this.logger.error({
|
|
504
|
+
tag: this.clearWhiteListCaches.name,
|
|
505
|
+
msg: `${e}`
|
|
506
|
+
}));
|
|
475
507
|
}
|
|
476
508
|
}
|
|
477
509
|
async allUserIdsFromGroupsAndSubGroups(groupIds) {
|