@sync-in/server 1.10.1 → 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 +47 -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 +18 -17
- 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-U5E5H2DD.js → chunk-27ATUHBH.js} +1 -1
- package/static/{chunk-HZAB6F4Q.js → chunk-2CKLZ3FM.js} +1 -1
- package/static/{chunk-XZHWESIY.js → chunk-2QZPX7LO.js} +1 -1
- package/static/{chunk-UOK3LKSX.js → chunk-2R6IBBPZ.js} +1 -1
- package/static/{chunk-DVCN3P7Q.js → chunk-4FIGEBNL.js} +1 -1
- package/static/chunk-4P3JABAP.js +13 -0
- package/static/chunk-5CZOSAMZ.js +1 -0
- package/static/{chunk-RBTLSPYJ.js → chunk-677WUBCT.js} +1 -1
- package/static/{chunk-KEZNIIFH.js → chunk-74CAHBFM.js} +1 -1
- package/static/{chunk-WRK2FTKU.js → chunk-7GWW6MJO.js} +1 -1
- package/static/{chunk-EKWB5W72.js → chunk-7WOPGQXB.js} +1 -1
- package/static/{chunk-IMFO2MI7.js → chunk-A4UGPSWX.js} +1 -1
- package/static/{chunk-KDUAB76O.js → chunk-AHO37FKW.js} +1 -1
- package/static/chunk-AQCXMKP3.js +1 -0
- package/static/chunk-B6PDYCRO.js +3 -0
- package/static/{chunk-PPJCVBJH.js → chunk-CU76ATCF.js} +1 -1
- package/static/{chunk-ARS47O5X.js → chunk-CWYHOPOP.js} +1 -1
- package/static/{chunk-CSVPAZHK.js → chunk-E5WI5725.js} +1 -1
- package/static/{chunk-XX3JPJUM.js → chunk-FC5HTKVM.js} +1 -1
- package/static/{chunk-QGHNJVJ6.js → chunk-FOSM7EYI.js} +1 -1
- package/static/{chunk-JAJ7VXMB.js → chunk-GAZO25PI.js} +1 -1
- package/static/{chunk-IHS5LSJJ.js → chunk-GB7ABR5N.js} +1 -1
- package/static/{chunk-27V66YJV.js → chunk-GEHFKZQ5.js} +2 -2
- package/static/{chunk-3QTROEHV.js → chunk-GQFMWVFD.js} +1 -1
- package/static/{chunk-FWQJ4ZCD.js → chunk-GVNTC564.js} +1 -1
- package/static/{chunk-4NIYCYRS.js → chunk-HGL3NYP2.js} +2 -2
- package/static/chunk-HLIWPWRA.js +1 -0
- package/static/{chunk-3VRUIWQG.js → chunk-HNYB3M4S.js} +1 -1
- package/static/{chunk-7HJFIMNF.js → chunk-HUXAUQMN.js} +1 -1
- package/static/chunk-I2XA6PPK.js +1 -0
- package/static/{chunk-RJULB733.js → chunk-ISV3BO6R.js} +1 -1
- package/static/{chunk-R4VYKZVJ.js → chunk-IWWBV6EM.js} +1 -1
- package/static/{chunk-TTWMFWEC.js → chunk-JV3AGU5B.js} +1 -1
- package/static/{chunk-X7NHX5C7.js → chunk-K25E7YGG.js} +1 -1
- package/static/chunk-K46PUTZB.js +1 -0
- package/static/{chunk-D2MLAO5N.js → chunk-KERFLJ56.js} +1 -7
- package/static/{chunk-LZUHREOF.js → chunk-KJD3KFF3.js} +1 -1
- package/static/chunk-KPKSI23S.js +1 -0
- package/static/{chunk-CMNMPG6Z.js → chunk-KZS7CTNR.js} +1 -1
- package/static/{chunk-RNVPQQKT.js → chunk-L5IHUVXL.js} +1 -1
- package/static/{chunk-2GXOVGTD.js → chunk-L7RRX2M3.js} +1 -1
- package/static/{chunk-WFMEUST4.js → chunk-LGWJ2WKU.js} +1 -1
- package/static/{chunk-ZOMRIN3G.js → chunk-MLC7JK2H.js} +2 -2
- package/static/{chunk-76REYAEA.js → chunk-MOHNYW2A.js} +1 -1
- package/static/{chunk-ZHUBWKA2.js → chunk-MTRXBVWZ.js} +1 -1
- package/static/{chunk-QJ22N76V.js → chunk-MZQK6LNV.js} +1 -1
- package/static/{chunk-SDJNZULP.js → chunk-NCDUOVMW.js} +1 -1
- package/static/chunk-NGUAJIGI.js +1 -0
- package/static/chunk-NIPP6JDI.js +1 -0
- package/static/{chunk-VD5JHSDS.js → chunk-NMTBMHUL.js} +1 -1
- package/static/chunk-O4XXMZFX.js +4 -0
- package/static/{chunk-WZPF4LS2.js → chunk-OANZITPM.js} +1 -1
- package/static/{chunk-JNTNMIUH.js → chunk-OGE4SAHU.js} +1 -1
- package/static/{chunk-S6H2ELRY.js → chunk-OI3ME22C.js} +1 -1
- package/static/{chunk-7KAYOR3A.js → chunk-Q3EGCMF5.js} +1 -1
- package/static/chunk-QF2NSHZA.js +1 -0
- package/static/{chunk-3ZBAQTHJ.js → chunk-QIGUDEZF.js} +1 -1
- package/static/{chunk-76M3BMK6.js → chunk-QJVC3SRJ.js} +11 -11
- package/static/{chunk-VBTZDHZ3.js → chunk-QKN6LAAA.js} +1 -1
- package/static/{chunk-JRXG43AA.js → chunk-QRFESU5O.js} +2 -2
- package/static/chunk-QVRVFYJH.js +1 -0
- package/static/{chunk-BCN4T5DO.js → chunk-RFJIPIOK.js} +2 -2
- package/static/{chunk-2RWLNKZH.js → chunk-RLL634K4.js} +1 -1
- package/static/{chunk-D5FQ72R4.js → chunk-RS2OFKWP.js} +1 -1
- package/static/{chunk-CN5YVRFT.js → chunk-RWAAC3A4.js} +1 -1
- package/static/{chunk-LWSCODLD.js → chunk-RWCNTCU5.js} +1 -1
- package/static/{chunk-FTFEQDWH.js → chunk-S5Y64DDS.js} +1 -1
- package/static/{chunk-J7474P3L.js → chunk-SLG5KDU6.js} +1 -1
- package/static/chunk-TJ4CVFEL.js +1 -0
- package/static/{chunk-KAUCN24H.js → chunk-TWCGKSYE.js} +1 -1
- package/static/{chunk-PDG7DOEF.js → chunk-UMDRE4S7.js} +1 -1
- package/static/chunk-VRIOLRYR.js +5 -0
- package/static/chunk-VS4O2XDP.js +1 -0
- package/static/{chunk-ZEJLIGAY.js → chunk-VSBFNFOM.js} +1 -1
- package/static/{chunk-XSURUW7C.js → chunk-WN4WXCVK.js} +1 -1
- package/static/{chunk-S44QIK3G.js → chunk-WX7RXW7K.js} +1 -1
- package/static/{chunk-3ZLBVUCX.js → chunk-XC4POKR3.js} +2 -2
- package/static/{chunk-TNCKNU6I.js → chunk-Y4AUYQTG.js} +1 -1
- package/static/{chunk-3MVPXC3U.js → chunk-Y67J3BOL.js} +1 -1
- package/static/{chunk-QTPIEEZW.js → chunk-YMIXHRJQ.js} +1 -7
- package/static/{chunk-VZFZUI6D.js → chunk-ZUNKFAKP.js} +1 -1
- package/static/index.html +3 -3
- package/static/main-QN4UCOC5.js +5 -0
- package/static/{styles-XLLEY5Y3.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-2YQ4SX3A.js +0 -13
- package/static/chunk-46TJLPJY.js +0 -1
- package/static/chunk-6OEOADR6.js +0 -1
- package/static/chunk-AALPWGPB.js +0 -3
- package/static/chunk-CVXLHSO5.js +0 -1
- package/static/chunk-G7RZN7HN.js +0 -1
- package/static/chunk-LTJNLOX2.js +0 -1
- package/static/chunk-NIKNG2FX.js +0 -1
- package/static/chunk-NNZWSNAW.js +0 -1
- package/static/chunk-NWKBB7J4.js +0 -1
- package/static/chunk-PVYVY3GD.js +0 -1
- package/static/chunk-Q5X5TPAG.js +0 -1
- package/static/chunk-R4VMWCM5.js +0 -1
- package/static/chunk-SNOOCDJD.js +0 -1
- package/static/chunk-SPQH3ATC.js +0 -5
- package/static/chunk-ZCSHU3D7.js +0 -1
- package/static/chunk-ZU5MQTFN.js +0 -4
- package/static/main-5O3KLGIR.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/webdav/guards/webdav-protocol.guard.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 { CanActivate, ExecutionContext, HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { ValidationError } from 'fast-xml-parser'\nimport { FastifyReply } from 'fastify'\nimport { urlToPath } from '../../../common/functions'\nimport { decodeUrl } from '../../../common/shared'\nimport { HTTP_METHOD } from '../../applications.constants'\nimport { CACHE_LOCK_DEFAULT_TTL } from '../../files/constants/cache'\nimport { USER_PERMISSION } from '../../users/constants/user'\nimport {\n ALLOW_EMPTY_BODY_METHODS,\n DEPTH,\n HEADER,\n LOCK_SCOPE,\n OPTIONS_HEADERS,\n PROPPATCH_PROP_UPDATE,\n PROPSTAT,\n REGEX_BASE_PATH\n} from '../constants/webdav'\nimport { IfHeader } from '../interfaces/if-header.interface'\nimport { FastifyDAVRequest, WebDAVContext } from '../interfaces/webdav.interface'\nimport { parseIfHeader } from '../utils/if-header'\nimport { PROPFIND_ALL_PROP } from '../utils/webdav'\nimport { xmlIsValid, xmlParse } from '../utils/xml'\n\n@Injectable()\nexport class WebDAVProtocolGuard implements CanActivate {\n private readonly logger = new Logger(WebDAVProtocolGuard.name)\n\n async canActivate(ctx: ExecutionContext): Promise<boolean> {\n const req: FastifyDAVRequest = ctx.switchToHttp().getRequest()\n const res: FastifyReply = ctx.switchToHttp().getResponse()\n this.checkUserPermission(req)\n this.setDAVContext(req)\n switch (req.method) {\n case HTTP_METHOD.OPTIONS:\n // hook to stop propagation and return headers on all webdav routes\n res.headers(OPTIONS_HEADERS)\n throw new HttpException(null, HttpStatus.OK)\n case HTTP_METHOD.PROPFIND:\n return this.propfindMethod(req)\n case HTTP_METHOD.LOCK:\n return this.lockMethod(req)\n case HTTP_METHOD.UNLOCK:\n return this.unlockMethod(req)\n case HTTP_METHOD.PUT:\n return this.putMethod(req)\n case HTTP_METHOD.DELETE:\n return this.deleteMethod(req)\n case HTTP_METHOD.PROPPATCH:\n return this.proppatchMethod(req)\n case HTTP_METHOD.MKCOL:\n return this.mkcolMethod(req)\n case HTTP_METHOD.COPY:\n return this.copyMoveMethod(req)\n case HTTP_METHOD.MOVE:\n return this.copyMoveMethod(req, true)\n default:\n return true\n }\n }\n\n private checkUserPermission(req: FastifyDAVRequest) {\n if (req.method !== HTTP_METHOD.OPTIONS && !req.user.havePermission(USER_PERMISSION.WEBDAV)) {\n this.logger.warn(`does not have permission : ${USER_PERMISSION.WEBDAV}`)\n throw new HttpException('Missing permission', HttpStatus.FORBIDDEN)\n }\n }\n\n private setDAVContext(req: FastifyDAVRequest) {\n req.dav = {\n url: decodeUrl(req.originalUrl),\n depth: DEPTH.RESOURCE\n } as WebDAVContext\n }\n\n private parseBody(req: FastifyDAVRequest) {\n let body = null\n let valid: true | ValidationError\n try {\n valid = xmlIsValid(req.body.toString())\n } catch (e) {\n valid = { err: { code: e.code, msg: `Invalid body content: ${e.message}`, line: 0, col: 0 } }\n }\n if (valid === true) {\n body = xmlParse(req.body)\n } else if (valid.err.code === undefined && ALLOW_EMPTY_BODY_METHODS.indexOf(req.method) > -1) {\n body = null\n } else {\n throw new HttpException(`${valid.err.code} : ${valid.err.msg}`, HttpStatus.BAD_REQUEST)\n }\n req.dav.httpVersion = `${req.protocol.toUpperCase()}/${req.raw['httpVersion']}`\n req.dav.body = body\n return true\n }\n\n private parseIfHeader(req: FastifyDAVRequest) {\n // stores if headers, examine it later\n if (req.headers[HEADER.IF]) {\n this.logger.verbose(`If header before : ${JSON.stringify(req.headers[HEADER.IF])}`)\n const ifHeaders: IfHeader[] = parseIfHeader(req.headers[HEADER.IF] as string)\n this.logger.verbose(`If header after : ${JSON.stringify(ifHeaders)}`)\n if (ifHeaders.length) req.dav.ifHeaders = ifHeaders\n }\n }\n\n private propfindMethod(req: FastifyDAVRequest) {\n req.dav.depth = (req.headers[HEADER.DEPTH] as string | undefined)?.toLowerCase()\n if (!req.dav.depth || (req.dav.depth !== DEPTH.MEMBERS && req.dav.depth !== DEPTH.RESOURCE)) {\n if (!req.dav.depth) {\n this.logger.warn('Missing propfind depth, default value 1 was set')\n } else if (req.dav.depth === DEPTH.INFINITY) {\n this.logger.warn('Infinite depth is disabled for security reasons, default value 1 was set')\n } else {\n this.logger.warn(`Invalid propfind depth header : ${req.dav.depth}, default value 1 was set`)\n }\n req.dav.depth = DEPTH.MEMBERS\n }\n if (this.parseBody(req)) {\n if (req.dav.body) {\n for (const propType in req.dav.body.propfind) {\n if (Object.values(PROPSTAT).indexOf(propType as PROPSTAT) > -1) {\n req.dav.propfindMode = propType as PROPSTAT\n break\n }\n }\n if (!req.dav.propfindMode) {\n this.logger.warn(`Invalid propfind mode : ${JSON.stringify(Object.keys(req.dav.body.propfind))}`)\n throw new HttpException('Invalid propfind mode', HttpStatus.BAD_REQUEST)\n }\n } else {\n // propfind request allow empty body\n req.dav.body = PROPFIND_ALL_PROP\n req.dav.propfindMode = PROPSTAT.ALLPROP\n }\n }\n this.parseIfHeader(req)\n return true\n }\n\n private proppatchMethod(req: FastifyDAVRequest) {\n req.dav.depth = ((req.headers[HEADER.DEPTH] as any) || DEPTH.RESOURCE).toLowerCase()\n this.parseBody(req)\n if (!req.dav.body || Object.keys(req.dav.body).indexOf(PROPPATCH_PROP_UPDATE) === -1) {\n this.logger.debug(`'${PROPPATCH_PROP_UPDATE}' is missing : ${JSON.stringify(req.dav.body)}`)\n throw new HttpException(`'${PROPPATCH_PROP_UPDATE}' is missing`, HttpStatus.BAD_REQUEST)\n }\n this.parseIfHeader(req)\n return true\n }\n\n private lockMethod(req: FastifyDAVRequest) {\n req.dav.lock = {}\n if (req.headers[HEADER.TIMEOUT]) {\n // timeout: 'Infinite, Second-4100000000' | 'Second-4100000000' | 'Infinite'\n const timeout = req.headers[HEADER.TIMEOUT] as string\n if (timeout.toLowerCase() === 'infinite') {\n req.dav.lock.timeout = CACHE_LOCK_DEFAULT_TTL\n } else {\n try {\n const timeoutSplit = timeout.split('-')\n const seconds = parseInt(timeoutSplit[timeoutSplit.length - 1], 10)\n req.dav.lock.timeout = seconds > CACHE_LOCK_DEFAULT_TTL ? CACHE_LOCK_DEFAULT_TTL : seconds\n } catch (e) {\n this.logger.warn(`${this.lockMethod.name} - unable to set timeout, use the default value : ${e}`)\n req.dav.lock.timeout = CACHE_LOCK_DEFAULT_TTL\n }\n }\n }\n this.parseBody(req)\n if (req.dav.body) {\n if (!req.dav.body.lockinfo) {\n this.logger.warn(`Missing lockinfo : ${JSON.stringify(req.dav.body)}`)\n throw new HttpException('Missing lockinfo', HttpStatus.BAD_REQUEST)\n }\n try {\n req.dav.lock.lockscope = Object.keys(req.dav.body.lockinfo.lockscope)[0] as LOCK_SCOPE\n } catch (e) {\n this.logger.warn(`${this.parseBody.name} - invalid or undefined lockscope : ${JSON.stringify(req.dav.body.lockinfo)} : ${e}`)\n throw new HttpException('Invalid or undefined lockscope', HttpStatus.BAD_REQUEST)\n }\n if (Object.values(LOCK_SCOPE).indexOf(req.dav.lock.lockscope) === -1) {\n this.logger.warn(`${this.parseBody.name} - invalid or undefined lockscope : ${JSON.stringify(req.dav.body.lockinfo)}`)\n throw new HttpException('Invalid or undefined lockscope', HttpStatus.BAD_REQUEST)\n }\n if (req.dav.body.lockinfo.owner) {\n const owner = typeof req.dav.body?.lockinfo?.owner === 'string' ? req.dav.body.lockinfo.owner : req.dav.body?.lockinfo?.owner?.href\n if (typeof owner === 'string') {\n req.dav.lock.owner = owner.trim()\n }\n }\n const depth: DEPTH = ((req.headers[HEADER.DEPTH] as any) || '').toLowerCase()\n req.dav.depth = [DEPTH.INFINITY, DEPTH.RESOURCE].indexOf(depth) === -1 ? DEPTH.INFINITY : depth\n } else {\n // must ignore depth header on lock refresh request\n req.dav.depth = null\n }\n this.parseIfHeader(req)\n return true\n }\n\n private unlockMethod(req: FastifyDAVRequest) {\n if (!req.headers[HEADER.LOCK_TOKEN]) {\n throw new HttpException('Missing lock token', HttpStatus.BAD_REQUEST)\n }\n req.dav.lock = { token: (req.headers[HEADER.LOCK_TOKEN] as string).replace('<', '').replace('>', '').trim() }\n this.parseIfHeader(req)\n return true\n }\n\n private putMethod(req: FastifyDAVRequest) {\n req.dav.depth = DEPTH.RESOURCE\n this.parseIfHeader(req)\n return true\n }\n\n private deleteMethod(req: FastifyDAVRequest) {\n this.parseIfHeader(req)\n return true\n }\n\n private mkcolMethod(req: FastifyDAVRequest) {\n if (req.headers['content-length'] && req.headers['content-length'] !== '0') {\n throw new HttpException('no body content required', HttpStatus.UNSUPPORTED_MEDIA_TYPE)\n }\n req.dav.depth = DEPTH.RESOURCE\n this.parseIfHeader(req)\n return true\n }\n\n private copyMoveMethod(req: FastifyDAVRequest, isMove = false) {\n if (!req.headers[HEADER.DESTINATION]) {\n throw new HttpException(`Missing ${HEADER.DESTINATION} header`, HttpStatus.BAD_REQUEST)\n }\n const destination = decodeUrl(urlToPath(req.headers[HEADER.DESTINATION] as string))\n if (!REGEX_BASE_PATH.test(destination)) {\n this.logger.warn(`The destination does not match the webdav base path : ${destination}`)\n throw new HttpException('The destination does not match', HttpStatus.BAD_REQUEST)\n }\n req.dav.depth = ((req.headers[HEADER.DEPTH] as any) || DEPTH.INFINITY).toLowerCase()\n req.dav.copyMove = {\n overwrite: ((req.headers[HEADER.OVERWRITE] as any) || 't').toLowerCase() === 't',\n destination: destination,\n isMove: isMove\n }\n this.parseIfHeader(req)\n return true\n }\n}\n"],"names":["WebDAVProtocolGuard","canActivate","ctx","req","switchToHttp","getRequest","res","getResponse","checkUserPermission","setDAVContext","method","HTTP_METHOD","OPTIONS","headers","OPTIONS_HEADERS","HttpException","HttpStatus","OK","PROPFIND","propfindMethod","LOCK","lockMethod","UNLOCK","unlockMethod","PUT","putMethod","DELETE","deleteMethod","PROPPATCH","proppatchMethod","MKCOL","mkcolMethod","COPY","copyMoveMethod","MOVE","user","havePermission","USER_PERMISSION","WEBDAV","logger","warn","FORBIDDEN","dav","url","decodeUrl","originalUrl","depth","DEPTH","RESOURCE","parseBody","body","valid","xmlIsValid","toString","e","err","code","msg","message","line","col","xmlParse","undefined","ALLOW_EMPTY_BODY_METHODS","indexOf","BAD_REQUEST","httpVersion","protocol","toUpperCase","raw","parseIfHeader","HEADER","IF","verbose","JSON","stringify","ifHeaders","length","toLowerCase","MEMBERS","INFINITY","propType","propfind","Object","values","PROPSTAT","propfindMode","keys","PROPFIND_ALL_PROP","ALLPROP","PROPPATCH_PROP_UPDATE","debug","lock","TIMEOUT","timeout","CACHE_LOCK_DEFAULT_TTL","timeoutSplit","split","seconds","parseInt","name","lockinfo","lockscope","LOCK_SCOPE","owner","href","trim","LOCK_TOKEN","token","replace","UNSUPPORTED_MEDIA_TYPE","isMove","DESTINATION","destination","urlToPath","REGEX_BASE_PATH","test","copyMove","overwrite","OVERWRITE","Logger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/guards/webdav-protocol.guard.ts"],"sourcesContent":["import { CanActivate, ExecutionContext, HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { ValidationError } from 'fast-xml-parser'\nimport { FastifyReply } from 'fastify'\nimport { urlToPath } from '../../../common/functions'\nimport { decodeUrl } from '../../../common/shared'\nimport { HTTP_METHOD } from '../../applications.constants'\nimport { CACHE_LOCK_DEFAULT_TTL } from '../../files/constants/cache'\nimport { USER_PERMISSION } from '../../users/constants/user'\nimport {\n ALLOW_EMPTY_BODY_METHODS,\n DEPTH,\n HEADER,\n LOCK_SCOPE,\n OPTIONS_HEADERS,\n PROPPATCH_PROP_UPDATE,\n PROPSTAT,\n REGEX_BASE_PATH\n} from '../constants/webdav'\nimport { IfHeader } from '../interfaces/if-header.interface'\nimport { FastifyDAVRequest, WebDAVContext } from '../interfaces/webdav.interface'\nimport { parseIfHeader } from '../utils/if-header'\nimport { PROPFIND_ALL_PROP } from '../utils/webdav'\nimport { xmlIsValid, xmlParse } from '../utils/xml'\n\n@Injectable()\nexport class WebDAVProtocolGuard implements CanActivate {\n private readonly logger = new Logger(WebDAVProtocolGuard.name)\n\n async canActivate(ctx: ExecutionContext): Promise<boolean> {\n const req: FastifyDAVRequest = ctx.switchToHttp().getRequest()\n const res: FastifyReply = ctx.switchToHttp().getResponse()\n this.checkUserPermission(req)\n this.setDAVContext(req)\n switch (req.method) {\n case HTTP_METHOD.OPTIONS:\n // hook to stop propagation and return headers on all webdav routes\n res.headers(OPTIONS_HEADERS)\n throw new HttpException(null, HttpStatus.OK)\n case HTTP_METHOD.PROPFIND:\n return this.propfindMethod(req)\n case HTTP_METHOD.LOCK:\n return this.lockMethod(req)\n case HTTP_METHOD.UNLOCK:\n return this.unlockMethod(req)\n case HTTP_METHOD.PUT:\n return this.putMethod(req)\n case HTTP_METHOD.DELETE:\n return this.deleteMethod(req)\n case HTTP_METHOD.PROPPATCH:\n return this.proppatchMethod(req)\n case HTTP_METHOD.MKCOL:\n return this.mkcolMethod(req)\n case HTTP_METHOD.COPY:\n return this.copyMoveMethod(req)\n case HTTP_METHOD.MOVE:\n return this.copyMoveMethod(req, true)\n default:\n return true\n }\n }\n\n private checkUserPermission(req: FastifyDAVRequest) {\n if (req.method !== HTTP_METHOD.OPTIONS && !req.user.havePermission(USER_PERMISSION.WEBDAV)) {\n this.logger.warn({ tag: this.checkUserPermission.name, msg: `does not have permission : ${USER_PERMISSION.WEBDAV}` })\n throw new HttpException('Missing permission', HttpStatus.FORBIDDEN)\n }\n }\n\n private setDAVContext(req: FastifyDAVRequest) {\n req.dav = {\n url: decodeUrl(req.originalUrl),\n depth: DEPTH.RESOURCE\n } as WebDAVContext\n }\n\n private parseBody(req: FastifyDAVRequest) {\n let body = null\n let valid: true | ValidationError\n try {\n valid = xmlIsValid(req.body.toString())\n } catch (e) {\n valid = { err: { code: e.code, msg: `Invalid body content: ${e.message}`, line: 0, col: 0 } }\n }\n if (valid === true) {\n body = xmlParse(req.body)\n } else if (valid.err.code === undefined && ALLOW_EMPTY_BODY_METHODS.indexOf(req.method) > -1) {\n body = null\n } else {\n throw new HttpException(`${valid.err.code} : ${valid.err.msg}`, HttpStatus.BAD_REQUEST)\n }\n req.dav.body = body\n return true\n }\n\n private parseIfHeader(req: FastifyDAVRequest) {\n // stores if headers, examine it later\n if (req.headers[HEADER.IF]) {\n this.logger.verbose({ tag: this.parseIfHeader.name, msg: `If header before : ${JSON.stringify(req.headers[HEADER.IF])}` })\n const ifHeaders: IfHeader[] = parseIfHeader(req.headers[HEADER.IF] as string)\n this.logger.verbose({ tag: this.parseIfHeader.name, msg: `If header after : ${JSON.stringify(ifHeaders)}` })\n if (ifHeaders.length) req.dav.ifHeaders = ifHeaders\n }\n }\n\n private propfindMethod(req: FastifyDAVRequest) {\n req.dav.depth = (req.headers[HEADER.DEPTH] as string | undefined)?.toLowerCase()\n if (!req.dav.depth || (req.dav.depth !== DEPTH.MEMBERS && req.dav.depth !== DEPTH.RESOURCE)) {\n if (!req.dav.depth) {\n this.logger.warn({ tag: this.propfindMethod.name, msg: 'Missing propfind depth, default value 1 was set' })\n } else if (req.dav.depth === DEPTH.INFINITY) {\n this.logger.warn({ tag: this.propfindMethod.name, msg: 'Infinite depth is disabled for security reasons, default value 1 was set' })\n } else {\n this.logger.warn({ tag: this.propfindMethod.name, msg: `Invalid propfind depth header : ${req.dav.depth}, default value 1 was set` })\n }\n req.dav.depth = DEPTH.MEMBERS\n }\n if (this.parseBody(req)) {\n if (req.dav.body) {\n for (const propType in req.dav.body.propfind) {\n if (Object.values(PROPSTAT).indexOf(propType as PROPSTAT) > -1) {\n req.dav.propfindMode = propType as PROPSTAT\n break\n }\n }\n if (!req.dav.propfindMode) {\n this.logger.warn({ tag: this.propfindMethod.name, msg: `Invalid propfind mode : ${JSON.stringify(Object.keys(req.dav.body.propfind))}` })\n throw new HttpException('Invalid propfind mode', HttpStatus.BAD_REQUEST)\n }\n } else {\n // propfind request allow empty body\n req.dav.body = PROPFIND_ALL_PROP\n req.dav.propfindMode = PROPSTAT.ALLPROP\n }\n }\n this.parseIfHeader(req)\n return true\n }\n\n private proppatchMethod(req: FastifyDAVRequest) {\n req.dav.depth = ((req.headers[HEADER.DEPTH] as any) || DEPTH.RESOURCE).toLowerCase()\n this.parseBody(req)\n if (!req.dav.body || Object.keys(req.dav.body).indexOf(PROPPATCH_PROP_UPDATE) === -1) {\n this.logger.debug({ tag: this.proppatchMethod.name, msg: `'${PROPPATCH_PROP_UPDATE}' is missing : ${JSON.stringify(req.dav.body)}` })\n throw new HttpException(`'${PROPPATCH_PROP_UPDATE}' is missing`, HttpStatus.BAD_REQUEST)\n }\n this.parseIfHeader(req)\n return true\n }\n\n private lockMethod(req: FastifyDAVRequest) {\n req.dav.lock = {}\n if (req.headers[HEADER.TIMEOUT]) {\n // timeout: 'Infinite, Second-4100000000' | 'Second-4100000000' | 'Infinite'\n const timeout = req.headers[HEADER.TIMEOUT] as string\n if (timeout.toLowerCase() === 'infinite') {\n req.dav.lock.timeout = CACHE_LOCK_DEFAULT_TTL\n } else {\n try {\n const timeoutSplit = timeout.split('-')\n const seconds = parseInt(timeoutSplit[timeoutSplit.length - 1], 10)\n req.dav.lock.timeout = seconds > CACHE_LOCK_DEFAULT_TTL ? CACHE_LOCK_DEFAULT_TTL : seconds\n } catch (e) {\n this.logger.warn({ tag: this.lockMethod.name, msg: `unable to set timeout, use the default value : ${e}` })\n req.dav.lock.timeout = CACHE_LOCK_DEFAULT_TTL\n }\n }\n }\n this.parseBody(req)\n if (req.dav.body) {\n if (!req.dav.body.lockinfo) {\n this.logger.warn({ tag: this.lockMethod.name, msg: `Missing lockinfo : ${JSON.stringify(req.dav.body)}` })\n throw new HttpException('Missing lockinfo', HttpStatus.BAD_REQUEST)\n }\n try {\n req.dav.lock.lockscope = Object.keys(req.dav.body.lockinfo.lockscope)[0] as LOCK_SCOPE\n } catch (e) {\n this.logger.warn({ tag: this.lockMethod.name, msg: `invalid or undefined lockscope : ${JSON.stringify(req.dav.body.lockinfo)} : ${e}` })\n throw new HttpException('Invalid or undefined lockscope', HttpStatus.BAD_REQUEST)\n }\n if (Object.values(LOCK_SCOPE).indexOf(req.dav.lock.lockscope) === -1) {\n this.logger.warn({ tag: this.lockMethod.name, msg: `invalid or undefined lockscope : ${JSON.stringify(req.dav.body.lockinfo)}` })\n throw new HttpException('Invalid or undefined lockscope', HttpStatus.BAD_REQUEST)\n }\n if (req.dav.body.lockinfo.owner) {\n const owner = typeof req.dav.body?.lockinfo?.owner === 'string' ? req.dav.body.lockinfo.owner : req.dav.body?.lockinfo?.owner?.href\n if (typeof owner === 'string') {\n req.dav.lock.owner = owner.trim()\n }\n }\n const depth: DEPTH = ((req.headers[HEADER.DEPTH] as any) || '').toLowerCase()\n req.dav.depth = [DEPTH.INFINITY, DEPTH.RESOURCE].indexOf(depth) === -1 ? DEPTH.INFINITY : depth\n } else {\n // must ignore depth header on lock refresh request\n req.dav.depth = null\n }\n this.parseIfHeader(req)\n return true\n }\n\n private unlockMethod(req: FastifyDAVRequest) {\n if (!req.headers[HEADER.LOCK_TOKEN]) {\n throw new HttpException('Missing lock token', HttpStatus.BAD_REQUEST)\n }\n req.dav.lock = { token: (req.headers[HEADER.LOCK_TOKEN] as string).replace('<', '').replace('>', '').trim() }\n this.parseIfHeader(req)\n return true\n }\n\n private putMethod(req: FastifyDAVRequest) {\n req.dav.depth = DEPTH.RESOURCE\n this.parseIfHeader(req)\n return true\n }\n\n private deleteMethod(req: FastifyDAVRequest) {\n this.parseIfHeader(req)\n return true\n }\n\n private mkcolMethod(req: FastifyDAVRequest) {\n if (req.headers['content-length'] && req.headers['content-length'] !== '0') {\n throw new HttpException('no body content required', HttpStatus.UNSUPPORTED_MEDIA_TYPE)\n }\n req.dav.depth = DEPTH.RESOURCE\n this.parseIfHeader(req)\n return true\n }\n\n private copyMoveMethod(req: FastifyDAVRequest, isMove = false) {\n if (!req.headers[HEADER.DESTINATION]) {\n throw new HttpException(`Missing ${HEADER.DESTINATION} header`, HttpStatus.BAD_REQUEST)\n }\n const destination = urlToPath(req.headers[HEADER.DESTINATION] as string)\n if (!REGEX_BASE_PATH.test(destination)) {\n this.logger.warn({ tag: this.copyMoveMethod.name, msg: `The destination does not match the webdav base path : ${destination}` })\n throw new HttpException('The destination does not match', HttpStatus.BAD_REQUEST)\n }\n req.dav.depth = ((req.headers[HEADER.DEPTH] as any) || DEPTH.INFINITY).toLowerCase()\n req.dav.copyMove = {\n overwrite: ((req.headers[HEADER.OVERWRITE] as any) || 't').toLowerCase() === 't',\n destination: destination,\n isMove: isMove\n }\n this.parseIfHeader(req)\n return true\n }\n}\n"],"names":["WebDAVProtocolGuard","canActivate","ctx","req","switchToHttp","getRequest","res","getResponse","checkUserPermission","setDAVContext","method","HTTP_METHOD","OPTIONS","headers","OPTIONS_HEADERS","HttpException","HttpStatus","OK","PROPFIND","propfindMethod","LOCK","lockMethod","UNLOCK","unlockMethod","PUT","putMethod","DELETE","deleteMethod","PROPPATCH","proppatchMethod","MKCOL","mkcolMethod","COPY","copyMoveMethod","MOVE","user","havePermission","USER_PERMISSION","WEBDAV","logger","warn","tag","name","msg","FORBIDDEN","dav","url","decodeUrl","originalUrl","depth","DEPTH","RESOURCE","parseBody","body","valid","xmlIsValid","toString","e","err","code","message","line","col","xmlParse","undefined","ALLOW_EMPTY_BODY_METHODS","indexOf","BAD_REQUEST","parseIfHeader","HEADER","IF","verbose","JSON","stringify","ifHeaders","length","toLowerCase","MEMBERS","INFINITY","propType","propfind","Object","values","PROPSTAT","propfindMode","keys","PROPFIND_ALL_PROP","ALLPROP","PROPPATCH_PROP_UPDATE","debug","lock","TIMEOUT","timeout","CACHE_LOCK_DEFAULT_TTL","timeoutSplit","split","seconds","parseInt","lockinfo","lockscope","LOCK_SCOPE","owner","href","trim","LOCK_TOKEN","token","replace","UNSUPPORTED_MEDIA_TYPE","isMove","DESTINATION","destination","urlToPath","REGEX_BASE_PATH","test","copyMove","overwrite","OVERWRITE","Logger"],"mappings":";;;;+BAyBaA;;;eAAAA;;;wBAzBgF;2BAGnE;wBACA;uCACE;uBACW;sBACP;wBAUzB;0BAGuB;yBACI;qBACG;;;;;;;AAG9B,IAAA,AAAMA,sBAAN,MAAMA;IAGX,MAAMC,YAAYC,GAAqB,EAAoB;QACzD,MAAMC,MAAyBD,IAAIE,YAAY,GAAGC,UAAU;QAC5D,MAAMC,MAAoBJ,IAAIE,YAAY,GAAGG,WAAW;QACxD,IAAI,CAACC,mBAAmB,CAACL;QACzB,IAAI,CAACM,aAAa,CAACN;QACnB,OAAQA,IAAIO,MAAM;YAChB,KAAKC,kCAAW,CAACC,OAAO;gBACtB,mEAAmE;gBACnEN,IAAIO,OAAO,CAACC,uBAAe;gBAC3B,MAAM,IAAIC,qBAAa,CAAC,MAAMC,kBAAU,CAACC,EAAE;YAC7C,KAAKN,kCAAW,CAACO,QAAQ;gBACvB,OAAO,IAAI,CAACC,cAAc,CAAChB;YAC7B,KAAKQ,kCAAW,CAACS,IAAI;gBACnB,OAAO,IAAI,CAACC,UAAU,CAAClB;YACzB,KAAKQ,kCAAW,CAACW,MAAM;gBACrB,OAAO,IAAI,CAACC,YAAY,CAACpB;YAC3B,KAAKQ,kCAAW,CAACa,GAAG;gBAClB,OAAO,IAAI,CAACC,SAAS,CAACtB;YACxB,KAAKQ,kCAAW,CAACe,MAAM;gBACrB,OAAO,IAAI,CAACC,YAAY,CAACxB;YAC3B,KAAKQ,kCAAW,CAACiB,SAAS;gBACxB,OAAO,IAAI,CAACC,eAAe,CAAC1B;YAC9B,KAAKQ,kCAAW,CAACmB,KAAK;gBACpB,OAAO,IAAI,CAACC,WAAW,CAAC5B;YAC1B,KAAKQ,kCAAW,CAACqB,IAAI;gBACnB,OAAO,IAAI,CAACC,cAAc,CAAC9B;YAC7B,KAAKQ,kCAAW,CAACuB,IAAI;gBACnB,OAAO,IAAI,CAACD,cAAc,CAAC9B,KAAK;YAClC;gBACE,OAAO;QACX;IACF;IAEQK,oBAAoBL,GAAsB,EAAE;QAClD,IAAIA,IAAIO,MAAM,KAAKC,kCAAW,CAACC,OAAO,IAAI,CAACT,IAAIgC,IAAI,CAACC,cAAc,CAACC,qBAAe,CAACC,MAAM,GAAG;YAC1F,IAAI,CAACC,MAAM,CAACC,IAAI,CAAC;gBAAEC,KAAK,IAAI,CAACjC,mBAAmB,CAACkC,IAAI;gBAAEC,KAAK,CAAC,2BAA2B,EAAEN,qBAAe,CAACC,MAAM,EAAE;YAAC;YACnH,MAAM,IAAIvB,qBAAa,CAAC,sBAAsBC,kBAAU,CAAC4B,SAAS;QACpE;IACF;IAEQnC,cAAcN,GAAsB,EAAE;QAC5CA,IAAI0C,GAAG,GAAG;YACRC,KAAKC,IAAAA,iBAAS,EAAC5C,IAAI6C,WAAW;YAC9BC,OAAOC,aAAK,CAACC,QAAQ;QACvB;IACF;IAEQC,UAAUjD,GAAsB,EAAE;QACxC,IAAIkD,OAAO;QACX,IAAIC;QACJ,IAAI;YACFA,QAAQC,IAAAA,eAAU,EAACpD,IAAIkD,IAAI,CAACG,QAAQ;QACtC,EAAE,OAAOC,GAAG;YACVH,QAAQ;gBAAEI,KAAK;oBAAEC,MAAMF,EAAEE,IAAI;oBAAEhB,KAAK,CAAC,sBAAsB,EAAEc,EAAEG,OAAO,EAAE;oBAAEC,MAAM;oBAAGC,KAAK;gBAAE;YAAE;QAC9F;QACA,IAAIR,UAAU,MAAM;YAClBD,OAAOU,IAAAA,aAAQ,EAAC5D,IAAIkD,IAAI;QAC1B,OAAO,IAAIC,MAAMI,GAAG,CAACC,IAAI,KAAKK,aAAaC,gCAAwB,CAACC,OAAO,CAAC/D,IAAIO,MAAM,IAAI,CAAC,GAAG;YAC5F2C,OAAO;QACT,OAAO;YACL,MAAM,IAAItC,qBAAa,CAAC,GAAGuC,MAAMI,GAAG,CAACC,IAAI,CAAC,GAAG,EAAEL,MAAMI,GAAG,CAACf,GAAG,EAAE,EAAE3B,kBAAU,CAACmD,WAAW;QACxF;QACAhE,IAAI0C,GAAG,CAACQ,IAAI,GAAGA;QACf,OAAO;IACT;IAEQe,cAAcjE,GAAsB,EAAE;QAC5C,sCAAsC;QACtC,IAAIA,IAAIU,OAAO,CAACwD,cAAM,CAACC,EAAE,CAAC,EAAE;YAC1B,IAAI,CAAC/B,MAAM,CAACgC,OAAO,CAAC;gBAAE9B,KAAK,IAAI,CAAC2B,aAAa,CAAC1B,IAAI;gBAAEC,KAAK,CAAC,mBAAmB,EAAE6B,KAAKC,SAAS,CAACtE,IAAIU,OAAO,CAACwD,cAAM,CAACC,EAAE,CAAC,GAAG;YAAC;YACxH,MAAMI,YAAwBN,IAAAA,uBAAa,EAACjE,IAAIU,OAAO,CAACwD,cAAM,CAACC,EAAE,CAAC;YAClE,IAAI,CAAC/B,MAAM,CAACgC,OAAO,CAAC;gBAAE9B,KAAK,IAAI,CAAC2B,aAAa,CAAC1B,IAAI;gBAAEC,KAAK,CAAC,kBAAkB,EAAE6B,KAAKC,SAAS,CAACC,YAAY;YAAC;YAC1G,IAAIA,UAAUC,MAAM,EAAExE,IAAI0C,GAAG,CAAC6B,SAAS,GAAGA;QAC5C;IACF;IAEQvD,eAAehB,GAAsB,EAAE;QAC7CA,IAAI0C,GAAG,CAACI,KAAK,GAAI9C,IAAIU,OAAO,CAACwD,cAAM,CAACnB,KAAK,CAAC,EAAyB0B;QACnE,IAAI,CAACzE,IAAI0C,GAAG,CAACI,KAAK,IAAK9C,IAAI0C,GAAG,CAACI,KAAK,KAAKC,aAAK,CAAC2B,OAAO,IAAI1E,IAAI0C,GAAG,CAACI,KAAK,KAAKC,aAAK,CAACC,QAAQ,EAAG;YAC3F,IAAI,CAAChD,IAAI0C,GAAG,CAACI,KAAK,EAAE;gBAClB,IAAI,CAACV,MAAM,CAACC,IAAI,CAAC;oBAAEC,KAAK,IAAI,CAACtB,cAAc,CAACuB,IAAI;oBAAEC,KAAK;gBAAkD;YAC3G,OAAO,IAAIxC,IAAI0C,GAAG,CAACI,KAAK,KAAKC,aAAK,CAAC4B,QAAQ,EAAE;gBAC3C,IAAI,CAACvC,MAAM,CAACC,IAAI,CAAC;oBAAEC,KAAK,IAAI,CAACtB,cAAc,CAACuB,IAAI;oBAAEC,KAAK;gBAA2E;YACpI,OAAO;gBACL,IAAI,CAACJ,MAAM,CAACC,IAAI,CAAC;oBAAEC,KAAK,IAAI,CAACtB,cAAc,CAACuB,IAAI;oBAAEC,KAAK,CAAC,gCAAgC,EAAExC,IAAI0C,GAAG,CAACI,KAAK,CAAC,yBAAyB,CAAC;gBAAC;YACrI;YACA9C,IAAI0C,GAAG,CAACI,KAAK,GAAGC,aAAK,CAAC2B,OAAO;QAC/B;QACA,IAAI,IAAI,CAACzB,SAAS,CAACjD,MAAM;YACvB,IAAIA,IAAI0C,GAAG,CAACQ,IAAI,EAAE;gBAChB,IAAK,MAAM0B,YAAY5E,IAAI0C,GAAG,CAACQ,IAAI,CAAC2B,QAAQ,CAAE;oBAC5C,IAAIC,OAAOC,MAAM,CAACC,gBAAQ,EAAEjB,OAAO,CAACa,YAAwB,CAAC,GAAG;wBAC9D5E,IAAI0C,GAAG,CAACuC,YAAY,GAAGL;wBACvB;oBACF;gBACF;gBACA,IAAI,CAAC5E,IAAI0C,GAAG,CAACuC,YAAY,EAAE;oBACzB,IAAI,CAAC7C,MAAM,CAACC,IAAI,CAAC;wBAAEC,KAAK,IAAI,CAACtB,cAAc,CAACuB,IAAI;wBAAEC,KAAK,CAAC,wBAAwB,EAAE6B,KAAKC,SAAS,CAACQ,OAAOI,IAAI,CAAClF,IAAI0C,GAAG,CAACQ,IAAI,CAAC2B,QAAQ,IAAI;oBAAC;oBACvI,MAAM,IAAIjE,qBAAa,CAAC,yBAAyBC,kBAAU,CAACmD,WAAW;gBACzE;YACF,OAAO;gBACL,oCAAoC;gBACpChE,IAAI0C,GAAG,CAACQ,IAAI,GAAGiC,0BAAiB;gBAChCnF,IAAI0C,GAAG,CAACuC,YAAY,GAAGD,gBAAQ,CAACI,OAAO;YACzC;QACF;QACA,IAAI,CAACnB,aAAa,CAACjE;QACnB,OAAO;IACT;IAEQ0B,gBAAgB1B,GAAsB,EAAE;QAC9CA,IAAI0C,GAAG,CAACI,KAAK,GAAG,AAAC,CAAA,AAAC9C,IAAIU,OAAO,CAACwD,cAAM,CAACnB,KAAK,CAAC,IAAYA,aAAK,CAACC,QAAQ,AAAD,EAAGyB,WAAW;QAClF,IAAI,CAACxB,SAAS,CAACjD;QACf,IAAI,CAACA,IAAI0C,GAAG,CAACQ,IAAI,IAAI4B,OAAOI,IAAI,CAAClF,IAAI0C,GAAG,CAACQ,IAAI,EAAEa,OAAO,CAACsB,6BAAqB,MAAM,CAAC,GAAG;YACpF,IAAI,CAACjD,MAAM,CAACkD,KAAK,CAAC;gBAAEhD,KAAK,IAAI,CAACZ,eAAe,CAACa,IAAI;gBAAEC,KAAK,CAAC,CAAC,EAAE6C,6BAAqB,CAAC,eAAe,EAAEhB,KAAKC,SAAS,CAACtE,IAAI0C,GAAG,CAACQ,IAAI,GAAG;YAAC;YACnI,MAAM,IAAItC,qBAAa,CAAC,CAAC,CAAC,EAAEyE,6BAAqB,CAAC,YAAY,CAAC,EAAExE,kBAAU,CAACmD,WAAW;QACzF;QACA,IAAI,CAACC,aAAa,CAACjE;QACnB,OAAO;IACT;IAEQkB,WAAWlB,GAAsB,EAAE;QACzCA,IAAI0C,GAAG,CAAC6C,IAAI,GAAG,CAAC;QAChB,IAAIvF,IAAIU,OAAO,CAACwD,cAAM,CAACsB,OAAO,CAAC,EAAE;YAC/B,4EAA4E;YAC5E,MAAMC,UAAUzF,IAAIU,OAAO,CAACwD,cAAM,CAACsB,OAAO,CAAC;YAC3C,IAAIC,QAAQhB,WAAW,OAAO,YAAY;gBACxCzE,IAAI0C,GAAG,CAAC6C,IAAI,CAACE,OAAO,GAAGC,6BAAsB;YAC/C,OAAO;gBACL,IAAI;oBACF,MAAMC,eAAeF,QAAQG,KAAK,CAAC;oBACnC,MAAMC,UAAUC,SAASH,YAAY,CAACA,aAAanB,MAAM,GAAG,EAAE,EAAE;oBAChExE,IAAI0C,GAAG,CAAC6C,IAAI,CAACE,OAAO,GAAGI,UAAUH,6BAAsB,GAAGA,6BAAsB,GAAGG;gBACrF,EAAE,OAAOvC,GAAG;oBACV,IAAI,CAAClB,MAAM,CAACC,IAAI,CAAC;wBAAEC,KAAK,IAAI,CAACpB,UAAU,CAACqB,IAAI;wBAAEC,KAAK,CAAC,+CAA+C,EAAEc,GAAG;oBAAC;oBACzGtD,IAAI0C,GAAG,CAAC6C,IAAI,CAACE,OAAO,GAAGC,6BAAsB;gBAC/C;YACF;QACF;QACA,IAAI,CAACzC,SAAS,CAACjD;QACf,IAAIA,IAAI0C,GAAG,CAACQ,IAAI,EAAE;YAChB,IAAI,CAAClD,IAAI0C,GAAG,CAACQ,IAAI,CAAC6C,QAAQ,EAAE;gBAC1B,IAAI,CAAC3D,MAAM,CAACC,IAAI,CAAC;oBAAEC,KAAK,IAAI,CAACpB,UAAU,CAACqB,IAAI;oBAAEC,KAAK,CAAC,mBAAmB,EAAE6B,KAAKC,SAAS,CAACtE,IAAI0C,GAAG,CAACQ,IAAI,GAAG;gBAAC;gBACxG,MAAM,IAAItC,qBAAa,CAAC,oBAAoBC,kBAAU,CAACmD,WAAW;YACpE;YACA,IAAI;gBACFhE,IAAI0C,GAAG,CAAC6C,IAAI,CAACS,SAAS,GAAGlB,OAAOI,IAAI,CAAClF,IAAI0C,GAAG,CAACQ,IAAI,CAAC6C,QAAQ,CAACC,SAAS,CAAC,CAAC,EAAE;YAC1E,EAAE,OAAO1C,GAAG;gBACV,IAAI,CAAClB,MAAM,CAACC,IAAI,CAAC;oBAAEC,KAAK,IAAI,CAACpB,UAAU,CAACqB,IAAI;oBAAEC,KAAK,CAAC,iCAAiC,EAAE6B,KAAKC,SAAS,CAACtE,IAAI0C,GAAG,CAACQ,IAAI,CAAC6C,QAAQ,EAAE,GAAG,EAAEzC,GAAG;gBAAC;gBACtI,MAAM,IAAI1C,qBAAa,CAAC,kCAAkCC,kBAAU,CAACmD,WAAW;YAClF;YACA,IAAIc,OAAOC,MAAM,CAACkB,kBAAU,EAAElC,OAAO,CAAC/D,IAAI0C,GAAG,CAAC6C,IAAI,CAACS,SAAS,MAAM,CAAC,GAAG;gBACpE,IAAI,CAAC5D,MAAM,CAACC,IAAI,CAAC;oBAAEC,KAAK,IAAI,CAACpB,UAAU,CAACqB,IAAI;oBAAEC,KAAK,CAAC,iCAAiC,EAAE6B,KAAKC,SAAS,CAACtE,IAAI0C,GAAG,CAACQ,IAAI,CAAC6C,QAAQ,GAAG;gBAAC;gBAC/H,MAAM,IAAInF,qBAAa,CAAC,kCAAkCC,kBAAU,CAACmD,WAAW;YAClF;YACA,IAAIhE,IAAI0C,GAAG,CAACQ,IAAI,CAAC6C,QAAQ,CAACG,KAAK,EAAE;gBAC/B,MAAMA,QAAQ,OAAOlG,IAAI0C,GAAG,CAACQ,IAAI,EAAE6C,UAAUG,UAAU,WAAWlG,IAAI0C,GAAG,CAACQ,IAAI,CAAC6C,QAAQ,CAACG,KAAK,GAAGlG,IAAI0C,GAAG,CAACQ,IAAI,EAAE6C,UAAUG,OAAOC;gBAC/H,IAAI,OAAOD,UAAU,UAAU;oBAC7BlG,IAAI0C,GAAG,CAAC6C,IAAI,CAACW,KAAK,GAAGA,MAAME,IAAI;gBACjC;YACF;YACA,MAAMtD,QAAe,AAAC,CAAA,AAAC9C,IAAIU,OAAO,CAACwD,cAAM,CAACnB,KAAK,CAAC,IAAY,EAAC,EAAG0B,WAAW;YAC3EzE,IAAI0C,GAAG,CAACI,KAAK,GAAG;gBAACC,aAAK,CAAC4B,QAAQ;gBAAE5B,aAAK,CAACC,QAAQ;aAAC,CAACe,OAAO,CAACjB,WAAW,CAAC,IAAIC,aAAK,CAAC4B,QAAQ,GAAG7B;QAC5F,OAAO;YACL,mDAAmD;YACnD9C,IAAI0C,GAAG,CAACI,KAAK,GAAG;QAClB;QACA,IAAI,CAACmB,aAAa,CAACjE;QACnB,OAAO;IACT;IAEQoB,aAAapB,GAAsB,EAAE;QAC3C,IAAI,CAACA,IAAIU,OAAO,CAACwD,cAAM,CAACmC,UAAU,CAAC,EAAE;YACnC,MAAM,IAAIzF,qBAAa,CAAC,sBAAsBC,kBAAU,CAACmD,WAAW;QACtE;QACAhE,IAAI0C,GAAG,CAAC6C,IAAI,GAAG;YAAEe,OAAO,AAACtG,IAAIU,OAAO,CAACwD,cAAM,CAACmC,UAAU,CAAC,CAAYE,OAAO,CAAC,KAAK,IAAIA,OAAO,CAAC,KAAK,IAAIH,IAAI;QAAG;QAC5G,IAAI,CAACnC,aAAa,CAACjE;QACnB,OAAO;IACT;IAEQsB,UAAUtB,GAAsB,EAAE;QACxCA,IAAI0C,GAAG,CAACI,KAAK,GAAGC,aAAK,CAACC,QAAQ;QAC9B,IAAI,CAACiB,aAAa,CAACjE;QACnB,OAAO;IACT;IAEQwB,aAAaxB,GAAsB,EAAE;QAC3C,IAAI,CAACiE,aAAa,CAACjE;QACnB,OAAO;IACT;IAEQ4B,YAAY5B,GAAsB,EAAE;QAC1C,IAAIA,IAAIU,OAAO,CAAC,iBAAiB,IAAIV,IAAIU,OAAO,CAAC,iBAAiB,KAAK,KAAK;YAC1E,MAAM,IAAIE,qBAAa,CAAC,4BAA4BC,kBAAU,CAAC2F,sBAAsB;QACvF;QACAxG,IAAI0C,GAAG,CAACI,KAAK,GAAGC,aAAK,CAACC,QAAQ;QAC9B,IAAI,CAACiB,aAAa,CAACjE;QACnB,OAAO;IACT;IAEQ8B,eAAe9B,GAAsB,EAAEyG,SAAS,KAAK,EAAE;QAC7D,IAAI,CAACzG,IAAIU,OAAO,CAACwD,cAAM,CAACwC,WAAW,CAAC,EAAE;YACpC,MAAM,IAAI9F,qBAAa,CAAC,CAAC,QAAQ,EAAEsD,cAAM,CAACwC,WAAW,CAAC,OAAO,CAAC,EAAE7F,kBAAU,CAACmD,WAAW;QACxF;QACA,MAAM2C,cAAcC,IAAAA,oBAAS,EAAC5G,IAAIU,OAAO,CAACwD,cAAM,CAACwC,WAAW,CAAC;QAC7D,IAAI,CAACG,uBAAe,CAACC,IAAI,CAACH,cAAc;YACtC,IAAI,CAACvE,MAAM,CAACC,IAAI,CAAC;gBAAEC,KAAK,IAAI,CAACR,cAAc,CAACS,IAAI;gBAAEC,KAAK,CAAC,sDAAsD,EAAEmE,aAAa;YAAC;YAC9H,MAAM,IAAI/F,qBAAa,CAAC,kCAAkCC,kBAAU,CAACmD,WAAW;QAClF;QACAhE,IAAI0C,GAAG,CAACI,KAAK,GAAG,AAAC,CAAA,AAAC9C,IAAIU,OAAO,CAACwD,cAAM,CAACnB,KAAK,CAAC,IAAYA,aAAK,CAAC4B,QAAQ,AAAD,EAAGF,WAAW;QAClFzE,IAAI0C,GAAG,CAACqE,QAAQ,GAAG;YACjBC,WAAW,AAAC,CAAA,AAAChH,IAAIU,OAAO,CAACwD,cAAM,CAAC+C,SAAS,CAAC,IAAY,GAAE,EAAGxC,WAAW,OAAO;YAC7EkC,aAAaA;YACbF,QAAQA;QACV;QACA,IAAI,CAACxC,aAAa,CAACjE;QACnB,OAAO;IACT;;aA3NiBoC,SAAS,IAAI8E,cAAM,CAACrH,oBAAoB0C,IAAI;;AA4N/D"}
|
|
@@ -367,6 +367,22 @@ describe(_webdavprotocolguard.WebDAVProtocolGuard.name, ()=>{
|
|
|
367
367
|
spyIf.mockRestore();
|
|
368
368
|
}
|
|
369
369
|
});
|
|
370
|
+
it('decodes If header path with special chars via urlToPath', async ()=>{
|
|
371
|
+
;
|
|
372
|
+
_functions.urlToPath.mockImplementation((s)=>s.split('/').map((segment)=>decodeURIComponent(segment)).join('/'));
|
|
373
|
+
const encodedPath = '/webdav/base/path/space%20name';
|
|
374
|
+
const req = baseReq(_applicationsconstants.HTTP_METHOD.LOCK, {
|
|
375
|
+
headers: {
|
|
376
|
+
[_webdav.HEADER.IF]: `<${encodedPath}> (<urn:uuid:abc>)`
|
|
377
|
+
},
|
|
378
|
+
body: '<lockinfo xmlns="DAV:"><lockscope><exclusive/></lockscope></lockinfo>'
|
|
379
|
+
});
|
|
380
|
+
const res = makeRes();
|
|
381
|
+
const ctx = makeCtx(req, res);
|
|
382
|
+
await expect(guard.canActivate(ctx)).resolves.toBe(true);
|
|
383
|
+
expect(_functions.urlToPath).toHaveBeenCalledWith(encodedPath);
|
|
384
|
+
expect(req.dav.ifHeaders?.[0]?.path).toBe('/webdav/base/path/space name');
|
|
385
|
+
});
|
|
370
386
|
it('missing lockinfo -> 400', async ()=>{
|
|
371
387
|
const req = baseReq(_applicationsconstants.HTTP_METHOD.LOCK, {
|
|
372
388
|
headers: {},
|
|
@@ -553,6 +569,25 @@ describe(_webdavprotocolguard.WebDAVProtocolGuard.name, ()=>{
|
|
|
553
569
|
});
|
|
554
570
|
expectIfHeadersParsed(req);
|
|
555
571
|
});
|
|
572
|
+
it('COPY: decodes special chars in Destination via urlToPath', async ()=>{
|
|
573
|
+
;
|
|
574
|
+
_functions.urlToPath.mockImplementation((s)=>s.split('/').map((segment)=>decodeURIComponent(segment)).join('/'));
|
|
575
|
+
const encodedDestination = '/webdav/base/path/target%20file';
|
|
576
|
+
const req = baseReq(_applicationsconstants.HTTP_METHOD.COPY, {
|
|
577
|
+
headers: {
|
|
578
|
+
[_webdav.HEADER.DESTINATION]: encodedDestination
|
|
579
|
+
}
|
|
580
|
+
});
|
|
581
|
+
const res = makeRes();
|
|
582
|
+
const ctx = makeCtx(req, res);
|
|
583
|
+
await expect(guard.canActivate(ctx)).resolves.toBe(true);
|
|
584
|
+
expect(_functions.urlToPath).toHaveBeenCalledWith(encodedDestination);
|
|
585
|
+
expect(req.dav.copyMove).toEqual({
|
|
586
|
+
overwrite: true,
|
|
587
|
+
destination: '/webdav/base/path/target file',
|
|
588
|
+
isMove: false
|
|
589
|
+
});
|
|
590
|
+
});
|
|
556
591
|
it('MOVE: isMove=true and overwrite=false when OVERWRITE header is "f", respects depth header', async ()=>{
|
|
557
592
|
;
|
|
558
593
|
_shared.decodeUrl.mockImplementation((s)=>s);
|
|
@@ -574,6 +609,25 @@ describe(_webdavprotocolguard.WebDAVProtocolGuard.name, ()=>{
|
|
|
574
609
|
isMove: true
|
|
575
610
|
});
|
|
576
611
|
});
|
|
612
|
+
it('MOVE: decodes special chars in Destination via urlToPath', async ()=>{
|
|
613
|
+
;
|
|
614
|
+
_functions.urlToPath.mockImplementation((s)=>s.split('/').map((segment)=>decodeURIComponent(segment)).join('/'));
|
|
615
|
+
const encodedDestination = '/webdav/base/path/target%5B1%5D';
|
|
616
|
+
const req = baseReq(_applicationsconstants.HTTP_METHOD.MOVE, {
|
|
617
|
+
headers: {
|
|
618
|
+
[_webdav.HEADER.DESTINATION]: encodedDestination
|
|
619
|
+
}
|
|
620
|
+
});
|
|
621
|
+
const res = makeRes();
|
|
622
|
+
const ctx = makeCtx(req, res);
|
|
623
|
+
await expect(guard.canActivate(ctx)).resolves.toBe(true);
|
|
624
|
+
expect(_functions.urlToPath).toHaveBeenCalledWith(encodedDestination);
|
|
625
|
+
expect(req.dav.copyMove).toEqual({
|
|
626
|
+
overwrite: true,
|
|
627
|
+
destination: '/webdav/base/path/target[1]',
|
|
628
|
+
isMove: true
|
|
629
|
+
});
|
|
630
|
+
});
|
|
577
631
|
});
|
|
578
632
|
});
|
|
579
633
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/webdav/guards/webdav-protocol.guard.spec.ts"],"sourcesContent":["import { HttpException, HttpStatus } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { FastifyReply } from 'fastify'\nimport { urlToPath } from '../../../common/functions'\nimport { decodeUrl } from '../../../common/shared'\nimport { HTTP_METHOD } from '../../applications.constants'\nimport { CACHE_LOCK_DEFAULT_TTL } from '../../files/constants/cache'\nimport { DEPTH, HEADER, LOCK_SCOPE, OPTIONS_HEADERS, PROPSTAT } from '../constants/webdav'\nimport { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport * as IfHeaderUtils from '../utils/if-header'\nimport { PROPFIND_ALL_PROP } from '../utils/webdav'\nimport { WebDAVProtocolGuard } from './webdav-protocol.guard'\n\n// Keep these mocks to control path transforms in COPY/MOVE tests\njest.mock('../../../common/shared', () => ({\n decodeUrl: jest.fn((s: string) => s)\n}))\njest.mock('../../../common/functions', () => ({\n urlToPath: jest.fn((s: string) => s)\n}))\n\ndescribe(WebDAVProtocolGuard.name, () => {\n let guard: WebDAVProtocolGuard\n\n const makeUser = (hasPerm = true) => ({\n havePermission: jest.fn(() => hasPerm),\n fullName: 'John Doe',\n email: 'john@doe.tld'\n })\n\n const makeRes = (): FastifyReply =>\n ({\n headers: jest.fn()\n }) as unknown as FastifyReply\n\n const baseReq = (method: string, overrides: Partial<FastifyDAVRequest> = {}): FastifyDAVRequest =>\n ({\n method,\n headers: {},\n // undefined body allows to hit the \"allowed empty body\" branch for PROPFIND/LOCK\n body: undefined as any,\n originalUrl: '/webdav/base/path',\n protocol: 'http',\n raw: { httpVersion: '1.1' } as any,\n user: makeUser(),\n ...overrides\n }) as unknown as FastifyDAVRequest\n\n const makeCtx = (req: FastifyDAVRequest, res: FastifyReply) =>\n ({\n switchToHttp: () => ({\n getRequest: () => req,\n getResponse: () => res\n })\n }) as any\n\n const expectIfHeadersParsed = (req: FastifyDAVRequest) => {\n expect(Array.isArray(req.dav.ifHeaders)).toBe(true)\n expect(req.dav.ifHeaders.length).toBeGreaterThan(0)\n }\n\n beforeEach(async () => {\n jest.clearAllMocks()\n const module: TestingModule = await Test.createTestingModule({\n providers: [WebDAVProtocolGuard]\n }).compile()\n\n guard = module.get(WebDAVProtocolGuard)\n })\n\n describe('Permissions', () => {\n it('allows OPTIONS even without WEBDAV permission (responds headers + 200)', async () => {\n const req = baseReq(HTTP_METHOD.OPTIONS, { user: makeUser(false) as any })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n await expect(guard.canActivate(ctx)).rejects.toThrow(HttpException)\n try {\n await guard.canActivate(ctx)\n } catch (e) {\n const ex = e as HttpException\n expect(res.headers).toHaveBeenCalledWith(OPTIONS_HEADERS)\n expect(ex.getStatus()).toBe(HttpStatus.OK)\n }\n })\n\n it('forbids non-OPTIONS when the user lacks WEBDAV permission', async () => {\n const req = baseReq(HTTP_METHOD.GET, { user: makeUser(false) as any })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.FORBIDDEN })\n })\n\n it('falls through for a method not handled by the switch', async () => {\n const req = baseReq('VIEW', {})\n const res = makeRes()\n const ctx = makeCtx(req, res)\n const spy = jest.spyOn(guard as any, 'setDAVContext')\n\n const result = await guard.canActivate(ctx)\n expect(result).toBe(true)\n expect(spy).toHaveBeenCalled()\n spy.mockRestore()\n })\n })\n\n describe('PROPFIND', () => {\n it('defaults depth=1 (members) when header is missing, and sets ALLPROP with empty body', async () => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: {},\n body: undefined\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.url).toBe(req.originalUrl)\n expect(req.dav.depth).toBe(DEPTH.MEMBERS)\n expect(req.dav.body).toBe(PROPFIND_ALL_PROP)\n expect(req.dav.propfindMode).toBe(PROPSTAT.ALLPROP)\n expect(req.dav.ifHeaders === undefined || req.dav.ifHeaders.length === 0).toBe(true)\n })\n\n it.each([\n { title: 'depth \"infinity\" normalized to 1 (members)', depth: DEPTH.INFINITY as any },\n { title: 'invalid depth normalized to 1 (members)', depth: 'bad' as any }\n ])('depth normalization: $title', async ({ depth }) => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: { [HEADER.DEPTH]: depth },\n body: undefined\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.MEMBERS)\n })\n\n it('valid XML body with propname and parses If header', async () => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: { [HEADER.DEPTH]: DEPTH.RESOURCE, [HEADER.IF]: '(<urn:uuid:abc> [\"W/\\\\\"ETag\\\\\"\"])' },\n body: '<propfind xmlns=\"DAV:\"><propname/></propfind>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n expect(req.dav.propfindMode).toBe(PROPSTAT.PROPNAME)\n expectIfHeadersParsed(req)\n })\n\n it('invalid propfind mode -> 400', async () => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: {},\n body: '<propfind xmlns=\"DAV:\"><unknown/></propfind>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('invalid XML (with code) -> 400', async () => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: {},\n body: '<bad'\n } as any)\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('specific XML validation error handled -> 400', async () => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: {},\n body: 'this is not XML at all'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toHaveProperty('status', HttpStatus.BAD_REQUEST)\n })\n\n it('skips body when parseBody returns false, still parses If header', async () => {\n const spyParse = jest.spyOn(guard as any, 'parseBody').mockReturnValue(false as any)\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: { [HEADER.IF]: '(<urn:uuid:abc>)' },\n body: undefined\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n try {\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.body).toBeUndefined()\n expect(req.dav.propfindMode).toBeUndefined()\n expectIfHeadersParsed(req)\n } finally {\n spyParse.mockRestore()\n }\n })\n })\n\n describe('PROPPATCH', () => {\n it('requires \"propertyupdate\" in body', async () => {\n const req = baseReq(HTTP_METHOD.PROPPATCH, {\n headers: {},\n body: '<xml/>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('valid body and parses If header', async () => {\n const req = baseReq(HTTP_METHOD.PROPPATCH, {\n headers: { [HEADER.IF]: '(<urn:uuid:abc>)', [HEADER.DEPTH]: DEPTH.RESOURCE },\n body: '<propertyupdate xmlns=\"DAV:\"><set/></propertyupdate>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n expectIfHeadersParsed(req)\n })\n })\n\n describe('LOCK', () => {\n it('timeout=Infinite -> default timeout, owner from string, depth=resource', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: 'Infinite', [HEADER.DEPTH]: DEPTH.RESOURCE },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope><owner>Custom Owner</owner></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock.timeout).toBe(CACHE_LOCK_DEFAULT_TTL)\n expect(req.dav.lock.lockscope).toBe(LOCK_SCOPE.EXCLUSIVE)\n expect(req.dav.lock.owner).toContain('Custom Owner')\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n })\n\n it('timeout Second-10 + non-string owner -> default WebDAV owner, depth=infinity', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: 'Second-10', [HEADER.DEPTH]: DEPTH.INFINITY },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><shared/></lockscope><owner><href>me</href></owner></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock.timeout).toBe(10)\n expect(req.dav.lock.lockscope).toBe(LOCK_SCOPE.SHARED)\n expect(req.dav.lock.owner).toMatch(/^me/)\n expect(req.dav.depth).toBe(DEPTH.INFINITY)\n })\n\n it('clamps timeout Second-N to default when N exceeds default', async () => {\n const big = CACHE_LOCK_DEFAULT_TTL + 1000\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: `Second-${big}` },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock.timeout).toBe(CACHE_LOCK_DEFAULT_TTL)\n })\n\n it('invalid timeout -> NaN (no fallback), depth=infinity', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: 'Bad-Token', [HEADER.DEPTH]: 'x' as any },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(Number.isNaN(req.dav.lock.timeout)).toBe(true)\n expect(req.dav.depth).toBe(DEPTH.INFINITY)\n })\n\n it('handles parseInt exception during timeout parsing', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: 'Second-' },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n const originalParseInt = global.parseInt\n global.parseInt = jest.fn().mockImplementation(() => {\n throw new Error('Forced parseInt error')\n })\n\n try {\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock).toBeDefined()\n } finally {\n global.parseInt = originalParseInt\n }\n })\n\n it('timeout Infinite + empty IfHeader -> default timeout and ifHeaders undefined', async () => {\n const spyIf = jest.spyOn(IfHeaderUtils, 'parseIfHeader').mockReturnValue([] as any)\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: 'Infinite', [HEADER.IF]: '(<any>)' },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n try {\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock.timeout).toBe(CACHE_LOCK_DEFAULT_TTL)\n expect(req.dav.ifHeaders).toBeUndefined()\n } finally {\n spyIf.mockRestore()\n }\n })\n\n it('missing lockinfo -> 400', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: {},\n body: '<notlockinfo xmlns=\"DAV:\"/>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('invalid lockscope -> 400', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: {},\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><invalid/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('handles Object.keys(lockscope) exception with malformed lockscope -> 400', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: {},\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n jest.spyOn(guard as any, 'parseBody').mockImplementation(() => {\n req.dav.body = {\n lockinfo: {\n lockscope: null\n }\n }\n return true\n })\n\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({\n status: HttpStatus.BAD_REQUEST,\n message: 'Invalid or undefined lockscope'\n })\n })\n\n it('refresh (no body) -> dav.depth = null', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.DEPTH]: DEPTH.RESOURCE },\n body: undefined\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBeNull()\n })\n\n it('no timeout header -> lock.timeout is undefined', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: {},\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock).toBeDefined()\n expect(req.dav.lock.timeout).toBeUndefined()\n })\n })\n\n describe('UNLOCK', () => {\n it('missing lock-token -> 400', async () => {\n const req = baseReq(HTTP_METHOD.UNLOCK)\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('sets token in dav.lock and parses If header', async () => {\n const req = baseReq(HTTP_METHOD.UNLOCK, {\n headers: { [HEADER.LOCK_TOKEN]: ' <abc> ', [HEADER.IF]: '(<urn:uuid:abc>)' }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock.token).toBe('abc')\n expectIfHeadersParsed(req)\n })\n })\n\n describe('PUT / DELETE', () => {\n it('PUT: depth=0 and parses If header', async () => {\n const req = baseReq(HTTP_METHOD.PUT, {\n headers: { [HEADER.IF]: '(<urn:uuid:abc>)' }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n expectIfHeadersParsed(req)\n })\n\n it('DELETE: parses If header', async () => {\n const req = baseReq(HTTP_METHOD.DELETE, {\n headers: { [HEADER.IF]: '(<urn:uuid:abc>)' }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expectIfHeadersParsed(req)\n })\n })\n\n describe('MKCOL', () => {\n it('non-zero content-length -> 415', async () => {\n const req = baseReq(HTTP_METHOD.MKCOL, {\n headers: { 'content-length': '3' }\n } as any)\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.UNSUPPORTED_MEDIA_TYPE })\n })\n\n it('zero/absent content-length -> depth=0 and parses If header', async () => {\n const req = baseReq(HTTP_METHOD.MKCOL, {\n headers: { 'content-length': '0', [HEADER.IF]: '(<urn:uuid:abc>)' } as any\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n expectIfHeadersParsed(req)\n })\n })\n\n describe('COPY / MOVE', () => {\n it('COPY: missing Destination -> 400', async () => {\n const req = baseReq(HTTP_METHOD.COPY)\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('COPY: invalid Destination base path -> 400', async () => {\n ;(decodeUrl as jest.Mock).mockImplementation((s: string) => s)\n ;(urlToPath as jest.Mock).mockImplementation((s: string) => '/not-webdav' + s)\n\n const req = baseReq(HTTP_METHOD.COPY, {\n headers: { [HEADER.DESTINATION]: '/wrong' }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('COPY: valid Destination -> overwrite=true, move=false, depth=infinity and parses If header', async () => {\n ;(decodeUrl as jest.Mock).mockImplementation((s: string) => s)\n ;(urlToPath as jest.Mock).mockImplementation((_s: string) => '/webdav/base/path/target')\n\n const req = baseReq(HTTP_METHOD.COPY, {\n headers: { [HEADER.DESTINATION]: '/webdav/base/path/target', [HEADER.IF]: '(<urn:uuid:abc>)' }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.INFINITY)\n expect(req.dav.copyMove).toEqual({\n overwrite: true,\n destination: '/webdav/base/path/target',\n isMove: false\n })\n expectIfHeadersParsed(req)\n })\n\n it('MOVE: isMove=true and overwrite=false when OVERWRITE header is \"f\", respects depth header', async () => {\n ;(decodeUrl as jest.Mock).mockImplementation((s: string) => s)\n ;(urlToPath as jest.Mock).mockImplementation((_s: string) => '/webdav/base/path/target2')\n\n const req = baseReq(HTTP_METHOD.MOVE, {\n headers: {\n [HEADER.DESTINATION]: '/webdav/base/path/target2',\n [HEADER.OVERWRITE]: 'f',\n [HEADER.DEPTH]: DEPTH.RESOURCE\n }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n expect(req.dav.copyMove).toEqual({\n overwrite: false,\n destination: '/webdav/base/path/target2',\n isMove: true\n })\n })\n })\n})\n"],"names":["jest","mock","decodeUrl","fn","s","urlToPath","describe","WebDAVProtocolGuard","name","guard","makeUser","hasPerm","havePermission","fullName","email","makeRes","headers","baseReq","method","overrides","body","undefined","originalUrl","protocol","raw","httpVersion","user","makeCtx","req","res","switchToHttp","getRequest","getResponse","expectIfHeadersParsed","expect","Array","isArray","dav","ifHeaders","toBe","length","toBeGreaterThan","beforeEach","clearAllMocks","module","Test","createTestingModule","providers","compile","get","it","HTTP_METHOD","OPTIONS","ctx","canActivate","rejects","toThrow","HttpException","e","ex","toHaveBeenCalledWith","OPTIONS_HEADERS","getStatus","HttpStatus","OK","GET","toMatchObject","status","FORBIDDEN","spy","spyOn","result","toHaveBeenCalled","mockRestore","PROPFIND","resolves","url","depth","DEPTH","MEMBERS","PROPFIND_ALL_PROP","propfindMode","PROPSTAT","ALLPROP","each","title","INFINITY","HEADER","RESOURCE","IF","PROPNAME","BAD_REQUEST","toHaveProperty","spyParse","mockReturnValue","toBeUndefined","PROPPATCH","LOCK","TIMEOUT","lock","timeout","CACHE_LOCK_DEFAULT_TTL","lockscope","LOCK_SCOPE","EXCLUSIVE","owner","toContain","SHARED","toMatch","big","Number","isNaN","originalParseInt","global","parseInt","mockImplementation","Error","toBeDefined","spyIf","IfHeaderUtils","lockinfo","message","toBeNull","UNLOCK","LOCK_TOKEN","token","PUT","DELETE","MKCOL","UNSUPPORTED_MEDIA_TYPE","COPY","DESTINATION","_s","copyMove","toEqual","overwrite","destination","isMove","MOVE","OVERWRITE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/guards/webdav-protocol.guard.spec.ts"],"sourcesContent":["import { HttpException, HttpStatus } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { FastifyReply } from 'fastify'\nimport { urlToPath } from '../../../common/functions'\nimport { decodeUrl } from '../../../common/shared'\nimport { HTTP_METHOD } from '../../applications.constants'\nimport { CACHE_LOCK_DEFAULT_TTL } from '../../files/constants/cache'\nimport { DEPTH, HEADER, LOCK_SCOPE, OPTIONS_HEADERS, PROPSTAT } from '../constants/webdav'\nimport { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport * as IfHeaderUtils from '../utils/if-header'\nimport { PROPFIND_ALL_PROP } from '../utils/webdav'\nimport { WebDAVProtocolGuard } from './webdav-protocol.guard'\n\n// Keep these mocks to control path transforms in COPY/MOVE tests\njest.mock('../../../common/shared', () => ({\n decodeUrl: jest.fn((s: string) => s)\n}))\njest.mock('../../../common/functions', () => ({\n urlToPath: jest.fn((s: string) => s)\n}))\n\ndescribe(WebDAVProtocolGuard.name, () => {\n let guard: WebDAVProtocolGuard\n\n const makeUser = (hasPerm = true) => ({\n havePermission: jest.fn(() => hasPerm),\n fullName: 'John Doe',\n email: 'john@doe.tld'\n })\n\n const makeRes = (): FastifyReply =>\n ({\n headers: jest.fn()\n }) as unknown as FastifyReply\n\n const baseReq = (method: string, overrides: Partial<FastifyDAVRequest> = {}): FastifyDAVRequest =>\n ({\n method,\n headers: {},\n // undefined body allows to hit the \"allowed empty body\" branch for PROPFIND/LOCK\n body: undefined as any,\n originalUrl: '/webdav/base/path',\n protocol: 'http',\n raw: { httpVersion: '1.1' } as any,\n user: makeUser(),\n ...overrides\n }) as unknown as FastifyDAVRequest\n\n const makeCtx = (req: FastifyDAVRequest, res: FastifyReply) =>\n ({\n switchToHttp: () => ({\n getRequest: () => req,\n getResponse: () => res\n })\n }) as any\n\n const expectIfHeadersParsed = (req: FastifyDAVRequest) => {\n expect(Array.isArray(req.dav.ifHeaders)).toBe(true)\n expect(req.dav.ifHeaders.length).toBeGreaterThan(0)\n }\n\n beforeEach(async () => {\n jest.clearAllMocks()\n const module: TestingModule = await Test.createTestingModule({\n providers: [WebDAVProtocolGuard]\n }).compile()\n\n guard = module.get(WebDAVProtocolGuard)\n })\n\n describe('Permissions', () => {\n it('allows OPTIONS even without WEBDAV permission (responds headers + 200)', async () => {\n const req = baseReq(HTTP_METHOD.OPTIONS, { user: makeUser(false) as any })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n await expect(guard.canActivate(ctx)).rejects.toThrow(HttpException)\n try {\n await guard.canActivate(ctx)\n } catch (e) {\n const ex = e as HttpException\n expect(res.headers).toHaveBeenCalledWith(OPTIONS_HEADERS)\n expect(ex.getStatus()).toBe(HttpStatus.OK)\n }\n })\n\n it('forbids non-OPTIONS when the user lacks WEBDAV permission', async () => {\n const req = baseReq(HTTP_METHOD.GET, { user: makeUser(false) as any })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.FORBIDDEN })\n })\n\n it('falls through for a method not handled by the switch', async () => {\n const req = baseReq('VIEW', {})\n const res = makeRes()\n const ctx = makeCtx(req, res)\n const spy = jest.spyOn(guard as any, 'setDAVContext')\n\n const result = await guard.canActivate(ctx)\n expect(result).toBe(true)\n expect(spy).toHaveBeenCalled()\n spy.mockRestore()\n })\n })\n\n describe('PROPFIND', () => {\n it('defaults depth=1 (members) when header is missing, and sets ALLPROP with empty body', async () => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: {},\n body: undefined\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.url).toBe(req.originalUrl)\n expect(req.dav.depth).toBe(DEPTH.MEMBERS)\n expect(req.dav.body).toBe(PROPFIND_ALL_PROP)\n expect(req.dav.propfindMode).toBe(PROPSTAT.ALLPROP)\n expect(req.dav.ifHeaders === undefined || req.dav.ifHeaders.length === 0).toBe(true)\n })\n\n it.each([\n { title: 'depth \"infinity\" normalized to 1 (members)', depth: DEPTH.INFINITY as any },\n { title: 'invalid depth normalized to 1 (members)', depth: 'bad' as any }\n ])('depth normalization: $title', async ({ depth }) => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: { [HEADER.DEPTH]: depth },\n body: undefined\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.MEMBERS)\n })\n\n it('valid XML body with propname and parses If header', async () => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: { [HEADER.DEPTH]: DEPTH.RESOURCE, [HEADER.IF]: '(<urn:uuid:abc> [\"W/\\\\\"ETag\\\\\"\"])' },\n body: '<propfind xmlns=\"DAV:\"><propname/></propfind>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n expect(req.dav.propfindMode).toBe(PROPSTAT.PROPNAME)\n expectIfHeadersParsed(req)\n })\n\n it('invalid propfind mode -> 400', async () => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: {},\n body: '<propfind xmlns=\"DAV:\"><unknown/></propfind>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('invalid XML (with code) -> 400', async () => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: {},\n body: '<bad'\n } as any)\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('specific XML validation error handled -> 400', async () => {\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: {},\n body: 'this is not XML at all'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toHaveProperty('status', HttpStatus.BAD_REQUEST)\n })\n\n it('skips body when parseBody returns false, still parses If header', async () => {\n const spyParse = jest.spyOn(guard as any, 'parseBody').mockReturnValue(false as any)\n const req = baseReq(HTTP_METHOD.PROPFIND, {\n headers: { [HEADER.IF]: '(<urn:uuid:abc>)' },\n body: undefined\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n try {\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.body).toBeUndefined()\n expect(req.dav.propfindMode).toBeUndefined()\n expectIfHeadersParsed(req)\n } finally {\n spyParse.mockRestore()\n }\n })\n })\n\n describe('PROPPATCH', () => {\n it('requires \"propertyupdate\" in body', async () => {\n const req = baseReq(HTTP_METHOD.PROPPATCH, {\n headers: {},\n body: '<xml/>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('valid body and parses If header', async () => {\n const req = baseReq(HTTP_METHOD.PROPPATCH, {\n headers: { [HEADER.IF]: '(<urn:uuid:abc>)', [HEADER.DEPTH]: DEPTH.RESOURCE },\n body: '<propertyupdate xmlns=\"DAV:\"><set/></propertyupdate>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n expectIfHeadersParsed(req)\n })\n })\n\n describe('LOCK', () => {\n it('timeout=Infinite -> default timeout, owner from string, depth=resource', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: 'Infinite', [HEADER.DEPTH]: DEPTH.RESOURCE },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope><owner>Custom Owner</owner></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock.timeout).toBe(CACHE_LOCK_DEFAULT_TTL)\n expect(req.dav.lock.lockscope).toBe(LOCK_SCOPE.EXCLUSIVE)\n expect(req.dav.lock.owner).toContain('Custom Owner')\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n })\n\n it('timeout Second-10 + non-string owner -> default WebDAV owner, depth=infinity', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: 'Second-10', [HEADER.DEPTH]: DEPTH.INFINITY },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><shared/></lockscope><owner><href>me</href></owner></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock.timeout).toBe(10)\n expect(req.dav.lock.lockscope).toBe(LOCK_SCOPE.SHARED)\n expect(req.dav.lock.owner).toMatch(/^me/)\n expect(req.dav.depth).toBe(DEPTH.INFINITY)\n })\n\n it('clamps timeout Second-N to default when N exceeds default', async () => {\n const big = CACHE_LOCK_DEFAULT_TTL + 1000\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: `Second-${big}` },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock.timeout).toBe(CACHE_LOCK_DEFAULT_TTL)\n })\n\n it('invalid timeout -> NaN (no fallback), depth=infinity', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: 'Bad-Token', [HEADER.DEPTH]: 'x' as any },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(Number.isNaN(req.dav.lock.timeout)).toBe(true)\n expect(req.dav.depth).toBe(DEPTH.INFINITY)\n })\n\n it('handles parseInt exception during timeout parsing', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: 'Second-' },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n const originalParseInt = global.parseInt\n global.parseInt = jest.fn().mockImplementation(() => {\n throw new Error('Forced parseInt error')\n })\n\n try {\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock).toBeDefined()\n } finally {\n global.parseInt = originalParseInt\n }\n })\n\n it('timeout Infinite + empty IfHeader -> default timeout and ifHeaders undefined', async () => {\n const spyIf = jest.spyOn(IfHeaderUtils, 'parseIfHeader').mockReturnValue([] as any)\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.TIMEOUT]: 'Infinite', [HEADER.IF]: '(<any>)' },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n try {\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock.timeout).toBe(CACHE_LOCK_DEFAULT_TTL)\n expect(req.dav.ifHeaders).toBeUndefined()\n } finally {\n spyIf.mockRestore()\n }\n })\n\n it('decodes If header path with special chars via urlToPath', async () => {\n ;(urlToPath as jest.Mock).mockImplementation((s: string) =>\n s\n .split('/')\n .map((segment) => decodeURIComponent(segment))\n .join('/')\n )\n\n const encodedPath = '/webdav/base/path/space%20name'\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.IF]: `<${encodedPath}> (<urn:uuid:abc>)` },\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(urlToPath).toHaveBeenCalledWith(encodedPath)\n expect(req.dav.ifHeaders?.[0]?.path).toBe('/webdav/base/path/space name')\n })\n\n it('missing lockinfo -> 400', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: {},\n body: '<notlockinfo xmlns=\"DAV:\"/>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('invalid lockscope -> 400', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: {},\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><invalid/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('handles Object.keys(lockscope) exception with malformed lockscope -> 400', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: {},\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n\n jest.spyOn(guard as any, 'parseBody').mockImplementation(() => {\n req.dav.body = {\n lockinfo: {\n lockscope: null\n }\n }\n return true\n })\n\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({\n status: HttpStatus.BAD_REQUEST,\n message: 'Invalid or undefined lockscope'\n })\n })\n\n it('refresh (no body) -> dav.depth = null', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: { [HEADER.DEPTH]: DEPTH.RESOURCE },\n body: undefined\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBeNull()\n })\n\n it('no timeout header -> lock.timeout is undefined', async () => {\n const req = baseReq(HTTP_METHOD.LOCK, {\n headers: {},\n body: '<lockinfo xmlns=\"DAV:\"><lockscope><exclusive/></lockscope></lockinfo>'\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock).toBeDefined()\n expect(req.dav.lock.timeout).toBeUndefined()\n })\n })\n\n describe('UNLOCK', () => {\n it('missing lock-token -> 400', async () => {\n const req = baseReq(HTTP_METHOD.UNLOCK)\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('sets token in dav.lock and parses If header', async () => {\n const req = baseReq(HTTP_METHOD.UNLOCK, {\n headers: { [HEADER.LOCK_TOKEN]: ' <abc> ', [HEADER.IF]: '(<urn:uuid:abc>)' }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.lock.token).toBe('abc')\n expectIfHeadersParsed(req)\n })\n })\n\n describe('PUT / DELETE', () => {\n it('PUT: depth=0 and parses If header', async () => {\n const req = baseReq(HTTP_METHOD.PUT, {\n headers: { [HEADER.IF]: '(<urn:uuid:abc>)' }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n expectIfHeadersParsed(req)\n })\n\n it('DELETE: parses If header', async () => {\n const req = baseReq(HTTP_METHOD.DELETE, {\n headers: { [HEADER.IF]: '(<urn:uuid:abc>)' }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expectIfHeadersParsed(req)\n })\n })\n\n describe('MKCOL', () => {\n it('non-zero content-length -> 415', async () => {\n const req = baseReq(HTTP_METHOD.MKCOL, {\n headers: { 'content-length': '3' }\n } as any)\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.UNSUPPORTED_MEDIA_TYPE })\n })\n\n it('zero/absent content-length -> depth=0 and parses If header', async () => {\n const req = baseReq(HTTP_METHOD.MKCOL, {\n headers: { 'content-length': '0', [HEADER.IF]: '(<urn:uuid:abc>)' } as any\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n expectIfHeadersParsed(req)\n })\n })\n\n describe('COPY / MOVE', () => {\n it('COPY: missing Destination -> 400', async () => {\n const req = baseReq(HTTP_METHOD.COPY)\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('COPY: invalid Destination base path -> 400', async () => {\n ;(decodeUrl as jest.Mock).mockImplementation((s: string) => s)\n ;(urlToPath as jest.Mock).mockImplementation((s: string) => '/not-webdav' + s)\n\n const req = baseReq(HTTP_METHOD.COPY, {\n headers: { [HEADER.DESTINATION]: '/wrong' }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).rejects.toMatchObject({ status: HttpStatus.BAD_REQUEST })\n })\n\n it('COPY: valid Destination -> overwrite=true, move=false, depth=infinity and parses If header', async () => {\n ;(decodeUrl as jest.Mock).mockImplementation((s: string) => s)\n ;(urlToPath as jest.Mock).mockImplementation((_s: string) => '/webdav/base/path/target')\n\n const req = baseReq(HTTP_METHOD.COPY, {\n headers: { [HEADER.DESTINATION]: '/webdav/base/path/target', [HEADER.IF]: '(<urn:uuid:abc>)' }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.INFINITY)\n expect(req.dav.copyMove).toEqual({\n overwrite: true,\n destination: '/webdav/base/path/target',\n isMove: false\n })\n expectIfHeadersParsed(req)\n })\n\n it('COPY: decodes special chars in Destination via urlToPath', async () => {\n ;(urlToPath as jest.Mock).mockImplementation((s: string) =>\n s\n .split('/')\n .map((segment) => decodeURIComponent(segment))\n .join('/')\n )\n\n const encodedDestination = '/webdav/base/path/target%20file'\n const req = baseReq(HTTP_METHOD.COPY, {\n headers: { [HEADER.DESTINATION]: encodedDestination }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(urlToPath).toHaveBeenCalledWith(encodedDestination)\n expect(req.dav.copyMove).toEqual({\n overwrite: true,\n destination: '/webdav/base/path/target file',\n isMove: false\n })\n })\n\n it('MOVE: isMove=true and overwrite=false when OVERWRITE header is \"f\", respects depth header', async () => {\n ;(decodeUrl as jest.Mock).mockImplementation((s: string) => s)\n ;(urlToPath as jest.Mock).mockImplementation((_s: string) => '/webdav/base/path/target2')\n\n const req = baseReq(HTTP_METHOD.MOVE, {\n headers: {\n [HEADER.DESTINATION]: '/webdav/base/path/target2',\n [HEADER.OVERWRITE]: 'f',\n [HEADER.DEPTH]: DEPTH.RESOURCE\n }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(req.dav.depth).toBe(DEPTH.RESOURCE)\n expect(req.dav.copyMove).toEqual({\n overwrite: false,\n destination: '/webdav/base/path/target2',\n isMove: true\n })\n })\n\n it('MOVE: decodes special chars in Destination via urlToPath', async () => {\n ;(urlToPath as jest.Mock).mockImplementation((s: string) =>\n s\n .split('/')\n .map((segment) => decodeURIComponent(segment))\n .join('/')\n )\n\n const encodedDestination = '/webdav/base/path/target%5B1%5D'\n const req = baseReq(HTTP_METHOD.MOVE, {\n headers: { [HEADER.DESTINATION]: encodedDestination }\n })\n const res = makeRes()\n const ctx = makeCtx(req, res)\n await expect(guard.canActivate(ctx)).resolves.toBe(true)\n expect(urlToPath).toHaveBeenCalledWith(encodedDestination)\n expect(req.dav.copyMove).toEqual({\n overwrite: true,\n destination: '/webdav/base/path/target[1]',\n isMove: true\n })\n })\n })\n})\n"],"names":["jest","mock","decodeUrl","fn","s","urlToPath","describe","WebDAVProtocolGuard","name","guard","makeUser","hasPerm","havePermission","fullName","email","makeRes","headers","baseReq","method","overrides","body","undefined","originalUrl","protocol","raw","httpVersion","user","makeCtx","req","res","switchToHttp","getRequest","getResponse","expectIfHeadersParsed","expect","Array","isArray","dav","ifHeaders","toBe","length","toBeGreaterThan","beforeEach","clearAllMocks","module","Test","createTestingModule","providers","compile","get","it","HTTP_METHOD","OPTIONS","ctx","canActivate","rejects","toThrow","HttpException","e","ex","toHaveBeenCalledWith","OPTIONS_HEADERS","getStatus","HttpStatus","OK","GET","toMatchObject","status","FORBIDDEN","spy","spyOn","result","toHaveBeenCalled","mockRestore","PROPFIND","resolves","url","depth","DEPTH","MEMBERS","PROPFIND_ALL_PROP","propfindMode","PROPSTAT","ALLPROP","each","title","INFINITY","HEADER","RESOURCE","IF","PROPNAME","BAD_REQUEST","toHaveProperty","spyParse","mockReturnValue","toBeUndefined","PROPPATCH","LOCK","TIMEOUT","lock","timeout","CACHE_LOCK_DEFAULT_TTL","lockscope","LOCK_SCOPE","EXCLUSIVE","owner","toContain","SHARED","toMatch","big","Number","isNaN","originalParseInt","global","parseInt","mockImplementation","Error","toBeDefined","spyIf","IfHeaderUtils","split","map","segment","decodeURIComponent","join","encodedPath","path","lockinfo","message","toBeNull","UNLOCK","LOCK_TOKEN","token","PUT","DELETE","MKCOL","UNSUPPORTED_MEDIA_TYPE","COPY","DESTINATION","_s","copyMove","toEqual","overwrite","destination","isMove","encodedDestination","MOVE","OVERWRITE"],"mappings":"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"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
|
|
3
|
-
* This file is part of Sync-in | The open source file sync and share solution
|
|
4
|
-
* See the LICENSE file for licensing details
|
|
5
|
-
*/ "use strict";
|
|
1
|
+
"use strict";
|
|
6
2
|
Object.defineProperty(exports, "__esModule", {
|
|
7
3
|
value: true
|
|
8
4
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/webdav/interfaces/if-header.interface.ts"],"
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/interfaces/if-header.interface.ts"],"names":[],"mappings":""}
|
|
@@ -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
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/webdav/interfaces/webdav.interface.ts"],"
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/interfaces/webdav.interface.ts"],"names":[],"mappings":""}
|
|
@@ -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
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/webdav/models/webdav-file.model.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/models/webdav-file.model.ts"],"sourcesContent":["import path from 'node:path'\n\nimport { encodeUrl } from '../../../common/shared'\nimport { DEFAULT_MIME_TYPE } from '../../files/constants/files'\nimport { FileProps } from '../../files/interfaces/file-props.interface'\nimport { genEtag } from '../../files/utils/files'\nimport { PROPFIND_COLLECTION, SUPPORTED_LOCKS } from '../utils/webdav'\n\nexport class WebDAVFile implements Omit<FileProps, 'path'> {\n id: number\n name: string\n isDir: boolean\n size: number\n ctime: number\n mtime: number\n mime: string\n\n // extra props\n alias: string\n href: string\n\n constructor(props: Omit<FileProps, 'path'> & { alias?: string }, currentUrl: string, isCurrent = false) {\n Object.assign(this, props)\n if (props?.root?.alias) {\n this.alias = props.root.alias\n }\n this.href = encodeUrl(path.join(currentUrl, isCurrent ? '' : this.aliasName, this.isDir ? '/' : ''))\n }\n\n get aliasName() {\n return this.alias || this.name\n }\n\n get displayname() {\n return this.name\n }\n\n get creationdate() {\n // uses RFC3339 format (ISO 8601)\n return new Date(this.ctime).toISOString()\n }\n\n get getlastmodified() {\n // uses RFC1123 format\n return new Date(this.mtime).toUTCString()\n }\n\n get getcontentlength() {\n return this.isDir ? undefined : this.size\n }\n\n get getcontenttype() {\n if (this.isDir) {\n return undefined\n } else if (this.mime) {\n return this.mime.replaceAll('-', '/')\n }\n return DEFAULT_MIME_TYPE\n }\n\n get resourcetype() {\n return this.isDir ? PROPFIND_COLLECTION : null\n }\n\n get getetag() {\n return this.isDir ? undefined : genEtag(this)\n }\n\n get supportedlock() {\n return SUPPORTED_LOCKS\n }\n\n // eslint-disable-next-line @typescript-eslint/class-literal-property-style\n get lockdiscovery() {\n // implemented in propfind method, used for propname case\n return null\n }\n}\n"],"names":["WebDAVFile","aliasName","alias","name","displayname","creationdate","Date","ctime","toISOString","getlastmodified","mtime","toUTCString","getcontentlength","isDir","undefined","size","getcontenttype","mime","replaceAll","DEFAULT_MIME_TYPE","resourcetype","PROPFIND_COLLECTION","getetag","genEtag","supportedlock","SUPPORTED_LOCKS","lockdiscovery","props","currentUrl","isCurrent","Object","assign","root","href","encodeUrl","path","join"],"mappings":";;;;+BAQaA;;;eAAAA;;;iEARI;wBAES;uBACQ;wBAEV;wBAC6B;;;;;;AAE9C,IAAA,AAAMA,aAAN,MAAMA;IAqBX,IAAIC,YAAY;QACd,OAAO,IAAI,CAACC,KAAK,IAAI,IAAI,CAACC,IAAI;IAChC;IAEA,IAAIC,cAAc;QAChB,OAAO,IAAI,CAACD,IAAI;IAClB;IAEA,IAAIE,eAAe;QACjB,iCAAiC;QACjC,OAAO,IAAIC,KAAK,IAAI,CAACC,KAAK,EAAEC,WAAW;IACzC;IAEA,IAAIC,kBAAkB;QACpB,sBAAsB;QACtB,OAAO,IAAIH,KAAK,IAAI,CAACI,KAAK,EAAEC,WAAW;IACzC;IAEA,IAAIC,mBAAmB;QACrB,OAAO,IAAI,CAACC,KAAK,GAAGC,YAAY,IAAI,CAACC,IAAI;IAC3C;IAEA,IAAIC,iBAAiB;QACnB,IAAI,IAAI,CAACH,KAAK,EAAE;YACd,OAAOC;QACT,OAAO,IAAI,IAAI,CAACG,IAAI,EAAE;YACpB,OAAO,IAAI,CAACA,IAAI,CAACC,UAAU,CAAC,KAAK;QACnC;QACA,OAAOC,wBAAiB;IAC1B;IAEA,IAAIC,eAAe;QACjB,OAAO,IAAI,CAACP,KAAK,GAAGQ,2BAAmB,GAAG;IAC5C;IAEA,IAAIC,UAAU;QACZ,OAAO,IAAI,CAACT,KAAK,GAAGC,YAAYS,IAAAA,eAAO,EAAC,IAAI;IAC9C;IAEA,IAAIC,gBAAgB;QAClB,OAAOC,uBAAe;IACxB;IAEA,2EAA2E;IAC3E,IAAIC,gBAAgB;QAClB,yDAAyD;QACzD,OAAO;IACT;IAvDA,YAAYC,KAAmD,EAAEC,UAAkB,EAAEC,YAAY,KAAK,CAAE;QACtGC,OAAOC,MAAM,CAAC,IAAI,EAAEJ;QACpB,IAAIA,OAAOK,MAAM9B,OAAO;YACtB,IAAI,CAACA,KAAK,GAAGyB,MAAMK,IAAI,CAAC9B,KAAK;QAC/B;QACA,IAAI,CAAC+B,IAAI,GAAGC,IAAAA,iBAAS,EAACC,iBAAI,CAACC,IAAI,CAACR,YAAYC,YAAY,KAAK,IAAI,CAAC5B,SAAS,EAAE,IAAI,CAACY,KAAK,GAAG,MAAM;IAClG;AAkDF"}
|