@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,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
|
});
|
|
@@ -39,10 +35,16 @@ let WebDAVSpaces = class WebDAVSpaces {
|
|
|
39
35
|
return space;
|
|
40
36
|
}
|
|
41
37
|
} catch (e) {
|
|
42
|
-
this.logger.warn(
|
|
38
|
+
this.logger.warn({
|
|
39
|
+
tag: this.spaceEnv.name,
|
|
40
|
+
msg: `${e}`
|
|
41
|
+
});
|
|
43
42
|
return null;
|
|
44
43
|
}
|
|
45
|
-
this.logger.warn(
|
|
44
|
+
this.logger.warn({
|
|
45
|
+
tag: this.spaceEnv.name,
|
|
46
|
+
msg: `Space not authorized or not found : ${path}`
|
|
47
|
+
});
|
|
46
48
|
return null;
|
|
47
49
|
}
|
|
48
50
|
propfind(req, space) {
|
|
@@ -58,7 +60,10 @@ let WebDAVSpaces = class WebDAVSpaces {
|
|
|
58
60
|
case _routes.WEBDAV_NS.TRASH:
|
|
59
61
|
return this.listTrashes(req);
|
|
60
62
|
default:
|
|
61
|
-
this.logger.error(
|
|
63
|
+
this.logger.error({
|
|
64
|
+
tag: this.propfind.name,
|
|
65
|
+
msg: `Unknown space ${space}`
|
|
66
|
+
});
|
|
62
67
|
throw new _common.HttpException('Unknown space', _common.HttpStatus.NOT_FOUND);
|
|
63
68
|
}
|
|
64
69
|
}
|
|
@@ -127,7 +132,10 @@ let WebDAVSpaces = class WebDAVSpaces {
|
|
|
127
132
|
yield this.roots[_routes.WEBDAV_NS.SHARES];
|
|
128
133
|
} else {
|
|
129
134
|
if (!await (0, _files.isPathExists)(space.realPath)) {
|
|
130
|
-
this.logger.warn(
|
|
135
|
+
this.logger.warn({
|
|
136
|
+
tag: this.listFiles.name,
|
|
137
|
+
msg: `Location not found : ${space.realPath}`
|
|
138
|
+
});
|
|
131
139
|
throw new _common.HttpException('Location not found', _common.HttpStatus.NOT_FOUND);
|
|
132
140
|
}
|
|
133
141
|
yield new _webdavfilemodel.WebDAVFile(await (0, _files.getProps)(space.realPath, req.dav.url), req.dav.url, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/webdav/services/webdav-spaces.service.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { getProps, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { SpacesBrowser } from '../../spaces/services/spaces-browser.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { canAccessToSpaceUrl } from '../../spaces/utils/permissions'\nimport { UserModel } from '../../users/models/user.model'\nimport { WEBDAV_NS, WEBDAV_SPACES } from '../constants/routes'\nimport { DEPTH } from '../constants/webdav'\nimport { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { WebDAVFile } from '../models/webdav-file.model'\nimport { WEBDAV_PATH_TO_SPACE_SEGMENTS } from '../utils/routes'\n\n@Injectable()\nexport class WebDAVSpaces {\n private readonly logger = new Logger(WebDAVSpaces.name)\n private readonly roots: Record<string, WebDAVFile> = {}\n\n constructor(\n private readonly spacesManager: SpacesManager,\n private readonly spacesBrowser: SpacesBrowser\n ) {\n for (const [name, info] of Object.entries(WEBDAV_SPACES)) {\n this.roots[name] = new WebDAVFile(\n {\n id: 0,\n name: name,\n isDir: true,\n size: 0,\n ctime: new Date().getTime(),\n mtime: new Date().getTime(),\n mime: undefined\n },\n info.route,\n true\n )\n }\n }\n\n async spaceEnv(user: UserModel, path: string) {\n try {\n const space: SpaceEnv = await this.spacesManager.spaceEnv(user, WEBDAV_PATH_TO_SPACE_SEGMENTS(path))\n if (space) {\n return space\n }\n } catch (e) {\n this.logger.warn(`${this.spaceEnv.name} : ${e}`)\n return null\n }\n\n this.logger.warn(`Space not authorized or not found : ${path}`)\n return null\n }\n\n propfind(req: FastifyDAVRequest, space: string): AsyncGenerator<WebDAVFile> {\n switch (space) {\n case SPACE_REPOSITORY.FILES:\n return this.listFiles(req, req.space)\n case WEBDAV_NS.SERVER:\n return this.listServer(req)\n case WEBDAV_NS.WEBDAV:\n return this.listWebDAV(req)\n case WEBDAV_NS.SPACES:\n return this.listSpaces(req)\n case WEBDAV_NS.TRASH:\n return this.listTrashes(req)\n default:\n this.logger.error(`Unknown space ${space}`)\n throw new HttpException('Unknown space', HttpStatus.NOT_FOUND)\n }\n }\n\n private async *listServer(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.SERVER]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n yield this.roots[WEBDAV_NS.WEBDAV]\n }\n }\n\n private async *listWebDAV(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.WEBDAV]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const root of Object.values(this.roots)) {\n if ([WEBDAV_NS.SERVER as string, WEBDAV_NS.WEBDAV as string].indexOf(root.name) === -1) {\n // filter repositories based on user applications\n if (!canAccessToSpaceUrl(req.user, WEBDAV_SPACES[root.name].spaceRepository)) {\n continue\n }\n yield root\n }\n }\n }\n }\n\n private async *listSpaces(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.SPACES]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const s of await this.spacesManager.listSpaces(req.user.id)) {\n yield new WebDAVFile(\n {\n id: s.id,\n name: s.name,\n alias: s.alias,\n isDir: true,\n size: 0,\n mime: undefined,\n ctime: new Date(s.createdAt).getTime(),\n mtime: new Date(s.modifiedAt).getTime()\n },\n req.dav.url\n )\n }\n }\n }\n\n private async *listTrashes(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.TRASH]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const f of await this.spacesManager.listTrashes(req.user)) {\n yield new WebDAVFile(\n {\n id: f.id,\n alias: f.alias,\n name: `${f.alias} (${f.nb})`,\n isDir: true,\n size: 0,\n mime: undefined,\n mtime: f.mtime,\n ctime: f.ctime\n },\n req.dav.url\n )\n }\n }\n }\n\n private async *listFiles(req: FastifyDAVRequest, space: SpaceEnv): AsyncGenerator<WebDAVFile> {\n let isDir: boolean\n\n if (space.inSharesList) {\n // The shares are defined like a files (direct link)\n isDir = true\n yield this.roots[WEBDAV_NS.SHARES]\n } else {\n if (!(await isPathExists(space.realPath))) {\n this.logger.warn(`Location not found : ${space.realPath}`)\n throw new HttpException('Location not found', HttpStatus.NOT_FOUND)\n }\n yield new WebDAVFile(await getProps(space.realPath, req.dav.url), req.dav.url, true)\n }\n\n if (req.dav.depth === DEPTH.MEMBERS && (isDir === true || (await isPathIsDir(space.realPath)))) {\n const { files } = await this.spacesBrowser.browse(req.user, space)\n for (const f of files) {\n yield new WebDAVFile(f, req.dav.url)\n }\n }\n }\n}\n"],"names":["WebDAVSpaces","spaceEnv","user","path","space","spacesManager","WEBDAV_PATH_TO_SPACE_SEGMENTS","e","logger","warn","name","propfind","req","SPACE_REPOSITORY","FILES","listFiles","WEBDAV_NS","SERVER","listServer","WEBDAV","listWebDAV","SPACES","listSpaces","TRASH","listTrashes","error","HttpException","HttpStatus","NOT_FOUND","roots","dav","depth","DEPTH","MEMBERS","root","Object","values","indexOf","canAccessToSpaceUrl","WEBDAV_SPACES","spaceRepository","s","id","WebDAVFile","alias","isDir","size","mime","undefined","ctime","Date","createdAt","getTime","mtime","modifiedAt","url","f","nb","inSharesList","SHARES","isPathExists","realPath","getProps","isPathIsDir","files","spacesBrowser","browse","Logger","info","entries","route"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/services/webdav-spaces.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport { getProps, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport { SpacesBrowser } from '../../spaces/services/spaces-browser.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { canAccessToSpaceUrl } from '../../spaces/utils/permissions'\nimport { UserModel } from '../../users/models/user.model'\nimport { WEBDAV_NS, WEBDAV_SPACES } from '../constants/routes'\nimport { DEPTH } from '../constants/webdav'\nimport { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { WebDAVFile } from '../models/webdav-file.model'\nimport { WEBDAV_PATH_TO_SPACE_SEGMENTS } from '../utils/routes'\n\n@Injectable()\nexport class WebDAVSpaces {\n private readonly logger = new Logger(WebDAVSpaces.name)\n private readonly roots: Record<string, WebDAVFile> = {}\n\n constructor(\n private readonly spacesManager: SpacesManager,\n private readonly spacesBrowser: SpacesBrowser\n ) {\n for (const [name, info] of Object.entries(WEBDAV_SPACES)) {\n this.roots[name] = new WebDAVFile(\n {\n id: 0,\n name: name,\n isDir: true,\n size: 0,\n ctime: new Date().getTime(),\n mtime: new Date().getTime(),\n mime: undefined\n },\n info.route,\n true\n )\n }\n }\n\n async spaceEnv(user: UserModel, path: string) {\n try {\n const space: SpaceEnv = await this.spacesManager.spaceEnv(user, WEBDAV_PATH_TO_SPACE_SEGMENTS(path))\n if (space) {\n return space\n }\n } catch (e) {\n this.logger.warn({ tag: this.spaceEnv.name, msg: `${e}` })\n return null\n }\n\n this.logger.warn({ tag: this.spaceEnv.name, msg: `Space not authorized or not found : ${path}` })\n return null\n }\n\n propfind(req: FastifyDAVRequest, space: string): AsyncGenerator<WebDAVFile> {\n switch (space) {\n case SPACE_REPOSITORY.FILES:\n return this.listFiles(req, req.space)\n case WEBDAV_NS.SERVER:\n return this.listServer(req)\n case WEBDAV_NS.WEBDAV:\n return this.listWebDAV(req)\n case WEBDAV_NS.SPACES:\n return this.listSpaces(req)\n case WEBDAV_NS.TRASH:\n return this.listTrashes(req)\n default:\n this.logger.error({ tag: this.propfind.name, msg: `Unknown space ${space}` })\n throw new HttpException('Unknown space', HttpStatus.NOT_FOUND)\n }\n }\n\n private async *listServer(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.SERVER]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n yield this.roots[WEBDAV_NS.WEBDAV]\n }\n }\n\n private async *listWebDAV(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.WEBDAV]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const root of Object.values(this.roots)) {\n if ([WEBDAV_NS.SERVER as string, WEBDAV_NS.WEBDAV as string].indexOf(root.name) === -1) {\n // filter repositories based on user applications\n if (!canAccessToSpaceUrl(req.user, WEBDAV_SPACES[root.name].spaceRepository)) {\n continue\n }\n yield root\n }\n }\n }\n }\n\n private async *listSpaces(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.SPACES]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const s of await this.spacesManager.listSpaces(req.user.id)) {\n yield new WebDAVFile(\n {\n id: s.id,\n name: s.name,\n alias: s.alias,\n isDir: true,\n size: 0,\n mime: undefined,\n ctime: new Date(s.createdAt).getTime(),\n mtime: new Date(s.modifiedAt).getTime()\n },\n req.dav.url\n )\n }\n }\n }\n\n private async *listTrashes(req: FastifyDAVRequest): AsyncGenerator<WebDAVFile> {\n yield this.roots[WEBDAV_NS.TRASH]\n\n if (req.dav.depth === DEPTH.MEMBERS) {\n for (const f of await this.spacesManager.listTrashes(req.user)) {\n yield new WebDAVFile(\n {\n id: f.id,\n alias: f.alias,\n name: `${f.alias} (${f.nb})`,\n isDir: true,\n size: 0,\n mime: undefined,\n mtime: f.mtime,\n ctime: f.ctime\n },\n req.dav.url\n )\n }\n }\n }\n\n private async *listFiles(req: FastifyDAVRequest, space: SpaceEnv): AsyncGenerator<WebDAVFile> {\n let isDir: boolean\n\n if (space.inSharesList) {\n // The shares are defined like a files (direct link)\n isDir = true\n yield this.roots[WEBDAV_NS.SHARES]\n } else {\n if (!(await isPathExists(space.realPath))) {\n this.logger.warn({ tag: this.listFiles.name, msg: `Location not found : ${space.realPath}` })\n throw new HttpException('Location not found', HttpStatus.NOT_FOUND)\n }\n yield new WebDAVFile(await getProps(space.realPath, req.dav.url), req.dav.url, true)\n }\n\n if (req.dav.depth === DEPTH.MEMBERS && (isDir === true || (await isPathIsDir(space.realPath)))) {\n const { files } = await this.spacesBrowser.browse(req.user, space)\n for (const f of files) {\n yield new WebDAVFile(f, req.dav.url)\n }\n }\n }\n}\n"],"names":["WebDAVSpaces","spaceEnv","user","path","space","spacesManager","WEBDAV_PATH_TO_SPACE_SEGMENTS","e","logger","warn","tag","name","msg","propfind","req","SPACE_REPOSITORY","FILES","listFiles","WEBDAV_NS","SERVER","listServer","WEBDAV","listWebDAV","SPACES","listSpaces","TRASH","listTrashes","error","HttpException","HttpStatus","NOT_FOUND","roots","dav","depth","DEPTH","MEMBERS","root","Object","values","indexOf","canAccessToSpaceUrl","WEBDAV_SPACES","spaceRepository","s","id","WebDAVFile","alias","isDir","size","mime","undefined","ctime","Date","createdAt","getTime","mtime","modifiedAt","url","f","nb","inSharesList","SHARES","isPathExists","realPath","getProps","isPathIsDir","files","spacesBrowser","browse","Logger","info","entries","route"],"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/services/webdav-spaces.service.spec.ts"],"sourcesContent":["/*\n * Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>\n * This file is part of Sync-in | The open source file sync and share solution\n * See the LICENSE file for licensing details\n */\n\nimport { HttpException, HttpStatus } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { getProps, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpacesBrowser } from '../../spaces/services/spaces-browser.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { canAccessToSpaceUrl } from '../../spaces/utils/permissions'\nimport { WEBDAV_NS } from '../constants/routes'\nimport { DEPTH } from '../constants/webdav'\nimport type { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { WebDAVSpaces } from './webdav-spaces.service'\n\n// mocks for file utils and permissions\njest.mock('../../files/utils/files', () => ({\n getProps: jest.fn(),\n isPathExists: jest.fn(),\n isPathIsDir: jest.fn()\n}))\njest.mock('../../spaces/utils/permissions', () => ({\n canAccessToSpaceUrl: jest.fn()\n}))\n// mock for WEBDAV path-to-space segments\njest.mock('../utils/routes', () => ({\n WEBDAV_PATH_TO_SPACE_SEGMENTS: jest.fn(() => ['files', 'personal'])\n}))\n\n// small helper to collect results from an AsyncGenerator\nasync function collectGenerator<T>(gen: AsyncGenerator<T>): Promise<T[]> {\n const all: T[] = []\n for await (const item of gen) {\n all.push(item)\n }\n return all\n}\n\ndescribe(WebDAVSpaces.name, () => {\n let service: WebDAVSpaces\n let spacesManager: jest.Mocked<SpacesManager>\n let spacesBrowser: jest.Mocked<SpacesBrowser>\n\n const user = { id: 1, login: 'john', isAdmin: false } as any\n\n beforeAll(async () => {\n const spacesManagerMock: Partial<jest.Mocked<SpacesManager>> = {\n spaceEnv: jest.fn(),\n listSpaces: jest.fn(),\n listTrashes: jest.fn()\n }\n const spacesBrowserMock: Partial<jest.Mocked<SpacesBrowser>> = {\n browse: jest.fn()\n }\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [{ provide: SpacesBrowser, useValue: spacesBrowserMock }, { provide: SpacesManager, useValue: spacesManagerMock }, WebDAVSpaces]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<WebDAVSpaces>(WebDAVSpaces)\n spacesManager = module.get(SpacesManager) as jest.Mocked<SpacesManager>\n spacesBrowser = module.get(SpacesBrowser) as jest.Mocked<SpacesBrowser>\n })\n\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n\n describe('spaceEnv', () => {\n it('returns space when manager resolves', async () => {\n const fakeSpace = { alias: 'personal', id: 0 } as any\n ;(spacesManager.spaceEnv as jest.Mock).mockResolvedValue(fakeSpace)\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBe(fakeSpace)\n expect(spacesManager.spaceEnv).toHaveBeenCalled()\n })\n\n it('returns null when manager throws', async () => {\n ;(spacesManager.spaceEnv as jest.Mock).mockRejectedValue(new Error('boom'))\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBeNull()\n })\n\n it('returns null when space not found', async () => {\n ;(spacesManager.spaceEnv as jest.Mock).mockResolvedValue(null)\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBeNull()\n })\n })\n\n describe('propfind - server root', () => {\n it('yields server root and webdav child when depth=1', async () => {\n const req = { user, dav: { url: '/', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SERVER as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SERVER, WEBDAV_NS.WEBDAV])\n })\n\n it('yields only server root when depth=0', async () => {\n const req = { user, dav: { url: '/', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SERVER as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SERVER])\n })\n })\n\n describe('propfind - webdav listing', () => {\n it('filters repositories by user access', async () => {\n ;(canAccessToSpaceUrl as jest.Mock).mockImplementation((_u: any, repos: string[]) => repos?.includes(SPACE_REPOSITORY.FILES))\n const req = { user, dav: { url: '/webdav', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.WEBDAV as any))\n // should list only roots that include FILES in their repository (personal, spaces), not server/webdav\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.WEBDAV, 'personal', 'spaces'])\n })\n\n it('lists only itself when depth=0', async () => {\n const req = { user, dav: { url: '/webdav', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.WEBDAV as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.WEBDAV])\n })\n })\n\n describe('propfind - spaces listing', () => {\n it('yields spaces root then user spaces when depth=1', async () => {\n const now = new Date()\n ;(spacesManager.listSpaces as jest.Mock).mockResolvedValue([\n { id: 10, name: 'Team A', alias: 'team-a', createdAt: now.toISOString(), modifiedAt: now.toISOString() },\n { id: 11, name: 'Team B', alias: 'team-b', createdAt: now.toISOString(), modifiedAt: now.toISOString() }\n ])\n\n const req = { user, dav: { url: '/webdav/spaces', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SPACES as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SPACES, 'Team A', 'Team B'])\n })\n\n it('yields only spaces root when depth=0', async () => {\n ;(spacesManager.listSpaces as jest.Mock).mockResolvedValue([])\n const req = { user, dav: { url: '/webdav/spaces', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SPACES as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SPACES])\n })\n })\n\n describe('propfind - trashes listing', () => {\n it('yields trash root then each trash bucket when depth=1', async () => {\n ;(spacesManager.listTrashes as jest.Mock).mockResolvedValue([\n { id: 1, alias: 'personal', nb: 2, mtime: 3, ctime: 4, name: 'Personal files' },\n { id: 2, alias: 'team-a', nb: 5, mtime: 6, ctime: 7, name: 'Team A' }\n ])\n const req = { user, dav: { url: '/webdav/trash', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.TRASH as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.TRASH, 'personal (2)', 'team-a (5)'])\n })\n\n it('yields only trash root when depth=0', async () => {\n ;(spacesManager.listTrashes as jest.Mock).mockResolvedValue([])\n const req = { user, dav: { url: '/webdav/trash', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.TRASH as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.TRASH])\n })\n })\n\n describe('propfind - files listing (shares list)', () => {\n it('yields shares root and children when inSharesList=true and depth=1', async () => {\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({\n files: [{ id: 1, name: 'doc.txt', isDir: false, size: 12, ctime: 1, mtime: 2, mime: 'text/plain' }]\n })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal', depth: DEPTH.MEMBERS },\n space: { inSharesList: true, realPath: '/any/ignored' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['shares', 'doc.txt'])\n })\n })\n\n describe('propfind - files listing (path cases)', () => {\n it('throws 404 when path does not exist', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(false)\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.RESOURCE },\n space: { inSharesList: false, realPath: '/path/not/found' }\n } as unknown as FastifyDAVRequest\n\n await expect(collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))).rejects.toBeInstanceOf(HttpException)\n await expect(collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))).rejects.toMatchObject({ status: HttpStatus.NOT_FOUND })\n })\n\n it('yields current directory and children when path exists and is dir', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n ;(getProps as jest.Mock).mockResolvedValue({\n id: 100,\n name: 'current',\n isDir: true,\n size: 0,\n ctime: Date.now(),\n mtime: Date.now(),\n mime: undefined\n })\n ;(isPathIsDir as jest.Mock).mockResolvedValue(true)\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({\n files: [{ id: 2, name: 'child.txt', isDir: false, size: 1, ctime: 1, mtime: 2, mime: 'text/plain' }]\n })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.MEMBERS },\n space: { inSharesList: false, realPath: '/path/current' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['current', 'child.txt'])\n })\n\n it('does not list children when path exists but is not a directory', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n ;(getProps as jest.Mock).mockResolvedValue({\n id: 101,\n name: 'current',\n isDir: false,\n size: 123,\n ctime: Date.now(),\n mtime: Date.now(),\n mime: 'text/plain'\n })\n ;(isPathIsDir as jest.Mock).mockResolvedValue(false)\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({ files: [] })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.MEMBERS },\n space: { inSharesList: false, realPath: '/path/current' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['current'])\n expect(spacesBrowser.browse).not.toHaveBeenCalled()\n })\n })\n\n describe('propfind - unknown space', () => {\n it('throws not found for unknown space', () => {\n const req = { user, dav: { url: '/webdav/unknown', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n try {\n service.propfind(req, 'unknown' as any)\n fail('Expected HttpException to be thrown')\n } catch (err) {\n expect(err).toBeInstanceOf(HttpException)\n expect((err as HttpException).getStatus()).toBe(HttpStatus.NOT_FOUND)\n }\n })\n })\n})\n"],"names":["jest","mock","getProps","fn","isPathExists","isPathIsDir","canAccessToSpaceUrl","WEBDAV_PATH_TO_SPACE_SEGMENTS","collectGenerator","gen","all","item","push","describe","WebDAVSpaces","name","service","spacesManager","spacesBrowser","user","id","login","isAdmin","beforeAll","spacesManagerMock","spaceEnv","listSpaces","listTrashes","spacesBrowserMock","browse","module","Test","createTestingModule","providers","provide","SpacesBrowser","useValue","SpacesManager","compile","useLogger","get","beforeEach","clearAllMocks","it","expect","toBeDefined","fakeSpace","alias","mockResolvedValue","res","toBe","toHaveBeenCalled","mockRejectedValue","Error","toBeNull","req","dav","url","depth","DEPTH","MEMBERS","items","propfind","WEBDAV_NS","SERVER","map","i","toEqual","WEBDAV","RESOURCE","mockImplementation","_u","repos","includes","SPACE_REPOSITORY","FILES","now","Date","createdAt","toISOString","modifiedAt","SPACES","nb","mtime","ctime","TRASH","files","isDir","size","mime","space","inSharesList","realPath","rejects","toBeInstanceOf","HttpException","toMatchObject","status","HttpStatus","NOT_FOUND","undefined","not","fail","err","getStatus"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/services/webdav-spaces.service.spec.ts"],"sourcesContent":["import { HttpException, HttpStatus } from '@nestjs/common'\nimport { Test, TestingModule } from '@nestjs/testing'\nimport { getProps, isPathExists, isPathIsDir } from '../../files/utils/files'\nimport { SPACE_REPOSITORY } from '../../spaces/constants/spaces'\nimport { SpacesBrowser } from '../../spaces/services/spaces-browser.service'\nimport { SpacesManager } from '../../spaces/services/spaces-manager.service'\nimport { canAccessToSpaceUrl } from '../../spaces/utils/permissions'\nimport { WEBDAV_NS } from '../constants/routes'\nimport { DEPTH } from '../constants/webdav'\nimport type { FastifyDAVRequest } from '../interfaces/webdav.interface'\nimport { WebDAVSpaces } from './webdav-spaces.service'\n\n// mocks for file utils and permissions\njest.mock('../../files/utils/files', () => ({\n getProps: jest.fn(),\n isPathExists: jest.fn(),\n isPathIsDir: jest.fn()\n}))\njest.mock('../../spaces/utils/permissions', () => ({\n canAccessToSpaceUrl: jest.fn()\n}))\n// mock for WEBDAV path-to-space segments\njest.mock('../utils/routes', () => ({\n WEBDAV_PATH_TO_SPACE_SEGMENTS: jest.fn(() => ['files', 'personal'])\n}))\n\n// small helper to collect results from an AsyncGenerator\nasync function collectGenerator<T>(gen: AsyncGenerator<T>): Promise<T[]> {\n const all: T[] = []\n for await (const item of gen) {\n all.push(item)\n }\n return all\n}\n\ndescribe(WebDAVSpaces.name, () => {\n let service: WebDAVSpaces\n let spacesManager: jest.Mocked<SpacesManager>\n let spacesBrowser: jest.Mocked<SpacesBrowser>\n\n const user = { id: 1, login: 'john', isAdmin: false } as any\n\n beforeAll(async () => {\n const spacesManagerMock: Partial<jest.Mocked<SpacesManager>> = {\n spaceEnv: jest.fn(),\n listSpaces: jest.fn(),\n listTrashes: jest.fn()\n }\n const spacesBrowserMock: Partial<jest.Mocked<SpacesBrowser>> = {\n browse: jest.fn()\n }\n\n const module: TestingModule = await Test.createTestingModule({\n providers: [{ provide: SpacesBrowser, useValue: spacesBrowserMock }, { provide: SpacesManager, useValue: spacesManagerMock }, WebDAVSpaces]\n }).compile()\n\n module.useLogger(['fatal'])\n service = module.get<WebDAVSpaces>(WebDAVSpaces)\n spacesManager = module.get(SpacesManager) as jest.Mocked<SpacesManager>\n spacesBrowser = module.get(SpacesBrowser) as jest.Mocked<SpacesBrowser>\n })\n\n beforeEach(() => {\n jest.clearAllMocks()\n })\n\n it('should be defined', () => {\n expect(service).toBeDefined()\n })\n\n describe('spaceEnv', () => {\n it('returns space when manager resolves', async () => {\n const fakeSpace = { alias: 'personal', id: 0 } as any\n ;(spacesManager.spaceEnv as jest.Mock).mockResolvedValue(fakeSpace)\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBe(fakeSpace)\n expect(spacesManager.spaceEnv).toHaveBeenCalled()\n })\n\n it('returns null when manager throws', async () => {\n ;(spacesManager.spaceEnv as jest.Mock).mockRejectedValue(new Error('boom'))\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBeNull()\n })\n\n it('returns null when space not found', async () => {\n ;(spacesManager.spaceEnv as jest.Mock).mockResolvedValue(null)\n\n const res = await service.spaceEnv(user as any, '/webdav/personal')\n expect(res).toBeNull()\n })\n })\n\n describe('propfind - server root', () => {\n it('yields server root and webdav child when depth=1', async () => {\n const req = { user, dav: { url: '/', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SERVER as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SERVER, WEBDAV_NS.WEBDAV])\n })\n\n it('yields only server root when depth=0', async () => {\n const req = { user, dav: { url: '/', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SERVER as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SERVER])\n })\n })\n\n describe('propfind - webdav listing', () => {\n it('filters repositories by user access', async () => {\n ;(canAccessToSpaceUrl as jest.Mock).mockImplementation((_u: any, repos: string[]) => repos?.includes(SPACE_REPOSITORY.FILES))\n const req = { user, dav: { url: '/webdav', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.WEBDAV as any))\n // should list only roots that include FILES in their repository (personal, spaces), not server/webdav\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.WEBDAV, 'personal', 'spaces'])\n })\n\n it('lists only itself when depth=0', async () => {\n const req = { user, dav: { url: '/webdav', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.WEBDAV as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.WEBDAV])\n })\n })\n\n describe('propfind - spaces listing', () => {\n it('yields spaces root then user spaces when depth=1', async () => {\n const now = new Date()\n ;(spacesManager.listSpaces as jest.Mock).mockResolvedValue([\n { id: 10, name: 'Team A', alias: 'team-a', createdAt: now.toISOString(), modifiedAt: now.toISOString() },\n { id: 11, name: 'Team B', alias: 'team-b', createdAt: now.toISOString(), modifiedAt: now.toISOString() }\n ])\n\n const req = { user, dav: { url: '/webdav/spaces', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SPACES as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SPACES, 'Team A', 'Team B'])\n })\n\n it('yields only spaces root when depth=0', async () => {\n ;(spacesManager.listSpaces as jest.Mock).mockResolvedValue([])\n const req = { user, dav: { url: '/webdav/spaces', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.SPACES as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.SPACES])\n })\n })\n\n describe('propfind - trashes listing', () => {\n it('yields trash root then each trash bucket when depth=1', async () => {\n ;(spacesManager.listTrashes as jest.Mock).mockResolvedValue([\n { id: 1, alias: 'personal', nb: 2, mtime: 3, ctime: 4, name: 'Personal files' },\n { id: 2, alias: 'team-a', nb: 5, mtime: 6, ctime: 7, name: 'Team A' }\n ])\n const req = { user, dav: { url: '/webdav/trash', depth: DEPTH.MEMBERS } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.TRASH as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.TRASH, 'personal (2)', 'team-a (5)'])\n })\n\n it('yields only trash root when depth=0', async () => {\n ;(spacesManager.listTrashes as jest.Mock).mockResolvedValue([])\n const req = { user, dav: { url: '/webdav/trash', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n const items = await collectGenerator(service.propfind(req, WEBDAV_NS.TRASH as any))\n expect(items.map((i: any) => i.name)).toEqual([WEBDAV_NS.TRASH])\n })\n })\n\n describe('propfind - files listing (shares list)', () => {\n it('yields shares root and children when inSharesList=true and depth=1', async () => {\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({\n files: [{ id: 1, name: 'doc.txt', isDir: false, size: 12, ctime: 1, mtime: 2, mime: 'text/plain' }]\n })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal', depth: DEPTH.MEMBERS },\n space: { inSharesList: true, realPath: '/any/ignored' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['shares', 'doc.txt'])\n })\n })\n\n describe('propfind - files listing (path cases)', () => {\n it('throws 404 when path does not exist', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(false)\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.RESOURCE },\n space: { inSharesList: false, realPath: '/path/not/found' }\n } as unknown as FastifyDAVRequest\n\n await expect(collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))).rejects.toBeInstanceOf(HttpException)\n await expect(collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))).rejects.toMatchObject({ status: HttpStatus.NOT_FOUND })\n })\n\n it('yields current directory and children when path exists and is dir', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n ;(getProps as jest.Mock).mockResolvedValue({\n id: 100,\n name: 'current',\n isDir: true,\n size: 0,\n ctime: Date.now(),\n mtime: Date.now(),\n mime: undefined\n })\n ;(isPathIsDir as jest.Mock).mockResolvedValue(true)\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({\n files: [{ id: 2, name: 'child.txt', isDir: false, size: 1, ctime: 1, mtime: 2, mime: 'text/plain' }]\n })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.MEMBERS },\n space: { inSharesList: false, realPath: '/path/current' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['current', 'child.txt'])\n })\n\n it('does not list children when path exists but is not a directory', async () => {\n ;(isPathExists as jest.Mock).mockResolvedValue(true)\n ;(getProps as jest.Mock).mockResolvedValue({\n id: 101,\n name: 'current',\n isDir: false,\n size: 123,\n ctime: Date.now(),\n mtime: Date.now(),\n mime: 'text/plain'\n })\n ;(isPathIsDir as jest.Mock).mockResolvedValue(false)\n ;(spacesBrowser.browse as jest.Mock).mockResolvedValue({ files: [] })\n\n const req = {\n user,\n dav: { url: '/webdav/files/personal/current', depth: DEPTH.MEMBERS },\n space: { inSharesList: false, realPath: '/path/current' }\n } as unknown as FastifyDAVRequest\n\n const items = await collectGenerator(service.propfind(req, SPACE_REPOSITORY.FILES))\n expect(items.map((i: any) => i.name)).toEqual(['current'])\n expect(spacesBrowser.browse).not.toHaveBeenCalled()\n })\n })\n\n describe('propfind - unknown space', () => {\n it('throws not found for unknown space', () => {\n const req = { user, dav: { url: '/webdav/unknown', depth: DEPTH.RESOURCE } } as unknown as FastifyDAVRequest\n try {\n service.propfind(req, 'unknown' as any)\n fail('Expected HttpException to be thrown')\n } catch (err) {\n expect(err).toBeInstanceOf(HttpException)\n expect((err as HttpException).getStatus()).toBe(HttpStatus.NOT_FOUND)\n }\n })\n })\n})\n"],"names":["jest","mock","getProps","fn","isPathExists","isPathIsDir","canAccessToSpaceUrl","WEBDAV_PATH_TO_SPACE_SEGMENTS","collectGenerator","gen","all","item","push","describe","WebDAVSpaces","name","service","spacesManager","spacesBrowser","user","id","login","isAdmin","beforeAll","spacesManagerMock","spaceEnv","listSpaces","listTrashes","spacesBrowserMock","browse","module","Test","createTestingModule","providers","provide","SpacesBrowser","useValue","SpacesManager","compile","useLogger","get","beforeEach","clearAllMocks","it","expect","toBeDefined","fakeSpace","alias","mockResolvedValue","res","toBe","toHaveBeenCalled","mockRejectedValue","Error","toBeNull","req","dav","url","depth","DEPTH","MEMBERS","items","propfind","WEBDAV_NS","SERVER","map","i","toEqual","WEBDAV","RESOURCE","mockImplementation","_u","repos","includes","SPACE_REPOSITORY","FILES","now","Date","createdAt","toISOString","modifiedAt","SPACES","nb","mtime","ctime","TRASH","files","isDir","size","mime","space","inSharesList","realPath","rejects","toBeInstanceOf","HttpException","toMatchObject","status","HttpStatus","NOT_FOUND","undefined","not","fail","err","getStatus"],"mappings":"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"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright (C) 2012-2026 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/utils/bootstrap.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/utils/bootstrap.ts"],"sourcesContent":["import { NestFastifyApplication } from '@nestjs/platform-fastify'\nimport { FastifyInstance } from 'fastify'\nimport { HTTP_METHOD, HTTP_WEBDAV_METHOD } from '../../applications.constants'\nimport { WEBDAV_NS, WEBDAV_SPACES } from '../constants/routes'\nimport { WEBDAV_CONTENT_TYPES } from '../constants/webdav'\n\n/**\n * Bootstrap WebDAV-specific Nest/Fastify configuration.\n *\n * - Enables XML body parsing for WebDAV XML-based methods (PROPFIND/PROPPATCH/etc.)\n * - Registers additional WebDAV HTTP methods\n * - Forces binary Content-Type ONLY for WebDAV PUT requests (file uploads)\n *\n * Per RFC 4918, PUT is used to create/replace the content of a resource and the\n * request body must be treated as an opaque stream (even if the file is JSON/XML).\n */\nexport function bootstrapWebDAV(app: NestFastifyApplication, fastifyInstance: FastifyInstance) {\n // Enable XML body parser for WebDAV XML requests (PROPFIND, PROPPATCH, LOCK, etc.)\n app.useBodyParser(WEBDAV_CONTENT_TYPES)\n\n // Register WebDAV-specific HTTP methods\n for (const method of Object.values(HTTP_WEBDAV_METHOD)) {\n fastifyInstance.addHttpMethod(method, { hasBody: true })\n }\n\n /**\n * onRequest hook for WebDAV uploads.\n *\n * WebDAV clients may send JSON/XML files with a Content-Type that triggers\n * Fastify's body parsers (application/json, text/plain, application/xml...).\n * For PUT uploads we must always treat the payload as a raw binary stream.\n *\n * This hook forces `application/octet-stream` for WebDAV PUT requests only,\n * leaving XML-based WebDAV methods unaffected.\n */\n fastifyInstance.addHook('onRequest', (req, _reply, done) => {\n // Only handle WebDAV PUT requests under the WebDAV base path\n if (req.method !== HTTP_METHOD.PUT) return done()\n if (!req.originalUrl.startsWith(WEBDAV_SPACES[WEBDAV_NS.WEBDAV].route)) return done()\n\n req.headers['content-type'] = 'application/octet-stream'\n return done()\n })\n}\n"],"names":["bootstrapWebDAV","app","fastifyInstance","useBodyParser","WEBDAV_CONTENT_TYPES","method","Object","values","HTTP_WEBDAV_METHOD","addHttpMethod","hasBody","addHook","req","_reply","done","HTTP_METHOD","PUT","originalUrl","startsWith","WEBDAV_SPACES","WEBDAV_NS","WEBDAV","route","headers"],"mappings":";;;;+BAgBgBA;;;eAAAA;;;uCAdgC;wBACP;wBACJ;AAY9B,SAASA,gBAAgBC,GAA2B,EAAEC,eAAgC;IAC3F,mFAAmF;IACnFD,IAAIE,aAAa,CAACC,4BAAoB;IAEtC,wCAAwC;IACxC,KAAK,MAAMC,UAAUC,OAAOC,MAAM,CAACC,yCAAkB,EAAG;QACtDN,gBAAgBO,aAAa,CAACJ,QAAQ;YAAEK,SAAS;QAAK;IACxD;IAEA;;;;;;;;;GASC,GACDR,gBAAgBS,OAAO,CAAC,aAAa,CAACC,KAAKC,QAAQC;QACjD,6DAA6D;QAC7D,IAAIF,IAAIP,MAAM,KAAKU,kCAAW,CAACC,GAAG,EAAE,OAAOF;QAC3C,IAAI,CAACF,IAAIK,WAAW,CAACC,UAAU,CAACC,qBAAa,CAACC,iBAAS,CAACC,MAAM,CAAC,CAACC,KAAK,GAAG,OAAOR;QAE/EF,IAAIW,OAAO,CAAC,eAAe,GAAG;QAC9B,OAAOT;IACT;AACF"}
|
|
@@ -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/utils/if-header.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/utils/if-header.ts"],"sourcesContent":["import { urlToPath } from '../../../common/functions'\nimport { IfHeader } from '../interfaces/if-header.interface'\n\n//IF HEADER Before : (<locktoken:a-write-lock-token> [\"I am an ETag\"]) ([\"I am another ETag\"])\n//IF HEADER After : [{\"path\":\"/webdav/specs/\",\"token\":{\"mustMatch\":true,\"value\":\"urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2\"},\n// \"etag\":{\"mustMatch\":true,\"value\":\"W/\\\"A weak ETag\\\"\"}},\n// {\"path\":\"/webdav/specs/\",\"etag\":{\"mustMatch\":true,\"value\":\"\\\"strong ETag\\\"\"}}]\n\nconst ifHeaderRegExp = /(?:<([^>]+)>)?\\s*\\(([^)]+)\\)/g\nconst ifHeaderInternalRegExp = /((not)|\\[([^\\]]+)\\]|<(DAV:no-lock)>|<([^>]+)>|([^\\s]+))/gi\n\nfunction parseIfHeaderInternal(path: string, group: string) {\n let match = ifHeaderInternalRegExp.exec(group)\n\n let mustMatch = true\n const state: IfHeader = path ? { path: path } : {}\n\n while (match) {\n if (match[2]) {\n // not\n // inverse condition\n mustMatch = false\n } else if (match[5] || match[6]) {\n // check if a lock token match\n state.token = { mustMatch, value: match[5] || match[6] }\n mustMatch = true\n } else if (match[3]) {\n // check if etag is matching\n state.etag = { mustMatch, value: match[3] }\n mustMatch = true\n } else if (match[4]) {\n // check if no lock exists (DAV:no-lock)\n state.haveLock = { mustMatch: !mustMatch }\n mustMatch = true\n }\n match = ifHeaderInternalRegExp.exec(group)\n }\n\n return state\n}\n\nexport function parseIfHeader(ifHeader: string): IfHeader[] {\n const orArray: IfHeader[] = []\n let match = ifHeaderRegExp.exec(ifHeader)\n let path = undefined\n\n while (match) {\n if (match[1]) {\n path = urlToPath(match[1])\n }\n orArray.push(parseIfHeaderInternal(path, match[2]))\n match = ifHeaderRegExp.exec(ifHeader)\n }\n return orArray\n}\n\nexport function extractOneToken(ifHeaders: IfHeader[]): string {\n return ifHeaders[0].token.value\n}\n\nexport function extractAllTokens(ifHeaders: IfHeader[]): string[] {\n return ifHeaders ? ifHeaders.map((i: IfHeader) => i.token?.value).filter(Boolean) : []\n}\n"],"names":["extractAllTokens","extractOneToken","parseIfHeader","ifHeaderRegExp","ifHeaderInternalRegExp","parseIfHeaderInternal","path","group","match","exec","mustMatch","state","token","value","etag","haveLock","ifHeader","orArray","undefined","urlToPath","push","ifHeaders","map","i","filter","Boolean"],"mappings":";;;;;;;;;;;QA4DgBA;eAAAA;;QAJAC;eAAAA;;QAfAC;eAAAA;;;2BAzCU;AAG1B,8FAA8F;AAC9F,iIAAiI;AACjI,8EAA8E;AAC9E,oGAAoG;AAEpG,MAAMC,iBAAiB;AACvB,MAAMC,yBAAyB;AAE/B,SAASC,sBAAsBC,IAAY,EAAEC,KAAa;IACxD,IAAIC,QAAQJ,uBAAuBK,IAAI,CAACF;IAExC,IAAIG,YAAY;IAChB,MAAMC,QAAkBL,OAAO;QAAEA,MAAMA;IAAK,IAAI,CAAC;IAEjD,MAAOE,MAAO;QACZ,IAAIA,KAAK,CAAC,EAAE,EAAE;YACZ,MAAM;YACN,oBAAoB;YACpBE,YAAY;QACd,OAAO,IAAIF,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE,EAAE;YAC/B,8BAA8B;YAC9BG,MAAMC,KAAK,GAAG;gBAAEF;gBAAWG,OAAOL,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE;YAAC;YACvDE,YAAY;QACd,OAAO,IAAIF,KAAK,CAAC,EAAE,EAAE;YACnB,4BAA4B;YAC5BG,MAAMG,IAAI,GAAG;gBAAEJ;gBAAWG,OAAOL,KAAK,CAAC,EAAE;YAAC;YAC1CE,YAAY;QACd,OAAO,IAAIF,KAAK,CAAC,EAAE,EAAE;YACnB,wCAAwC;YACxCG,MAAMI,QAAQ,GAAG;gBAAEL,WAAW,CAACA;YAAU;YACzCA,YAAY;QACd;QACAF,QAAQJ,uBAAuBK,IAAI,CAACF;IACtC;IAEA,OAAOI;AACT;AAEO,SAAST,cAAcc,QAAgB;IAC5C,MAAMC,UAAsB,EAAE;IAC9B,IAAIT,QAAQL,eAAeM,IAAI,CAACO;IAChC,IAAIV,OAAOY;IAEX,MAAOV,MAAO;QACZ,IAAIA,KAAK,CAAC,EAAE,EAAE;YACZF,OAAOa,IAAAA,oBAAS,EAACX,KAAK,CAAC,EAAE;QAC3B;QACAS,QAAQG,IAAI,CAACf,sBAAsBC,MAAME,KAAK,CAAC,EAAE;QACjDA,QAAQL,eAAeM,IAAI,CAACO;IAC9B;IACA,OAAOC;AACT;AAEO,SAAShB,gBAAgBoB,SAAqB;IACnD,OAAOA,SAAS,CAAC,EAAE,CAACT,KAAK,CAACC,KAAK;AACjC;AAEO,SAASb,iBAAiBqB,SAAqB;IACpD,OAAOA,YAAYA,UAAUC,GAAG,CAAC,CAACC,IAAgBA,EAAEX,KAAK,EAAEC,OAAOW,MAAM,CAACC,WAAW,EAAE;AACxF"}
|
|
@@ -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/utils/routes.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/utils/routes.ts"],"sourcesContent":["import { PATH_TO_SPACE_SEGMENTS } from '../../spaces/utils/routes'\nimport { WEBDAV_BASE_PATH, WEBDAV_SPACES } from '../constants/routes'\n\nexport function WEBDAV_PATH_TO_SPACE_SEGMENTS(path: string): string[] {\n const urlSegments = PATH_TO_SPACE_SEGMENTS(path)\n if (urlSegments[0] === WEBDAV_BASE_PATH) {\n urlSegments.shift()\n }\n const repository = urlSegments.shift()\n if (!(repository in WEBDAV_SPACES)) {\n throw new Error(`Repository not found : ${repository}`)\n }\n urlSegments.unshift(...WEBDAV_SPACES[repository].spaceRepository)\n return urlSegments\n}\n"],"names":["WEBDAV_PATH_TO_SPACE_SEGMENTS","path","urlSegments","PATH_TO_SPACE_SEGMENTS","WEBDAV_BASE_PATH","shift","repository","WEBDAV_SPACES","Error","unshift","spaceRepository"],"mappings":";;;;+BAGgBA;;;eAAAA;;;wBAHuB;yBACS;AAEzC,SAASA,8BAA8BC,IAAY;IACxD,MAAMC,cAAcC,IAAAA,8BAAsB,EAACF;IAC3C,IAAIC,WAAW,CAAC,EAAE,KAAKE,yBAAgB,EAAE;QACvCF,YAAYG,KAAK;IACnB;IACA,MAAMC,aAAaJ,YAAYG,KAAK;IACpC,IAAI,CAAEC,CAAAA,cAAcC,sBAAa,AAAD,GAAI;QAClC,MAAM,IAAIC,MAAM,CAAC,uBAAuB,EAAEF,YAAY;IACxD;IACAJ,YAAYO,OAAO,IAAIF,sBAAa,CAACD,WAAW,CAACI,eAAe;IAChE,OAAOR;AACT"}
|
|
@@ -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/utils/webdav.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/utils/webdav.ts"],"sourcesContent":["import { FastifyReply } from 'fastify'\nimport http from 'node:http'\nimport { currentTimeStamp, encodeUrl, SERVER_NAME } from '../../../common/shared'\nimport { FileLock } from '../../files/interfaces/file-lock.interface'\nimport { LOCK_SCOPE, NS_DAV, NS_PREFIX, PROPSTAT, XML_CONTENT_TYPE } from '../constants/webdav'\nimport { XML_NS, xmlBuild } from './xml'\n\nexport const XML_DAV_NS = { [`${XML_NS}:${NS_PREFIX}`]: `${NS_DAV}` }\nexport const PROPFIND_COLLECTION = { [`${NS_PREFIX}:collection`]: null }\nexport const PROPFIND_ALL_PROP = {\n [`${NS_PREFIX}:propfind`]: {\n [`${NS_PREFIX}:${PROPSTAT.ALLPROP}`]: null,\n ...XML_DAV_NS\n }\n}\n\nexport const SUPPORTED_LOCKS = {\n [`${NS_PREFIX}:lockentry`]: [\n {\n [`${NS_PREFIX}:lockscope`]: {\n [`${NS_PREFIX}:exclusive`]: null\n },\n [`${NS_PREFIX}:locktype`]: {\n [`${NS_PREFIX}:write`]: null\n }\n },\n {\n [`${NS_PREFIX}:lockscope`]: {\n [`${NS_PREFIX}:shared`]: null\n },\n [`${NS_PREFIX}:locktype`]: {\n [`${NS_PREFIX}:write`]: null\n }\n }\n ]\n}\n\nexport function PROP(prop: any, httpVersion: string, httpStatus: number, description?: string) {\n return {\n [`${NS_PREFIX}:prop`]: prop,\n [`${NS_PREFIX}:status`]: `${httpVersion} ${httpStatus} ${http.STATUS_CODES[httpStatus]}`,\n [`${NS_PREFIX}:responsedescription`]: description ? { [`${NS_PREFIX}:error`]: { [`${NS_PREFIX}:${description}`]: null } } : undefined\n }\n}\n\nexport function PROP_STAT(href: string, props: any) {\n return {\n [`${NS_PREFIX}:href`]: href,\n [`${NS_PREFIX}:propstat`]: props\n }\n}\n\nexport function MULTI_STATUS(content: any) {\n return {\n [`${NS_PREFIX}:multistatus`]: { [`${NS_PREFIX}:response`]: content, ...XML_DAV_NS }\n }\n}\n\nexport function LOCK_DISCOVERY(locks: FileLock[]) {\n // only locktype write is currently implemented in RFC\n const activeLocks = []\n for (const lock of locks) {\n activeLocks.push({\n [`${NS_PREFIX}:activelock`]: {\n [`${NS_PREFIX}:locktype`]: { [`${NS_PREFIX}:write`]: null },\n [`${NS_PREFIX}:lockscope`]: { [`${NS_PREFIX}:${lock.options?.lockScope || LOCK_SCOPE.EXCLUSIVE}`]: null },\n [`${NS_PREFIX}:locktoken`]: { [`${NS_PREFIX}:href`]: lock.options?.lockToken || SERVER_NAME },\n [`${NS_PREFIX}:lockroot`]: { [`${NS_PREFIX}:href`]: encodeUrl(lock.options?.lockRoot || lock.dbFilePath) },\n [`${NS_PREFIX}:owner`]: formatLockOwner(lock),\n [`${NS_PREFIX}:timeout`]: `Second-${Math.floor(lock.expiration - currentTimeStamp())}`,\n [`${NS_PREFIX}:depth`]: lock.depth\n }\n })\n }\n return activeLocks\n}\n\nexport function LOCK_PROP(locks: FileLock[]) {\n return { [`${NS_PREFIX}:prop`]: { [`${NS_PREFIX}:lockdiscovery`]: LOCK_DISCOVERY(locks), ...XML_DAV_NS } }\n}\n\nexport function DAV_ERROR(error: string, href?: string): string {\n return xmlBuild({\n 'ns0:error': { [`ns0:${error}`]: href ? [{ 'ns0:href': encodeUrl(href) }] : '', [`${XML_NS}:ns0`]: `${NS_DAV}` }\n })\n}\n\nexport function DAV_ERROR_RES(code: number, error: string, res: FastifyReply, href?: string): FastifyReply {\n return res.status(code).type(XML_CONTENT_TYPE).send(DAV_ERROR(error, href))\n}\n\nfunction formatLockOwner(lock: FileLock) {\n const lockInfo = `${lock.options.lockInfo ? `${lock.options.lockInfo}` : ''}${lock.app ? ` ${lock.app}` : ''}`\n return `${lock.owner.fullName} (${lock.owner.email})${lockInfo ? ` - ${lockInfo}` : ''}`\n}\n"],"names":["DAV_ERROR","DAV_ERROR_RES","LOCK_DISCOVERY","LOCK_PROP","MULTI_STATUS","PROP","PROPFIND_ALL_PROP","PROPFIND_COLLECTION","PROP_STAT","SUPPORTED_LOCKS","XML_DAV_NS","XML_NS","NS_PREFIX","NS_DAV","PROPSTAT","ALLPROP","prop","httpVersion","httpStatus","description","http","STATUS_CODES","undefined","href","props","content","locks","activeLocks","lock","push","options","lockScope","LOCK_SCOPE","EXCLUSIVE","lockToken","SERVER_NAME","encodeUrl","lockRoot","dbFilePath","formatLockOwner","Math","floor","expiration","currentTimeStamp","depth","error","xmlBuild","code","res","status","type","XML_CONTENT_TYPE","send","lockInfo","app","owner","fullName","email"],"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/utils/xml.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/webdav/utils/xml.ts"],"sourcesContent":["import { XMLBuilder, XMLParser, XMLValidator } from 'fast-xml-parser'\n\nexport const XML_NS_PREFIX = '@_'\n\nexport const XML_NS = `${XML_NS_PREFIX}xmlns`\n\nexport const XML_VERSION = {\n '?xml': {\n [`${XML_NS_PREFIX}version`]: '1.0',\n [`${XML_NS_PREFIX}encoding`]: 'utf-8',\n [`${XML_NS_PREFIX}standalone`]: 'yes'\n }\n}\n\nconst xmlParser = new XMLParser({\n ignoreAttributes: false,\n removeNSPrefix: true,\n attributeNamePrefix: XML_NS_PREFIX,\n ignoreDeclaration: true,\n ignorePiTags: true,\n processEntities: false\n})\n\nconst xmlBuilder = new XMLBuilder({\n ignoreAttributes: false,\n attributeNamePrefix: XML_NS_PREFIX,\n format: false,\n suppressEmptyNode: true\n})\n\nexport function xmlIsValid(content: string) {\n return XMLValidator.validate(content)\n}\n\nexport function xmlBuild(content: any): string {\n return xmlBuilder.build({ ...XML_VERSION, ...content }) as string\n}\n\nexport function xmlParse(content: any): any {\n return xmlParser.parse(content)\n}\n"],"names":["XML_NS","XML_NS_PREFIX","XML_VERSION","xmlBuild","xmlIsValid","xmlParse","xmlParser","XMLParser","ignoreAttributes","removeNSPrefix","attributeNamePrefix","ignoreDeclaration","ignorePiTags","processEntities","xmlBuilder","XMLBuilder","format","suppressEmptyNode","content","XMLValidator","validate","build","parse"],"mappings":";;;;;;;;;;;QAIaA;eAAAA;;QAFAC;eAAAA;;QAIAC;eAAAA;;QA4BGC;eAAAA;;QAJAC;eAAAA;;QAQAC;eAAAA;;;+BAtCoC;AAE7C,MAAMJ,gBAAgB;AAEtB,MAAMD,SAAS,GAAGC,cAAc,KAAK,CAAC;AAEtC,MAAMC,cAAc;IACzB,QAAQ;QACN,CAAC,GAAGD,cAAc,OAAO,CAAC,CAAC,EAAE;QAC7B,CAAC,GAAGA,cAAc,QAAQ,CAAC,CAAC,EAAE;QAC9B,CAAC,GAAGA,cAAc,UAAU,CAAC,CAAC,EAAE;IAClC;AACF;AAEA,MAAMK,YAAY,IAAIC,wBAAS,CAAC;IAC9BC,kBAAkB;IAClBC,gBAAgB;IAChBC,qBAAqBT;IACrBU,mBAAmB;IACnBC,cAAc;IACdC,iBAAiB;AACnB;AAEA,MAAMC,aAAa,IAAIC,yBAAU,CAAC;IAChCP,kBAAkB;IAClBE,qBAAqBT;IACrBe,QAAQ;IACRC,mBAAmB;AACrB;AAEO,SAASb,WAAWc,OAAe;IACxC,OAAOC,2BAAY,CAACC,QAAQ,CAACF;AAC/B;AAEO,SAASf,SAASe,OAAY;IACnC,OAAOJ,WAAWO,KAAK,CAAC;QAAE,GAAGnB,WAAW;QAAE,GAAGgB,OAAO;IAAC;AACvD;AAEO,SAASb,SAASa,OAAY;IACnC,OAAOZ,UAAUgB,KAAK,CAACJ;AACzB"}
|
|
@@ -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/webdav.controller.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../backend/src/applications/webdav/webdav.controller.ts"],"sourcesContent":["import { All, Controller, HttpStatus, Options, Param, Propfind, Req, Res, StreamableFile, UseGuards } from '@nestjs/common'\nimport { FastifyReply } from 'fastify'\nimport { HTTP_METHOD } from '../applications.constants'\nimport { SPACE_REPOSITORY } from '../spaces/constants/spaces'\nimport { SpaceGuard } from '../spaces/guards/space.guard'\nimport { WEBDAV_BASE_PATH, WEBDAV_NS } from './constants/routes'\nimport { WebDAVEnvironment } from './decorators/webdav-context.decorator'\nimport { FastifyDAVRequest } from './interfaces/webdav.interface'\nimport { WebDAVMethods } from './services/webdav-methods.service'\n\n@Controller()\n@WebDAVEnvironment()\nexport class WebDAVController {\n constructor(private readonly webdavMethods: WebDAVMethods) {}\n\n @Options()\n serverOptions(): void {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`, return empty response with headers\n return\n }\n\n @Propfind()\n serverPropFind(@Req() req: FastifyDAVRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<string> {\n return this.webdavMethods.propfind(req, res, WEBDAV_NS.SERVER)\n }\n\n @Options(WEBDAV_BASE_PATH)\n webdavOptions(): void {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`, return empty response with headers\n return\n }\n\n @Propfind(WEBDAV_BASE_PATH)\n async webdavPropfind(@Req() req: FastifyDAVRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<string> {\n return this.webdavMethods.propfind(req, res, WEBDAV_NS.WEBDAV)\n }\n\n @Options(`${WEBDAV_BASE_PATH}/:repository(^(${WEBDAV_NS.SPACES}|${WEBDAV_NS.TRASH})$)`)\n repositoriesOptions(): void {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`\n return\n }\n\n @Propfind(`${WEBDAV_BASE_PATH}/:repository(^(${WEBDAV_NS.SPACES}|${WEBDAV_NS.TRASH})$)`)\n async repositoriesPropfind(\n @Req() req: FastifyDAVRequest,\n @Res({ passthrough: true }) res: FastifyReply,\n @Param('repository') repository: string\n ): Promise<string> {\n return this.webdavMethods.propfind(req, res, repository)\n }\n\n @All(`${WEBDAV_BASE_PATH}/*`)\n @UseGuards(SpaceGuard)\n async files(@Req() req: FastifyDAVRequest, @Res({ passthrough: true }) res: FastifyReply): Promise<string | StreamableFile> {\n // OPTIONS method is handled in the `WebDAVProtocolGuard`\n switch (req.method) {\n case HTTP_METHOD.PROPFIND:\n return this.webdavMethods.propfind(req, res, SPACE_REPOSITORY.FILES)\n case HTTP_METHOD.HEAD:\n case HTTP_METHOD.GET:\n return this.webdavMethods.headOrGet(req, res, SPACE_REPOSITORY.FILES)\n case HTTP_METHOD.PUT:\n return this.webdavMethods.put(req, res)\n case HTTP_METHOD.DELETE:\n return this.webdavMethods.delete(req, res)\n case HTTP_METHOD.LOCK:\n return this.webdavMethods.lock(req, res)\n case HTTP_METHOD.UNLOCK:\n return this.webdavMethods.unlock(req, res)\n case HTTP_METHOD.PROPPATCH:\n return this.webdavMethods.proppatch(req, res)\n case HTTP_METHOD.MKCOL:\n return this.webdavMethods.mkcol(req, res)\n case HTTP_METHOD.COPY:\n case HTTP_METHOD.MOVE:\n return this.webdavMethods.copyMove(req, res)\n default:\n return res.status(HttpStatus.METHOD_NOT_ALLOWED).send()\n }\n }\n}\n"],"names":["WebDAVController","serverOptions","serverPropFind","req","res","webdavMethods","propfind","WEBDAV_NS","SERVER","webdavOptions","webdavPropfind","WEBDAV","repositoriesOptions","repositoriesPropfind","repository","files","method","HTTP_METHOD","PROPFIND","SPACE_REPOSITORY","FILES","HEAD","GET","headOrGet","PUT","put","DELETE","delete","LOCK","lock","UNLOCK","unlock","PROPPATCH","proppatch","MKCOL","mkcol","COPY","MOVE","copyMove","status","HttpStatus","METHOD_NOT_ALLOWED","send","passthrough","WEBDAV_BASE_PATH","SPACES","TRASH"],"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/webdav.controller.spec.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../backend/src/applications/webdav/webdav.controller.spec.ts"],"sourcesContent":["import { Test, TestingModule } from '@nestjs/testing'\nimport { SpacesManager } from '../spaces/services/spaces-manager.service'\nimport { WebDAVMethods } from './services/webdav-methods.service'\nimport { WebDAVSpaces } from './services/webdav-spaces.service'\nimport { WebDAVController } from './webdav.controller'\n\ndescribe(WebDAVController.name, () => {\n let davController: WebDAVController\n\n beforeAll(async () => {\n const module: TestingModule = await Test.createTestingModule({\n providers: [\n { provide: WebDAVSpaces, useValue: {} },\n {\n provide: WebDAVMethods,\n useValue: {}\n },\n { provide: SpacesManager, useValue: {} },\n WebDAVController\n ]\n }).compile()\n\n davController = module.get<WebDAVController>(WebDAVController)\n })\n\n it('should be defined', () => {\n expect(davController).toBeDefined()\n })\n})\n"],"names":["describe","WebDAVController","name","davController","beforeAll","module","Test","createTestingModule","providers","provide","WebDAVSpaces","useValue","WebDAVMethods","SpacesManager","compile","get","it","expect","toBeDefined"],"mappings":";;;;yBAAoC;sCACN;sCACA;qCACD;kCACI;AAEjCA,SAASC,kCAAgB,CAACC,IAAI,EAAE;IAC9B,IAAIC;IAEJC,UAAU;QACR,MAAMC,SAAwB,MAAMC,aAAI,CAACC,mBAAmB,CAAC;YAC3DC,WAAW;gBACT;oBAAEC,SAASC,iCAAY;oBAAEC,UAAU,CAAC;gBAAE;gBACtC;oBACEF,SAASG,mCAAa;oBACtBD,UAAU,CAAC;gBACb;gBACA;oBAAEF,SAASI,mCAAa;oBAAEF,UAAU,CAAC;gBAAE;gBACvCV,kCAAgB;aACjB;QACH,GAAGa,OAAO;QAEVX,gBAAgBE,OAAOU,GAAG,CAAmBd,kCAAgB;IAC/D;IAEAe,GAAG,qBAAqB;QACtBC,OAAOd,eAAee,WAAW;IACnC;AACF"}
|
|
@@ -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/webdav.e2e-spec.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../backend/src/applications/webdav/webdav.e2e-spec.ts"],"sourcesContent":["import { NestFastifyApplication } from '@nestjs/platform-fastify'\nimport { appBootstrap } from '../../app.bootstrap'\nimport { XML_CONTENT_TYPE } from './constants/webdav'\n\nconst XML_VERSION_STR = '<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>'\n\ndescribe('WebDAV (e2e)', () => {\n let app: NestFastifyApplication\n\n beforeAll(async () => {\n app = await appBootstrap()\n await app.init()\n await app.getHttpAdapter().getInstance().ready()\n })\n\n afterAll(async () => {\n await app.close()\n })\n\n it('should be defined', () => {\n expect(app).toBeDefined()\n })\n\n it('PROPFIND ALLPROP /webdav => 207', async () => {\n const res = await app.inject({\n method: 'PROPFIND',\n url: '/webdav',\n headers: { authorization: 'Basic am86cGFzc3dvcmQ=', 'content-type': XML_CONTENT_TYPE, Depth: '1' },\n body: `${XML_VERSION_STR}\n <propfind xmlns:D=\"DAV:\">\n <allprop/>\n </propfind>`\n } as any)\n expect(res.statusCode).toEqual(207)\n })\n\n it('PROPFIND PROP /webdav => 207', async () => {\n const res = await app.inject({\n method: 'PROPFIND',\n url: '/webdav',\n headers: { authorization: 'Basic am86cGFzc3dvcmQ=', 'content-type': XML_CONTENT_TYPE, Depth: '1' },\n body: `${XML_VERSION_STR}\n <D:propfind xmlns:D=\"DAV:\">\n <D:prop>\n <D:creationdate/>\n <D:displayname/>\n <D:getcontentlength/>\n <D:getcontenttype/>\n <D:getetag/>\n <D:getlastmodified/>\n <D:resourcetype/>\n </D:prop>\n </D:propfind>`\n } as any)\n expect(res.statusCode).toEqual(207)\n })\n\n describe('PUT with non-XML Content-Types (stream preservation)', () => {\n const testFilePath = '/webdav/personal/test-content-type.txt'\n const auth = 'Basic am86cGFzc3dvcmQ='\n\n afterEach(async () => {\n // Cleanup: delete the test file if it exists\n await app.inject({\n method: 'DELETE',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n })\n\n it('PUT with application/json should preserve stream and create file with content', async () => {\n const jsonContent = '{\"key\":\"value\",\"number\":42}'\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'application/json'\n },\n body: jsonContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(getRes.body).toEqual(jsonContent)\n expect(getRes.headers['content-length']).toEqual(String(jsonContent.length))\n })\n\n it('PUT with text/plain should preserve stream and create file with content', async () => {\n const textContent = 'This is plain text content with special chars: éàù'\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'text/plain'\n },\n body: textContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(getRes.body).toEqual(textContent)\n expect(getRes.headers['content-length']).toEqual(String(Buffer.byteLength(textContent, 'utf8')))\n })\n\n it('PUT with text/plain; charset=utf-8 should preserve stream and create file with content', async () => {\n const textContent = 'Text with charset and emoji: 🚀 ✅'\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'text/plain; charset=utf-8'\n },\n body: textContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(getRes.body).toEqual(textContent)\n expect(getRes.headers['content-length']).toEqual(String(Buffer.byteLength(textContent, 'utf8')))\n })\n\n it('PUT with application/octet-stream should work as expected', async () => {\n const binaryContent = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])\n\n const putRes = await app.inject({\n method: 'PUT',\n url: testFilePath,\n headers: {\n authorization: auth,\n 'content-type': 'application/octet-stream'\n },\n body: binaryContent\n } as any)\n\n expect([201, 204]).toContain(putRes.statusCode)\n\n // Verify the file was created with the correct content\n const getRes = await app.inject({\n method: 'GET',\n url: testFilePath,\n headers: { authorization: auth }\n } as any)\n\n expect(getRes.statusCode).toEqual(200)\n expect(Buffer.from(getRes.rawPayload)).toEqual(binaryContent)\n expect(getRes.headers['content-length']).toEqual(String(binaryContent.length))\n })\n })\n})\n"],"names":["XML_VERSION_STR","describe","app","beforeAll","appBootstrap","init","getHttpAdapter","getInstance","ready","afterAll","close","it","expect","toBeDefined","res","inject","method","url","headers","authorization","XML_CONTENT_TYPE","Depth","body","statusCode","toEqual","testFilePath","auth","afterEach","jsonContent","putRes","toContain","getRes","String","length","textContent","Buffer","byteLength","binaryContent","from","rawPayload"],"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/webdav.module.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../backend/src/applications/webdav/webdav.module.ts"],"sourcesContent":["import { Module } from '@nestjs/common'\nimport { WebDAVProtocolGuard } from './guards/webdav-protocol.guard'\nimport { WebDAVMethods } from './services/webdav-methods.service'\nimport { WebDAVSpaces } from './services/webdav-spaces.service'\nimport { WebDAVController } from './webdav.controller'\n\n@Module({\n controllers: [WebDAVController],\n providers: [WebDAVProtocolGuard, WebDAVMethods, WebDAVSpaces]\n})\nexport class WebDAVModule {}\n"],"names":["WebDAVModule","controllers","WebDAVController","providers","WebDAVProtocolGuard","WebDAVMethods","WebDAVSpaces"],"mappings":";;;;+BAUaA;;;eAAAA;;;wBAVU;qCACa;sCACN;qCACD;kCACI;;;;;;;AAM1B,IAAA,AAAMA,eAAN,MAAMA;AAAc;;;QAHzBC,aAAa;YAACC,kCAAgB;SAAC;QAC/BC,WAAW;YAACC,wCAAmB;YAAEC,mCAAa;YAAEC,iCAAY;SAAC"}
|