@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,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
|
});
|
|
@@ -15,6 +11,7 @@ Object.defineProperty(exports, "WebDAVMethods", {
|
|
|
15
11
|
const _common = require("@nestjs/common");
|
|
16
12
|
const _fastify = require("fastify");
|
|
17
13
|
const _shared = require("../../../common/shared");
|
|
14
|
+
const _applicationsconstants = require("../../applications.constants");
|
|
18
15
|
const _fileerror = require("../../files/models/file-error");
|
|
19
16
|
const _filelockerror = require("../../files/models/file-lock-error");
|
|
20
17
|
const _fileslockmanagerservice = require("../../files/services/files-lock-manager.service");
|
|
@@ -54,7 +51,10 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
54
51
|
return this.handleError(req, res, e);
|
|
55
52
|
}
|
|
56
53
|
}
|
|
57
|
-
this.logger.warn(
|
|
54
|
+
this.logger.warn({
|
|
55
|
+
tag: this.headOrGet.name,
|
|
56
|
+
msg: `Not allowed on this resource : ${repository}`
|
|
57
|
+
});
|
|
58
58
|
return res.status(_common.HttpStatus.FORBIDDEN).send('Not allowed on this resource');
|
|
59
59
|
}
|
|
60
60
|
async lock(req, res) {
|
|
@@ -63,14 +63,20 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
63
63
|
if (isLockRefresh) {
|
|
64
64
|
// if the body has no content, the request must refresh the lock
|
|
65
65
|
if (!rExists) {
|
|
66
|
-
this.logger.warn(
|
|
66
|
+
this.logger.warn({
|
|
67
|
+
tag: this.lock.name,
|
|
68
|
+
msg: 'Lock refresh must specify an existing resource'
|
|
69
|
+
});
|
|
67
70
|
return res.status(_common.HttpStatus.BAD_REQUEST).send('Lock refresh must specify an existing resource');
|
|
68
71
|
}
|
|
69
72
|
return this.lockRefresh(req, res, req.space.dbFile.path);
|
|
70
73
|
}
|
|
71
74
|
if (!rExists) {
|
|
72
75
|
if (!(0, _permissions.haveSpaceEnvPermissions)(req.space, _spaces.SPACE_OPERATION.ADD)) {
|
|
73
|
-
this.logger.warn(
|
|
76
|
+
this.logger.warn({
|
|
77
|
+
tag: this.lock.name,
|
|
78
|
+
msg: `is not allowed to create on this space : *${req.space.alias}* (${req.space.id}) : ${req.space.url}`
|
|
79
|
+
});
|
|
74
80
|
return res.status(_common.HttpStatus.FORBIDDEN).send('You are not allowed to do this action');
|
|
75
81
|
}
|
|
76
82
|
if (!await (0, _files.isPathExists)((0, _files.dirName)(req.space.realPath))) {
|
|
@@ -105,12 +111,18 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
105
111
|
}
|
|
106
112
|
async unlock(req, res) {
|
|
107
113
|
if (!await (0, _files.isPathExists)(req.space.realPath)) {
|
|
108
|
-
this.logger.warn(
|
|
114
|
+
this.logger.warn({
|
|
115
|
+
tag: this.unlock.name,
|
|
116
|
+
msg: `Unable to unlock: ${req.dav.url} - resource does not exist`
|
|
117
|
+
});
|
|
109
118
|
return res.status(_common.HttpStatus.NOT_FOUND).send(req.dav.url);
|
|
110
119
|
}
|
|
111
120
|
const lock = await this.filesLockManager.isLockedWithToken(req.dav.lock.token, req.space.dbFile.path);
|
|
112
121
|
if (!lock) {
|
|
113
|
-
this.logger.warn(
|
|
122
|
+
this.logger.warn({
|
|
123
|
+
tag: this.unlock.name,
|
|
124
|
+
msg: `Lock token does not exist or not match URL : ${req.dav.lock.token}`
|
|
125
|
+
});
|
|
114
126
|
return (0, _webdav1.DAV_ERROR_RES)(_common.HttpStatus.CONFLICT, _webdav.PRECONDITION.LOCK_TOKEN_MISMATCH, res);
|
|
115
127
|
}
|
|
116
128
|
if (req.user.id !== lock.owner.id) {
|
|
@@ -181,7 +193,7 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
181
193
|
if (fP !== undefined) prop[`${_webdav.NS_PREFIX}:${p}`] = fP;
|
|
182
194
|
}
|
|
183
195
|
}
|
|
184
|
-
responses.push((0, _webdav1.PROP_STAT)(f.href, (0, _webdav1.PROP)(prop,
|
|
196
|
+
responses.push((0, _webdav1.PROP_STAT)(f.href, (0, _webdav1.PROP)(prop, _applicationsconstants.HTTP_VERSION, _common.HttpStatus.OK)));
|
|
185
197
|
}
|
|
186
198
|
const propfind = (0, _xml.xmlBuild)((0, _webdav1.MULTI_STATUS)(responses));
|
|
187
199
|
return res.type(_webdav.XML_CONTENT_TYPE).status(_common.HttpStatus.MULTI_STATUS).send(propfind);
|
|
@@ -231,7 +243,10 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
231
243
|
for (const action of Object.keys(req.dav.body[_webdav.PROPPATCH_PROP_UPDATE])){
|
|
232
244
|
if (Object.values(_webdav.PROPPATCH_METHOD).indexOf(action) === -1) {
|
|
233
245
|
const msg = `Unknown tag : expected ${_webdav.PROPPATCH_METHOD.SET} or ${_webdav.PROPPATCH_METHOD.REMOVE}`;
|
|
234
|
-
this.logger.debug(
|
|
246
|
+
this.logger.debug({
|
|
247
|
+
tag: this.proppatch.name,
|
|
248
|
+
msg: msg
|
|
249
|
+
});
|
|
235
250
|
return res.status(_common.HttpStatus.BAD_REQUEST).send(msg);
|
|
236
251
|
}
|
|
237
252
|
if (Array.isArray(req.dav.body[_webdav.PROPPATCH_PROP_UPDATE][action])) {
|
|
@@ -243,7 +258,10 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
243
258
|
}
|
|
244
259
|
if (Object.keys(req.dav.body[_webdav.PROPPATCH_PROP_UPDATE][action])[0] !== _webdav.PROPSTAT.PROP) {
|
|
245
260
|
const msg = `Unknown tag : expected ${_webdav.PROPSTAT.PROP}`;
|
|
246
|
-
this.logger.debug(
|
|
261
|
+
this.logger.debug({
|
|
262
|
+
tag: this.proppatch.name,
|
|
263
|
+
msg: msg
|
|
264
|
+
});
|
|
247
265
|
return res.status(_common.HttpStatus.BAD_REQUEST).send(msg);
|
|
248
266
|
}
|
|
249
267
|
if (!Array.isArray(req.dav.body[_webdav.PROPPATCH_PROP_UPDATE][action][_webdav.PROPSTAT.PROP])) {
|
|
@@ -255,12 +273,15 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
255
273
|
for (let [name, value] of Object.entries(prop)){
|
|
256
274
|
if (action === _webdav.PROPPATCH_METHOD.REMOVE) {
|
|
257
275
|
value = null;
|
|
258
|
-
this.logger.debug(
|
|
276
|
+
this.logger.debug({
|
|
277
|
+
tag: this.proppatch.name,
|
|
278
|
+
msg: `Proppatch remove method not handled : ${name} -> ${value}`
|
|
279
|
+
});
|
|
259
280
|
}
|
|
260
281
|
if (_webdav.PROPPATCH_SUPPORTED_PROPS.indexOf(name) === -1) {
|
|
261
282
|
req.dav.proppatch.errors.push((0, _webdav1.PROP)({
|
|
262
283
|
[`${_webdav.NS_PREFIX}:${name}`]: null
|
|
263
|
-
},
|
|
284
|
+
}, _applicationsconstants.HTTP_VERSION, _common.HttpStatus.FORBIDDEN, _webdav.STANDARD_PROPS.indexOf(name) > -1 ? _webdav.PRECONDITION.PROTECTED_PROPERTY : undefined));
|
|
264
285
|
continue;
|
|
265
286
|
}
|
|
266
287
|
req.dav.proppatch.props[name] = value;
|
|
@@ -272,7 +293,7 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
272
293
|
for (const name of Object.keys(req.dav.proppatch.props)){
|
|
273
294
|
req.dav.proppatch.errors.push((0, _webdav1.PROP)({
|
|
274
295
|
[`${_webdav.NS_PREFIX}:${name}`]: null
|
|
275
|
-
},
|
|
296
|
+
}, _applicationsconstants.HTTP_VERSION, _common.HttpStatus.FAILED_DEPENDENCY));
|
|
276
297
|
}
|
|
277
298
|
const proppatch = (0, _xml.xmlBuild)((0, _webdav1.MULTI_STATUS)((0, _webdav1.PROP_STAT)((0, _shared.encodeUrl)(req.dav.url), req.dav.proppatch.errors)));
|
|
278
299
|
return res.status(_common.HttpStatus.MULTI_STATUS).type(_webdav.XML_CONTENT_TYPE).send(proppatch);
|
|
@@ -285,7 +306,10 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
285
306
|
try {
|
|
286
307
|
await this.filesManager.touch(req.user, req.space, (0, _shared.currentTimeStamp)(new Date(value)), false);
|
|
287
308
|
} catch (e) {
|
|
288
|
-
this.logger.error(
|
|
309
|
+
this.logger.error({
|
|
310
|
+
tag: this.proppatch.name,
|
|
311
|
+
msg: `unable to modify mtime on ${req.dav.url} : ${e}`
|
|
312
|
+
});
|
|
289
313
|
states[name] = false;
|
|
290
314
|
atLeastOneError = true;
|
|
291
315
|
}
|
|
@@ -297,7 +321,7 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
297
321
|
for (const [name, state] of Object.entries(states)){
|
|
298
322
|
props.push((0, _webdav1.PROP)({
|
|
299
323
|
[`${_webdav.NS_PREFIX}:${name}`]: null
|
|
300
|
-
},
|
|
324
|
+
}, _applicationsconstants.HTTP_VERSION, state ? atLeastOneError ? _common.HttpStatus.FAILED_DEPENDENCY : _common.HttpStatus.OK : _common.HttpStatus.BAD_REQUEST));
|
|
301
325
|
}
|
|
302
326
|
const proppatch = (0, _xml.xmlBuild)((0, _webdav1.MULTI_STATUS)((0, _webdav1.PROP_STAT)((0, _shared.encodeUrl)(req.dav.url), props)));
|
|
303
327
|
return res.type(_webdav.XML_CONTENT_TYPE).status(_common.HttpStatus.MULTI_STATUS).send(proppatch);
|
|
@@ -316,7 +340,10 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
316
340
|
async copyMove(req, res) {
|
|
317
341
|
const dstSpace = await this.webDAVHandler.spaceEnv(req.user, req.dav.copyMove.destination);
|
|
318
342
|
if (!dstSpace) {
|
|
319
|
-
this.logger.warn(
|
|
343
|
+
this.logger.warn({
|
|
344
|
+
tag: this.copyMove.name,
|
|
345
|
+
msg: `Space not found for destination : ${req.dav.copyMove.destination}`
|
|
346
|
+
});
|
|
320
347
|
return res.status(_common.HttpStatus.NOT_FOUND).send(req.dav.copyMove.destination);
|
|
321
348
|
}
|
|
322
349
|
const dstExisted = await (0, _files.isPathExists)(dstSpace.realPath);
|
|
@@ -360,7 +387,10 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
360
387
|
}
|
|
361
388
|
// the path will be the same across conditions
|
|
362
389
|
if (!lastSpaceEnv) {
|
|
363
|
-
this.logger.warn(
|
|
390
|
+
this.logger.warn({
|
|
391
|
+
tag: this.evaluateIfHeaders.name,
|
|
392
|
+
msg: `If Header : path mismatch (${condition.path})`
|
|
393
|
+
});
|
|
364
394
|
return false;
|
|
365
395
|
}
|
|
366
396
|
} else {
|
|
@@ -409,30 +439,45 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
409
439
|
break;
|
|
410
440
|
}
|
|
411
441
|
if (!atLeastOneOk) {
|
|
412
|
-
this.logger.warn(
|
|
442
|
+
this.logger.warn({
|
|
443
|
+
tag: this.evaluateIfHeaders.name,
|
|
444
|
+
msg: `If header condition failed : ${errors.join(', ')}`
|
|
445
|
+
});
|
|
413
446
|
res.status(_common.HttpStatus.PRECONDITION_FAILED).send('If header condition failed');
|
|
414
447
|
}
|
|
415
448
|
return atLeastOneOk;
|
|
416
449
|
}
|
|
417
450
|
async lockRefresh(req, res, dbFilePath) {
|
|
418
451
|
if (req.dav?.ifHeaders?.length !== 1) {
|
|
419
|
-
this.logger.warn(
|
|
452
|
+
this.logger.warn({
|
|
453
|
+
tag: this.lockRefresh.name,
|
|
454
|
+
msg: 'Expected a lock token (only one lock may be refreshed at a time)'
|
|
455
|
+
});
|
|
420
456
|
return res.status(_common.HttpStatus.BAD_REQUEST).send('Expected a lock token (only one lock may be refreshed at a time)');
|
|
421
457
|
}
|
|
422
458
|
let token;
|
|
423
459
|
try {
|
|
424
460
|
token = (0, _ifheader.extractOneToken)(req.dav.ifHeaders);
|
|
425
461
|
} catch (e) {
|
|
426
|
-
this.logger.warn(
|
|
462
|
+
this.logger.warn({
|
|
463
|
+
tag: this.lockRefresh.name,
|
|
464
|
+
msg: `unable to extract token : ${JSON.stringify(req.dav.ifHeaders)} (${e})`
|
|
465
|
+
});
|
|
427
466
|
return res.status(_common.HttpStatus.BAD_REQUEST).send('Unable to extract token');
|
|
428
467
|
}
|
|
429
468
|
const lock = await this.filesLockManager.isLockedWithToken(token, dbFilePath);
|
|
430
469
|
if (!lock) {
|
|
431
|
-
this.logger.warn(
|
|
470
|
+
this.logger.warn({
|
|
471
|
+
tag: this.lockRefresh.name,
|
|
472
|
+
msg: `Lock token does not exist or not match URL : ${token}`
|
|
473
|
+
});
|
|
432
474
|
return (0, _webdav1.DAV_ERROR_RES)(_common.HttpStatus.PRECONDITION_FAILED, _webdav.PRECONDITION.LOCK_TOKEN_MISMATCH, res);
|
|
433
475
|
}
|
|
434
476
|
if (lock.owner.id !== req.user.id) {
|
|
435
|
-
this.logger.warn(
|
|
477
|
+
this.logger.warn({
|
|
478
|
+
tag: this.lockRefresh.name,
|
|
479
|
+
msg: `Lock token does not match owner : ${lock.owner.login} != ${req.user.login}`
|
|
480
|
+
});
|
|
436
481
|
return res.status(_common.HttpStatus.FORBIDDEN).send('Lock token does not match owner');
|
|
437
482
|
}
|
|
438
483
|
await this.filesLockManager.refreshLockTimeout(lock, req.dav.lock.timeout);
|
|
@@ -442,7 +487,10 @@ let WebDAVMethods = class WebDAVMethods {
|
|
|
442
487
|
return res.type(_webdav.XML_CONTENT_TYPE).status(_common.HttpStatus.OK).send((0, _xml.xmlBuild)(lockProp));
|
|
443
488
|
}
|
|
444
489
|
handleError(req, res, e, toUrl) {
|
|
445
|
-
this.logger.error(
|
|
490
|
+
this.logger.error({
|
|
491
|
+
tag: this.handleError.name,
|
|
492
|
+
msg: `Unable to ${req.method} ${req.dav.url}${toUrl ? ` -> ${toUrl}` : ''} : ${e.message}`
|
|
493
|
+
});
|
|
446
494
|
// Remove the last part to avoid exposing the path
|
|
447
495
|
const errorMsg = e.message.split(',')[0];
|
|
448
496
|
if (e instanceof _filelockerror.LockConflict) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/webdav/services/webdav-methods.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpException, HttpStatus, Injectable, Logger, StreamableFile } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { currentTimeStamp, encodeUrl } from '../../../common/shared'\nimport { FileLock, FileLockOptions } from '../../files/interfaces/file-lock.interface'\nimport { FileError } from '../../files/models/file-error'\nimport { LockConflict } from '../../files/models/file-lock-error'\nimport { FilesLockManager } from '../../files/services/files-lock-manager.service'\nimport { FilesManager } from '../../files/services/files-manager.service'\nimport { dirName, fileName, genEtag, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_OPERATION, SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { dbFileFromSpace } from '../../spaces/utils/paths'\nimport { haveSpaceEnvPermissions } from '../../spaces/utils/permissions'\nimport {\n DEPTH,\n HEADER,\n LOCK_DISCOVERY_PROP,\n NS_PREFIX,\n OPTIONS_HEADERS,\n PRECONDITION,\n PROPPATCH_METHOD,\n PROPPATCH_MODIFIED_PROPS,\n PROPPATCH_PROP_UPDATE,\n PROPPATCH_SUPPORTED_PROPS,\n PROPSTAT,\n STANDARD_PROPS,\n WEBDAV_APP_LOCK,\n XML_CONTENT_TYPE\n} from '../constants/webdav'\nimport { IfHeaderDecorator } from '../decorators/if-header.decorator'\nimport { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { extractAllTokens, extractOneToken } from '../utils/if-header'\nimport { DAV_ERROR_RES, LOCK_DISCOVERY, LOCK_PROP, MULTI_STATUS, PROP, PROP_STAT } from '../utils/webdav'\nimport { xmlBuild } from '../utils/xml'\nimport { WebDAVSpaces } from './webdav-spaces.service'\n\n@Injectable()\nexport class WebDAVMethods {\n private readonly logger = new Logger(WebDAVMethods.name)\n\n constructor(\n private readonly webDAVHandler: WebDAVSpaces,\n private readonly filesManager: FilesManager,\n private readonly filesLockManager: FilesLockManager\n ) {}\n\n async headOrGet(req: FastifyDAVRequest, res: FastifyReply, repository: string): Promise<StreamableFile> {\n if (repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if ((await isPathExists(req.space.realPath)) && (await isPathIsDir(req.space.realPath))) {\n // Directory case\n return res\n .header('DAV', OPTIONS_HEADERS.DAV)\n .header('Content-Type', 'httpd/unix-directory')\n .header('Content-Length', '0')\n .status(HttpStatus.OK)\n .send()\n }\n const sendFile = this.filesManager.sendFileFromSpace(req.space)\n try {\n await sendFile.checks()\n return await sendFile.stream(req, res)\n } catch (e) {\n return this.handleError(req, res, e)\n }\n }\n this.logger.warn(`Not allowed on this resource : ${repository}`)\n return res.status(HttpStatus.FORBIDDEN).send('Not allowed on this resource')\n }\n\n @IfHeaderDecorator()\n async lock(req: FastifyDAVRequest, res: FastifyReply) {\n const isLockRefresh = !req.dav.body\n const rExists = await isPathExists(req.space.realPath)\n\n if (isLockRefresh) {\n // if the body has no content, the request must refresh the lock\n if (!rExists) {\n this.logger.warn('Lock refresh must specify an existing resource')\n return res.status(HttpStatus.BAD_REQUEST).send('Lock refresh must specify an existing resource')\n }\n return this.lockRefresh(req, res, req.space.dbFile.path)\n }\n if (!rExists) {\n if (!haveSpaceEnvPermissions(req.space, SPACE_OPERATION.ADD)) {\n this.logger.warn(`is not allowed to create on this space : *${req.space.alias}* (${req.space.id}) : ${req.space.url}`)\n return res.status(HttpStatus.FORBIDDEN).send('You are not allowed to do this action')\n }\n if (!(await isPathExists(dirName(req.space.realPath)))) {\n return res.status(HttpStatus.CONFLICT).send('Parent must exists')\n }\n }\n\n const lockOptions: FileLockOptions = {\n lockRoot: req.dav.url,\n lockToken: this.filesLockManager.genDAVToken(),\n lockScope: req.dav.lock.lockscope,\n lockInfo: req.dav.lock?.owner\n }\n\n const [ok, fileLock] = await this.filesLockManager.create(\n req.user,\n req.space.dbFile,\n WEBDAV_APP_LOCK,\n req.dav.depth,\n lockOptions,\n req.dav.lock.timeout\n )\n if (ok) {\n // Locking unmapped URLs: must create an empty resource (that is not a collection)\n if (!rExists) {\n // checkLocks set to false because the conflicts are already checked in the `filesLockManager.create` method\n await this.filesManager.mkFile(req.user, req.space, false, false, false)\n }\n const lockProp = LOCK_PROP([fileLock])\n return res\n .header(HEADER.LOCK_TOKEN, `<${lockOptions.lockToken}>`)\n .type(XML_CONTENT_TYPE)\n .status(rExists ? HttpStatus.OK : HttpStatus.CREATED)\n .send(xmlBuild(lockProp))\n }\n if (fileLock) {\n const lockProp = LOCK_PROP([fileLock])\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.LOCKED).send(xmlBuild(lockProp))\n }\n return DAV_ERROR_RES(HttpStatus.LOCKED, PRECONDITION.LOCK_CONFLICT, res, fileLock.options?.lockRoot || fileLock.dbFilePath)\n }\n\n @IfHeaderDecorator()\n async unlock(req: FastifyDAVRequest, res: FastifyReply) {\n if (!(await isPathExists(req.space.realPath))) {\n this.logger.warn(`Unable to unlock: ${req.dav.url} - resource does not exist`)\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n\n const lock = await this.filesLockManager.isLockedWithToken(req.dav.lock.token, req.space.dbFile.path)\n if (!lock) {\n this.logger.warn(`Lock token does not exist or not match URL : ${req.dav.lock.token}`)\n return DAV_ERROR_RES(HttpStatus.CONFLICT, PRECONDITION.LOCK_TOKEN_MISMATCH, res)\n }\n if (req.user.id !== lock.owner.id) {\n return res.status(HttpStatus.FORBIDDEN).send('Token was created by another user')\n }\n\n await this.filesLockManager.removeLock(lock.key)\n return res.status(HttpStatus.NO_CONTENT).send()\n }\n\n @IfHeaderDecorator()\n async propfind(req: FastifyDAVRequest, res: FastifyReply, repository: string): Promise<string> {\n if (repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if (!(await isPathExists(req.space.realPath))) {\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n }\n\n const responses: any[] = []\n let requestedProps: string[]\n let locks: Record<string, FileLock> = {}\n\n if (req.dav.propfindMode === PROPSTAT.PROP) {\n // ignores all unknown properties (non-RFC compliant but avoids generating too much content, faster)\n requestedProps = Object.keys(req.dav.body.propfind.prop).filter((prop: string) => STANDARD_PROPS.indexOf(prop) > -1)\n } else {\n requestedProps = STANDARD_PROPS\n }\n\n // Searches all child locks (only for real files) & ignores /webdav/shares endpoint (special case)\n if (req.dav.propfindMode !== PROPSTAT.PROPNAME && repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if (req.dav.depth === DEPTH.RESOURCE) {\n // match depth '0'\n locks = await this.filesLockManager.browseLocks(req.space.dbFile)\n } else {\n // match depth '1' or 'infinity'\n locks = await this.filesLockManager.browseParentChildLocks(req.space.dbFile)\n }\n }\n\n for await (const f of this.webDAVHandler.propfind(req, repository)) {\n let prop: any\n if (req.dav.propfindMode === PROPSTAT.PROPNAME) {\n prop = { ...Object.fromEntries(requestedProps.map((x) => [`${NS_PREFIX}:${x}`, ''])) }\n } else {\n prop = {}\n for (const p of requestedProps) {\n let fP: any\n if (p === LOCK_DISCOVERY_PROP) {\n let lockDiscovery: any[] = null\n if (repository === SPACE_REPOSITORY.FILES) {\n if (f.name in locks) {\n lockDiscovery = LOCK_DISCOVERY([locks[f.name]])\n } else {\n // The lock name may correspond to the original file at the space root.\n const fName = fileName(req.space.dbFile.path)\n if (fName in locks) {\n lockDiscovery = LOCK_DISCOVERY([locks[fName]])\n }\n }\n }\n fP = lockDiscovery\n } else {\n fP = f[p]\n }\n if (fP !== undefined) prop[`${NS_PREFIX}:${p}`] = fP\n }\n }\n responses.push(PROP_STAT(f.href, PROP(prop, req.dav.httpVersion, HttpStatus.OK)))\n }\n const propfind = xmlBuild(MULTI_STATUS(responses))\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.MULTI_STATUS).send(propfind)\n }\n\n @IfHeaderDecorator()\n async put(req: FastifyDAVRequest, res: FastifyReply): Promise<FastifyReply> {\n let rExists: boolean\n try {\n rExists = await this.filesManager.saveStream(req.user, req.space, req, {\n dav: {\n depth: req.dav.depth,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n }\n })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res\n .header('etag', genEtag(null, req.space.realPath))\n .status(rExists ? HttpStatus.NO_CONTENT : HttpStatus.CREATED)\n .send()\n }\n\n @IfHeaderDecorator()\n async delete(req: FastifyDAVRequest, res: FastifyReply) {\n try {\n await this.filesManager.delete(req.user, req.space, { lockTokens: extractAllTokens(req.dav.ifHeaders) })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res.status(HttpStatus.NO_CONTENT).send()\n }\n\n @IfHeaderDecorator()\n async proppatch(req: FastifyDAVRequest, res: FastifyReply) {\n /* only support 'time modifications' */\n if (!(await isPathExists(req.space.realPath))) {\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n\n // check locks\n try {\n await this.filesLockManager.checkConflicts(req.space.dbFile, req.dav.depth, {\n userId: req.user.id,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n\n // evaluate props and return multistatus if errors\n req.dav.proppatch = { props: {}, errors: [] }\n for (const action of Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE])) {\n if (Object.values(PROPPATCH_METHOD).indexOf(action) === -1) {\n const msg = `Unknown tag : expected ${PROPPATCH_METHOD.SET} or ${PROPPATCH_METHOD.REMOVE}`\n this.logger.debug(msg)\n return res.status(HttpStatus.BAD_REQUEST).send(msg)\n }\n\n if (Array.isArray(req.dav.body[PROPPATCH_PROP_UPDATE][action])) {\n if (Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE][action][0])[0] === PROPSTAT.PROP) {\n req.dav.body[PROPPATCH_PROP_UPDATE][action] = {\n [PROPSTAT.PROP]: req.dav.body[PROPPATCH_PROP_UPDATE][action].map((e: any) => e[PROPSTAT.PROP])\n }\n }\n }\n\n if (Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE][action])[0] !== PROPSTAT.PROP) {\n const msg = `Unknown tag : expected ${PROPSTAT.PROP}`\n this.logger.debug(msg)\n return res.status(HttpStatus.BAD_REQUEST).send(msg)\n }\n\n if (!Array.isArray(req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP])) {\n req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP] = [req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP]]\n }\n\n for (const prop of req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP] as Record<string, string>[]) {\n for (let [name, value] of Object.entries(prop)) {\n if (action === PROPPATCH_METHOD.REMOVE) {\n value = null\n this.logger.debug(`Proppatch remove method not handled : ${name} -> ${value}`)\n }\n if (PROPPATCH_SUPPORTED_PROPS.indexOf(name) === -1) {\n req.dav.proppatch.errors.push(\n PROP(\n { [`${NS_PREFIX}:${name}`]: null },\n req.dav.httpVersion,\n HttpStatus.FORBIDDEN,\n STANDARD_PROPS.indexOf(name) > -1 ? PRECONDITION.PROTECTED_PROPERTY : undefined\n )\n )\n continue\n }\n req.dav.proppatch.props[name] = value\n }\n }\n }\n\n if (req.dav.proppatch.errors.length) {\n // convert all passed props to failed dependency\n for (const name of Object.keys(req.dav.proppatch.props)) {\n req.dav.proppatch.errors.push(PROP({ [`${NS_PREFIX}:${name}`]: null }, req.dav.httpVersion, HttpStatus.FAILED_DEPENDENCY))\n }\n const proppatch = xmlBuild(MULTI_STATUS(PROP_STAT(encodeUrl(req.dav.url), req.dav.proppatch.errors)))\n return res.status(HttpStatus.MULTI_STATUS).type(XML_CONTENT_TYPE).send(proppatch)\n }\n\n // apply modifications\n let atLeastOneError = false\n const states: Record<string, boolean> = {}\n for (const [name, value] of Object.entries(req.dav.proppatch.props)) {\n if (PROPPATCH_MODIFIED_PROPS.indexOf(name) > -1) {\n try {\n await this.filesManager.touch(req.user, req.space, currentTimeStamp(new Date(value)), false)\n } catch (e) {\n this.logger.error(`${this.proppatch.name} - unable to modify mtime on ${req.dav.url} : ${e}`)\n states[name] = false\n atLeastOneError = true\n }\n }\n // hook: we let the known Win32* properties pass to return a consistent result\n states[name] = true\n }\n\n const props = []\n for (const [name, state] of Object.entries(states)) {\n props.push(\n PROP(\n { [`${NS_PREFIX}:${name}`]: null },\n req.dav.httpVersion,\n state ? (atLeastOneError ? HttpStatus.FAILED_DEPENDENCY : HttpStatus.OK) : HttpStatus.BAD_REQUEST\n )\n )\n }\n const proppatch = xmlBuild(MULTI_STATUS(PROP_STAT(encodeUrl(req.dav.url), props)))\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.MULTI_STATUS).send(proppatch)\n }\n\n @IfHeaderDecorator()\n async mkcol(req: FastifyDAVRequest, res: FastifyReply) {\n try {\n await this.filesManager.mkDir(req.user, req.space, false, { depth: req.dav.depth, lockTokens: extractAllTokens(req.dav.ifHeaders) })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res.status(HttpStatus.CREATED).send()\n }\n\n @IfHeaderDecorator()\n async copyMove(req: FastifyDAVRequest, res: FastifyReply) {\n const dstSpace: SpaceEnv = await this.webDAVHandler.spaceEnv(req.user, req.dav.copyMove.destination)\n if (!dstSpace) {\n this.logger.warn(`Space not found for destination : ${req.dav.copyMove.destination}`)\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.copyMove.destination)\n }\n const dstExisted = await isPathExists(dstSpace.realPath)\n // We must evaluate the if-headers on the destination\n const fakeDstReq = {\n dav: { ...req.dav, url: req.dav.copyMove.destination },\n user: req.user,\n space: dstSpace\n } as FastifyDAVRequest\n if (!(await this.evaluateIfHeaders(fakeDstReq, res))) {\n // if there is an error, the response is generated inside the `evaluateIfHeaders` function\n return\n }\n try {\n await this.filesManager.copyMove(req.user, req.space, dstSpace, req.dav.copyMove.isMove, req.dav.copyMove.overwrite, false, {\n depth: req.dav.depth,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n })\n } catch (e) {\n return this.handleError(req, res, e, dstSpace.url)\n }\n return res.status(dstExisted ? HttpStatus.NO_CONTENT : HttpStatus.CREATED).send()\n }\n\n protected async evaluateIfHeaders(req: FastifyDAVRequest, res: FastifyReply): Promise<boolean> {\n if (!req.dav.ifHeaders) return true\n const errors: string[] = []\n let lastPath = null\n let lastSpaceEnv: SpaceEnv\n let lastRPath = undefined\n let lastEtag = undefined // for now, we only generate one etag type (weak)\n let atLeastOneOk = false\n\n for (const condition of req.dav.ifHeaders) {\n if (condition.path) {\n if (condition.path !== lastPath) {\n lastPath = condition.path\n lastSpaceEnv = await this.webDAVHandler.spaceEnv(req.user, lastPath)\n }\n // the path will be the same across conditions\n if (!lastSpaceEnv) {\n this.logger.warn(`If Header : path mismatch (${condition.path})`)\n return false\n }\n } else {\n lastPath = req.dav.url\n lastSpaceEnv = req.space\n }\n\n if (condition.haveLock) {\n try {\n const dbFile = dbFileFromSpace(req.user.id, lastSpaceEnv)\n const match = !!(await this.filesLockManager.getLocksByPath(dbFile)).length\n if (condition.haveLock.mustMatch !== match) {\n errors.push(`have lock condition mismatch (${condition.haveLock.mustMatch} != ${match})`)\n continue\n }\n } catch (e) {\n errors.push(`have lock condition mismatch : ${e.message}`)\n continue\n }\n }\n\n if (condition.token) {\n const token = await this.filesLockManager.getLockByToken(condition.token.value)\n const match = token && lastPath.startsWith(token.options?.lockRoot)\n if (condition.token.mustMatch !== match) {\n if (!token) {\n errors.push(`lock token not found`)\n } else {\n errors.push(`lock token url mismatch (${lastPath} is not a child of ${token.options?.lockRoot})`)\n }\n continue\n }\n }\n\n if (condition.etag) {\n if (lastEtag === undefined) {\n if (lastRPath === undefined) {\n lastRPath = (await isPathExists(req.space.realPath)) ? req.space.realPath : null\n }\n lastEtag = lastRPath ? genEtag(null, lastRPath) : null\n }\n const match = lastEtag === condition.etag.value\n if (condition.etag.mustMatch !== match) {\n errors.push(`etag mismatch (${condition.etag.value} != ${lastEtag})`)\n continue\n }\n }\n\n atLeastOneOk = true\n break\n }\n\n if (!atLeastOneOk) {\n this.logger.warn(`If header condition failed : ${errors.join(', ')}`)\n res.status(HttpStatus.PRECONDITION_FAILED).send('If header condition failed')\n }\n return atLeastOneOk\n }\n\n private async lockRefresh(req: FastifyDAVRequest, res: FastifyReply, dbFilePath: string) {\n if (req.dav?.ifHeaders?.length !== 1) {\n this.logger.warn('Expected a lock token (only one lock may be refreshed at a time)')\n return res.status(HttpStatus.BAD_REQUEST).send('Expected a lock token (only one lock may be refreshed at a time)')\n }\n\n let token: string\n try {\n token = extractOneToken(req.dav.ifHeaders)\n } catch (e) {\n this.logger.warn(`${this.lockRefresh.name} - unable to extract token : ${JSON.stringify(req.dav.ifHeaders)} (${e})`)\n return res.status(HttpStatus.BAD_REQUEST).send('Unable to extract token')\n }\n\n const lock = await this.filesLockManager.isLockedWithToken(token, dbFilePath)\n if (!lock) {\n this.logger.warn(`Lock token does not exist or not match URL : ${token}`)\n return DAV_ERROR_RES(HttpStatus.PRECONDITION_FAILED, PRECONDITION.LOCK_TOKEN_MISMATCH, res)\n }\n if (lock.owner.id !== req.user.id) {\n this.logger.warn(`Lock token does not match owner : ${lock.owner.login} != ${req.user.login}`)\n return res.status(HttpStatus.FORBIDDEN).send('Lock token does not match owner')\n }\n\n await this.filesLockManager.refreshLockTimeout(lock, req.dav.lock.timeout)\n const lockProp = LOCK_PROP([lock])\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.OK).send(xmlBuild(lockProp))\n }\n\n private handleError(req: FastifyDAVRequest, res: FastifyReply, e: any, toUrl?: string) {\n this.logger.error(`Unable to ${req.method} ${req.dav.url}${toUrl ? ` -> ${toUrl}` : ''} : ${e.message}`)\n // Remove the last part to avoid exposing the path\n const errorMsg = e.message.split(',')[0]\n if (e instanceof LockConflict) {\n return DAV_ERROR_RES(HttpStatus.LOCKED, PRECONDITION.LOCK_CONFLICT, res, e.lock.options?.lockRoot || e.lock.dbFilePath)\n } else if (e instanceof FileError) {\n return res.status(e.httpCode).send(errorMsg)\n }\n throw new HttpException(errorMsg, HttpStatus.INTERNAL_SERVER_ERROR)\n }\n}\n"],"names":["WebDAVMethods","headOrGet","req","res","repository","SPACE_REPOSITORY","FILES","space","inSharesList","isPathExists","realPath","isPathIsDir","header","OPTIONS_HEADERS","DAV","status","HttpStatus","OK","send","sendFile","filesManager","sendFileFromSpace","checks","stream","e","handleError","logger","warn","FORBIDDEN","lock","isLockRefresh","dav","body","rExists","BAD_REQUEST","lockRefresh","dbFile","path","haveSpaceEnvPermissions","SPACE_OPERATION","ADD","alias","id","url","dirName","CONFLICT","lockOptions","lockRoot","lockToken","filesLockManager","genDAVToken","lockScope","lockscope","lockInfo","owner","ok","fileLock","create","user","WEBDAV_APP_LOCK","depth","timeout","mkFile","lockProp","LOCK_PROP","HEADER","LOCK_TOKEN","type","XML_CONTENT_TYPE","CREATED","xmlBuild","LOCKED","DAV_ERROR_RES","PRECONDITION","LOCK_CONFLICT","options","dbFilePath","unlock","NOT_FOUND","isLockedWithToken","token","LOCK_TOKEN_MISMATCH","removeLock","key","NO_CONTENT","propfind","responses","requestedProps","locks","propfindMode","PROPSTAT","PROP","Object","keys","prop","filter","STANDARD_PROPS","indexOf","PROPNAME","DEPTH","RESOURCE","browseLocks","browseParentChildLocks","f","webDAVHandler","fromEntries","map","x","NS_PREFIX","p","fP","LOCK_DISCOVERY_PROP","lockDiscovery","name","LOCK_DISCOVERY","fName","fileName","undefined","push","PROP_STAT","href","httpVersion","MULTI_STATUS","put","saveStream","lockTokens","extractAllTokens","ifHeaders","genEtag","delete","proppatch","checkConflicts","userId","props","errors","action","PROPPATCH_PROP_UPDATE","values","PROPPATCH_METHOD","msg","SET","REMOVE","debug","Array","isArray","value","entries","PROPPATCH_SUPPORTED_PROPS","PROTECTED_PROPERTY","length","FAILED_DEPENDENCY","encodeUrl","atLeastOneError","states","PROPPATCH_MODIFIED_PROPS","touch","currentTimeStamp","Date","error","state","mkcol","mkDir","copyMove","dstSpace","spaceEnv","destination","dstExisted","fakeDstReq","evaluateIfHeaders","isMove","overwrite","lastPath","lastSpaceEnv","lastRPath","lastEtag","atLeastOneOk","condition","haveLock","dbFileFromSpace","match","getLocksByPath","mustMatch","message","getLockByToken","startsWith","etag","join","PRECONDITION_FAILED","extractOneToken","JSON","stringify","login","refreshLockTimeout","toUrl","method","errorMsg","split","LockConflict","FileError","httpCode","HttpException","INTERNAL_SERVER_ERROR","Logger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/services/webdav-methods.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger, StreamableFile } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { currentTimeStamp, encodeUrl } from '../../../common/shared'\nimport { HTTP_VERSION } from '../../applications.constants'\nimport { FileLock, FileLockOptions } from '../../files/interfaces/file-lock.interface'\nimport { FileError } from '../../files/models/file-error'\nimport { LockConflict } from '../../files/models/file-lock-error'\nimport { FilesLockManager } from '../../files/services/files-lock-manager.service'\nimport { FilesManager } from '../../files/services/files-manager.service'\nimport { dirName, fileName, genEtag, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_OPERATION, SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { dbFileFromSpace } from '../../spaces/utils/paths'\nimport { haveSpaceEnvPermissions } from '../../spaces/utils/permissions'\nimport {\n DEPTH,\n HEADER,\n LOCK_DISCOVERY_PROP,\n NS_PREFIX,\n OPTIONS_HEADERS,\n PRECONDITION,\n PROPPATCH_METHOD,\n PROPPATCH_MODIFIED_PROPS,\n PROPPATCH_PROP_UPDATE,\n PROPPATCH_SUPPORTED_PROPS,\n PROPSTAT,\n STANDARD_PROPS,\n WEBDAV_APP_LOCK,\n XML_CONTENT_TYPE\n} from '../constants/webdav'\nimport { IfHeaderDecorator } from '../decorators/if-header.decorator'\nimport { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { extractAllTokens, extractOneToken } from '../utils/if-header'\nimport { DAV_ERROR_RES, LOCK_DISCOVERY, LOCK_PROP, MULTI_STATUS, PROP, PROP_STAT } from '../utils/webdav'\nimport { xmlBuild } from '../utils/xml'\nimport { WebDAVSpaces } from './webdav-spaces.service'\n\n@Injectable()\nexport class WebDAVMethods {\n private readonly logger = new Logger(WebDAVMethods.name)\n\n constructor(\n private readonly webDAVHandler: WebDAVSpaces,\n private readonly filesManager: FilesManager,\n private readonly filesLockManager: FilesLockManager\n ) {}\n\n async headOrGet(req: FastifyDAVRequest, res: FastifyReply, repository: string): Promise<StreamableFile> {\n if (repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if ((await isPathExists(req.space.realPath)) && (await isPathIsDir(req.space.realPath))) {\n // Directory case\n return res\n .header('DAV', OPTIONS_HEADERS.DAV)\n .header('Content-Type', 'httpd/unix-directory')\n .header('Content-Length', '0')\n .status(HttpStatus.OK)\n .send()\n }\n const sendFile = this.filesManager.sendFileFromSpace(req.space)\n try {\n await sendFile.checks()\n return await sendFile.stream(req, res)\n } catch (e) {\n return this.handleError(req, res, e)\n }\n }\n this.logger.warn({ tag: this.headOrGet.name, msg: `Not allowed on this resource : ${repository}` })\n return res.status(HttpStatus.FORBIDDEN).send('Not allowed on this resource')\n }\n\n @IfHeaderDecorator()\n async lock(req: FastifyDAVRequest, res: FastifyReply) {\n const isLockRefresh = !req.dav.body\n const rExists = await isPathExists(req.space.realPath)\n\n if (isLockRefresh) {\n // if the body has no content, the request must refresh the lock\n if (!rExists) {\n this.logger.warn({ tag: this.lock.name, msg: 'Lock refresh must specify an existing resource' })\n return res.status(HttpStatus.BAD_REQUEST).send('Lock refresh must specify an existing resource')\n }\n return this.lockRefresh(req, res, req.space.dbFile.path)\n }\n if (!rExists) {\n if (!haveSpaceEnvPermissions(req.space, SPACE_OPERATION.ADD)) {\n this.logger.warn({\n tag: this.lock.name,\n msg: `is not allowed to create on this space : *${req.space.alias}* (${req.space.id}) : ${req.space.url}`\n })\n return res.status(HttpStatus.FORBIDDEN).send('You are not allowed to do this action')\n }\n if (!(await isPathExists(dirName(req.space.realPath)))) {\n return res.status(HttpStatus.CONFLICT).send('Parent must exists')\n }\n }\n\n const lockOptions: FileLockOptions = {\n lockRoot: req.dav.url,\n lockToken: this.filesLockManager.genDAVToken(),\n lockScope: req.dav.lock.lockscope,\n lockInfo: req.dav.lock?.owner\n }\n\n const [ok, fileLock] = await this.filesLockManager.create(\n req.user,\n req.space.dbFile,\n WEBDAV_APP_LOCK,\n req.dav.depth,\n lockOptions,\n req.dav.lock.timeout\n )\n if (ok) {\n // Locking unmapped URLs: must create an empty resource (that is not a collection)\n if (!rExists) {\n // checkLocks set to false because the conflicts are already checked in the `filesLockManager.create` method\n await this.filesManager.mkFile(req.user, req.space, false, false, false)\n }\n const lockProp = LOCK_PROP([fileLock])\n return res\n .header(HEADER.LOCK_TOKEN, `<${lockOptions.lockToken}>`)\n .type(XML_CONTENT_TYPE)\n .status(rExists ? HttpStatus.OK : HttpStatus.CREATED)\n .send(xmlBuild(lockProp))\n }\n if (fileLock) {\n const lockProp = LOCK_PROP([fileLock])\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.LOCKED).send(xmlBuild(lockProp))\n }\n return DAV_ERROR_RES(HttpStatus.LOCKED, PRECONDITION.LOCK_CONFLICT, res, fileLock.options?.lockRoot || fileLock.dbFilePath)\n }\n\n @IfHeaderDecorator()\n async unlock(req: FastifyDAVRequest, res: FastifyReply) {\n if (!(await isPathExists(req.space.realPath))) {\n this.logger.warn({ tag: this.unlock.name, msg: `Unable to unlock: ${req.dav.url} - resource does not exist` })\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n\n const lock = await this.filesLockManager.isLockedWithToken(req.dav.lock.token, req.space.dbFile.path)\n if (!lock) {\n this.logger.warn({ tag: this.unlock.name, msg: `Lock token does not exist or not match URL : ${req.dav.lock.token}` })\n return DAV_ERROR_RES(HttpStatus.CONFLICT, PRECONDITION.LOCK_TOKEN_MISMATCH, res)\n }\n if (req.user.id !== lock.owner.id) {\n return res.status(HttpStatus.FORBIDDEN).send('Token was created by another user')\n }\n\n await this.filesLockManager.removeLock(lock.key)\n return res.status(HttpStatus.NO_CONTENT).send()\n }\n\n @IfHeaderDecorator()\n async propfind(req: FastifyDAVRequest, res: FastifyReply, repository: string): Promise<string> {\n if (repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if (!(await isPathExists(req.space.realPath))) {\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n }\n\n const responses: any[] = []\n let requestedProps: string[]\n let locks: Record<string, FileLock> = {}\n\n if (req.dav.propfindMode === PROPSTAT.PROP) {\n // ignores all unknown properties (non-RFC compliant but avoids generating too much content, faster)\n requestedProps = Object.keys(req.dav.body.propfind.prop).filter((prop: string) => STANDARD_PROPS.indexOf(prop) > -1)\n } else {\n requestedProps = STANDARD_PROPS\n }\n\n // Searches all child locks (only for real files) & ignores /webdav/shares endpoint (special case)\n if (req.dav.propfindMode !== PROPSTAT.PROPNAME && repository === SPACE_REPOSITORY.FILES && !req.space.inSharesList) {\n if (req.dav.depth === DEPTH.RESOURCE) {\n // match depth '0'\n locks = await this.filesLockManager.browseLocks(req.space.dbFile)\n } else {\n // match depth '1' or 'infinity'\n locks = await this.filesLockManager.browseParentChildLocks(req.space.dbFile)\n }\n }\n\n for await (const f of this.webDAVHandler.propfind(req, repository)) {\n let prop: any\n if (req.dav.propfindMode === PROPSTAT.PROPNAME) {\n prop = { ...Object.fromEntries(requestedProps.map((x) => [`${NS_PREFIX}:${x}`, ''])) }\n } else {\n prop = {}\n for (const p of requestedProps) {\n let fP: any\n if (p === LOCK_DISCOVERY_PROP) {\n let lockDiscovery: any[] = null\n if (repository === SPACE_REPOSITORY.FILES) {\n if (f.name in locks) {\n lockDiscovery = LOCK_DISCOVERY([locks[f.name]])\n } else {\n // The lock name may correspond to the original file at the space root.\n const fName = fileName(req.space.dbFile.path)\n if (fName in locks) {\n lockDiscovery = LOCK_DISCOVERY([locks[fName]])\n }\n }\n }\n fP = lockDiscovery\n } else {\n fP = f[p]\n }\n if (fP !== undefined) prop[`${NS_PREFIX}:${p}`] = fP\n }\n }\n responses.push(PROP_STAT(f.href, PROP(prop, HTTP_VERSION, HttpStatus.OK)))\n }\n const propfind = xmlBuild(MULTI_STATUS(responses))\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.MULTI_STATUS).send(propfind)\n }\n\n @IfHeaderDecorator()\n async put(req: FastifyDAVRequest, res: FastifyReply): Promise<FastifyReply> {\n let rExists: boolean\n try {\n rExists = await this.filesManager.saveStream(req.user, req.space, req, {\n dav: {\n depth: req.dav.depth,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n }\n })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res\n .header('etag', genEtag(null, req.space.realPath))\n .status(rExists ? HttpStatus.NO_CONTENT : HttpStatus.CREATED)\n .send()\n }\n\n @IfHeaderDecorator()\n async delete(req: FastifyDAVRequest, res: FastifyReply) {\n try {\n await this.filesManager.delete(req.user, req.space, { lockTokens: extractAllTokens(req.dav.ifHeaders) })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res.status(HttpStatus.NO_CONTENT).send()\n }\n\n @IfHeaderDecorator()\n async proppatch(req: FastifyDAVRequest, res: FastifyReply) {\n /* only support 'time modifications' */\n if (!(await isPathExists(req.space.realPath))) {\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.url)\n }\n\n // check locks\n try {\n await this.filesLockManager.checkConflicts(req.space.dbFile, req.dav.depth, {\n userId: req.user.id,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n\n // evaluate props and return multistatus if errors\n req.dav.proppatch = { props: {}, errors: [] }\n for (const action of Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE])) {\n if (Object.values(PROPPATCH_METHOD).indexOf(action) === -1) {\n const msg = `Unknown tag : expected ${PROPPATCH_METHOD.SET} or ${PROPPATCH_METHOD.REMOVE}`\n this.logger.debug({ tag: this.proppatch.name, msg: msg })\n return res.status(HttpStatus.BAD_REQUEST).send(msg)\n }\n\n if (Array.isArray(req.dav.body[PROPPATCH_PROP_UPDATE][action])) {\n if (Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE][action][0])[0] === PROPSTAT.PROP) {\n req.dav.body[PROPPATCH_PROP_UPDATE][action] = {\n [PROPSTAT.PROP]: req.dav.body[PROPPATCH_PROP_UPDATE][action].map((e: any) => e[PROPSTAT.PROP])\n }\n }\n }\n\n if (Object.keys(req.dav.body[PROPPATCH_PROP_UPDATE][action])[0] !== PROPSTAT.PROP) {\n const msg = `Unknown tag : expected ${PROPSTAT.PROP}`\n this.logger.debug({ tag: this.proppatch.name, msg: msg })\n return res.status(HttpStatus.BAD_REQUEST).send(msg)\n }\n\n if (!Array.isArray(req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP])) {\n req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP] = [req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP]]\n }\n\n for (const prop of req.dav.body[PROPPATCH_PROP_UPDATE][action][PROPSTAT.PROP] as Record<string, string>[]) {\n for (let [name, value] of Object.entries(prop)) {\n if (action === PROPPATCH_METHOD.REMOVE) {\n value = null\n this.logger.debug({ tag: this.proppatch.name, msg: `Proppatch remove method not handled : ${name} -> ${value}` })\n }\n if (PROPPATCH_SUPPORTED_PROPS.indexOf(name) === -1) {\n req.dav.proppatch.errors.push(\n PROP(\n { [`${NS_PREFIX}:${name}`]: null },\n HTTP_VERSION,\n HttpStatus.FORBIDDEN,\n STANDARD_PROPS.indexOf(name) > -1 ? PRECONDITION.PROTECTED_PROPERTY : undefined\n )\n )\n continue\n }\n req.dav.proppatch.props[name] = value\n }\n }\n }\n\n if (req.dav.proppatch.errors.length) {\n // convert all passed props to failed dependency\n for (const name of Object.keys(req.dav.proppatch.props)) {\n req.dav.proppatch.errors.push(PROP({ [`${NS_PREFIX}:${name}`]: null }, HTTP_VERSION, HttpStatus.FAILED_DEPENDENCY))\n }\n const proppatch = xmlBuild(MULTI_STATUS(PROP_STAT(encodeUrl(req.dav.url), req.dav.proppatch.errors)))\n return res.status(HttpStatus.MULTI_STATUS).type(XML_CONTENT_TYPE).send(proppatch)\n }\n\n // apply modifications\n let atLeastOneError = false\n const states: Record<string, boolean> = {}\n for (const [name, value] of Object.entries(req.dav.proppatch.props)) {\n if (PROPPATCH_MODIFIED_PROPS.indexOf(name) > -1) {\n try {\n await this.filesManager.touch(req.user, req.space, currentTimeStamp(new Date(value)), false)\n } catch (e) {\n this.logger.error({ tag: this.proppatch.name, msg: `unable to modify mtime on ${req.dav.url} : ${e}` })\n states[name] = false\n atLeastOneError = true\n }\n }\n // hook: we let the known Win32* properties pass to return a consistent result\n states[name] = true\n }\n\n const props = []\n for (const [name, state] of Object.entries(states)) {\n props.push(\n PROP(\n { [`${NS_PREFIX}:${name}`]: null },\n HTTP_VERSION,\n state ? (atLeastOneError ? HttpStatus.FAILED_DEPENDENCY : HttpStatus.OK) : HttpStatus.BAD_REQUEST\n )\n )\n }\n const proppatch = xmlBuild(MULTI_STATUS(PROP_STAT(encodeUrl(req.dav.url), props)))\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.MULTI_STATUS).send(proppatch)\n }\n\n @IfHeaderDecorator()\n async mkcol(req: FastifyDAVRequest, res: FastifyReply) {\n try {\n await this.filesManager.mkDir(req.user, req.space, false, { depth: req.dav.depth, lockTokens: extractAllTokens(req.dav.ifHeaders) })\n } catch (e) {\n return this.handleError(req, res, e)\n }\n return res.status(HttpStatus.CREATED).send()\n }\n\n @IfHeaderDecorator()\n async copyMove(req: FastifyDAVRequest, res: FastifyReply) {\n const dstSpace: SpaceEnv = await this.webDAVHandler.spaceEnv(req.user, req.dav.copyMove.destination)\n if (!dstSpace) {\n this.logger.warn({ tag: this.copyMove.name, msg: `Space not found for destination : ${req.dav.copyMove.destination}` })\n return res.status(HttpStatus.NOT_FOUND).send(req.dav.copyMove.destination)\n }\n const dstExisted = await isPathExists(dstSpace.realPath)\n // We must evaluate the if-headers on the destination\n const fakeDstReq = {\n dav: { ...req.dav, url: req.dav.copyMove.destination },\n user: req.user,\n space: dstSpace\n } as FastifyDAVRequest\n if (!(await this.evaluateIfHeaders(fakeDstReq, res))) {\n // if there is an error, the response is generated inside the `evaluateIfHeaders` function\n return\n }\n try {\n await this.filesManager.copyMove(req.user, req.space, dstSpace, req.dav.copyMove.isMove, req.dav.copyMove.overwrite, false, {\n depth: req.dav.depth,\n lockTokens: extractAllTokens(req.dav.ifHeaders)\n })\n } catch (e) {\n return this.handleError(req, res, e, dstSpace.url)\n }\n return res.status(dstExisted ? HttpStatus.NO_CONTENT : HttpStatus.CREATED).send()\n }\n\n protected async evaluateIfHeaders(req: FastifyDAVRequest, res: FastifyReply): Promise<boolean> {\n if (!req.dav.ifHeaders) return true\n const errors: string[] = []\n let lastPath = null\n let lastSpaceEnv: SpaceEnv\n let lastRPath = undefined\n let lastEtag = undefined // for now, we only generate one etag type (weak)\n let atLeastOneOk = false\n\n for (const condition of req.dav.ifHeaders) {\n if (condition.path) {\n if (condition.path !== lastPath) {\n lastPath = condition.path\n lastSpaceEnv = await this.webDAVHandler.spaceEnv(req.user, lastPath)\n }\n // the path will be the same across conditions\n if (!lastSpaceEnv) {\n this.logger.warn({ tag: this.evaluateIfHeaders.name, msg: `If Header : path mismatch (${condition.path})` })\n return false\n }\n } else {\n lastPath = req.dav.url\n lastSpaceEnv = req.space\n }\n\n if (condition.haveLock) {\n try {\n const dbFile = dbFileFromSpace(req.user.id, lastSpaceEnv)\n const match = !!(await this.filesLockManager.getLocksByPath(dbFile)).length\n if (condition.haveLock.mustMatch !== match) {\n errors.push(`have lock condition mismatch (${condition.haveLock.mustMatch} != ${match})`)\n continue\n }\n } catch (e) {\n errors.push(`have lock condition mismatch : ${e.message}`)\n continue\n }\n }\n\n if (condition.token) {\n const token = await this.filesLockManager.getLockByToken(condition.token.value)\n const match = token && lastPath.startsWith(token.options?.lockRoot)\n if (condition.token.mustMatch !== match) {\n if (!token) {\n errors.push(`lock token not found`)\n } else {\n errors.push(`lock token url mismatch (${lastPath} is not a child of ${token.options?.lockRoot})`)\n }\n continue\n }\n }\n\n if (condition.etag) {\n if (lastEtag === undefined) {\n if (lastRPath === undefined) {\n lastRPath = (await isPathExists(req.space.realPath)) ? req.space.realPath : null\n }\n lastEtag = lastRPath ? genEtag(null, lastRPath) : null\n }\n const match = lastEtag === condition.etag.value\n if (condition.etag.mustMatch !== match) {\n errors.push(`etag mismatch (${condition.etag.value} != ${lastEtag})`)\n continue\n }\n }\n\n atLeastOneOk = true\n break\n }\n\n if (!atLeastOneOk) {\n this.logger.warn({ tag: this.evaluateIfHeaders.name, msg: `If header condition failed : ${errors.join(', ')}` })\n res.status(HttpStatus.PRECONDITION_FAILED).send('If header condition failed')\n }\n return atLeastOneOk\n }\n\n private async lockRefresh(req: FastifyDAVRequest, res: FastifyReply, dbFilePath: string) {\n if (req.dav?.ifHeaders?.length !== 1) {\n this.logger.warn({ tag: this.lockRefresh.name, msg: 'Expected a lock token (only one lock may be refreshed at a time)' })\n return res.status(HttpStatus.BAD_REQUEST).send('Expected a lock token (only one lock may be refreshed at a time)')\n }\n\n let token: string\n try {\n token = extractOneToken(req.dav.ifHeaders)\n } catch (e) {\n this.logger.warn({ tag: this.lockRefresh.name, msg: `unable to extract token : ${JSON.stringify(req.dav.ifHeaders)} (${e})` })\n return res.status(HttpStatus.BAD_REQUEST).send('Unable to extract token')\n }\n\n const lock = await this.filesLockManager.isLockedWithToken(token, dbFilePath)\n if (!lock) {\n this.logger.warn({ tag: this.lockRefresh.name, msg: `Lock token does not exist or not match URL : ${token}` })\n return DAV_ERROR_RES(HttpStatus.PRECONDITION_FAILED, PRECONDITION.LOCK_TOKEN_MISMATCH, res)\n }\n if (lock.owner.id !== req.user.id) {\n this.logger.warn({ tag: this.lockRefresh.name, msg: `Lock token does not match owner : ${lock.owner.login} != ${req.user.login}` })\n return res.status(HttpStatus.FORBIDDEN).send('Lock token does not match owner')\n }\n\n await this.filesLockManager.refreshLockTimeout(lock, req.dav.lock.timeout)\n const lockProp = LOCK_PROP([lock])\n return res.type(XML_CONTENT_TYPE).status(HttpStatus.OK).send(xmlBuild(lockProp))\n }\n\n private handleError(req: FastifyDAVRequest, res: FastifyReply, e: any, toUrl?: string) {\n this.logger.error({ tag: this.handleError.name, msg: `Unable to ${req.method} ${req.dav.url}${toUrl ? ` -> ${toUrl}` : ''} : ${e.message}` })\n // Remove the last part to avoid exposing the path\n const errorMsg = e.message.split(',')[0]\n if (e instanceof LockConflict) {\n return DAV_ERROR_RES(HttpStatus.LOCKED, PRECONDITION.LOCK_CONFLICT, res, e.lock.options?.lockRoot || e.lock.dbFilePath)\n } else if (e instanceof FileError) {\n return res.status(e.httpCode).send(errorMsg)\n }\n throw new HttpException(errorMsg, HttpStatus.INTERNAL_SERVER_ERROR)\n }\n}\n"],"names":["WebDAVMethods","headOrGet","req","res","repository","SPACE_REPOSITORY","FILES","space","inSharesList","isPathExists","realPath","isPathIsDir","header","OPTIONS_HEADERS","DAV","status","HttpStatus","OK","send","sendFile","filesManager","sendFileFromSpace","checks","stream","e","handleError","logger","warn","tag","name","msg","FORBIDDEN","lock","isLockRefresh","dav","body","rExists","BAD_REQUEST","lockRefresh","dbFile","path","haveSpaceEnvPermissions","SPACE_OPERATION","ADD","alias","id","url","dirName","CONFLICT","lockOptions","lockRoot","lockToken","filesLockManager","genDAVToken","lockScope","lockscope","lockInfo","owner","ok","fileLock","create","user","WEBDAV_APP_LOCK","depth","timeout","mkFile","lockProp","LOCK_PROP","HEADER","LOCK_TOKEN","type","XML_CONTENT_TYPE","CREATED","xmlBuild","LOCKED","DAV_ERROR_RES","PRECONDITION","LOCK_CONFLICT","options","dbFilePath","unlock","NOT_FOUND","isLockedWithToken","token","LOCK_TOKEN_MISMATCH","removeLock","key","NO_CONTENT","propfind","responses","requestedProps","locks","propfindMode","PROPSTAT","PROP","Object","keys","prop","filter","STANDARD_PROPS","indexOf","PROPNAME","DEPTH","RESOURCE","browseLocks","browseParentChildLocks","f","webDAVHandler","fromEntries","map","x","NS_PREFIX","p","fP","LOCK_DISCOVERY_PROP","lockDiscovery","LOCK_DISCOVERY","fName","fileName","undefined","push","PROP_STAT","href","HTTP_VERSION","MULTI_STATUS","put","saveStream","lockTokens","extractAllTokens","ifHeaders","genEtag","delete","proppatch","checkConflicts","userId","props","errors","action","PROPPATCH_PROP_UPDATE","values","PROPPATCH_METHOD","SET","REMOVE","debug","Array","isArray","value","entries","PROPPATCH_SUPPORTED_PROPS","PROTECTED_PROPERTY","length","FAILED_DEPENDENCY","encodeUrl","atLeastOneError","states","PROPPATCH_MODIFIED_PROPS","touch","currentTimeStamp","Date","error","state","mkcol","mkDir","copyMove","dstSpace","spaceEnv","destination","dstExisted","fakeDstReq","evaluateIfHeaders","isMove","overwrite","lastPath","lastSpaceEnv","lastRPath","lastEtag","atLeastOneOk","condition","haveLock","dbFileFromSpace","match","getLocksByPath","mustMatch","message","getLockByToken","startsWith","etag","join","PRECONDITION_FAILED","extractOneToken","JSON","stringify","login","refreshLockTimeout","toUrl","method","errorMsg","split","LockConflict","FileError","httpCode","HttpException","INTERNAL_SERVER_ERROR","Logger"],"mappings":"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"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
|
|
3
|
-
* This file is part of Sync-in | The open source file sync and share solution
|
|
4
|
-
* See the LICENSE file for licensing details
|
|
5
|
-
*/ "use strict";
|
|
1
|
+
"use strict";
|
|
6
2
|
Object.defineProperty(exports, "__esModule", {
|
|
7
3
|
value: true
|
|
8
4
|
});
|
|
9
5
|
const _common = require("@nestjs/common");
|
|
10
6
|
const _testing = require("@nestjs/testing");
|
|
7
|
+
const _applicationsconstants = require("../../applications.constants");
|
|
11
8
|
const _fileerror = require("../../files/models/file-error");
|
|
12
9
|
const _filelockerror = require("../../files/models/file-lock-error");
|
|
13
10
|
const _fileslockmanagerservice = require("../../files/services/files-lock-manager.service");
|
|
@@ -125,7 +122,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
125
122
|
dav: {
|
|
126
123
|
url: '/webdav/test/file.txt',
|
|
127
124
|
depth: '0',
|
|
128
|
-
httpVersion:
|
|
125
|
+
httpVersion: _applicationsconstants.HTTP_VERSION,
|
|
129
126
|
body: '<lockinfo/>',
|
|
130
127
|
lock: {
|
|
131
128
|
timeout: 60,
|
|
@@ -938,7 +935,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
938
935
|
method: 'PROPPATCH',
|
|
939
936
|
dav: {
|
|
940
937
|
...createBaseRequest().dav,
|
|
941
|
-
httpVersion:
|
|
938
|
+
httpVersion: _applicationsconstants.HTTP_VERSION,
|
|
942
939
|
body: {
|
|
943
940
|
propertyupdate: {
|
|
944
941
|
set: {
|
|
@@ -969,7 +966,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
969
966
|
method: 'PROPPATCH',
|
|
970
967
|
dav: {
|
|
971
968
|
...createBaseRequest().dav,
|
|
972
|
-
httpVersion:
|
|
969
|
+
httpVersion: _applicationsconstants.HTTP_VERSION,
|
|
973
970
|
body: {
|
|
974
971
|
propertyupdate: {
|
|
975
972
|
set: {
|
|
@@ -997,7 +994,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
997
994
|
method: 'PROPPATCH',
|
|
998
995
|
dav: {
|
|
999
996
|
...createBaseRequest().dav,
|
|
1000
|
-
httpVersion:
|
|
997
|
+
httpVersion: _applicationsconstants.HTTP_VERSION,
|
|
1001
998
|
body: {
|
|
1002
999
|
propertyupdate: {
|
|
1003
1000
|
set: {
|
|
@@ -1027,7 +1024,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
1027
1024
|
method: 'PROPPATCH',
|
|
1028
1025
|
dav: {
|
|
1029
1026
|
...createBaseRequest().dav,
|
|
1030
|
-
httpVersion:
|
|
1027
|
+
httpVersion: _applicationsconstants.HTTP_VERSION,
|
|
1031
1028
|
body: {
|
|
1032
1029
|
propertyupdate: {
|
|
1033
1030
|
set: {
|
|
@@ -1054,7 +1051,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
1054
1051
|
method: 'PROPPATCH',
|
|
1055
1052
|
dav: {
|
|
1056
1053
|
...createBaseRequest().dav,
|
|
1057
|
-
httpVersion:
|
|
1054
|
+
httpVersion: _applicationsconstants.HTTP_VERSION,
|
|
1058
1055
|
body: {
|
|
1059
1056
|
propertyupdate: {
|
|
1060
1057
|
set: {
|
|
@@ -1089,7 +1086,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
1089
1086
|
method: 'PROPPATCH',
|
|
1090
1087
|
dav: {
|
|
1091
1088
|
...createBaseRequest().dav,
|
|
1092
|
-
httpVersion:
|
|
1089
|
+
httpVersion: _applicationsconstants.HTTP_VERSION,
|
|
1093
1090
|
body: {
|
|
1094
1091
|
propertyupdate: {
|
|
1095
1092
|
remove: {
|
|
@@ -1121,7 +1118,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
1121
1118
|
method: 'PROPPATCH',
|
|
1122
1119
|
dav: {
|
|
1123
1120
|
...createBaseRequest().dav,
|
|
1124
|
-
httpVersion:
|
|
1121
|
+
httpVersion: _applicationsconstants.HTTP_VERSION,
|
|
1125
1122
|
body: {
|
|
1126
1123
|
propertyupdate: {
|
|
1127
1124
|
set: [
|
|
@@ -1155,7 +1152,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
1155
1152
|
method: 'PROPPATCH',
|
|
1156
1153
|
dav: {
|
|
1157
1154
|
...createBaseRequest().dav,
|
|
1158
|
-
httpVersion:
|
|
1155
|
+
httpVersion: _applicationsconstants.HTTP_VERSION,
|
|
1159
1156
|
body: {
|
|
1160
1157
|
propertyupdate: {
|
|
1161
1158
|
set: {
|
|
@@ -1682,7 +1679,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
1682
1679
|
} catch {
|
|
1683
1680
|
// Expected to throw
|
|
1684
1681
|
}
|
|
1685
|
-
expect(logSpy
|
|
1682
|
+
expect(logSpy.mock.calls.some(([payload])=>payload?.msg?.includes(' -> /webdav/test/dest.txt'))).toBe(true);
|
|
1686
1683
|
});
|
|
1687
1684
|
});
|
|
1688
1685
|
});
|
|
@@ -2463,8 +2460,8 @@ describe('WebDAVMethods', ()=>{
|
|
|
2463
2460
|
} catch {
|
|
2464
2461
|
// Expected to throw
|
|
2465
2462
|
}
|
|
2466
|
-
expect(logSpy
|
|
2467
|
-
expect(logSpy
|
|
2463
|
+
expect(logSpy.mock.calls.some(([payload])=>payload?.msg?.includes('PUT'))).toBe(true);
|
|
2464
|
+
expect(logSpy.mock.calls.some(([payload])=>payload?.msg?.includes('/webdav/test.txt'))).toBe(true);
|
|
2468
2465
|
});
|
|
2469
2466
|
it('should include destination URL in log when provided', ()=>{
|
|
2470
2467
|
const logSpy = jest.spyOn(service['logger'], 'error').mockImplementation(()=>undefined);
|
|
@@ -2479,7 +2476,7 @@ describe('WebDAVMethods', ()=>{
|
|
|
2479
2476
|
} catch {
|
|
2480
2477
|
// Expected to throw
|
|
2481
2478
|
}
|
|
2482
|
-
expect(logSpy
|
|
2479
|
+
expect(logSpy.mock.calls.some(([payload])=>payload?.msg?.includes(' -> /webdav/destination.txt'))).toBe(true);
|
|
2483
2480
|
});
|
|
2484
2481
|
});
|
|
2485
2482
|
});
|