@sync-in/server 1.10.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/LICENSE +1 -1
- package/README.md +3 -11
- package/environment/environment.dist.min.yaml +1 -1
- package/environment/environment.dist.yaml +173 -28
- package/package.json +18 -17
- package/server/app.bootstrap.js +1 -5
- package/server/app.bootstrap.js.map +1 -1
- package/server/app.constants.js +1 -5
- package/server/app.constants.js.map +1 -1
- package/server/app.e2e-spec.js +1 -5
- package/server/app.e2e-spec.js.map +1 -1
- package/server/app.functions.js +1 -5
- package/server/app.functions.js.map +1 -1
- package/server/app.module.js +1 -5
- package/server/app.module.js.map +1 -1
- package/server/app.service.js +1 -5
- package/server/app.service.js.map +1 -1
- package/server/app.service.spec.js +2 -6
- package/server/app.service.spec.js.map +1 -1
- package/server/applications/admin/admin.module.js +1 -5
- package/server/applications/admin/admin.module.js.map +1 -1
- package/server/applications/admin/constants/routes.js +1 -5
- package/server/applications/admin/constants/routes.js.map +1 -1
- package/server/applications/admin/interfaces/check-update.interfaces.js +1 -5
- package/server/applications/admin/interfaces/check-update.interfaces.js.map +1 -1
- package/server/applications/admin/services/admin-scheduler.service.js +1 -5
- package/server/applications/admin/services/admin-scheduler.service.js.map +1 -1
- package/server/applications/admin/services/admin.service.js +13 -8
- package/server/applications/admin/services/admin.service.js.map +1 -1
- package/server/applications/admin/services/admin.service.spec.js +1 -5
- package/server/applications/admin/services/admin.service.spec.js.map +1 -1
- package/server/applications/admin/utils/check-update.js +1 -5
- package/server/applications/admin/utils/check-update.js.map +1 -1
- package/server/applications/applications.config.js +1 -5
- package/server/applications/applications.config.js.map +1 -1
- package/server/applications/applications.constants.js +5 -5
- package/server/applications/applications.constants.js.map +1 -1
- package/server/applications/applications.module.js +1 -5
- package/server/applications/applications.module.js.map +1 -1
- package/server/applications/comments/comments.controller.js +1 -5
- package/server/applications/comments/comments.controller.js.map +1 -1
- package/server/applications/comments/comments.controller.spec.js +1 -5
- package/server/applications/comments/comments.controller.spec.js.map +1 -1
- package/server/applications/comments/comments.module.js +1 -5
- package/server/applications/comments/comments.module.js.map +1 -1
- package/server/applications/comments/constants/routes.js +1 -5
- package/server/applications/comments/constants/routes.js.map +1 -1
- package/server/applications/comments/dto/comment.dto.js +1 -5
- package/server/applications/comments/dto/comment.dto.js.map +1 -1
- package/server/applications/comments/interfaces/comment-recent.interface.js +1 -5
- package/server/applications/comments/interfaces/comment-recent.interface.js.map +1 -1
- package/server/applications/comments/schemas/comment.interface.js +1 -5
- package/server/applications/comments/schemas/comment.interface.js.map +1 -1
- package/server/applications/comments/schemas/comments.schema.js +1 -5
- package/server/applications/comments/schemas/comments.schema.js.map +1 -1
- package/server/applications/comments/services/comments-manager.service.js +9 -7
- package/server/applications/comments/services/comments-manager.service.js.map +1 -1
- package/server/applications/comments/services/comments-manager.service.spec.js +10 -8
- package/server/applications/comments/services/comments-manager.service.spec.js.map +1 -1
- package/server/applications/comments/services/comments-queries.service.js +1 -5
- package/server/applications/comments/services/comments-queries.service.js.map +1 -1
- package/server/applications/files/adapters/files-indexer-mysql.service.js +29 -12
- package/server/applications/files/adapters/files-indexer-mysql.service.js.map +1 -1
- package/server/applications/files/adapters/files-indexer-mysql.service.spec.js +1 -5
- package/server/applications/files/adapters/files-indexer-mysql.service.spec.js.map +1 -1
- package/server/applications/files/constants/cache.js +1 -5
- package/server/applications/files/constants/cache.js.map +1 -1
- package/server/applications/files/constants/compress.js +1 -5
- package/server/applications/files/constants/compress.js.map +1 -1
- package/server/applications/files/constants/files.js +1 -5
- package/server/applications/files/constants/files.js.map +1 -1
- package/server/applications/files/constants/indexing.js +1 -5
- package/server/applications/files/constants/indexing.js.map +1 -1
- package/server/applications/files/constants/operations.js +1 -5
- package/server/applications/files/constants/operations.js.map +1 -1
- package/server/applications/files/constants/routes.js +1 -5
- package/server/applications/files/constants/routes.js.map +1 -1
- package/server/applications/files/constants/samples.js +1 -5
- package/server/applications/files/constants/samples.js.map +1 -1
- package/server/applications/files/dto/file-operations.dto.js +1 -5
- package/server/applications/files/dto/file-operations.dto.js.map +1 -1
- package/server/applications/files/events/file-task-event.js +1 -5
- package/server/applications/files/events/file-task-event.js.map +1 -1
- package/server/applications/files/files-tasks.controller.js +1 -5
- package/server/applications/files/files-tasks.controller.js.map +1 -1
- package/server/applications/files/files-tasks.controller.spec.js +1 -5
- package/server/applications/files/files-tasks.controller.spec.js.map +1 -1
- package/server/applications/files/files.config.js +1 -5
- package/server/applications/files/files.config.js.map +1 -1
- package/server/applications/files/files.controller.js +1 -5
- package/server/applications/files/files.controller.js.map +1 -1
- package/server/applications/files/files.controller.spec.js +1 -5
- package/server/applications/files/files.controller.spec.js.map +1 -1
- package/server/applications/files/files.module.js +1 -5
- package/server/applications/files/files.module.js.map +1 -1
- package/server/applications/files/interfaces/file-db-props.interface.js +1 -5
- package/server/applications/files/interfaces/file-db-props.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-lock.interface.js +1 -5
- package/server/applications/files/interfaces/file-lock.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-parse-index.js +1 -5
- package/server/applications/files/interfaces/file-parse-index.js.map +1 -1
- package/server/applications/files/interfaces/file-props.interface.js +1 -5
- package/server/applications/files/interfaces/file-props.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-recent-location.interface.js +1 -5
- package/server/applications/files/interfaces/file-recent-location.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-space.interface.js +1 -5
- package/server/applications/files/interfaces/file-space.interface.js.map +1 -1
- package/server/applications/files/interfaces/file-tree.interface.js +1 -5
- package/server/applications/files/interfaces/file-tree.interface.js.map +1 -1
- package/server/applications/files/models/file-error.js +1 -5
- package/server/applications/files/models/file-error.js.map +1 -1
- package/server/applications/files/models/file-lock-error.js +1 -5
- package/server/applications/files/models/file-lock-error.js.map +1 -1
- package/server/applications/files/models/file-task.js +1 -5
- package/server/applications/files/models/file-task.js.map +1 -1
- package/server/applications/files/models/files-indexer.js +1 -5
- package/server/applications/files/models/files-indexer.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online-environment.decorator.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js +21 -10
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online-manager.service.spec.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.config.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.config.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.constants.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.constants.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.controller.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.controller.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.controller.spec.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.dtos.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.dtos.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.guard.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.guard.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.guard.spec.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.interface.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.interface.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.module.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.module.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.routes.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.routes.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.strategy.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.strategy.js.map +1 -1
- package/server/applications/files/modules/collabora-online/collabora-online.utils.js +1 -5
- package/server/applications/files/modules/collabora-online/collabora-online.utils.js.map +1 -1
- package/server/applications/files/modules/file-editor-providers.interface.js +6 -0
- package/server/applications/files/modules/file-editor-providers.interface.js.map +1 -0
- package/server/applications/files/modules/only-office/only-office-environment.decorator.js +1 -5
- package/server/applications/files/modules/only-office/only-office-environment.decorator.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office-manager.service.js +57 -19
- package/server/applications/files/modules/only-office/only-office-manager.service.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office-manager.service.spec.js +1 -5
- package/server/applications/files/modules/only-office/only-office-manager.service.spec.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.config.js +1 -5
- package/server/applications/files/modules/only-office/only-office.config.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.constants.js +1 -5
- package/server/applications/files/modules/only-office/only-office.constants.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.controller.js +1 -5
- package/server/applications/files/modules/only-office/only-office.controller.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.controller.spec.js +1 -5
- package/server/applications/files/modules/only-office/only-office.controller.spec.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.dtos.js +1 -5
- package/server/applications/files/modules/only-office/only-office.dtos.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.guard.js +1 -5
- package/server/applications/files/modules/only-office/only-office.guard.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.guard.spec.js +1 -5
- package/server/applications/files/modules/only-office/only-office.guard.spec.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.interface.js +1 -5
- package/server/applications/files/modules/only-office/only-office.interface.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.module.js +1 -5
- package/server/applications/files/modules/only-office/only-office.module.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.routes.js +1 -5
- package/server/applications/files/modules/only-office/only-office.routes.js.map +1 -1
- package/server/applications/files/modules/only-office/only-office.strategy.js +1 -5
- package/server/applications/files/modules/only-office/only-office.strategy.js.map +1 -1
- package/server/applications/files/schemas/file-content.interface.js +1 -5
- package/server/applications/files/schemas/file-content.interface.js.map +1 -1
- package/server/applications/files/schemas/file-recent.interface.js +1 -5
- package/server/applications/files/schemas/file-recent.interface.js.map +1 -1
- package/server/applications/files/schemas/file.interface.js +1 -5
- package/server/applications/files/schemas/file.interface.js.map +1 -1
- package/server/applications/files/schemas/files-content.schema.js +1 -5
- package/server/applications/files/schemas/files-content.schema.js.map +1 -1
- package/server/applications/files/schemas/files-recents.schema.js +1 -5
- package/server/applications/files/schemas/files-recents.schema.js.map +1 -1
- package/server/applications/files/schemas/files.schema.js +1 -5
- package/server/applications/files/schemas/files.schema.js.map +1 -1
- package/server/applications/files/services/files-content-manager.service.js +45 -16
- package/server/applications/files/services/files-content-manager.service.js.map +1 -1
- package/server/applications/files/services/files-lock-manager.service.js +53 -18
- package/server/applications/files/services/files-lock-manager.service.js.map +1 -1
- package/server/applications/files/services/files-lock-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-lock-manager.service.spec.js.map +1 -1
- package/server/applications/files/services/files-manager.service.js +77 -24
- package/server/applications/files/services/files-manager.service.js.map +1 -1
- package/server/applications/files/services/files-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-manager.service.spec.js.map +1 -1
- package/server/applications/files/services/files-methods.service.js +5 -6
- package/server/applications/files/services/files-methods.service.js.map +1 -1
- package/server/applications/files/services/files-methods.service.spec.js +1 -5
- package/server/applications/files/services/files-methods.service.spec.js.map +1 -1
- package/server/applications/files/services/files-parser.service.js +13 -8
- package/server/applications/files/services/files-parser.service.js.map +1 -1
- package/server/applications/files/services/files-parser.service.spec.js +1 -5
- package/server/applications/files/services/files-parser.service.spec.js.map +1 -1
- package/server/applications/files/services/files-queries.service.js +29 -12
- package/server/applications/files/services/files-queries.service.js.map +1 -1
- package/server/applications/files/services/files-recents.service.js +1 -5
- package/server/applications/files/services/files-recents.service.js.map +1 -1
- package/server/applications/files/services/files-recents.service.spec.js +1 -5
- package/server/applications/files/services/files-recents.service.spec.js.map +1 -1
- package/server/applications/files/services/files-scheduler.service.js +77 -24
- package/server/applications/files/services/files-scheduler.service.js.map +1 -1
- package/server/applications/files/services/files-search-manager.service.js +9 -7
- package/server/applications/files/services/files-search-manager.service.js.map +1 -1
- package/server/applications/files/services/files-search-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-search-manager.service.spec.js.map +1 -1
- package/server/applications/files/services/files-tasks-manager.service.js +77 -24
- package/server/applications/files/services/files-tasks-manager.service.js.map +1 -1
- package/server/applications/files/services/files-tasks-manager.service.spec.js +1 -5
- package/server/applications/files/services/files-tasks-manager.service.spec.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/excel.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/excel.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/html.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/html.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/open-office.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/open-office.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/pdf.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/pdf.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/power-point.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/power-point.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/text.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/text.js.map +1 -1
- package/server/applications/files/utils/doc-textify/adapters/word.js +1 -5
- package/server/applications/files/utils/doc-textify/adapters/word.js.map +1 -1
- package/server/applications/files/utils/doc-textify/doc-textify.js +1 -5
- package/server/applications/files/utils/doc-textify/doc-textify.js.map +1 -1
- package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js +1 -5
- package/server/applications/files/utils/doc-textify/interfaces/doc-textify.interfaces.js.map +1 -1
- package/server/applications/files/utils/doc-textify/utils/clean.js +1 -5
- package/server/applications/files/utils/doc-textify/utils/clean.js.map +1 -1
- package/server/applications/files/utils/files-search.js +1 -5
- package/server/applications/files/utils/files-search.js.map +1 -1
- package/server/applications/files/utils/files-tree.js +1 -5
- package/server/applications/files/utils/files-tree.js.map +1 -1
- package/server/applications/files/utils/files.js +1 -5
- package/server/applications/files/utils/files.js.map +1 -1
- package/server/applications/files/utils/send-file.js +1 -5
- package/server/applications/files/utils/send-file.js.map +1 -1
- package/server/applications/files/utils/unzip-file.js +1 -5
- package/server/applications/files/utils/unzip-file.js.map +1 -1
- package/server/applications/files/utils/url-file.js +1 -5
- package/server/applications/files/utils/url-file.js.map +1 -1
- package/server/applications/links/constants/cache.js +1 -5
- package/server/applications/links/constants/cache.js.map +1 -1
- package/server/applications/links/constants/links.js +1 -5
- package/server/applications/links/constants/links.js.map +1 -1
- package/server/applications/links/constants/routes.js +1 -5
- package/server/applications/links/constants/routes.js.map +1 -1
- package/server/applications/links/dto/create-or-update-link.dto.js +1 -5
- package/server/applications/links/dto/create-or-update-link.dto.js.map +1 -1
- package/server/applications/links/interfaces/link-guest.interface.js +1 -5
- package/server/applications/links/interfaces/link-guest.interface.js.map +1 -1
- package/server/applications/links/interfaces/link-space.interface.js +1 -5
- package/server/applications/links/interfaces/link-space.interface.js.map +1 -1
- package/server/applications/links/links.controller.js +1 -5
- package/server/applications/links/links.controller.js.map +1 -1
- package/server/applications/links/links.controller.spec.js +1 -5
- package/server/applications/links/links.controller.spec.js.map +1 -1
- package/server/applications/links/schemas/link.interface.js +1 -5
- package/server/applications/links/schemas/link.interface.js.map +1 -1
- package/server/applications/links/schemas/links.schema.js +1 -5
- package/server/applications/links/schemas/links.schema.js.map +1 -1
- package/server/applications/links/services/links-manager.service.js +55 -20
- package/server/applications/links/services/links-manager.service.js.map +1 -1
- package/server/applications/links/services/links-manager.service.spec.js +3 -7
- package/server/applications/links/services/links-manager.service.spec.js.map +1 -1
- package/server/applications/links/services/links-queries.service.js +1 -5
- package/server/applications/links/services/links-queries.service.js.map +1 -1
- package/server/applications/notifications/constants/notifications.js +1 -5
- package/server/applications/notifications/constants/notifications.js.map +1 -1
- package/server/applications/notifications/constants/routes.js +1 -5
- package/server/applications/notifications/constants/routes.js.map +1 -1
- package/server/applications/notifications/constants/websocket.js +1 -5
- package/server/applications/notifications/constants/websocket.js.map +1 -1
- package/server/applications/notifications/i18n/de.js +1 -9
- package/server/applications/notifications/i18n/de.js.map +1 -1
- package/server/applications/notifications/i18n/es.js +1 -5
- package/server/applications/notifications/i18n/es.js.map +1 -1
- package/server/applications/notifications/i18n/fr.js +1 -5
- package/server/applications/notifications/i18n/fr.js.map +1 -1
- package/server/applications/notifications/i18n/hi.js +1 -5
- package/server/applications/notifications/i18n/hi.js.map +1 -1
- package/server/applications/notifications/i18n/index.js +1 -5
- package/server/applications/notifications/i18n/index.js.map +1 -1
- package/server/applications/notifications/i18n/it.js +1 -5
- package/server/applications/notifications/i18n/it.js.map +1 -1
- package/server/applications/notifications/i18n/ja.js +1 -5
- package/server/applications/notifications/i18n/ja.js.map +1 -1
- package/server/applications/notifications/i18n/ko.js +1 -5
- package/server/applications/notifications/i18n/ko.js.map +1 -1
- package/server/applications/notifications/i18n/pl.js +1 -5
- package/server/applications/notifications/i18n/pl.js.map +1 -1
- package/server/applications/notifications/i18n/pt.js +1 -5
- package/server/applications/notifications/i18n/pt.js.map +1 -1
- package/server/applications/notifications/i18n/pt_br.js +1 -5
- package/server/applications/notifications/i18n/pt_br.js.map +1 -1
- package/server/applications/notifications/i18n/ru.js +1 -5
- package/server/applications/notifications/i18n/ru.js.map +1 -1
- package/server/applications/notifications/i18n/tr.js +1 -5
- package/server/applications/notifications/i18n/tr.js.map +1 -1
- package/server/applications/notifications/i18n/zh.js +1 -5
- package/server/applications/notifications/i18n/zh.js.map +1 -1
- package/server/applications/notifications/interfaces/notification-properties.interface.js +1 -5
- package/server/applications/notifications/interfaces/notification-properties.interface.js.map +1 -1
- package/server/applications/notifications/interfaces/user-mail-notification.interface.js +1 -5
- package/server/applications/notifications/interfaces/user-mail-notification.interface.js.map +1 -1
- package/server/applications/notifications/mails/models.js +1 -5
- package/server/applications/notifications/mails/models.js.map +1 -1
- package/server/applications/notifications/mails/templates.js +1 -5
- package/server/applications/notifications/mails/templates.js.map +1 -1
- package/server/applications/notifications/mails/urls.js +1 -5
- package/server/applications/notifications/mails/urls.js.map +1 -1
- package/server/applications/notifications/notifications.controller.js +1 -5
- package/server/applications/notifications/notifications.controller.js.map +1 -1
- package/server/applications/notifications/notifications.controller.spec.js +1 -5
- package/server/applications/notifications/notifications.controller.spec.js.map +1 -1
- package/server/applications/notifications/notifications.gateway.js +1 -5
- package/server/applications/notifications/notifications.gateway.js.map +1 -1
- package/server/applications/notifications/notifications.module.js +1 -5
- package/server/applications/notifications/notifications.module.js.map +1 -1
- package/server/applications/notifications/schemas/notification.interface.js +1 -5
- package/server/applications/notifications/schemas/notification.interface.js.map +1 -1
- package/server/applications/notifications/schemas/notifications.schema.js +1 -5
- package/server/applications/notifications/schemas/notifications.schema.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.js +25 -11
- package/server/applications/notifications/services/notifications-manager.service.js.map +1 -1
- package/server/applications/notifications/services/notifications-manager.service.spec.js +20 -11
- package/server/applications/notifications/services/notifications-manager.service.spec.js.map +1 -1
- package/server/applications/notifications/services/notifications-queries.service.js +1 -5
- package/server/applications/notifications/services/notifications-queries.service.js.map +1 -1
- package/server/applications/shares/constants/routes.js +1 -5
- package/server/applications/shares/constants/routes.js.map +1 -1
- package/server/applications/shares/constants/shares.js +1 -5
- package/server/applications/shares/constants/shares.js.map +1 -1
- package/server/applications/shares/dto/create-or-update-share.dto.js +1 -5
- package/server/applications/shares/dto/create-or-update-share.dto.js.map +1 -1
- package/server/applications/shares/interfaces/share-child.interface.js +1 -5
- package/server/applications/shares/interfaces/share-child.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-env.interface.js +1 -5
- package/server/applications/shares/interfaces/share-env.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-file.interface.js +1 -5
- package/server/applications/shares/interfaces/share-file.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-link.interface.js +1 -5
- package/server/applications/shares/interfaces/share-link.interface.js.map +1 -1
- package/server/applications/shares/interfaces/share-props.interface.js +1 -5
- package/server/applications/shares/interfaces/share-props.interface.js.map +1 -1
- package/server/applications/shares/models/share-child.model.js +1 -5
- package/server/applications/shares/models/share-child.model.js.map +1 -1
- package/server/applications/shares/schemas/share-members.interface.js +1 -5
- package/server/applications/shares/schemas/share-members.interface.js.map +1 -1
- package/server/applications/shares/schemas/share.interface.js +1 -5
- package/server/applications/shares/schemas/share.interface.js.map +1 -1
- package/server/applications/shares/schemas/shares-members.schema.js +1 -5
- package/server/applications/shares/schemas/shares-members.schema.js.map +1 -1
- package/server/applications/shares/schemas/shares.schema.js +1 -5
- package/server/applications/shares/schemas/shares.schema.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.js +214 -68
- package/server/applications/shares/services/shares-manager.service.js.map +1 -1
- package/server/applications/shares/services/shares-manager.service.spec.js +1 -5
- package/server/applications/shares/services/shares-manager.service.spec.js.map +1 -1
- package/server/applications/shares/services/shares-queries.service.js +49 -17
- package/server/applications/shares/services/shares-queries.service.js.map +1 -1
- package/server/applications/shares/shares.controller.js +1 -5
- package/server/applications/shares/shares.controller.js.map +1 -1
- package/server/applications/shares/shares.controller.spec.js +1 -5
- package/server/applications/shares/shares.controller.spec.js.map +1 -1
- package/server/applications/shares/shares.module.js +1 -5
- package/server/applications/shares/shares.module.js.map +1 -1
- package/server/applications/spaces/constants/cache.js +1 -5
- package/server/applications/spaces/constants/cache.js.map +1 -1
- package/server/applications/spaces/constants/routes.js +1 -5
- package/server/applications/spaces/constants/routes.js.map +1 -1
- package/server/applications/spaces/constants/spaces.js +1 -5
- package/server/applications/spaces/constants/spaces.js.map +1 -1
- package/server/applications/spaces/decorators/space-override-permission.decorator.js +1 -5
- package/server/applications/spaces/decorators/space-override-permission.decorator.js.map +1 -1
- package/server/applications/spaces/decorators/space-skip-guard.decorator.js +1 -5
- package/server/applications/spaces/decorators/space-skip-guard.decorator.js.map +1 -1
- package/server/applications/spaces/decorators/space-skip-permissions.decorator.js +1 -5
- package/server/applications/spaces/decorators/space-skip-permissions.decorator.js.map +1 -1
- package/server/applications/spaces/decorators/space.decorator.js +1 -5
- package/server/applications/spaces/decorators/space.decorator.js.map +1 -1
- package/server/applications/spaces/dto/create-or-update-space.dto.js +1 -5
- package/server/applications/spaces/dto/create-or-update-space.dto.js.map +1 -1
- package/server/applications/spaces/dto/delete-space.dto.js +1 -5
- package/server/applications/spaces/dto/delete-space.dto.js.map +1 -1
- package/server/applications/spaces/dto/search-space.dto.js +1 -5
- package/server/applications/spaces/dto/search-space.dto.js.map +1 -1
- package/server/applications/spaces/dto/space-roots.dto.js +1 -5
- package/server/applications/spaces/dto/space-roots.dto.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.js +17 -9
- package/server/applications/spaces/guards/space.guard.js.map +1 -1
- package/server/applications/spaces/guards/space.guard.spec.js +1 -5
- package/server/applications/spaces/guards/space.guard.spec.js.map +1 -1
- package/server/applications/spaces/interfaces/space-diff.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-diff.interface.js.map +1 -1
- package/server/applications/spaces/interfaces/space-files.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-files.interface.js.map +1 -1
- package/server/applications/spaces/interfaces/space-request.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-request.interface.js.map +1 -1
- package/server/applications/spaces/interfaces/space-trash.interface.js +1 -5
- package/server/applications/spaces/interfaces/space-trash.interface.js.map +1 -1
- package/server/applications/spaces/models/space-env.model.js +1 -5
- package/server/applications/spaces/models/space-env.model.js.map +1 -1
- package/server/applications/spaces/models/space-props.model.js +1 -5
- package/server/applications/spaces/models/space-props.model.js.map +1 -1
- package/server/applications/spaces/models/space-root-props.model.js +1 -5
- package/server/applications/spaces/models/space-root-props.model.js.map +1 -1
- package/server/applications/spaces/models/space.model.js +1 -5
- package/server/applications/spaces/models/space.model.js.map +1 -1
- package/server/applications/spaces/schemas/space-members.interface.js +1 -5
- package/server/applications/spaces/schemas/space-members.interface.js.map +1 -1
- package/server/applications/spaces/schemas/space-root.interface.js +1 -5
- package/server/applications/spaces/schemas/space-root.interface.js.map +1 -1
- package/server/applications/spaces/schemas/space.interface.js +1 -5
- package/server/applications/spaces/schemas/space.interface.js.map +1 -1
- package/server/applications/spaces/schemas/spaces-members.schema.js +1 -5
- package/server/applications/spaces/schemas/spaces-members.schema.js.map +1 -1
- package/server/applications/spaces/schemas/spaces-roots.schema.js +1 -5
- package/server/applications/spaces/schemas/spaces-roots.schema.js.map +1 -1
- package/server/applications/spaces/schemas/spaces.schema.js +1 -5
- package/server/applications/spaces/schemas/spaces.schema.js.map +1 -1
- package/server/applications/spaces/services/spaces-browser.service.js +77 -24
- package/server/applications/spaces/services/spaces-browser.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-browser.service.spec.js +1 -5
- package/server/applications/spaces/services/spaces-browser.service.spec.js.map +1 -1
- package/server/applications/spaces/services/spaces-manager.service.js +193 -53
- package/server/applications/spaces/services/spaces-manager.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-manager.service.spec.js +1 -5
- package/server/applications/spaces/services/spaces-manager.service.spec.js.map +1 -1
- package/server/applications/spaces/services/spaces-queries.service.js +65 -21
- package/server/applications/spaces/services/spaces-queries.service.js.map +1 -1
- package/server/applications/spaces/services/spaces-scheduler.service.js +49 -17
- package/server/applications/spaces/services/spaces-scheduler.service.js.map +1 -1
- package/server/applications/spaces/spaces.controller.js +1 -5
- package/server/applications/spaces/spaces.controller.js.map +1 -1
- package/server/applications/spaces/spaces.controller.spec.js +1 -5
- package/server/applications/spaces/spaces.controller.spec.js.map +1 -1
- package/server/applications/spaces/spaces.module.js +1 -5
- package/server/applications/spaces/spaces.module.js.map +1 -1
- package/server/applications/spaces/utils/paths.js +1 -5
- package/server/applications/spaces/utils/paths.js.map +1 -1
- package/server/applications/spaces/utils/permissions.js +1 -5
- package/server/applications/spaces/utils/permissions.js.map +1 -1
- package/server/applications/spaces/utils/routes.js +1 -5
- package/server/applications/spaces/utils/routes.js.map +1 -1
- package/server/applications/sync/constants/auth.js +1 -5
- package/server/applications/sync/constants/auth.js.map +1 -1
- package/server/applications/sync/constants/routes.js +6 -5
- package/server/applications/sync/constants/routes.js.map +1 -1
- package/server/applications/sync/constants/store.js +1 -9
- package/server/applications/sync/constants/store.js.map +1 -1
- package/server/applications/sync/constants/sync.js +2 -6
- package/server/applications/sync/constants/sync.js.map +1 -1
- package/server/applications/sync/decorators/sync-context.decorator.js +1 -5
- package/server/applications/sync/decorators/sync-context.decorator.js.map +1 -1
- package/server/applications/sync/decorators/sync-environment.decorator.js +1 -5
- package/server/applications/sync/decorators/sync-environment.decorator.js.map +1 -1
- package/server/applications/sync/dtos/sync-client-auth.dto.js +12 -8
- package/server/applications/sync/dtos/sync-client-auth.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-client-info.dto.js +49 -0
- package/server/applications/sync/dtos/sync-client-info.dto.js.map +1 -0
- package/server/applications/sync/dtos/sync-client-registration.dto.js +34 -11
- package/server/applications/sync/dtos/sync-client-registration.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-operations.dto.js +1 -5
- package/server/applications/sync/dtos/sync-operations.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-path.dto.js +1 -5
- package/server/applications/sync/dtos/sync-path.dto.js.map +1 -1
- package/server/applications/sync/dtos/sync-upload.dto.js +1 -5
- package/server/applications/sync/dtos/sync-upload.dto.js.map +1 -1
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js +1 -5
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.js.map +1 -1
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js +1 -5
- package/server/applications/sync/interceptors/sync-diff-gzip-body.interceptor.spec.js.map +1 -1
- package/server/applications/sync/interfaces/store-manifest.interface.js +1 -5
- package/server/applications/sync/interfaces/store-manifest.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-client-auth.interface.js +1 -25
- package/server/applications/sync/interfaces/sync-client-auth.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-client-paths.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-client-paths.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-client.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-client.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-diff.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-diff.interface.js.map +1 -1
- package/server/applications/sync/interfaces/sync-path.interface.js +1 -5
- package/server/applications/sync/interfaces/sync-path.interface.js.map +1 -1
- package/server/applications/sync/schemas/sync-client.interface.js +1 -5
- package/server/applications/sync/schemas/sync-client.interface.js.map +1 -1
- package/server/applications/sync/schemas/sync-clients.schema.js +1 -5
- package/server/applications/sync/schemas/sync-clients.schema.js.map +1 -1
- package/server/applications/sync/schemas/sync-path.interface.js +1 -5
- package/server/applications/sync/schemas/sync-path.interface.js.map +1 -1
- package/server/applications/sync/schemas/sync-paths.schema.js +1 -5
- package/server/applications/sync/schemas/sync-paths.schema.js.map +1 -1
- package/server/applications/sync/services/sync-clients-manager.service.js +108 -44
- package/server/applications/sync/services/sync-clients-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-clients-manager.service.spec.js +14 -17
- package/server/applications/sync/services/sync-clients-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-manager.service.js +29 -12
- package/server/applications/sync/services/sync-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-manager.service.spec.js +1 -5
- package/server/applications/sync/services/sync-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.js +27 -17
- package/server/applications/sync/services/sync-paths-manager.service.js.map +1 -1
- package/server/applications/sync/services/sync-paths-manager.service.spec.js +11 -15
- package/server/applications/sync/services/sync-paths-manager.service.spec.js.map +1 -1
- package/server/applications/sync/services/sync-queries.service.js +1 -5
- package/server/applications/sync/services/sync-queries.service.js.map +1 -1
- package/server/applications/sync/sync.config.js +1 -5
- package/server/applications/sync/sync.config.js.map +1 -1
- package/server/applications/sync/sync.controller.js +21 -6
- package/server/applications/sync/sync.controller.js.map +1 -1
- package/server/applications/sync/sync.controller.spec.js +1 -5
- package/server/applications/sync/sync.controller.spec.js.map +1 -1
- package/server/applications/sync/sync.module.js +1 -5
- package/server/applications/sync/sync.module.js.map +1 -1
- package/server/applications/sync/utils/functions.js +1 -5
- package/server/applications/sync/utils/functions.js.map +1 -1
- package/server/applications/sync/utils/normalizedMap.js +1 -5
- package/server/applications/sync/utils/normalizedMap.js.map +1 -1
- package/server/applications/sync/utils/routes.js +1 -5
- package/server/applications/sync/utils/routes.js.map +1 -1
- package/server/applications/users/admin-users.controller.js +2 -6
- package/server/applications/users/admin-users.controller.js.map +1 -1
- package/server/applications/users/admin-users.controller.spec.js +6 -10
- package/server/applications/users/admin-users.controller.spec.js.map +1 -1
- package/server/applications/users/constants/group.js +1 -5
- package/server/applications/users/constants/group.js.map +1 -1
- package/server/applications/users/constants/member.js +1 -5
- package/server/applications/users/constants/member.js.map +1 -1
- package/server/applications/users/constants/routes.js +1 -5
- package/server/applications/users/constants/routes.js.map +1 -1
- package/server/applications/users/constants/user.js +1 -5
- package/server/applications/users/constants/user.js.map +1 -1
- package/server/applications/users/constants/websocket.js +1 -5
- package/server/applications/users/constants/websocket.js.map +1 -1
- package/server/applications/users/decorators/permissions.decorator.js +1 -5
- package/server/applications/users/decorators/permissions.decorator.js.map +1 -1
- package/server/applications/users/decorators/roles.decorator.js +1 -5
- package/server/applications/users/decorators/roles.decorator.js.map +1 -1
- package/server/applications/users/decorators/user.decorator.js +1 -5
- package/server/applications/users/decorators/user.decorator.js.map +1 -1
- package/server/applications/users/dto/create-or-update-group.dto.js +1 -5
- package/server/applications/users/dto/create-or-update-group.dto.js.map +1 -1
- package/server/applications/users/dto/create-or-update-user.dto.js +1 -5
- package/server/applications/users/dto/create-or-update-user.dto.js.map +1 -1
- package/server/applications/users/dto/delete-user.dto.js +1 -5
- package/server/applications/users/dto/delete-user.dto.js.map +1 -1
- package/server/applications/users/dto/search-members.dto.js +1 -5
- package/server/applications/users/dto/search-members.dto.js.map +1 -1
- package/server/applications/users/dto/user-properties.dto.js +1 -5
- package/server/applications/users/dto/user-properties.dto.js.map +1 -1
- package/server/applications/users/guards/permissions.guard.js +1 -5
- package/server/applications/users/guards/permissions.guard.js.map +1 -1
- package/server/applications/users/guards/permissions.guard.spec.js +1 -5
- package/server/applications/users/guards/permissions.guard.spec.js.map +1 -1
- package/server/applications/users/guards/roles.guard.js +1 -5
- package/server/applications/users/guards/roles.guard.js.map +1 -1
- package/server/applications/users/guards/roles.guard.spec.js +1 -5
- package/server/applications/users/guards/roles.guard.spec.js.map +1 -1
- package/server/applications/users/interfaces/admin-group.interface.js +1 -5
- package/server/applications/users/interfaces/admin-group.interface.js.map +1 -1
- package/server/applications/users/interfaces/admin-user.interface.js +1 -5
- package/server/applications/users/interfaces/admin-user.interface.js.map +1 -1
- package/server/applications/users/interfaces/group-browse.interface.js +1 -5
- package/server/applications/users/interfaces/group-browse.interface.js.map +1 -1
- package/server/applications/users/interfaces/group-member.js +1 -5
- package/server/applications/users/interfaces/group-member.js.map +1 -1
- package/server/applications/users/interfaces/guest-user.interface.js +1 -5
- package/server/applications/users/interfaces/guest-user.interface.js.map +1 -1
- package/server/applications/users/interfaces/member.interface.js +1 -5
- package/server/applications/users/interfaces/member.interface.js.map +1 -1
- package/server/applications/users/interfaces/owner.interface.js +1 -5
- package/server/applications/users/interfaces/owner.interface.js.map +1 -1
- package/server/applications/users/interfaces/user-secrets.interface.js +1 -5
- package/server/applications/users/interfaces/user-secrets.interface.js.map +1 -1
- package/server/applications/users/interfaces/websocket.interface.js +1 -5
- package/server/applications/users/interfaces/websocket.interface.js.map +1 -1
- package/server/applications/users/models/user.model.js +1 -5
- package/server/applications/users/models/user.model.js.map +1 -1
- package/server/applications/users/schemas/group.interface.js +1 -5
- package/server/applications/users/schemas/group.interface.js.map +1 -1
- package/server/applications/users/schemas/groups.schema.js +1 -5
- package/server/applications/users/schemas/groups.schema.js.map +1 -1
- package/server/applications/users/schemas/user-group.interface.js +1 -5
- package/server/applications/users/schemas/user-group.interface.js.map +1 -1
- package/server/applications/users/schemas/user.interface.js +1 -5
- package/server/applications/users/schemas/user.interface.js.map +1 -1
- package/server/applications/users/schemas/users-groups.schema.js +1 -5
- package/server/applications/users/schemas/users-groups.schema.js.map +1 -1
- package/server/applications/users/schemas/users-guests.schema.js +1 -5
- package/server/applications/users/schemas/users-guests.schema.js.map +1 -1
- package/server/applications/users/schemas/users.schema.js +1 -5
- package/server/applications/users/schemas/users.schema.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.js +67 -23
- package/server/applications/users/services/admin-users-manager.service.js.map +1 -1
- package/server/applications/users/services/admin-users-manager.service.spec.js +3 -7
- package/server/applications/users/services/admin-users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/admin-users-queries.service.js +65 -21
- package/server/applications/users/services/admin-users-queries.service.js.map +1 -1
- package/server/applications/users/services/users-manager.service.js +81 -25
- package/server/applications/users/services/users-manager.service.js.map +1 -1
- package/server/applications/users/services/users-manager.service.spec.js +14 -12
- package/server/applications/users/services/users-manager.service.spec.js.map +1 -1
- package/server/applications/users/services/users-queries.service.js +49 -17
- package/server/applications/users/services/users-queries.service.js.map +1 -1
- package/server/applications/users/users.controller.js +2 -6
- package/server/applications/users/users.controller.js.map +1 -1
- package/server/applications/users/users.controller.spec.js +5 -9
- package/server/applications/users/users.controller.spec.js.map +1 -1
- package/server/applications/users/users.e2e-spec.js +3 -7
- package/server/applications/users/users.e2e-spec.js.map +1 -1
- package/server/applications/users/users.gateway.js +29 -12
- package/server/applications/users/users.gateway.js.map +1 -1
- package/server/applications/users/users.gateway.spec.js +1 -5
- package/server/applications/users/users.gateway.spec.js.map +1 -1
- package/server/applications/users/users.module.js +1 -5
- package/server/applications/users/users.module.js.map +1 -1
- package/server/applications/users/utils/avatar.js +1 -5
- package/server/applications/users/utils/avatar.js.map +1 -1
- package/server/applications/users/utils/test.js +1 -5
- package/server/applications/users/utils/test.js.map +1 -1
- package/server/applications/webdav/constants/routes.js +1 -5
- package/server/applications/webdav/constants/routes.js.map +1 -1
- package/server/applications/webdav/constants/webdav.js +1 -5
- package/server/applications/webdav/constants/webdav.js.map +1 -1
- package/server/applications/webdav/decorators/if-header.decorator.js +1 -5
- package/server/applications/webdav/decorators/if-header.decorator.js.map +1 -1
- package/server/applications/webdav/decorators/webdav-context.decorator.js +1 -5
- package/server/applications/webdav/decorators/webdav-context.decorator.js.map +1 -1
- package/server/applications/webdav/filters/webdav.filter.js +1 -5
- package/server/applications/webdav/filters/webdav.filter.js.map +1 -1
- package/server/applications/webdav/filters/webdav.filter.spec.js +1 -5
- package/server/applications/webdav/filters/webdav.filter.spec.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.js +54 -20
- package/server/applications/webdav/guards/webdav-protocol.guard.js.map +1 -1
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js +54 -0
- package/server/applications/webdav/guards/webdav-protocol.guard.spec.js.map +1 -1
- package/server/applications/webdav/interfaces/if-header.interface.js +1 -5
- package/server/applications/webdav/interfaces/if-header.interface.js.map +1 -1
- package/server/applications/webdav/interfaces/webdav.interface.js +1 -5
- package/server/applications/webdav/interfaces/webdav.interface.js.map +1 -1
- package/server/applications/webdav/models/webdav-file.model.js +1 -5
- package/server/applications/webdav/models/webdav-file.model.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.js +74 -26
- package/server/applications/webdav/services/webdav-methods.service.js.map +1 -1
- package/server/applications/webdav/services/webdav-methods.service.spec.js +15 -18
- package/server/applications/webdav/services/webdav-methods.service.spec.js.map +1 -1
- package/server/applications/webdav/services/webdav-spaces.service.js +17 -9
- package/server/applications/webdav/services/webdav-spaces.service.js.map +1 -1
- package/server/applications/webdav/services/webdav-spaces.service.spec.js +1 -5
- package/server/applications/webdav/services/webdav-spaces.service.spec.js.map +1 -1
- package/server/applications/webdav/utils/bootstrap.js +1 -5
- package/server/applications/webdav/utils/bootstrap.js.map +1 -1
- package/server/applications/webdav/utils/if-header.js +1 -5
- package/server/applications/webdav/utils/if-header.js.map +1 -1
- package/server/applications/webdav/utils/routes.js +1 -5
- package/server/applications/webdav/utils/routes.js.map +1 -1
- package/server/applications/webdav/utils/webdav.js +1 -5
- package/server/applications/webdav/utils/webdav.js.map +1 -1
- package/server/applications/webdav/utils/xml.js +1 -5
- package/server/applications/webdav/utils/xml.js.map +1 -1
- package/server/applications/webdav/webdav.controller.js +1 -5
- package/server/applications/webdav/webdav.controller.js.map +1 -1
- package/server/applications/webdav/webdav.controller.spec.js +1 -5
- package/server/applications/webdav/webdav.controller.spec.js.map +1 -1
- package/server/applications/webdav/webdav.e2e-spec.js +1 -5
- package/server/applications/webdav/webdav.e2e-spec.js.map +1 -1
- package/server/applications/webdav/webdav.module.js +1 -5
- package/server/applications/webdav/webdav.module.js.map +1 -1
- package/server/authentication/auth.config.js +23 -123
- package/server/authentication/auth.config.js.map +1 -1
- package/server/authentication/auth.controller.js +27 -21
- package/server/authentication/auth.controller.js.map +1 -1
- package/server/authentication/auth.controller.spec.js +6 -10
- package/server/authentication/auth.controller.spec.js.map +1 -1
- package/server/authentication/auth.e2e-spec.js +1 -5
- package/server/authentication/auth.e2e-spec.js.map +1 -1
- package/server/authentication/auth.module.js +17 -20
- package/server/authentication/auth.module.js.map +1 -1
- package/server/authentication/{services/auth-manager.service.js → auth.service.js} +41 -18
- package/server/authentication/auth.service.js.map +1 -0
- package/server/authentication/{services/auth-manager.service.spec.js → auth.service.spec.js} +6 -10
- package/server/authentication/auth.service.spec.js.map +1 -0
- package/server/authentication/constants/auth.js +1 -5
- package/server/authentication/constants/auth.js.map +1 -1
- package/server/authentication/constants/routes.js +41 -30
- package/server/authentication/constants/routes.js.map +1 -1
- package/server/authentication/constants/scope.js +2 -5
- package/server/authentication/constants/scope.js.map +1 -1
- package/server/authentication/decorators/auth-token-optional.decorator.js +1 -5
- package/server/authentication/decorators/auth-token-optional.decorator.js.map +1 -1
- package/server/authentication/decorators/auth-token-skip.decorator.js +1 -5
- package/server/authentication/decorators/auth-token-skip.decorator.js.map +1 -1
- package/server/authentication/dto/login-response.dto.js +1 -10
- package/server/authentication/dto/login-response.dto.js.map +1 -1
- package/server/authentication/dto/token-response.dto.js +1 -5
- package/server/authentication/dto/token-response.dto.js.map +1 -1
- package/server/authentication/guards/auth-anonymous.guard.js +1 -5
- package/server/authentication/guards/auth-anonymous.guard.js.map +1 -1
- package/server/authentication/guards/auth-anonymous.guard.spec.js +1 -5
- package/server/authentication/guards/auth-anonymous.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-anonymous.strategy.js +1 -5
- package/server/authentication/guards/auth-anonymous.strategy.js.map +1 -1
- package/server/authentication/guards/auth-basic.guard.js +1 -5
- package/server/authentication/guards/auth-basic.guard.js.map +1 -1
- package/server/authentication/guards/auth-basic.guard.spec.js +13 -14
- package/server/authentication/guards/auth-basic.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-basic.strategy.js +10 -11
- package/server/authentication/guards/auth-basic.strategy.js.map +1 -1
- package/server/authentication/guards/auth-digest.guard.js +1 -5
- package/server/authentication/guards/auth-digest.guard.js.map +1 -1
- package/server/authentication/guards/auth-digest.strategy.js +1 -5
- package/server/authentication/guards/auth-digest.strategy.js.map +1 -1
- package/server/authentication/guards/auth-local.guard.js +1 -5
- package/server/authentication/guards/auth-local.guard.js.map +1 -1
- package/server/authentication/guards/auth-local.guard.spec.js +9 -13
- package/server/authentication/guards/auth-local.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-local.strategy.js +6 -10
- package/server/authentication/guards/auth-local.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-access.guard.js +1 -5
- package/server/authentication/guards/auth-token-access.guard.js.map +1 -1
- package/server/authentication/guards/auth-token-access.guard.spec.js +3 -7
- package/server/authentication/guards/auth-token-access.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-token-access.strategy.js +3 -7
- package/server/authentication/guards/auth-token-access.strategy.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.guard.js +1 -5
- package/server/authentication/guards/auth-token-refresh.guard.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.guard.spec.js +3 -7
- package/server/authentication/guards/auth-token-refresh.guard.spec.js.map +1 -1
- package/server/authentication/guards/auth-token-refresh.strategy.js +3 -7
- package/server/authentication/guards/auth-token-refresh.strategy.js.map +1 -1
- package/server/authentication/guards/implementations/http-basic.strategy.js +1 -5
- package/server/authentication/guards/implementations/http-basic.strategy.js.map +1 -1
- package/server/authentication/guards/implementations/http-digest.strategy.js +1 -5
- package/server/authentication/guards/implementations/http-digest.strategy.js.map +1 -1
- package/server/authentication/interfaces/auth-request.interface.js +1 -5
- package/server/authentication/interfaces/auth-request.interface.js.map +1 -1
- package/server/authentication/interfaces/jwt-payload.interface.js +1 -5
- package/server/authentication/interfaces/jwt-payload.interface.js.map +1 -1
- package/server/authentication/interfaces/token.interface.js +1 -5
- package/server/authentication/interfaces/token.interface.js.map +1 -1
- package/server/authentication/providers/auth-providers.constants.js +18 -0
- package/server/authentication/providers/auth-providers.constants.js.map +1 -0
- package/server/authentication/providers/auth-providers.models.js +14 -0
- package/server/authentication/providers/auth-providers.models.js.map +1 -0
- package/server/authentication/providers/auth-providers.utils.js +42 -0
- package/server/authentication/providers/auth-providers.utils.js.map +1 -0
- package/server/authentication/providers/ldap/auth-ldap.config.js +143 -0
- package/server/authentication/providers/ldap/auth-ldap.config.js.map +1 -0
- package/server/authentication/{constants/auth-ldap.js → providers/ldap/auth-ldap.constants.js} +12 -6
- package/server/authentication/providers/ldap/auth-ldap.constants.js.map +1 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.js +506 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.js.map +1 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js +674 -0
- package/server/authentication/providers/ldap/auth-provider-ldap.service.spec.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-database.service.js → providers/mysql/auth-provider-mysql.service.js} +16 -14
- package/server/authentication/providers/mysql/auth-provider-mysql.service.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-database.service.spec.js → providers/mysql/auth-provider-mysql.service.spec.js} +15 -19
- package/server/authentication/providers/mysql/auth-provider-mysql.service.spec.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js +30 -0
- package/server/authentication/providers/oidc/auth-oidc-desktop.constants.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.config.js +149 -0
- package/server/authentication/providers/oidc/auth-oidc.config.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.constants.js +39 -0
- package/server/authentication/providers/oidc/auth-oidc.constants.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.controller.js +83 -0
- package/server/authentication/providers/oidc/auth-oidc.controller.js.map +1 -0
- package/server/authentication/providers/oidc/auth-oidc.interfaces.js +6 -0
- package/server/authentication/providers/oidc/auth-oidc.interfaces.js.map +1 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.module.js +36 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.module.js.map +1 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.js +373 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.js.map +1 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js +270 -0
- package/server/authentication/providers/oidc/auth-provider-oidc.service.spec.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-two-fa.service.js → providers/two-fa/auth-provider-two-fa.service.js} +56 -38
- package/server/authentication/providers/two-fa/auth-provider-two-fa.service.js.map +1 -0
- package/server/authentication/{services/auth-methods/auth-method-two-fa.service.spec.js → providers/two-fa/auth-provider-two-fa.service.spec.js} +6 -10
- package/server/authentication/providers/two-fa/auth-provider-two-fa.service.spec.js.map +1 -0
- package/server/authentication/{guards → providers/two-fa}/auth-two-fa-guard.js +10 -14
- package/server/authentication/providers/two-fa/auth-two-fa-guard.js.map +1 -0
- package/server/authentication/providers/two-fa/auth-two-fa.config.js +57 -0
- package/server/authentication/providers/two-fa/auth-two-fa.config.js.map +1 -0
- package/server/authentication/{dto/two-fa-verify.dto.js → providers/two-fa/auth-two-fa.dtos.js} +8 -6
- package/server/authentication/providers/two-fa/auth-two-fa.dtos.js.map +1 -0
- package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js +6 -0
- package/server/authentication/providers/two-fa/auth-two-fa.interfaces.js.map +1 -0
- package/server/authentication/utils/crypt-secret.js +1 -5
- package/server/authentication/utils/crypt-secret.js.map +1 -1
- package/server/common/constants.js +1 -5
- package/server/common/constants.js.map +1 -1
- package/server/common/decorators.js +1 -5
- package/server/common/decorators.js.map +1 -1
- package/server/common/functions.js +25 -9
- package/server/common/functions.js.map +1 -1
- package/server/common/i18n.js +1 -5
- package/server/common/i18n.js.map +1 -1
- package/server/common/image.js +1 -5
- package/server/common/image.js.map +1 -1
- package/server/common/interfaces.js +1 -5
- package/server/common/interfaces.js.map +1 -1
- package/server/common/qrcode.js +1 -5
- package/server/common/qrcode.js.map +1 -1
- package/server/common/shared.js +6 -6
- package/server/common/shared.js.map +1 -1
- package/server/configuration/config.constants.js +1 -5
- package/server/configuration/config.constants.js.map +1 -1
- package/server/configuration/config.environment.js +2 -6
- package/server/configuration/config.environment.js.map +1 -1
- package/server/configuration/config.interfaces.js +1 -5
- package/server/configuration/config.interfaces.js.map +1 -1
- package/server/configuration/config.loader.js +1 -5
- package/server/configuration/config.loader.js.map +1 -1
- package/server/configuration/config.logger.js +4 -8
- package/server/configuration/config.logger.js.map +1 -1
- package/server/configuration/config.validation.js +7 -5
- package/server/configuration/config.validation.js.map +1 -1
- package/server/infrastructure/cache/adapters/mysql-cache.adapter.js +9 -7
- package/server/infrastructure/cache/adapters/mysql-cache.adapter.js.map +1 -1
- package/server/infrastructure/cache/adapters/redis-cache.adapter.js +1 -5
- package/server/infrastructure/cache/adapters/redis-cache.adapter.js.map +1 -1
- package/server/infrastructure/cache/cache.config.js +1 -5
- package/server/infrastructure/cache/cache.config.js.map +1 -1
- package/server/infrastructure/cache/cache.decorator.js +9 -7
- package/server/infrastructure/cache/cache.decorator.js.map +1 -1
- package/server/infrastructure/cache/cache.e2e-spec.js +1 -5
- package/server/infrastructure/cache/cache.e2e-spec.js.map +1 -1
- package/server/infrastructure/cache/cache.module.js +1 -5
- package/server/infrastructure/cache/cache.module.js.map +1 -1
- package/server/infrastructure/cache/schemas/mysql-cache.interface.js +1 -5
- package/server/infrastructure/cache/schemas/mysql-cache.interface.js.map +1 -1
- package/server/infrastructure/cache/schemas/mysql-cache.schema.js +1 -5
- package/server/infrastructure/cache/schemas/mysql-cache.schema.js.map +1 -1
- package/server/infrastructure/cache/services/cache.service.js +1 -5
- package/server/infrastructure/cache/services/cache.service.js.map +1 -1
- package/server/infrastructure/context/context.module.js +1 -5
- package/server/infrastructure/context/context.module.js.map +1 -1
- package/server/infrastructure/context/interceptors/context.interceptor.js +1 -5
- package/server/infrastructure/context/interceptors/context.interceptor.js.map +1 -1
- package/server/infrastructure/context/interceptors/context.interceptor.spec.js +2 -6
- package/server/infrastructure/context/interceptors/context.interceptor.spec.js.map +1 -1
- package/server/infrastructure/context/interfaces/context-store.interface.js +1 -5
- package/server/infrastructure/context/interfaces/context-store.interface.js.map +1 -1
- package/server/infrastructure/context/services/context-manager.service.js +1 -5
- package/server/infrastructure/context/services/context-manager.service.js.map +1 -1
- package/server/infrastructure/context/services/context-manager.service.spec.js +1 -5
- package/server/infrastructure/context/services/context-manager.service.spec.js.map +1 -1
- package/server/infrastructure/database/columns.js +1 -5
- package/server/infrastructure/database/columns.js.map +1 -1
- package/server/infrastructure/database/configuration.js +1 -5
- package/server/infrastructure/database/configuration.js.map +1 -1
- package/server/infrastructure/database/constants.js +2 -6
- package/server/infrastructure/database/constants.js.map +1 -1
- package/server/infrastructure/database/database.config.js +1 -5
- package/server/infrastructure/database/database.config.js.map +1 -1
- package/server/infrastructure/database/database.logger.js +1 -5
- package/server/infrastructure/database/database.logger.js.map +1 -1
- package/server/infrastructure/database/database.module.js +1 -5
- package/server/infrastructure/database/database.module.js.map +1 -1
- package/server/infrastructure/database/interfaces/database.interface.js +1 -5
- package/server/infrastructure/database/interfaces/database.interface.js.map +1 -1
- package/server/infrastructure/database/schema.js +1 -5
- package/server/infrastructure/database/schema.js.map +1 -1
- package/server/infrastructure/database/scripts/create-user.js +1 -5
- package/server/infrastructure/database/scripts/create-user.js.map +1 -1
- package/server/infrastructure/database/scripts/db.js +1 -5
- package/server/infrastructure/database/scripts/db.js.map +1 -1
- package/server/infrastructure/database/scripts/seed/main.js +1 -5
- package/server/infrastructure/database/scripts/seed/main.js.map +1 -1
- package/server/infrastructure/database/scripts/seed/usersgroups.js +1 -5
- package/server/infrastructure/database/scripts/seed/usersgroups.js.map +1 -1
- package/server/infrastructure/database/utils.js +1 -5
- package/server/infrastructure/database/utils.js.map +1 -1
- package/server/infrastructure/mailer/interfaces/mail.interface.js +1 -5
- package/server/infrastructure/mailer/interfaces/mail.interface.js.map +1 -1
- package/server/infrastructure/mailer/mailer.config.js +1 -5
- package/server/infrastructure/mailer/mailer.config.js.map +1 -1
- package/server/infrastructure/mailer/mailer.module.js +1 -5
- package/server/infrastructure/mailer/mailer.module.js.map +1 -1
- package/server/infrastructure/mailer/mailer.service.js +1 -5
- package/server/infrastructure/mailer/mailer.service.js.map +1 -1
- package/server/infrastructure/mailer/mailer.service.spec.js +2 -6
- package/server/infrastructure/mailer/mailer.service.spec.js.map +1 -1
- package/server/infrastructure/scheduler/scheduler.constants.js +1 -5
- package/server/infrastructure/scheduler/scheduler.constants.js.map +1 -1
- package/server/infrastructure/scheduler/scheduler.module.js +1 -5
- package/server/infrastructure/scheduler/scheduler.module.js.map +1 -1
- package/server/infrastructure/websocket/adapters/cluster.adapter.js +1 -5
- package/server/infrastructure/websocket/adapters/cluster.adapter.js.map +1 -1
- package/server/infrastructure/websocket/adapters/redis.adapter.js +1 -5
- package/server/infrastructure/websocket/adapters/redis.adapter.js.map +1 -1
- package/server/infrastructure/websocket/adapters/web-socket.adapter.js +1 -5
- package/server/infrastructure/websocket/adapters/web-socket.adapter.js.map +1 -1
- package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js +1 -5
- package/server/infrastructure/websocket/decorators/web-socket-user.decorator.js.map +1 -1
- package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js +1 -5
- package/server/infrastructure/websocket/interfaces/auth-socket-io.interface.js.map +1 -1
- package/server/infrastructure/websocket/utils.js +1 -5
- package/server/infrastructure/websocket/utils.js.map +1 -1
- package/server/infrastructure/websocket/web-socket.config.js +1 -5
- package/server/infrastructure/websocket/web-socket.config.js.map +1 -1
- package/server/main.js +5 -0
- package/server/main.js.map +1 -1
- package/static/assets/pdfjs/build/pdf.mjs +724 -745
- package/static/assets/pdfjs/build/pdf.mjs.map +1 -1
- package/static/assets/pdfjs/build/pdf.sandbox.mjs +2 -2
- package/static/assets/pdfjs/build/pdf.worker.mjs +706 -193
- package/static/assets/pdfjs/build/pdf.worker.mjs.map +1 -1
- package/static/assets/pdfjs/version +1 -1
- package/static/assets/pdfjs/web/locale/dsb/viewer.ftl +5 -5
- package/static/assets/pdfjs/web/locale/en-US/viewer.ftl +1 -0
- package/static/assets/pdfjs/web/locale/fur/viewer.ftl +5 -0
- package/static/assets/pdfjs/web/locale/kk/viewer.ftl +28 -0
- package/static/assets/pdfjs/web/locale/ml/viewer.ftl +4 -0
- package/static/assets/pdfjs/web/locale/ru/viewer.ftl +3 -3
- package/static/assets/pdfjs/web/viewer.css +207 -65
- package/static/assets/pdfjs/web/viewer.html +11 -10
- package/static/assets/pdfjs/web/viewer.mjs +850 -270
- package/static/assets/pdfjs/web/viewer.mjs.map +1 -1
- package/static/assets/pdfjs/web/wasm/LICENSE_JBIG2 +196 -0
- package/static/assets/pdfjs/web/wasm/LICENSE_PDFJS_JBIG2 +13 -0
- package/static/assets/pdfjs/web/wasm/jbig2.wasm +0 -0
- package/static/chunk-22TZP6HW.js +1 -0
- package/static/{chunk-U5E5H2DD.js → chunk-27ATUHBH.js} +1 -1
- package/static/{chunk-HZAB6F4Q.js → chunk-2CKLZ3FM.js} +1 -1
- package/static/{chunk-XZHWESIY.js → chunk-2QZPX7LO.js} +1 -1
- package/static/{chunk-UOK3LKSX.js → chunk-2R6IBBPZ.js} +1 -1
- package/static/{chunk-DVCN3P7Q.js → chunk-4FIGEBNL.js} +1 -1
- package/static/chunk-4P3JABAP.js +13 -0
- package/static/chunk-5CZOSAMZ.js +1 -0
- package/static/{chunk-RBTLSPYJ.js → chunk-677WUBCT.js} +1 -1
- package/static/{chunk-KEZNIIFH.js → chunk-74CAHBFM.js} +1 -1
- package/static/{chunk-WRK2FTKU.js → chunk-7GWW6MJO.js} +1 -1
- package/static/{chunk-EKWB5W72.js → chunk-7WOPGQXB.js} +1 -1
- package/static/{chunk-IMFO2MI7.js → chunk-A4UGPSWX.js} +1 -1
- package/static/{chunk-KDUAB76O.js → chunk-AHO37FKW.js} +1 -1
- package/static/chunk-AQCXMKP3.js +1 -0
- package/static/chunk-B6PDYCRO.js +3 -0
- package/static/{chunk-PPJCVBJH.js → chunk-CU76ATCF.js} +1 -1
- package/static/{chunk-ARS47O5X.js → chunk-CWYHOPOP.js} +1 -1
- package/static/{chunk-CSVPAZHK.js → chunk-E5WI5725.js} +1 -1
- package/static/{chunk-XX3JPJUM.js → chunk-FC5HTKVM.js} +1 -1
- package/static/{chunk-QGHNJVJ6.js → chunk-FOSM7EYI.js} +1 -1
- package/static/{chunk-JAJ7VXMB.js → chunk-GAZO25PI.js} +1 -1
- package/static/{chunk-IHS5LSJJ.js → chunk-GB7ABR5N.js} +1 -1
- package/static/{chunk-27V66YJV.js → chunk-GEHFKZQ5.js} +2 -2
- package/static/{chunk-3QTROEHV.js → chunk-GQFMWVFD.js} +1 -1
- package/static/{chunk-FWQJ4ZCD.js → chunk-GVNTC564.js} +1 -1
- package/static/{chunk-4NIYCYRS.js → chunk-HGL3NYP2.js} +2 -2
- package/static/chunk-HLIWPWRA.js +1 -0
- package/static/{chunk-3VRUIWQG.js → chunk-HNYB3M4S.js} +1 -1
- package/static/{chunk-7HJFIMNF.js → chunk-HUXAUQMN.js} +1 -1
- package/static/chunk-I2XA6PPK.js +1 -0
- package/static/{chunk-RJULB733.js → chunk-ISV3BO6R.js} +1 -1
- package/static/{chunk-R4VYKZVJ.js → chunk-IWWBV6EM.js} +1 -1
- package/static/{chunk-TTWMFWEC.js → chunk-JV3AGU5B.js} +1 -1
- package/static/{chunk-X7NHX5C7.js → chunk-K25E7YGG.js} +1 -1
- package/static/chunk-K46PUTZB.js +1 -0
- package/static/{chunk-D2MLAO5N.js → chunk-KERFLJ56.js} +1 -7
- package/static/{chunk-LZUHREOF.js → chunk-KJD3KFF3.js} +1 -1
- package/static/chunk-KPKSI23S.js +1 -0
- package/static/{chunk-CMNMPG6Z.js → chunk-KZS7CTNR.js} +1 -1
- package/static/{chunk-RNVPQQKT.js → chunk-L5IHUVXL.js} +1 -1
- package/static/{chunk-2GXOVGTD.js → chunk-L7RRX2M3.js} +1 -1
- package/static/{chunk-WFMEUST4.js → chunk-LGWJ2WKU.js} +1 -1
- package/static/{chunk-ZOMRIN3G.js → chunk-MLC7JK2H.js} +2 -2
- package/static/{chunk-76REYAEA.js → chunk-MOHNYW2A.js} +1 -1
- package/static/{chunk-ZHUBWKA2.js → chunk-MTRXBVWZ.js} +1 -1
- package/static/{chunk-QJ22N76V.js → chunk-MZQK6LNV.js} +1 -1
- package/static/{chunk-SDJNZULP.js → chunk-NCDUOVMW.js} +1 -1
- package/static/chunk-NGUAJIGI.js +1 -0
- package/static/chunk-NIPP6JDI.js +1 -0
- package/static/{chunk-VD5JHSDS.js → chunk-NMTBMHUL.js} +1 -1
- package/static/chunk-O4XXMZFX.js +4 -0
- package/static/{chunk-WZPF4LS2.js → chunk-OANZITPM.js} +1 -1
- package/static/{chunk-JNTNMIUH.js → chunk-OGE4SAHU.js} +1 -1
- package/static/{chunk-S6H2ELRY.js → chunk-OI3ME22C.js} +1 -1
- package/static/{chunk-7KAYOR3A.js → chunk-Q3EGCMF5.js} +1 -1
- package/static/chunk-QF2NSHZA.js +1 -0
- package/static/{chunk-3ZBAQTHJ.js → chunk-QIGUDEZF.js} +1 -1
- package/static/{chunk-76M3BMK6.js → chunk-QJVC3SRJ.js} +11 -11
- package/static/{chunk-VBTZDHZ3.js → chunk-QKN6LAAA.js} +1 -1
- package/static/{chunk-JRXG43AA.js → chunk-QRFESU5O.js} +2 -2
- package/static/chunk-QVRVFYJH.js +1 -0
- package/static/{chunk-BCN4T5DO.js → chunk-RFJIPIOK.js} +2 -2
- package/static/{chunk-2RWLNKZH.js → chunk-RLL634K4.js} +1 -1
- package/static/{chunk-D5FQ72R4.js → chunk-RS2OFKWP.js} +1 -1
- package/static/{chunk-CN5YVRFT.js → chunk-RWAAC3A4.js} +1 -1
- package/static/{chunk-LWSCODLD.js → chunk-RWCNTCU5.js} +1 -1
- package/static/{chunk-FTFEQDWH.js → chunk-S5Y64DDS.js} +1 -1
- package/static/{chunk-J7474P3L.js → chunk-SLG5KDU6.js} +1 -1
- package/static/chunk-TJ4CVFEL.js +1 -0
- package/static/{chunk-KAUCN24H.js → chunk-TWCGKSYE.js} +1 -1
- package/static/{chunk-PDG7DOEF.js → chunk-UMDRE4S7.js} +1 -1
- package/static/chunk-VRIOLRYR.js +5 -0
- package/static/chunk-VS4O2XDP.js +1 -0
- package/static/{chunk-ZEJLIGAY.js → chunk-VSBFNFOM.js} +1 -1
- package/static/{chunk-XSURUW7C.js → chunk-WN4WXCVK.js} +1 -1
- package/static/{chunk-S44QIK3G.js → chunk-WX7RXW7K.js} +1 -1
- package/static/{chunk-3ZLBVUCX.js → chunk-XC4POKR3.js} +2 -2
- package/static/{chunk-TNCKNU6I.js → chunk-Y4AUYQTG.js} +1 -1
- package/static/{chunk-3MVPXC3U.js → chunk-Y67J3BOL.js} +1 -1
- package/static/{chunk-QTPIEEZW.js → chunk-YMIXHRJQ.js} +1 -7
- package/static/{chunk-VZFZUI6D.js → chunk-ZUNKFAKP.js} +1 -1
- package/static/index.html +3 -3
- package/static/main-QN4UCOC5.js +5 -0
- package/static/{styles-XLLEY5Y3.css → styles-46GLIE7Y.css} +1 -1
- package/server/authentication/constants/auth-ldap.js.map +0 -1
- package/server/authentication/dto/two-fa-verify.dto.js.map +0 -1
- package/server/authentication/guards/auth-two-fa-guard.js.map +0 -1
- package/server/authentication/interfaces/two-fa-setup.interface.js +0 -10
- package/server/authentication/interfaces/two-fa-setup.interface.js.map +0 -1
- package/server/authentication/models/auth-method.js +0 -18
- package/server/authentication/models/auth-method.js.map +0 -1
- package/server/authentication/services/auth-manager.service.js.map +0 -1
- package/server/authentication/services/auth-manager.service.spec.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-database.service.spec.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js +0 -326
- package/server/authentication/services/auth-methods/auth-method-ldap.service.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js +0 -534
- package/server/authentication/services/auth-methods/auth-method-ldap.service.spec.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.js.map +0 -1
- package/server/authentication/services/auth-methods/auth-method-two-fa.service.spec.js.map +0 -1
- package/static/chunk-2YQ4SX3A.js +0 -13
- package/static/chunk-46TJLPJY.js +0 -1
- package/static/chunk-6OEOADR6.js +0 -1
- package/static/chunk-AALPWGPB.js +0 -3
- package/static/chunk-CVXLHSO5.js +0 -1
- package/static/chunk-G7RZN7HN.js +0 -1
- package/static/chunk-LTJNLOX2.js +0 -1
- package/static/chunk-NIKNG2FX.js +0 -1
- package/static/chunk-NNZWSNAW.js +0 -1
- package/static/chunk-NWKBB7J4.js +0 -1
- package/static/chunk-PVYVY3GD.js +0 -1
- package/static/chunk-Q5X5TPAG.js +0 -1
- package/static/chunk-R4VMWCM5.js +0 -1
- package/static/chunk-SNOOCDJD.js +0 -1
- package/static/chunk-SPQH3ATC.js +0 -5
- package/static/chunk-ZCSHU3D7.js +0 -1
- package/static/chunk-ZU5MQTFN.js +0 -4
- package/static/main-5O3KLGIR.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../backend/src/applications/shares/services/shares-manager.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 path from 'node:path'\nimport { ACTION } from '../../../common/constants'\nimport {\n anonymizePassword,\n convertDiffUpdate,\n diffCollection,\n differencePermissions,\n generateShortUUID,\n hashPassword\n} from '../../../common/functions'\nimport type { Entries, StorageQuota } from '../../../common/interfaces'\nimport { intersectPermissions } from '../../../common/shared'\nimport { ContextManager } from '../../../infrastructure/context/services/context-manager.service'\nimport type { FileProps } from '../../files/interfaces/file-props.interface'\nimport { FileError } from '../../files/models/file-error'\nimport { checkExternalPath, dirSize, getProps, isPathExists } from '../../files/utils/files'\nimport { LINK_TYPE } from '../../links/constants/links'\nimport type { CreateOrUpdateLinkDto } from '../../links/dto/create-or-update-link.dto'\nimport type { LinkGuest } from '../../links/interfaces/link-guest.interface'\nimport type { Link } from '../../links/schemas/link.interface'\nimport { LinksQueries } from '../../links/services/links-queries.service'\nimport { NOTIFICATION_APP, NOTIFICATION_APP_EVENT } from '../../notifications/constants/notifications'\nimport type { NotificationContent, NotificationOptions } from '../../notifications/interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../../notifications/interfaces/user-mail-notification.interface'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { CACHE_QUOTA_SHARE_PREFIX, CACHE_QUOTA_TTL } from '../../spaces/constants/cache'\nimport { SPACE_OPERATION, SPACE_PERMS_SEP, SPACE_REPOSITORY, SPACE_ROLE } from '../../spaces/constants/spaces'\nimport type { SpaceMemberDto } from '../../spaces/dto/create-or-update-space.dto'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport type { SpaceProps } from '../../spaces/models/space-props.model'\nimport { SpacesQueries } from '../../spaces/services/spaces-queries.service'\nimport { havePermission, haveSpacePermission, removePermissions } from '../../spaces/utils/permissions'\nimport { MEMBER_TYPE } from '../../users/constants/member'\nimport { GUEST_PERMISSION, USER_NOTIFICATION, USER_ROLE } from '../../users/constants/user'\nimport { CreateUserDto } from '../../users/dto/create-or-update-user.dto'\nimport { UserModel } from '../../users/models/user.model'\nimport type { User } from '../../users/schemas/user.interface'\nimport { UsersQueries } from '../../users/services/users-queries.service'\nimport { SHARE_ALL_OPERATIONS, SHARE_TYPE } from '../constants/shares'\nimport type { CreateOrUpdateShareDto, ShareMemberDto } from '../dto/create-or-update-share.dto'\nimport type { ShareChildMember } from '../interfaces/share-child.interface'\nimport type { ShareEnv } from '../interfaces/share-env.interface'\nimport type { ShareFile } from '../interfaces/share-file.interface'\nimport type { ShareLink } from '../interfaces/share-link.interface'\nimport type { ShareProps } from '../interfaces/share-props.interface'\nimport type { ShareChild } from '../models/share-child.model'\nimport type { ShareMembers } from '../schemas/share-members.interface'\nimport type { Share } from '../schemas/share.interface'\nimport { SharesQueries } from './shares-queries.service'\n\n@Injectable()\nexport class SharesManager {\n private readonly logger = new Logger(SharesManager.name)\n\n constructor(\n private readonly contextManager: ContextManager,\n private readonly notificationsManager: NotificationsManager,\n private readonly sharesQueries: SharesQueries,\n private readonly spacesQueries: SpacesQueries,\n private readonly usersQueries: UsersQueries,\n private readonly linksQueries: LinksQueries\n ) {}\n\n permissions(user: UserModel, spaceAlias: string) {\n return this.sharesQueries.permissions(user.id, spaceAlias, +user.isAdmin)\n }\n\n listShares(user: UserModel): Promise<ShareFile[]> {\n return this.sharesQueries.listShares(user)\n }\n\n listSpaceShares(spaceId: number): Promise<ShareChild[]> {\n return this.sharesQueries.listSpaceShares(spaceId)\n }\n\n listChildShares(user: UserModel, shareId: number): Promise<ShareChild[]> {\n return this.sharesQueries.listChildShares(user.id, shareId, +user.isAdmin)\n }\n\n async setAllowedPermissions(user: UserModel, share: ShareProps | ShareLink, asAdmin = false) {\n if (share.file?.ownerId === user.id || (share.externalPath && user.isAdmin)) {\n // current user is the file owner (personal space case)\n share.file.permissions = SHARE_ALL_OPERATIONS\n } else if (share.file?.space?.alias) {\n share.file.ownerId = null\n // retrieve space permissions (cached query)\n const spacePermissions: Partial<SpaceEnv> = await this.spacesQueries.permissions(user.id, share.file.space.alias, share.file.space.root?.alias)\n if (!spacePermissions) {\n this.logger.warn(`${this.setAllowedPermissions.name} - missing space permissions : ${JSON.stringify(share)}`)\n throw new HttpException('Space not found', HttpStatus.NOT_FOUND)\n }\n // compute permissions\n const spaceEnv = new SpaceEnv(spacePermissions)\n spaceEnv.setPermissions(true)\n share.file.permissions = spaceEnv.envPermissions\n } else if (share.parent?.alias) {\n // retrieve parent share permissions (cached query)\n // use current the user permissions on the share or the share owner permissions if we request the share as admin\n const userId = asAdmin ? share.ownerId : user.id\n const sharePermissions: Partial<SpaceEnv> = await this.sharesQueries.permissions(userId, share.parent.alias, +user.isAdmin)\n if (!sharePermissions) {\n this.logger.warn(`${this.setAllowedPermissions.name} - missing share permissions : ${JSON.stringify(share)}`)\n throw new HttpException('Share not found', HttpStatus.NOT_FOUND)\n }\n share.file.permissions = sharePermissions.permissions\n } else {\n this.logger.error(`${this.setAllowedPermissions.name} - case not handled ${JSON.stringify(share)}`)\n throw new HttpException('Missing information', HttpStatus.BAD_REQUEST)\n }\n }\n\n async getShareWithMembers(user: UserModel, shareId: number, asAdmin = false): Promise<ShareProps> {\n // asAdmin : true if the user is the owner of the parent share or if the share is requested from the administration\n const share: ShareProps = await this.sharesQueries.getShareWithMembers(user, shareId, asAdmin)\n if (!share) {\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n await this.setAllowedPermissions(user, share, asAdmin)\n return share\n }\n\n async createShare(user: UserModel, createOrUpdateShareDto: CreateOrUpdateShareDto): Promise<ShareProps> {\n const share: Partial<Share> = {\n name: createOrUpdateShareDto.name,\n alias: await this.sharesQueries.uniqueShareAlias(createOrUpdateShareDto.name),\n description: createOrUpdateShareDto.description,\n externalPath: createOrUpdateShareDto.externalPath,\n enabled: createOrUpdateShareDto.enabled,\n storageQuota: createOrUpdateShareDto.storageQuota,\n storageIndexing: createOrUpdateShareDto.storageIndexing,\n disabledAt: createOrUpdateShareDto.enabled ? null : new Date(),\n type: createOrUpdateShareDto.type || SHARE_TYPE.COMMON\n }\n if (share.externalPath) {\n /* EXTERNAL PATH CASE */\n if (!user.isAdmin) {\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n try {\n await checkExternalPath(share.externalPath)\n } catch (e: any) {\n throw new HttpException(e.message, e instanceof FileError ? e.httpCode : HttpStatus.INTERNAL_SERVER_ERROR)\n }\n share.ownerId = null\n } else {\n /* SPACES CASE */\n share.externalPath = null\n share.ownerId = user.id\n if (createOrUpdateShareDto.file.ownerId) {\n /* PERSONAL SPACE CASE */\n // check file\n if (createOrUpdateShareDto.file.ownerId === user.id && createOrUpdateShareDto.file.id > 0) {\n // When a user shares a root space they own, it is recommended to create the share from their personal space.\n // `file.path` come from a root space with a custom name (invalid in the personal space context); if so, retrieve the original path.\n const f = await this.spacesQueries.getUserFile(user.id, createOrUpdateShareDto.file.id)\n if (f) createOrUpdateShareDto.file.path = f.path\n }\n const realPath = path.join(user.filesPath, createOrUpdateShareDto.file.path)\n if (!(await isPathExists(realPath))) {\n this.logger.warn(`${this.createShare.name} - location does not exist : ${realPath}`)\n throw new HttpException('The location does not exist', HttpStatus.NOT_FOUND)\n }\n const fileProps: FileProps = { ...(await getProps(realPath, createOrUpdateShareDto.file.path)), id: createOrUpdateShareDto.file.id }\n share.fileId = await this.spacesQueries.getOrCreateUserFile(user.id, fileProps)\n } else if (createOrUpdateShareDto.file.space?.alias) {\n /* SPACE CASE */\n const spacePermissions: Partial<SpaceEnv> = await this.spacesQueries.permissions(\n user.id,\n createOrUpdateShareDto.file.space.alias,\n createOrUpdateShareDto.file.space.root.alias\n )\n if (!spacePermissions) {\n throw new HttpException('Space not found', HttpStatus.NOT_FOUND)\n }\n // compute space permissions\n const space: SpaceEnv = new SpaceEnv(spacePermissions)\n space.setPermissions(true)\n // intersect space permissions for members\n for (const m of createOrUpdateShareDto.members) {\n m.permissions = intersectPermissions(space.envPermissions, m.permissions)\n }\n // intersect space permissions for links\n for (const l of createOrUpdateShareDto.links) {\n l.permissions = intersectPermissions(space.envPermissions, l.permissions)\n }\n // check file\n try {\n space.setPaths(user, createOrUpdateShareDto.file.space.root.alias, createOrUpdateShareDto.file.path.split('/').slice(space.root.id ? 1 : 0))\n } catch (e) {\n if (e instanceof FileError) {\n throw new HttpException(e.message, e.httpCode)\n }\n throw new HttpException(e.message, HttpStatus.BAD_REQUEST)\n }\n if (!(await isPathExists(space.realPath))) {\n this.logger.warn(`${this.createShare.name} - space location does not exist : *${space.alias}* (${space.id}) : ${space.realPath}`)\n throw new HttpException('The location does not exist', HttpStatus.NOT_FOUND)\n }\n share.spaceId = space.id\n share.spaceRootId = space.root?.id || null\n // define share.fileId\n // if the file is the same as the space root, ignores share.fileId and only uses spaceId and spaceRootId\n const isExternalSpaceRoot =\n createOrUpdateShareDto.file?.id < 0 &&\n createOrUpdateShareDto.file?.path === createOrUpdateShareDto.file?.space?.root?.alias &&\n createOrUpdateShareDto.file?.space?.root?.alias === spacePermissions.root?.alias &&\n createOrUpdateShareDto.file?.space?.root?.name === spacePermissions.root?.name\n const isSpaceRoot = Number(createOrUpdateShareDto.file.id) === Number(spacePermissions.root?.file?.id)\n if (!isSpaceRoot && !isExternalSpaceRoot) {\n const fileProps: FileProps = { ...(await getProps(space.realPath, space.dbFile.path)), id: undefined }\n // get or create file id\n share.fileId = await this.spacesQueries.getOrCreateSpaceFile(createOrUpdateShareDto.file.id, fileProps, space.dbFile)\n }\n } else {\n // unexpected case\n throw new HttpException('Missing information', HttpStatus.BAD_REQUEST)\n }\n }\n // create share\n share.id = await this.sharesQueries.createShare(share)\n // check and update members\n await this.createOrUpdateLinksAsMembers(user, share, LINK_TYPE.SHARE, createOrUpdateShareDto.links)\n await this.updateMembers(user, share, [], createOrUpdateShareDto.members)\n return this.getShareWithMembers(user, share.id)\n }\n\n async updateShare(user: UserModel, shareId: number, createOrUpdateShareDto: CreateOrUpdateShareDto, asAdmin = false): Promise<ShareProps> {\n // asAdmin: true if the user is the owner of the parent share or if the share is requested from the administration\n const share: ShareProps = await this.getShareWithMembers(user, shareId, asAdmin)\n // check and update share info\n const shareDiffProps: Partial<ShareProps> = { modifiedAt: new Date() }\n const props: (keyof CreateOrUpdateShareDto)[] = ['name', 'description', 'enabled', 'storageQuota', 'storageIndexing']\n for (const prop of props) {\n if (createOrUpdateShareDto[prop] !== share[prop]) {\n shareDiffProps[prop] = createOrUpdateShareDto[prop]\n if (prop === 'name') {\n shareDiffProps.alias = await this.sharesQueries.uniqueShareAlias(shareDiffProps.name)\n } else if (prop === 'enabled') {\n shareDiffProps.disabledAt = shareDiffProps[prop] ? null : new Date()\n }\n }\n }\n // update in db\n if (!(await this.sharesQueries.updateShare(shareId, shareDiffProps))) {\n throw new HttpException('Unable to update share', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n // check & update members\n const linkMembers: ShareMemberDto[] = await this.createOrUpdateLinksAsMembers(user, share, LINK_TYPE.SHARE, createOrUpdateShareDto.links)\n // intersect share permissions for members\n for (const m of createOrUpdateShareDto.members) {\n m.permissions = intersectPermissions(share.file.permissions, m.permissions)\n }\n // intersect share permissions for links\n for (const l of linkMembers) {\n l.permissions = intersectPermissions(share.file.permissions, l.permissions)\n }\n await this.updateMembers(user, share, share.members, [...createOrUpdateShareDto.members, ...linkMembers])\n return this.getShareWithMembers(user, share.id, asAdmin)\n }\n\n async deleteShare(user: UserModel, shareId: number, asAdmin = false): Promise<void> {\n // asAdmin : true if the user is the owner of the parent share or if the share is requested from an admin\n if (!asAdmin && !user.isAdmin && !(await this.sharesQueries.shareExistsForOwner(user.id, shareId))) {\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n try {\n await this.deleteAllLinkMembers(shareId, LINK_TYPE.SHARE)\n await this.removeShareFromOwners(shareId, 'all', false, user.id)\n } catch (e) {\n this.logger.error(`${this.deleteShare.name} - unable to delete share (${shareId}) (asAdmin = ${asAdmin}) : ${e}`)\n throw new HttpException('Unable to delete share', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n async getChildShare(user: UserModel, shareId: number, childId: number, isLink?: false): Promise<ShareProps>\n async getChildShare(user: UserModel, shareId: number, childId: number, isLink?: true): Promise<ShareLink>\n async getChildShare(user: UserModel, shareId: number, childId: number, isLink?: boolean): Promise<ShareProps | ShareLink> {\n if (await this.checkChildSharePermissions(user, shareId, childId)) {\n if (isLink) {\n return this.getShareLink(user, childId, true)\n }\n return this.getShareWithMembers(user, childId, true)\n }\n }\n\n async updateChildShare(user: UserModel, shareId: number, childId: number, createOrUpdateShareDto: CreateOrUpdateShareDto): Promise<ShareProps> {\n if (await this.checkChildSharePermissions(user, shareId, childId)) {\n return this.updateShare(user, childId, createOrUpdateShareDto, true)\n }\n }\n\n async deleteChildShare(user: UserModel, shareId: number, childId: number): Promise<void> {\n if (await this.checkChildSharePermissions(user, shareId, childId)) {\n return this.deleteShare(user, childId, true)\n }\n }\n\n async createChildShare(user: UserModel, createOrUpdateShareDto: CreateOrUpdateShareDto): Promise<ShareProps> {\n // check parent share\n const pSharePermissions = await this.sharesQueries.permissions(user.id, createOrUpdateShareDto.parent.alias, +user.isAdmin)\n if (!pSharePermissions) {\n this.logger.warn(`${this.createChildShare.name} - parent share does not exist or not authorized : ${createOrUpdateShareDto.parent.alias}`)\n throw new HttpException('Parent share not found', HttpStatus.NOT_FOUND)\n }\n if (!haveSpacePermission(pSharePermissions, SPACE_OPERATION.SHARE_OUTSIDE)) {\n this.logger.warn(`${this.createChildShare.name} - is not allowed to share outside of : *${pSharePermissions.alias}* (${pSharePermissions.id})`)\n throw new HttpException('You are not allowed to do this action', HttpStatus.FORBIDDEN)\n }\n if (!pSharePermissions.enabled) {\n this.logger.warn(`${this.createChildShare.name} - parent share is disabled : ${createOrUpdateShareDto.parent.alias}`)\n throw new HttpException('Parent share is disabled', HttpStatus.FORBIDDEN)\n }\n\n let pShare: Partial<SpaceEnv>\n let filePath: string\n if (pSharePermissions.root.externalPath) {\n const highestParentId = await this.sharesQueries.findHighestParentShare(pSharePermissions.id)\n if (!highestParentId) {\n this.logger.warn(\n `${this.createChildShare.name} - unable to find the highest parent of : *${pSharePermissions.alias}* (${pSharePermissions.id})`\n )\n throw new HttpException('Parent share not found', HttpStatus.NOT_FOUND)\n }\n pShare = await this.sharesQueries.shareEnv(highestParentId)\n filePath = path.join(pSharePermissions.root?.file?.path || '', createOrUpdateShareDto.file.path)\n } else {\n pShare = await this.sharesQueries.shareEnv(pSharePermissions.id)\n filePath = createOrUpdateShareDto.file.path\n }\n\n // create a fake space env -> share env\n const pShareEnv: Partial<ShareEnv> = new SpaceEnv(pShare, null, false)\n try {\n pShareEnv.setPaths(user, null, filePath.split('/'))\n } catch (e) {\n if (e instanceof FileError) {\n throw new HttpException(e.message, e.httpCode)\n }\n throw new HttpException(e.message, HttpStatus.BAD_REQUEST)\n }\n // check file\n if (!(await isPathExists(pShareEnv.realPath))) {\n this.logger.warn(\n `${this.createChildShare.name} - parent share location does not exist : ${pShareEnv.alias} (${pShareEnv.id}) : ${pShareEnv.realPath}`\n )\n throw new HttpException('The location does not exist', HttpStatus.NOT_FOUND)\n }\n\n /* Manage the case where the child share is created from the parent share itself */\n // special case, the parent share is directly linked to the space root file\n const isLinkedToShareSpaceRoot =\n pShareEnv.fileId === null &&\n Number(createOrUpdateShareDto.file.id) === Number(pSharePermissions.root?.id) &&\n createOrUpdateShareDto.file.path === '.'\n // special case, the parent share is directly linked to the share with an external path\n const isLinkedToShareExternalPath =\n createOrUpdateShareDto.file.id < 0 && !!pShareEnv.root.externalPath && createOrUpdateShareDto.file.path === '.'\n let fileId: number = null\n if (!isLinkedToShareSpaceRoot && !isLinkedToShareExternalPath) {\n // fileId is mandatory for a file in a child share\n const fileProps: FileProps = { ...(await getProps(pShareEnv.realPath, pShareEnv.dbFile.path)), id: undefined }\n fileId = await this.spacesQueries.getOrCreateSpaceFile(createOrUpdateShareDto.file.id, fileProps, pShareEnv.dbFile)\n }\n\n const share: Partial<Share> = {\n name: createOrUpdateShareDto.name,\n alias: await this.sharesQueries.uniqueShareAlias(createOrUpdateShareDto.name),\n ownerId: user.id,\n spaceId: pShareEnv.spaceId,\n spaceRootId: pShareEnv.spaceRootId,\n parentId: pSharePermissions.id,\n fileId: fileId,\n description: createOrUpdateShareDto.description,\n externalPath: pShareEnv.root.externalPath,\n enabled: createOrUpdateShareDto.enabled,\n disabledAt: createOrUpdateShareDto.enabled ? null : new Date(),\n type: createOrUpdateShareDto.type || SHARE_TYPE.COMMON\n }\n // create child share\n share.id = await this.sharesQueries.createShare(share)\n // intersect parent share permissions for members\n for (const m of createOrUpdateShareDto.members) {\n m.permissions = intersectPermissions(pSharePermissions.permissions, m.permissions)\n }\n // intersect parent share permissions for links\n for (const l of createOrUpdateShareDto.links) {\n l.permissions = intersectPermissions(pSharePermissions.permissions, l.permissions)\n }\n // check & update members\n await this.createOrUpdateLinksAsMembers(user, share, LINK_TYPE.SHARE, createOrUpdateShareDto.links)\n await this.updateMembers(user, share, [], createOrUpdateShareDto.members)\n return this.getShareWithMembers(user, share.id)\n }\n\n async updateSharesFromSpace(\n /*\n In this case the space is considered as a parent share\n The shares and child shares of the member should be deleted if the member is removed from the space\n Member permissions on shares and its child shares must be updated if the parent share owner's permissions are updated on the space\n */\n spaceId: number,\n currentMembers: SpaceMemberDto[],\n toRemove: SpaceMemberDto[],\n toUpdate: { object: SpaceMemberDto; rmPermissions: SPACE_OPERATION[] }[]\n ) {\n // skip if no actions\n if (!toRemove.length && !toUpdate.length) return\n // get all space manager ids (ignore them, they have all permissions on the space)\n const spaceManagerIds: number[] = currentMembers.filter((m) => m.spaceRole === SPACE_ROLE.IS_MANAGER).map((m) => m.id)\n const [rmOwners, upOwners] = await this.diffSharesPermissions(currentMembers, toRemove, toUpdate, spaceManagerIds)\n if (!rmOwners.length && !upOwners.length) return\n\n const owners: Record<\n number,\n {\n type: ACTION.UPDATE | ACTION.DELETE\n rmPermissions?: SPACE_OPERATION[]\n }\n > = {\n ...Object.fromEntries(rmOwners.map((uId: number) => [uId, { type: ACTION.DELETE }])),\n ...Object.fromEntries(\n upOwners.reduce(\n (\n acc: [\n number,\n {\n type: ACTION.UPDATE\n rmPermissions: SPACE_OPERATION[]\n }\n ][],\n o\n ) => {\n for (const id of o.ids) {\n acc.push([id, { type: ACTION.UPDATE, rmPermissions: o.rmPermissions }])\n }\n return acc\n },\n []\n )\n )\n }\n // find all parent shares which are owned by the modified/removed members of the space\n for (const share of await this.sharesQueries.selectParentSharesFromSpaceId(\n spaceId,\n Object.keys(owners).map((id: string) => parseInt(id))\n )) {\n if (share.ownerId in owners) {\n const action = owners[share.ownerId]\n if (action.type === ACTION.UPDATE) {\n this.removeChildSharesPermissions(\n share.id,\n [\n {\n ids: [share.ownerId],\n rmPermissions: action.rmPermissions\n }\n ],\n false\n ).catch((e: Error) => this.logger.error(`${this.updateSharesFromSpace.name} - ${e}`))\n } else {\n this.removeShareFromOwners(share.id, [share.ownerId], false).catch((e: Error) =>\n this.logger.error(`${this.updateSharesFromSpace.name} - ${e}`)\n )\n }\n this.logger.log(`${this.updateSharesFromSpace.name} - ${action.type} share (${share.id}) for owner ${share.ownerId} from space ${spaceId}`)\n }\n }\n }\n\n async updateSharesFromSpaceRoots(\n /* update or remove shares related to space roots changes */\n spaceId: number,\n toRemove: number[],\n toUpdate: {\n id: number\n rmPermissions: SPACE_OPERATION[]\n }[]\n ): Promise<void> {\n // skip if no actions\n if (!toRemove.length && !toUpdate.length) return\n\n for (const root of toUpdate) {\n for (const share of await this.sharesQueries.selectShares({ spaceId: spaceId, spaceRootId: root.id, parentId: null })) {\n this.removeChildSharesPermissions(\n share.id,\n [\n {\n ids: 'all',\n rmPermissions: root.rmPermissions\n }\n ],\n false\n ).catch((e: Error) => this.logger.error(`${this.updateSharesFromSpaceRoots.name} - ${e}`))\n }\n }\n\n for (const rootId of toRemove) {\n for (const share of await this.sharesQueries.selectShares({ spaceId: spaceId, spaceRootId: rootId, parentId: null })) {\n // use await ! avoid database lock ! next action is to delete the root space which is cascaded with share.spaceRootId\n await this.removeShareFromOwners(share.id, [share.ownerId], false)\n }\n }\n }\n\n async removeSharesFromSpace(spaceId: number): Promise<void> {\n for (const share of await this.sharesQueries.selectShares({ spaceId: spaceId, parentId: null })) {\n // use await ! avoid database lock ! next action is to delete the space which is cascaded with share.spaceId\n await this.removeShareFromOwners(share.id, [share.ownerId], false)\n }\n }\n\n async generateLinkUUID(userId: number): Promise<{ uuid: string }> {\n let uuid: string = generateShortUUID()\n while (!(await this.linksQueries.isUniqueUUID(userId, uuid))) {\n uuid = generateShortUUID()\n }\n return { uuid: uuid }\n }\n\n listShareLinks(user: UserModel): Promise<ShareLink[]> {\n return this.sharesQueries.listShareLinks(user)\n }\n\n async getShareLink(user: UserModel, shareId: number, asAdmin: boolean = false): Promise<ShareLink> {\n const shareLink: ShareLink = await this.sharesQueries.listShareLinks(user, shareId, asAdmin)\n if (!shareLink) {\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n await this.setAllowedPermissions(user, shareLink)\n if (shareLink.file?.permissions) {\n // share link does not have these permissions\n shareLink.file.permissions = removePermissions(shareLink.file.permissions, [SPACE_OPERATION.SHARE_INSIDE, SPACE_OPERATION.SHARE_OUTSIDE])\n }\n return shareLink\n }\n\n async getLinkFromSpaceOrShare(user: UserModel, linkId: number, spaceOrShareId: number, type: LINK_TYPE): Promise<LinkGuest> {\n let linkGuest: LinkGuest\n if (type === LINK_TYPE.SPACE) {\n linkGuest = await this.linksQueries.linkFromSpace(user.id, linkId, spaceOrShareId)\n } else {\n linkGuest = await this.linksQueries.linkFromShare(user.id, linkId, spaceOrShareId, +user.isAdmin)\n }\n if (!linkGuest) {\n this.logger.warn(`${this.getLinkFromSpaceOrShare.name} - unable to find link (${linkId}) on ${type} (${spaceOrShareId})`)\n throw new HttpException('Link not found', HttpStatus.NOT_FOUND)\n }\n return linkGuest\n }\n\n async createOrUpdateLinksAsMembers(\n user: UserModel,\n spaceOrShare: Partial<SpaceProps> | Partial<ShareProps>,\n type: LINK_TYPE,\n links: SpaceMemberDto[] | ShareMemberDto[]\n ): Promise<SpaceMemberDto[] | ShareMemberDto[]> {\n /* only used during the share creation from the share manager */\n const linkMembers: SpaceMemberDto[] | ShareMemberDto[] = []\n for (const link of links) {\n if (link.id < 0) {\n // new link (permissions are needed to create guest link)\n await this.createLinkFromSpaceOrShare(user, link.linkSettings.uuid, spaceOrShare.id, type, {\n ...link.linkSettings,\n permissions: link.permissions\n })\n // notify the guest link (if email is specified)\n this.notifyGuestLink(user, link, spaceOrShare.name, type === LINK_TYPE.SHARE ? ACTION.ADD : ACTION.UPDATE).catch((e: Error) =>\n this.logger.error(`${this.createOrUpdateLinksAsMembers.name} - ${e}`)\n )\n } else {\n if (link.linkSettings) {\n // modified link\n await this.updateLinkFromSpaceOrShare(user, link.linkId, spaceOrShare.id, type, link.linkSettings)\n }\n // unmodified link\n linkMembers.push(link)\n }\n }\n return linkMembers\n }\n\n async updateLinkFromSpaceOrShare(\n user: UserModel,\n linkId: number,\n spaceOrShareId: number,\n type: LINK_TYPE,\n createOrUpdateLinkDto: CreateOrUpdateLinkDto,\n fromAPI: boolean = false\n ): Promise<LinkGuest> {\n const link: LinkGuest = await this.getLinkFromSpaceOrShare(user, linkId, spaceOrShareId, type)\n if (!link) {\n this.logger.error(`${this.updateLinkFromSpaceOrShare.name} - (${linkId}) from ${type} (${spaceOrShareId}) and user (${user.id}) was not found`)\n throw new HttpException('Unable to find link', HttpStatus.NOT_FOUND)\n }\n const fieldsWhiteList: (keyof CreateOrUpdateLinkDto)[] = [\n 'name',\n 'email',\n 'requireAuth',\n 'limitAccess',\n 'expiresAt',\n 'language',\n 'isActive',\n 'password',\n 'permissions',\n 'shareName',\n 'shareDescription'\n ]\n const [updateUser, updateLink, updateShare, updateMember]: [\n Partial<Pick<User, 'language' | 'isActive' | 'password'>>,\n Partial<Pick<Link, 'name' | 'email' | 'requireAuth' | 'limitAccess' | 'expiresAt'>>,\n Partial<Pick<Share, 'alias' | 'name' | 'description'>>,\n Partial<Pick<ShareMembers, 'permissions'>>\n ] = [{}, {}, {}, {}]\n for (const [k, v] of Object.entries(createOrUpdateLinkDto) as Entries<CreateOrUpdateLinkDto>) {\n if (fieldsWhiteList.indexOf(k) > -1 && link[k] !== v) {\n switch (k) {\n case 'password':\n if (v) {\n updateUser.password = await hashPassword(v)\n }\n break\n case 'permissions':\n if (fromAPI) {\n // permissions are only present if the share type is link\n // intersect permissions to ensure that the user does not attempt to exceed his rights\n const shareLink: ShareLink = await this.getShareLink(user, spaceOrShareId)\n updateMember.permissions = intersectPermissions(shareLink.file.permissions, v)\n this.sharesQueries\n .clearCachePermissions(shareLink.alias, [link.userId])\n .catch((e: Error) => this.logger.error(`${this.updateLinkFromSpaceOrShare.name} - ${e}`))\n }\n break\n case 'language':\n updateUser.language = v\n break\n case 'isActive':\n updateUser.isActive = v\n break\n case 'shareName':\n updateShare.name = v\n updateShare.alias = await this.sharesQueries.uniqueShareAlias(v)\n break\n case 'shareDescription':\n updateShare.description = v\n break\n case 'expiresAt':\n if (JSON.stringify(link[k]) !== JSON.stringify(v)) {\n updateLink[k] = v\n }\n break\n default:\n updateLink[k] = v\n }\n }\n }\n if (!Object.keys(updateUser).length && !Object.keys(updateLink).length && !Object.keys(updateShare).length && !Object.keys(updateMember).length) {\n this.logger.warn(`${this.updateLinkFromSpaceOrShare.name} - no diff to update`)\n return fromAPI ? link : null\n }\n try {\n await this.linksQueries.updateLinkFromSpaceOrShare(link, spaceOrShareId, updateUser, updateLink, updateShare, updateMember)\n this.logger.debug(\n `${this.updateLinkFromSpaceOrShare.name} - link (${linkId}) updated : ${JSON.stringify({\n ...{ user: anonymizePassword(updateUser) },\n ...{ link: updateLink },\n ...{ share: updateShare },\n ...{ member: updateMember }\n })}`\n )\n } catch (e) {\n this.logger.error(`${this.updateLinkFromSpaceOrShare.name} - ${e}`)\n throw new HttpException('Unable to update link', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n if (fromAPI) {\n // for security reasons\n delete updateUser.password\n Object.assign(link, updateUser, updateLink, updateMember)\n return link\n }\n }\n\n async createGuestLink(\n permission: GUEST_PERMISSION.SPACES | GUEST_PERMISSION.SHARES,\n password?: string,\n language?: string,\n isActive: boolean = true\n ): Promise<Partial<User>> {\n const random = generateShortUUID(64)\n const guestLink = {\n login: random,\n email: `${random}@sync-in`,\n firstName: 'Guest',\n lastName: 'Link',\n language: language || null,\n permissions: permission,\n password: await hashPassword(password || generateShortUUID(24)),\n role: USER_ROLE.LINK,\n isActive: isActive\n } satisfies CreateUserDto\n try {\n ;(guestLink as Partial<User>).id = await this.usersQueries.createUserOrGuest(guestLink, USER_ROLE.LINK)\n return guestLink\n } catch (e) {\n this.logger.error(`${this.createGuestLink.name} - unable to create guest link : ${e}`)\n throw new HttpException('Unable to create guest link', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n /* MANAGE SHARE LINKS */\n\n async deleteAllLinkMembers(spaceOrShareId: number, type: LINK_TYPE): Promise<void> {\n const ids: { id: number; linkId: number }[] = await this.linksQueries.allLinksFromSpaceOrShare(spaceOrShareId, type)\n await this.deleteGuestLinks(ids)\n }\n\n async deleteLinkMembers(members: SpaceMemberDto[] | ShareMemberDto[]): Promise<void> {\n await this.deleteGuestLinks(members)\n }\n\n async updateSharesExternalPathQuota(): Promise<void>\n async updateSharesExternalPathQuota(shareId: number): Promise<StorageQuota>\n async updateSharesExternalPathQuota(shareId?: number): Promise<void | StorageQuota> {\n for (const share of await this.sharesQueries.sharesQuotaExternalPaths(shareId)) {\n if (!(await isPathExists(share.externalPath))) {\n this.logger.warn(`${this.updateSharesExternalPathQuota.name} - *${share.alias}* home path does not exist`)\n continue\n }\n const [size, errors] = await dirSize(share.externalPath)\n for (const [path, error] of Object.entries(errors)) {\n this.logger.warn(`${this.updateSharesExternalPathQuota.name} - unable to get size for *${share.alias}* on ${path} : ${error}`)\n }\n const shareQuota: StorageQuota = { storageUsage: size, storageQuota: share.storageQuota }\n this.sharesQueries.cache\n .set(`${CACHE_QUOTA_SHARE_PREFIX}-${share.id}`, shareQuota, CACHE_QUOTA_TTL)\n .catch((e: Error) => this.logger.error(`${this.updateSharesExternalPathQuota.name} - share *${share.alias}* (${share.id}) : ${e}`))\n if (share.storageUsage !== shareQuota.storageUsage) {\n this.sharesQueries\n .updateShare(share.id, { storageUsage: shareQuota.storageUsage })\n .then(\n (updated: boolean) =>\n updated &&\n this.logger.log(\n `${this.updateSharesExternalPathQuota.name} - share *${share.alias}* (${share.id}) - storage usage updated : ${shareQuota.storageUsage}`\n )\n )\n }\n if (shareId) {\n return shareQuota\n }\n }\n }\n\n private async updateMembers(user: UserModel, share: Partial<Share>, oldMembers: ShareMemberDto[], currentMembers: ShareMemberDto[]) {\n if (oldMembers.length === 0 && currentMembers.length === 0) {\n return\n }\n // diff\n const [add, update, remove]: [ShareMemberDto[], Record<string | 'object', { old: any; new: any } | ShareMemberDto>[], ShareMemberDto[]] =\n diffCollection(oldMembers, currentMembers, ['permissions'], ['id', 'type'])\n\n // check members whitelists\n let toAdd: ShareMemberDto[] = []\n if (add.length) {\n const [userIdsWhitelist, groupIdsWhitelist] = await Promise.all([\n this.usersQueries.usersWhitelist(user.id),\n this.usersQueries.groupsWhitelist(user.id)\n ])\n toAdd = add.filter((m) => {\n if (\n ((m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && !m.linkId && userIdsWhitelist.indexOf(m.id) === -1) ||\n ((m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && groupIdsWhitelist.indexOf(m.id) === -1)\n ) {\n this.logger.warn(\n `${this.updateMembers.name} cannot add ${m.type} (${m.id}) to share *${share.alias}* (${share.id}) : not in the members whitelist`\n )\n return false\n }\n return true\n })\n }\n\n // filter links\n const toRemove = remove.filter((m) => !m.linkId)\n // do remove links\n this.deleteLinkMembers(remove.filter((m) => !!m.linkId)).catch((e: Error) => this.logger.error(`${this.updateMembers.name} - ${e}`))\n // do update members\n const status: Record<\n Exclude<ACTION, ACTION.DELETE_PERMANENTLY>,\n {\n groupIds: number[]\n userIds: number[]\n }\n > = await this.sharesQueries.updateMembers(share.id, toAdd, convertDiffUpdate(update), toRemove)\n\n // lists deleted and updated members as potential share owners\n const [rmMembersChildShares, upMembersChildShares]: [ShareMemberDto[], { object: ShareMemberDto; rmPermissions: SPACE_OPERATION[] }[]] = [[], []]\n for (const [action, members] of Object.entries(status) as Entries<typeof status>) {\n if (!members.userIds.length && !members.groupIds.length) continue\n if (action === ACTION.DELETE) {\n // stores the removed members who might own child shares from the current share\n rmMembersChildShares.push(\n ...toRemove.filter(\n (m) =>\n ((m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && members.userIds.indexOf(m.id) > -1) ||\n ((m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && members.groupIds.indexOf(m.id) > -1)\n )\n )\n } else if (action === ACTION.UPDATE) {\n // stores permissions updates and members who might own child shares created from the current share\n for (const m of update as { object: ShareMemberDto; permissions: { old: string; new: string } }[]) {\n if (\n ((m.object.type === MEMBER_TYPE.USER || m.object.type === MEMBER_TYPE.GUEST) && members.userIds.indexOf(m.object.id) > -1) ||\n ((m.object.type === MEMBER_TYPE.GROUP || m.object.type === MEMBER_TYPE.PGROUP) && members.groupIds.indexOf(m.object.id) > -1)\n ) {\n const diffPermissions = differencePermissions(m.permissions.old, m.permissions.new) as SPACE_OPERATION[]\n if (diffPermissions.length) {\n upMembersChildShares.push({ object: m.object, rmPermissions: diffPermissions })\n }\n }\n }\n }\n\n // clear cache &|| notify\n this.onShareActionForMembers(share, action, members, user).catch((e: Error) => this.logger.error(`${this.updateMembers.name} - ${e}`))\n }\n\n // do updates\n // remove or update potential child shares\n this.updateMembersChildSharesPermissions(share.id, currentMembers, rmMembersChildShares, upMembersChildShares).catch((e: Error) =>\n this.logger.error(`${this.updateMembers.name} - ${e}`)\n )\n }\n\n private async updateMembersChildSharesPermissions(\n parentShareId: number,\n currentMembers: ShareMemberDto[],\n toRemove: ShareMemberDto[],\n toUpdate: { object: ShareMemberDto; rmPermissions: SPACE_OPERATION[] }[]\n ) {\n /*\n child shares of the member should be deleted if the member is removed from the parent share\n the permissions of the child shares members should be updated if the member's permissions are updated\n */\n const [removeUsersChildShares, updateUsersChildShares] = await this.diffSharesPermissions(currentMembers, toRemove, toUpdate)\n await Promise.all([\n this.removeShareFromOwners(parentShareId, removeUsersChildShares),\n this.removeChildSharesPermissions(parentShareId, updateUsersChildShares)\n ])\n }\n\n private async diffSharesPermissions(\n currentMembers: ShareMemberDto[] | SpaceMemberDto[],\n toRemove: ShareMemberDto[] | SpaceMemberDto[],\n toUpdate: { object: ShareMemberDto | SpaceMemberDto; rmPermissions: SPACE_OPERATION[] }[],\n ignoreUserIds: number[] = []\n ): Promise<[number[], { ids: number[]; rmPermissions: SPACE_OPERATION[] }[]]> {\n // remove shares from members\n const [removeUsersChildShares, removeGroupsChildShares]: number[][] = [[], []]\n for (const m of toRemove) {\n if (m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) {\n if (ignoreUserIds.indexOf(m.id) > -1) {\n continue\n }\n // do not remove child shares if the user is a member of a group with share permission\n const memberGroupIds = await this.usersQueries.groupsWhitelist(m.id)\n const groupSharePermission = currentMembers.find(\n (m) =>\n (m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) &&\n memberGroupIds.indexOf(m.id) > -1 &&\n havePermission(m.permissions, SPACE_OPERATION.SHARE_OUTSIDE)\n )\n if (groupSharePermission) {\n this.logger.debug(\n `${this.diffSharesPermissions.name} - ignore user (${m.id}) removal : is a member of the group (${groupSharePermission.id}) with share permission`\n )\n continue\n }\n removeUsersChildShares.push(m.id)\n } else {\n removeGroupsChildShares.push(m.id)\n }\n }\n\n // update shares permissions from members\n const [updateUsersChildShares, updateGroupsChildShares]: { ids: number[]; rmPermissions: SPACE_OPERATION[] }[][] = [[], []]\n for (const m of toUpdate) {\n // all child share permissions must be updated\n if (m.object.type === MEMBER_TYPE.USER || m.object.type === MEMBER_TYPE.GUEST) {\n if (ignoreUserIds.indexOf(m.object.id) > -1) continue\n // check if the user is a member of the existing groups on the share\n // since group and user permissions are aggregated, we should check the group permissions\n const memberGroupIds = await this.usersQueries.groupsWhitelist(m.object.id)\n const groupPermissions = currentMembers\n .filter((m) => (m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && memberGroupIds.indexOf(m.id) > -1)\n .reduce((perms: string[], m: ShareMemberDto) => {\n for (const p of m.permissions.split(SPACE_PERMS_SEP).filter((p: string) => p !== '' && perms.indexOf(p) === -1)) {\n perms.push(p)\n }\n return perms\n }, [])\n // find all permissions that the user must keep\n const [permsToKeep, permsToRemove]: SPACE_OPERATION[][] = [[], []]\n // compare the permissions removed from group to user's\n m.rmPermissions.forEach((p: SPACE_OPERATION) => (groupPermissions.indexOf(p) > -1 ? permsToKeep.push(p) : permsToRemove.push(p)))\n if (!permsToRemove.length) {\n // the groups provide these permissions to user, no need to update child shares\n continue\n }\n // remove only unmatched permissions\n m.rmPermissions = permsToRemove\n }\n // group members by permissions to optimize queries\n const memberTypeChildShares =\n m.object.type === MEMBER_TYPE.USER || m.object.type === MEMBER_TYPE.GUEST ? updateUsersChildShares : updateGroupsChildShares\n const memberWithSamePermissions = memberTypeChildShares.find((p) => p.rmPermissions.toString() === m.rmPermissions.toString())\n if (memberWithSamePermissions) {\n memberWithSamePermissions.ids.push(m.object.id)\n } else {\n memberTypeChildShares.push({ ids: [m.object.id], rmPermissions: m.rmPermissions })\n }\n }\n\n // retrieves all users from groups and subgroups & add them to the remove and update lists\n if (removeGroupsChildShares.length) {\n // ignore user id if the user is already removed or is a member of the parent share\n const rmUsersFromGroups = (await this.usersQueries.allUserIdsFromGroupsAndSubGroups(removeGroupsChildShares)).filter(\n (id) =>\n ignoreUserIds.indexOf(id) === -1 &&\n removeUsersChildShares.indexOf(id) === -1 &&\n !currentMembers.find((m) => (m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && m.id === id)\n )\n removeUsersChildShares.push(...rmUsersFromGroups)\n }\n if (updateGroupsChildShares.length) {\n for (const g of updateGroupsChildShares) {\n // ignore user id if the user is already removed or is a member of the parent share\n const rmUsersPermissionsFromGroups: number[] = []\n for (const uId of await this.usersQueries.allUserIdsFromGroupsAndSubGroups(g.ids)) {\n if (ignoreUserIds.indexOf(uId) > -1 || removeUsersChildShares.indexOf(uId) > -1) {\n continue\n }\n // check if the user is a member of the existing groups on the share\n // since group and user permissions are aggregated, we should check the group permissions\n const memberGroupIds = await this.usersQueries.groupsWhitelist(uId)\n const groupPermissions = currentMembers\n .filter(\n (m) =>\n ((m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && memberGroupIds.indexOf(m.id) > -1) ||\n ((m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && m.id === uId)\n )\n .reduce((perms: string[], m: ShareMemberDto) => {\n for (const p of m.permissions.split(SPACE_PERMS_SEP).filter((p: string) => p !== '' && perms.indexOf(p) === -1)) {\n perms.push(p)\n }\n return perms\n }, [])\n // find all permissions that the user must keep\n const [permsToKeep, permsToRemove]: SPACE_OPERATION[][] = [[], []]\n // compare the permissions removed from group to user's\n g.rmPermissions.forEach((p: SPACE_OPERATION) => (groupPermissions.indexOf(p) > -1 ? permsToKeep.push(p) : permsToRemove.push(p)))\n if (!permsToKeep.length) {\n // user does not have the removed permissions from groups or from himself, we can remove the permissions to his child shares\n rmUsersPermissionsFromGroups.push(uId)\n } else if (permsToRemove.length) {\n // remove only unmatched permissions\n updateUsersChildShares.push({ ids: [uId], rmPermissions: permsToRemove })\n }\n }\n if (!rmUsersPermissionsFromGroups.length) continue\n // group users by permissions to optimize queries\n const memberWithSamePermissions = updateUsersChildShares.find((p) => p.rmPermissions.toString() === g.rmPermissions.toString())\n if (memberWithSamePermissions) {\n memberWithSamePermissions.ids.push(...rmUsersPermissionsFromGroups)\n } else {\n updateUsersChildShares.push({ ids: rmUsersPermissionsFromGroups, rmPermissions: g.rmPermissions })\n }\n }\n }\n return [removeUsersChildShares, updateUsersChildShares]\n }\n\n private async removeShareFromOwners(shareId: number, ownerIds: number[] | 'all', asParent: boolean = true, fromUserId?: number) {\n // deletes only the first (child) shares, child shares will be deleted in cascade\n const where = { ...(asParent ? { parentId: shareId } : { id: shareId }), ...(ownerIds !== 'all' && { ownerId: ownerIds }) }\n for (const share of await this.sharesQueries.selectShares(where)) {\n try {\n // store current child shares members before delete parent share\n const members: ShareChildMember[] = await this.sharesQueries.membersFromChildSharesPermissions(share.id, [share.ownerId], null, false)\n await this.sharesQueries.deleteShare(share.id)\n this.logger.log(`${this.removeShareFromOwners.name} - share *${share.alias}* (${share.id}) from owner (${share.ownerId}) was removed`)\n // clear cache and notify users\n if (share.ownerId && (!fromUserId || fromUserId !== share.ownerId)) {\n this.clearCachePermissionsAndOrNotify(share, ACTION.DELETE_PERMANENTLY, [share.ownerId]).catch((e: Error) =>\n this.logger.error(`${this.removeShareFromOwners.name} - ${e}`)\n )\n }\n members.forEach((m) => this.clearCachePermissionsAndOrNotify({ alias: m.shareAlias, name: m.shareName }, ACTION.DELETE, [m.userId]))\n } catch (e) {\n this.logger.error(\n `${this.removeShareFromOwners.name} - share *${share.alias}* (${share.id}) from owner (${share.ownerId}) was not removed : ${e}`\n )\n }\n }\n }\n\n private async removeChildSharesPermissions(\n shareId: number,\n userPermissions: {\n ids: number[] | 'all'\n rmPermissions: SPACE_OPERATION[]\n }[],\n asParent: boolean = true\n ) {\n // remove permissions of all members of the child shares\n if (!userPermissions.length) return\n for (const userPerm of userPermissions) {\n const members: ShareChildMember[] = await this.sharesQueries.membersFromChildSharesPermissions(\n shareId,\n userPerm.ids,\n userPerm.rmPermissions.join('|'),\n asParent\n )\n for (const m of members) {\n const permissions = removePermissions(m.userPermissions, userPerm.rmPermissions)\n try {\n await this.sharesQueries.updateMember({ permissions: permissions }, { id: m.id })\n this.clearCachePermissionsAndOrNotify(\n {\n alias: m.shareAlias,\n name: m.shareName\n },\n ACTION.UPDATE,\n [m.userId]\n ).catch((e: Error) => this.logger.error(`${this.removeChildSharesPermissions.name} - ${e}`))\n this.logger.log(\n `${this.removeChildSharesPermissions.name} - user (${m.id}) permissions ${JSON.stringify(userPerm.rmPermissions)} on share : ${m.shareAlias} (${m.shareId}) was removed`\n )\n } catch (e) {\n this.logger.error(\n `${this.removeChildSharesPermissions.name} - user (${m.id}) permissions on share *${m.shareAlias}* (${m.shareId}) was not removed : ${e}`\n )\n }\n }\n }\n }\n\n private async checkChildSharePermissions(user: UserModel, shareId: number, childId: number): Promise<boolean> {\n const isOwnerForChildShare: number = await this.sharesQueries.childExistsForShareOwner(user.id, shareId, childId, user.isAdmin)\n if (isOwnerForChildShare !== childId) {\n this.logger.warn(`${this.checkChildSharePermissions.name} - is not allowed to manage child share (${childId}) from share (${shareId})`)\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n return true\n }\n\n private async onShareActionForMembers(share: Partial<Share>, action: ACTION, members: { groupIds: number[]; userIds: number[] }, user?: UserModel) {\n this.clearCachePermissionsAndOrNotify(\n share,\n action,\n Array.from(new Set([...(await this.usersQueries.allUserIdsFromGroupsAndSubGroups(members.groupIds)), ...members.userIds])).filter(\n (uid) => uid !== user?.id\n ),\n user\n ).catch((e: Error) => this.logger.error(`${this.onShareActionForMembers.name} - ${e}`))\n }\n\n private async createLinkFromSpaceOrShare(\n user: UserModel,\n uuid: string,\n spaceOrShareId: number,\n type: LINK_TYPE,\n createOrUpdateLinkDto: CreateOrUpdateLinkDto\n ): Promise<void> {\n /* only used during the share creation from this manager */\n if (!(await this.linksQueries.isReservedUUID(user.id, uuid))) {\n this.logger.error(`${this.createLinkFromSpaceOrShare.name} - user attempted to use UUID (${uuid}) was not reserved`)\n throw new HttpException('UUID was not reserved', HttpStatus.BAD_REQUEST)\n }\n const permission = type === LINK_TYPE.SPACE ? GUEST_PERMISSION.SPACES : GUEST_PERMISSION.SHARES\n const guestLink: Partial<User> = await this.createGuestLink(\n permission,\n createOrUpdateLinkDto.password,\n createOrUpdateLinkDto.language,\n createOrUpdateLinkDto.isActive !== undefined ? createOrUpdateLinkDto.isActive : true\n )\n this.logger.debug(`${this.createLinkFromSpaceOrShare.name} - guest link (${guestLink.id}) created`)\n let linkId: number\n try {\n linkId = await this.linksQueries.createLinkToSpaceOrShare(guestLink.id, spaceOrShareId, type, {\n ...createOrUpdateLinkDto,\n uuid: uuid,\n userId: guestLink.id\n })\n this.logger.debug(\n `${this.createLinkFromSpaceOrShare.name} - link (${linkId}) for guest link (${guestLink.id}) created : ${JSON.stringify(createOrUpdateLinkDto)}`\n )\n } catch (e) {\n this.logger.error(`${this.createLinkFromSpaceOrShare.name} - unable to create link with uuid (${uuid}) : ${e}`)\n throw new HttpException('Unable to update link', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n private async deleteGuestLinks(guestLinks: Partial<{ id: number; linkId: number }>[]) {\n for (const guestLink of guestLinks) {\n try {\n await this.usersQueries.deleteGuestLink(guestLink.id)\n this.logger.log(`${this.deleteGuestLinks.name} - guest (${guestLink.id}) (link: ${guestLink.linkId}) was removed`)\n } catch (e) {\n this.logger.error(`${this.deleteGuestLinks.name} - guest (${guestLink.id}) (link: ${guestLink.linkId}) was not removed : ${e}`)\n }\n }\n }\n\n /* MANAGE CACHE PERMISSIONS AND NOTIFY */\n\n private async clearCachePermissionsAndOrNotify(share: Partial<Share>, action: ACTION, memberIds: number[], user?: UserModel): Promise<void> {\n if (!memberIds?.length) {\n return\n }\n this.logger.verbose(`${this.clearCachePermissionsAndOrNotify.name} - share:${share.alias} ${action} members:${JSON.stringify(memberIds)}`)\n if (action !== ACTION.ADD) {\n // clear permissions for share members\n this.sharesQueries\n .clearCachePermissions(share.alias, memberIds)\n .catch((e: Error) => this.logger.error(`${this.clearCachePermissionsAndOrNotify.name} - ${e}`))\n }\n if (action !== ACTION.UPDATE) {\n // notify the members who have joined or left the share\n const notification: NotificationContent = {\n app: NOTIFICATION_APP.SHARES,\n event: user ? NOTIFICATION_APP_EVENT.SHARES[action] : NOTIFICATION_APP_EVENT.SHARES_WITHOUT_OWNER[action],\n element: share.name,\n url: SPACE_REPOSITORY.SHARES\n }\n this.notificationsManager\n .create(memberIds, notification, {\n currentUrl: this.contextManager.headerOriginUrl(),\n author: user,\n action: action\n })\n .catch((e: Error) => this.logger.error(`${this.clearCachePermissionsAndOrNotify.name} - ${e}`))\n }\n }\n\n private async notifyGuestLink(user: UserModel, link: SpaceMemberDto | ShareMemberDto, spaceOrShareName: string, action: ACTION) {\n if (!link.linkSettings.email) {\n return\n }\n this.notificationsManager\n .sendEmailNotification(\n [\n {\n id: -1,\n email: link.linkSettings.email,\n language: link.linkSettings.language,\n notification: USER_NOTIFICATION.APPLICATION_EMAIL\n } satisfies UserMailNotification\n ],\n {\n app: NOTIFICATION_APP.LINKS,\n event: NOTIFICATION_APP_EVENT.LINKS[action],\n element: spaceOrShareName,\n url: null\n } satisfies NotificationContent,\n {\n author: user,\n linkUUID: link.linkSettings.uuid,\n linkPassword: link.linkSettings.password,\n currentUrl: this.contextManager.headerOriginUrl(),\n action: action\n } satisfies NotificationOptions\n )\n .catch((e: Error) => this.logger.error(`${this.notifyGuestLink.name} - ${e}`))\n }\n}\n"],"names":["SharesManager","permissions","user","spaceAlias","sharesQueries","id","isAdmin","listShares","listSpaceShares","spaceId","listChildShares","shareId","setAllowedPermissions","share","asAdmin","file","ownerId","externalPath","SHARE_ALL_OPERATIONS","space","alias","spacePermissions","spacesQueries","root","logger","warn","name","JSON","stringify","HttpException","HttpStatus","NOT_FOUND","spaceEnv","SpaceEnv","setPermissions","envPermissions","parent","userId","sharePermissions","error","BAD_REQUEST","getShareWithMembers","FORBIDDEN","createShare","createOrUpdateShareDto","uniqueShareAlias","description","enabled","storageQuota","storageIndexing","disabledAt","Date","type","SHARE_TYPE","COMMON","checkExternalPath","e","message","FileError","httpCode","INTERNAL_SERVER_ERROR","f","getUserFile","path","realPath","join","filesPath","isPathExists","fileProps","getProps","fileId","getOrCreateUserFile","m","members","intersectPermissions","l","links","setPaths","split","slice","spaceRootId","isExternalSpaceRoot","isSpaceRoot","Number","dbFile","undefined","getOrCreateSpaceFile","createOrUpdateLinksAsMembers","LINK_TYPE","SHARE","updateMembers","updateShare","shareDiffProps","modifiedAt","props","prop","linkMembers","deleteShare","shareExistsForOwner","deleteAllLinkMembers","removeShareFromOwners","getChildShare","childId","isLink","checkChildSharePermissions","getShareLink","updateChildShare","deleteChildShare","createChildShare","pSharePermissions","haveSpacePermission","SPACE_OPERATION","SHARE_OUTSIDE","pShare","filePath","highestParentId","findHighestParentShare","shareEnv","pShareEnv","isLinkedToShareSpaceRoot","isLinkedToShareExternalPath","parentId","updateSharesFromSpace","currentMembers","toRemove","toUpdate","length","spaceManagerIds","filter","spaceRole","SPACE_ROLE","IS_MANAGER","map","rmOwners","upOwners","diffSharesPermissions","owners","Object","fromEntries","uId","ACTION","DELETE","reduce","acc","o","ids","push","UPDATE","rmPermissions","selectParentSharesFromSpaceId","keys","parseInt","action","removeChildSharesPermissions","catch","log","updateSharesFromSpaceRoots","selectShares","rootId","removeSharesFromSpace","generateLinkUUID","uuid","generateShortUUID","linksQueries","isUniqueUUID","listShareLinks","shareLink","removePermissions","SHARE_INSIDE","getLinkFromSpaceOrShare","linkId","spaceOrShareId","linkGuest","SPACE","linkFromSpace","linkFromShare","spaceOrShare","link","createLinkFromSpaceOrShare","linkSettings","notifyGuestLink","ADD","updateLinkFromSpaceOrShare","createOrUpdateLinkDto","fromAPI","fieldsWhiteList","updateUser","updateLink","updateMember","k","v","entries","indexOf","password","hashPassword","clearCachePermissions","language","isActive","debug","anonymizePassword","member","assign","createGuestLink","permission","random","guestLink","login","email","firstName","lastName","role","USER_ROLE","LINK","usersQueries","createUserOrGuest","allLinksFromSpaceOrShare","deleteGuestLinks","deleteLinkMembers","updateSharesExternalPathQuota","sharesQuotaExternalPaths","size","errors","dirSize","shareQuota","storageUsage","cache","set","CACHE_QUOTA_SHARE_PREFIX","CACHE_QUOTA_TTL","then","updated","oldMembers","add","update","remove","diffCollection","toAdd","userIdsWhitelist","groupIdsWhitelist","Promise","all","usersWhitelist","groupsWhitelist","MEMBER_TYPE","USER","GUEST","GROUP","PGROUP","status","convertDiffUpdate","rmMembersChildShares","upMembersChildShares","userIds","groupIds","object","diffPermissions","differencePermissions","old","new","onShareActionForMembers","updateMembersChildSharesPermissions","parentShareId","removeUsersChildShares","updateUsersChildShares","ignoreUserIds","removeGroupsChildShares","memberGroupIds","groupSharePermission","find","havePermission","updateGroupsChildShares","groupPermissions","perms","p","SPACE_PERMS_SEP","permsToKeep","permsToRemove","forEach","memberTypeChildShares","memberWithSamePermissions","toString","rmUsersFromGroups","allUserIdsFromGroupsAndSubGroups","g","rmUsersPermissionsFromGroups","ownerIds","asParent","fromUserId","where","membersFromChildSharesPermissions","clearCachePermissionsAndOrNotify","DELETE_PERMANENTLY","shareAlias","shareName","userPermissions","userPerm","isOwnerForChildShare","childExistsForShareOwner","Array","from","Set","uid","isReservedUUID","GUEST_PERMISSION","SPACES","SHARES","createLinkToSpaceOrShare","guestLinks","deleteGuestLink","memberIds","verbose","notification","app","NOTIFICATION_APP","event","NOTIFICATION_APP_EVENT","SHARES_WITHOUT_OWNER","element","url","SPACE_REPOSITORY","notificationsManager","create","currentUrl","contextManager","headerOriginUrl","author","spaceOrShareName","sendEmailNotification","USER_NOTIFICATION","APPLICATION_EMAIL","LINKS","linkUUID","linkPassword","Logger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../backend/src/applications/shares/services/shares-manager.service.ts"],"sourcesContent":["import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'\nimport path from 'node:path'\nimport { ACTION } from '../../../common/constants'\nimport {\n anonymizePassword,\n convertDiffUpdate,\n diffCollection,\n differencePermissions,\n generateShortUUID,\n hashPassword\n} from '../../../common/functions'\nimport type { Entries, StorageQuota } from '../../../common/interfaces'\nimport { intersectPermissions } from '../../../common/shared'\nimport { ContextManager } from '../../../infrastructure/context/services/context-manager.service'\nimport type { FileProps } from '../../files/interfaces/file-props.interface'\nimport { FileError } from '../../files/models/file-error'\nimport { checkExternalPath, dirSize, getProps, isPathExists } from '../../files/utils/files'\nimport { LINK_TYPE } from '../../links/constants/links'\nimport type { CreateOrUpdateLinkDto } from '../../links/dto/create-or-update-link.dto'\nimport type { LinkGuest } from '../../links/interfaces/link-guest.interface'\nimport type { Link } from '../../links/schemas/link.interface'\nimport { LinksQueries } from '../../links/services/links-queries.service'\nimport { NOTIFICATION_APP, NOTIFICATION_APP_EVENT } from '../../notifications/constants/notifications'\nimport type { NotificationContent, NotificationOptions } from '../../notifications/interfaces/notification-properties.interface'\nimport type { UserMailNotification } from '../../notifications/interfaces/user-mail-notification.interface'\nimport { NotificationsManager } from '../../notifications/services/notifications-manager.service'\nimport { CACHE_QUOTA_SHARE_PREFIX, CACHE_QUOTA_TTL } from '../../spaces/constants/cache'\nimport { SPACE_OPERATION, SPACE_PERMS_SEP, SPACE_REPOSITORY, SPACE_ROLE } from '../../spaces/constants/spaces'\nimport type { SpaceMemberDto } from '../../spaces/dto/create-or-update-space.dto'\nimport { SpaceEnv } from '../../spaces/models/space-env.model'\nimport type { SpaceProps } from '../../spaces/models/space-props.model'\nimport { SpacesQueries } from '../../spaces/services/spaces-queries.service'\nimport { havePermission, haveSpacePermission, removePermissions } from '../../spaces/utils/permissions'\nimport { MEMBER_TYPE } from '../../users/constants/member'\nimport { GUEST_PERMISSION, USER_NOTIFICATION, USER_ROLE } from '../../users/constants/user'\nimport { CreateUserDto } from '../../users/dto/create-or-update-user.dto'\nimport { UserModel } from '../../users/models/user.model'\nimport type { User } from '../../users/schemas/user.interface'\nimport { UsersQueries } from '../../users/services/users-queries.service'\nimport { SHARE_ALL_OPERATIONS, SHARE_TYPE } from '../constants/shares'\nimport type { CreateOrUpdateShareDto, ShareMemberDto } from '../dto/create-or-update-share.dto'\nimport type { ShareChildMember } from '../interfaces/share-child.interface'\nimport type { ShareEnv } from '../interfaces/share-env.interface'\nimport type { ShareFile } from '../interfaces/share-file.interface'\nimport type { ShareLink } from '../interfaces/share-link.interface'\nimport type { ShareProps } from '../interfaces/share-props.interface'\nimport type { ShareChild } from '../models/share-child.model'\nimport type { ShareMembers } from '../schemas/share-members.interface'\nimport type { Share } from '../schemas/share.interface'\nimport { SharesQueries } from './shares-queries.service'\n\n@Injectable()\nexport class SharesManager {\n private readonly logger = new Logger(SharesManager.name)\n\n constructor(\n private readonly contextManager: ContextManager,\n private readonly notificationsManager: NotificationsManager,\n private readonly sharesQueries: SharesQueries,\n private readonly spacesQueries: SpacesQueries,\n private readonly usersQueries: UsersQueries,\n private readonly linksQueries: LinksQueries\n ) {}\n\n permissions(user: UserModel, spaceAlias: string) {\n return this.sharesQueries.permissions(user.id, spaceAlias, +user.isAdmin)\n }\n\n listShares(user: UserModel): Promise<ShareFile[]> {\n return this.sharesQueries.listShares(user)\n }\n\n listSpaceShares(spaceId: number): Promise<ShareChild[]> {\n return this.sharesQueries.listSpaceShares(spaceId)\n }\n\n listChildShares(user: UserModel, shareId: number): Promise<ShareChild[]> {\n return this.sharesQueries.listChildShares(user.id, shareId, +user.isAdmin)\n }\n\n async setAllowedPermissions(user: UserModel, share: ShareProps | ShareLink, asAdmin = false) {\n if (share.file?.ownerId === user.id || (share.externalPath && user.isAdmin)) {\n // current user is the file owner (personal space case)\n share.file.permissions = SHARE_ALL_OPERATIONS\n } else if (share.file?.space?.alias) {\n share.file.ownerId = null\n // retrieve space permissions (cached query)\n const spacePermissions: Partial<SpaceEnv> = await this.spacesQueries.permissions(user.id, share.file.space.alias, share.file.space.root?.alias)\n if (!spacePermissions) {\n this.logger.warn({ tag: this.setAllowedPermissions.name, msg: `missing space permissions : ${JSON.stringify(share)}` })\n throw new HttpException('Space not found', HttpStatus.NOT_FOUND)\n }\n // compute permissions\n const spaceEnv = new SpaceEnv(spacePermissions)\n spaceEnv.setPermissions(true)\n share.file.permissions = spaceEnv.envPermissions\n } else if (share.parent?.alias) {\n // retrieve parent share permissions (cached query)\n // use current the user permissions on the share or the share owner permissions if we request the share as admin\n const userId = asAdmin ? share.ownerId : user.id\n const sharePermissions: Partial<SpaceEnv> = await this.sharesQueries.permissions(userId, share.parent.alias, +user.isAdmin)\n if (!sharePermissions) {\n this.logger.warn({ tag: this.setAllowedPermissions.name, msg: `missing share permissions : ${JSON.stringify(share)}` })\n throw new HttpException('Share not found', HttpStatus.NOT_FOUND)\n }\n share.file.permissions = sharePermissions.permissions\n } else {\n this.logger.error({ tag: this.setAllowedPermissions.name, msg: `case not handled ${JSON.stringify(share)}` })\n throw new HttpException('Missing information', HttpStatus.BAD_REQUEST)\n }\n }\n\n async getShareWithMembers(user: UserModel, shareId: number, asAdmin = false): Promise<ShareProps> {\n // asAdmin : true if the user is the owner of the parent share or if the share is requested from the administration\n const share: ShareProps = await this.sharesQueries.getShareWithMembers(user, shareId, asAdmin)\n if (!share) {\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n await this.setAllowedPermissions(user, share, asAdmin)\n return share\n }\n\n async createShare(user: UserModel, createOrUpdateShareDto: CreateOrUpdateShareDto): Promise<ShareProps> {\n const share: Partial<Share> = {\n name: createOrUpdateShareDto.name,\n alias: await this.sharesQueries.uniqueShareAlias(createOrUpdateShareDto.name),\n description: createOrUpdateShareDto.description,\n externalPath: createOrUpdateShareDto.externalPath,\n enabled: createOrUpdateShareDto.enabled,\n storageQuota: createOrUpdateShareDto.storageQuota,\n storageIndexing: createOrUpdateShareDto.storageIndexing,\n disabledAt: createOrUpdateShareDto.enabled ? null : new Date(),\n type: createOrUpdateShareDto.type || SHARE_TYPE.COMMON\n }\n if (share.externalPath) {\n /* EXTERNAL PATH CASE */\n if (!user.isAdmin) {\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n try {\n await checkExternalPath(share.externalPath)\n } catch (e: any) {\n throw new HttpException(e.message, e instanceof FileError ? e.httpCode : HttpStatus.INTERNAL_SERVER_ERROR)\n }\n share.ownerId = null\n } else {\n /* SPACES CASE */\n share.externalPath = null\n share.ownerId = user.id\n if (createOrUpdateShareDto.file.ownerId) {\n /* PERSONAL SPACE CASE */\n // check file\n if (createOrUpdateShareDto.file.ownerId === user.id && createOrUpdateShareDto.file.id > 0) {\n // When a user shares a root space they own, it is recommended to create the share from their personal space.\n // `file.path` come from a root space with a custom name (invalid in the personal space context); if so, retrieve the original path.\n const f = await this.spacesQueries.getUserFile(user.id, createOrUpdateShareDto.file.id)\n if (f) createOrUpdateShareDto.file.path = f.path\n }\n const realPath = path.join(user.filesPath, createOrUpdateShareDto.file.path)\n if (!(await isPathExists(realPath))) {\n this.logger.warn({ tag: this.createShare.name, msg: `location does not exist : ${realPath}` })\n throw new HttpException('The location does not exist', HttpStatus.NOT_FOUND)\n }\n const fileProps: FileProps = { ...(await getProps(realPath, createOrUpdateShareDto.file.path)), id: createOrUpdateShareDto.file.id }\n share.fileId = await this.spacesQueries.getOrCreateUserFile(user.id, fileProps)\n } else if (createOrUpdateShareDto.file.space?.alias) {\n /* SPACE CASE */\n const spacePermissions: Partial<SpaceEnv> = await this.spacesQueries.permissions(\n user.id,\n createOrUpdateShareDto.file.space.alias,\n createOrUpdateShareDto.file.space.root.alias\n )\n if (!spacePermissions) {\n throw new HttpException('Space not found', HttpStatus.NOT_FOUND)\n }\n // compute space permissions\n const space: SpaceEnv = new SpaceEnv(spacePermissions)\n space.setPermissions(true)\n // intersect space permissions for members\n for (const m of createOrUpdateShareDto.members) {\n m.permissions = intersectPermissions(space.envPermissions, m.permissions)\n }\n // intersect space permissions for links\n for (const l of createOrUpdateShareDto.links) {\n l.permissions = intersectPermissions(space.envPermissions, l.permissions)\n }\n // check file\n try {\n space.setPaths(user, createOrUpdateShareDto.file.space.root.alias, createOrUpdateShareDto.file.path.split('/').slice(space.root.id ? 1 : 0))\n } catch (e) {\n if (e instanceof FileError) {\n throw new HttpException(e.message, e.httpCode)\n }\n throw new HttpException(e.message, HttpStatus.BAD_REQUEST)\n }\n if (!(await isPathExists(space.realPath))) {\n this.logger.warn({ tag: this.createShare.name, msg: `space location does not exist : *${space.alias}* (${space.id}) : ${space.realPath}` })\n throw new HttpException('The location does not exist', HttpStatus.NOT_FOUND)\n }\n share.spaceId = space.id\n share.spaceRootId = space.root?.id || null\n // define share.fileId\n // if the file is the same as the space root, ignores share.fileId and only uses spaceId and spaceRootId\n const isExternalSpaceRoot =\n createOrUpdateShareDto.file?.id < 0 &&\n createOrUpdateShareDto.file?.path === createOrUpdateShareDto.file?.space?.root?.alias &&\n createOrUpdateShareDto.file?.space?.root?.alias === spacePermissions.root?.alias &&\n createOrUpdateShareDto.file?.space?.root?.name === spacePermissions.root?.name\n const isSpaceRoot = Number(createOrUpdateShareDto.file.id) === Number(spacePermissions.root?.file?.id)\n if (!isSpaceRoot && !isExternalSpaceRoot) {\n const fileProps: FileProps = { ...(await getProps(space.realPath, space.dbFile.path)), id: undefined }\n // get or create file id\n share.fileId = await this.spacesQueries.getOrCreateSpaceFile(createOrUpdateShareDto.file.id, fileProps, space.dbFile)\n }\n } else {\n // unexpected case\n throw new HttpException('Missing information', HttpStatus.BAD_REQUEST)\n }\n }\n // create share\n share.id = await this.sharesQueries.createShare(share)\n // check and update members\n await this.createOrUpdateLinksAsMembers(user, share, LINK_TYPE.SHARE, createOrUpdateShareDto.links)\n await this.updateMembers(user, share, [], createOrUpdateShareDto.members)\n return this.getShareWithMembers(user, share.id)\n }\n\n async updateShare(user: UserModel, shareId: number, createOrUpdateShareDto: CreateOrUpdateShareDto, asAdmin = false): Promise<ShareProps> {\n // asAdmin: true if the user is the owner of the parent share or if the share is requested from the administration\n const share: ShareProps = await this.getShareWithMembers(user, shareId, asAdmin)\n // check and update share info\n const shareDiffProps: Partial<ShareProps> = { modifiedAt: new Date() }\n const props: (keyof CreateOrUpdateShareDto)[] = ['name', 'description', 'enabled', 'storageQuota', 'storageIndexing']\n for (const prop of props) {\n if (createOrUpdateShareDto[prop] !== share[prop]) {\n shareDiffProps[prop] = createOrUpdateShareDto[prop]\n if (prop === 'name') {\n shareDiffProps.alias = await this.sharesQueries.uniqueShareAlias(shareDiffProps.name)\n } else if (prop === 'enabled') {\n shareDiffProps.disabledAt = shareDiffProps[prop] ? null : new Date()\n }\n }\n }\n // update in db\n if (!(await this.sharesQueries.updateShare(shareId, shareDiffProps))) {\n throw new HttpException('Unable to update share', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n // check & update members\n const linkMembers: ShareMemberDto[] = await this.createOrUpdateLinksAsMembers(user, share, LINK_TYPE.SHARE, createOrUpdateShareDto.links)\n // intersect share permissions for members\n for (const m of createOrUpdateShareDto.members) {\n m.permissions = intersectPermissions(share.file.permissions, m.permissions)\n }\n // intersect share permissions for links\n for (const l of linkMembers) {\n l.permissions = intersectPermissions(share.file.permissions, l.permissions)\n }\n await this.updateMembers(user, share, share.members, [...createOrUpdateShareDto.members, ...linkMembers])\n return this.getShareWithMembers(user, share.id, asAdmin)\n }\n\n async deleteShare(user: UserModel, shareId: number, asAdmin = false): Promise<void> {\n // asAdmin : true if the user is the owner of the parent share or if the share is requested from an admin\n if (!asAdmin && !user.isAdmin && !(await this.sharesQueries.shareExistsForOwner(user.id, shareId))) {\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n try {\n await this.deleteAllLinkMembers(shareId, LINK_TYPE.SHARE)\n await this.removeShareFromOwners(shareId, 'all', false, user.id)\n } catch (e) {\n this.logger.error({ tag: this.deleteShare.name, msg: `unable to delete share (${shareId}) (asAdmin = ${asAdmin}) : ${e}` })\n throw new HttpException('Unable to delete share', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n async getChildShare(user: UserModel, shareId: number, childId: number, isLink?: false): Promise<ShareProps>\n async getChildShare(user: UserModel, shareId: number, childId: number, isLink?: true): Promise<ShareLink>\n async getChildShare(user: UserModel, shareId: number, childId: number, isLink?: boolean): Promise<ShareProps | ShareLink> {\n if (await this.checkChildSharePermissions(user, shareId, childId)) {\n if (isLink) {\n return this.getShareLink(user, childId, true)\n }\n return this.getShareWithMembers(user, childId, true)\n }\n }\n\n async updateChildShare(user: UserModel, shareId: number, childId: number, createOrUpdateShareDto: CreateOrUpdateShareDto): Promise<ShareProps> {\n if (await this.checkChildSharePermissions(user, shareId, childId)) {\n return this.updateShare(user, childId, createOrUpdateShareDto, true)\n }\n }\n\n async deleteChildShare(user: UserModel, shareId: number, childId: number): Promise<void> {\n if (await this.checkChildSharePermissions(user, shareId, childId)) {\n return this.deleteShare(user, childId, true)\n }\n }\n\n async createChildShare(user: UserModel, createOrUpdateShareDto: CreateOrUpdateShareDto): Promise<ShareProps> {\n // check parent share\n const pSharePermissions = await this.sharesQueries.permissions(user.id, createOrUpdateShareDto.parent.alias, +user.isAdmin)\n if (!pSharePermissions) {\n this.logger.warn({\n tag: this.createChildShare.name,\n msg: `parent share does not exist or not authorized : ${createOrUpdateShareDto.parent.alias}`\n })\n throw new HttpException('Parent share not found', HttpStatus.NOT_FOUND)\n }\n if (!haveSpacePermission(pSharePermissions, SPACE_OPERATION.SHARE_OUTSIDE)) {\n this.logger.warn({\n tag: this.createChildShare.name,\n msg: `is not allowed to share outside of : *${pSharePermissions.alias}* (${pSharePermissions.id})`\n })\n throw new HttpException('You are not allowed to do this action', HttpStatus.FORBIDDEN)\n }\n if (!pSharePermissions.enabled) {\n this.logger.warn({ tag: this.createChildShare.name, msg: `parent share is disabled : ${createOrUpdateShareDto.parent.alias}` })\n throw new HttpException('Parent share is disabled', HttpStatus.FORBIDDEN)\n }\n\n let pShare: Partial<SpaceEnv>\n let filePath: string\n if (pSharePermissions.root.externalPath) {\n const highestParentId = await this.sharesQueries.findHighestParentShare(pSharePermissions.id)\n if (!highestParentId) {\n this.logger.warn({\n tag: this.createChildShare.name,\n msg: `unable to find the highest parent of : *${pSharePermissions.alias}* (${pSharePermissions.id})`\n })\n throw new HttpException('Parent share not found', HttpStatus.NOT_FOUND)\n }\n pShare = await this.sharesQueries.shareEnv(highestParentId)\n filePath = path.join(pSharePermissions.root?.file?.path || '', createOrUpdateShareDto.file.path)\n } else {\n pShare = await this.sharesQueries.shareEnv(pSharePermissions.id)\n filePath = createOrUpdateShareDto.file.path\n }\n\n // create a fake space env -> share env\n const pShareEnv: Partial<ShareEnv> = new SpaceEnv(pShare, null, false)\n try {\n pShareEnv.setPaths(user, null, filePath.split('/'))\n } catch (e) {\n if (e instanceof FileError) {\n throw new HttpException(e.message, e.httpCode)\n }\n throw new HttpException(e.message, HttpStatus.BAD_REQUEST)\n }\n // check file\n if (!(await isPathExists(pShareEnv.realPath))) {\n this.logger.warn({\n tag: this.createChildShare.name,\n msg: `parent share location does not exist : ${pShareEnv.alias} (${pShareEnv.id}) : ${pShareEnv.realPath}`\n })\n throw new HttpException('The location does not exist', HttpStatus.NOT_FOUND)\n }\n\n /* Manage the case where the child share is created from the parent share itself */\n // special case, the parent share is directly linked to the space root file\n const isLinkedToShareSpaceRoot =\n pShareEnv.fileId === null &&\n Number(createOrUpdateShareDto.file.id) === Number(pSharePermissions.root?.id) &&\n createOrUpdateShareDto.file.path === '.'\n // special case, the parent share is directly linked to the share with an external path\n const isLinkedToShareExternalPath =\n createOrUpdateShareDto.file.id < 0 && !!pShareEnv.root.externalPath && createOrUpdateShareDto.file.path === '.'\n let fileId: number = null\n if (!isLinkedToShareSpaceRoot && !isLinkedToShareExternalPath) {\n // fileId is mandatory for a file in a child share\n const fileProps: FileProps = { ...(await getProps(pShareEnv.realPath, pShareEnv.dbFile.path)), id: undefined }\n fileId = await this.spacesQueries.getOrCreateSpaceFile(createOrUpdateShareDto.file.id, fileProps, pShareEnv.dbFile)\n }\n\n const share: Partial<Share> = {\n name: createOrUpdateShareDto.name,\n alias: await this.sharesQueries.uniqueShareAlias(createOrUpdateShareDto.name),\n ownerId: user.id,\n spaceId: pShareEnv.spaceId,\n spaceRootId: pShareEnv.spaceRootId,\n parentId: pSharePermissions.id,\n fileId: fileId,\n description: createOrUpdateShareDto.description,\n externalPath: pShareEnv.root.externalPath,\n enabled: createOrUpdateShareDto.enabled,\n disabledAt: createOrUpdateShareDto.enabled ? null : new Date(),\n type: createOrUpdateShareDto.type || SHARE_TYPE.COMMON\n }\n // create child share\n share.id = await this.sharesQueries.createShare(share)\n // intersect parent share permissions for members\n for (const m of createOrUpdateShareDto.members) {\n m.permissions = intersectPermissions(pSharePermissions.permissions, m.permissions)\n }\n // intersect parent share permissions for links\n for (const l of createOrUpdateShareDto.links) {\n l.permissions = intersectPermissions(pSharePermissions.permissions, l.permissions)\n }\n // check & update members\n await this.createOrUpdateLinksAsMembers(user, share, LINK_TYPE.SHARE, createOrUpdateShareDto.links)\n await this.updateMembers(user, share, [], createOrUpdateShareDto.members)\n return this.getShareWithMembers(user, share.id)\n }\n\n async updateSharesFromSpace(\n /*\n In this case the space is considered as a parent share\n The shares and child shares of the member should be deleted if the member is removed from the space\n Member permissions on shares and its child shares must be updated if the parent share owner's permissions are updated on the space\n */\n spaceId: number,\n currentMembers: SpaceMemberDto[],\n toRemove: SpaceMemberDto[],\n toUpdate: { object: SpaceMemberDto; rmPermissions: SPACE_OPERATION[] }[]\n ) {\n // skip if no actions\n if (!toRemove.length && !toUpdate.length) return\n // get all space manager ids (ignore them, they have all permissions on the space)\n const spaceManagerIds: number[] = currentMembers.filter((m) => m.spaceRole === SPACE_ROLE.IS_MANAGER).map((m) => m.id)\n const [rmOwners, upOwners] = await this.diffSharesPermissions(currentMembers, toRemove, toUpdate, spaceManagerIds)\n if (!rmOwners.length && !upOwners.length) return\n\n const owners: Record<\n number,\n {\n type: ACTION.UPDATE | ACTION.DELETE\n rmPermissions?: SPACE_OPERATION[]\n }\n > = {\n ...Object.fromEntries(rmOwners.map((uId: number) => [uId, { type: ACTION.DELETE }])),\n ...Object.fromEntries(\n upOwners.reduce(\n (\n acc: [\n number,\n {\n type: ACTION.UPDATE\n rmPermissions: SPACE_OPERATION[]\n }\n ][],\n o\n ) => {\n for (const id of o.ids) {\n acc.push([id, { type: ACTION.UPDATE, rmPermissions: o.rmPermissions }])\n }\n return acc\n },\n []\n )\n )\n }\n // find all parent shares which are owned by the modified/removed members of the space\n for (const share of await this.sharesQueries.selectParentSharesFromSpaceId(\n spaceId,\n Object.keys(owners).map((id: string) => parseInt(id))\n )) {\n if (share.ownerId in owners) {\n const action = owners[share.ownerId]\n if (action.type === ACTION.UPDATE) {\n this.removeChildSharesPermissions(\n share.id,\n [\n {\n ids: [share.ownerId],\n rmPermissions: action.rmPermissions\n }\n ],\n false\n ).catch((e: Error) => this.logger.error({ tag: this.updateSharesFromSpace.name, msg: `${e}` }))\n } else {\n this.removeShareFromOwners(share.id, [share.ownerId], false).catch((e: Error) =>\n this.logger.error({ tag: this.updateSharesFromSpace.name, msg: `${e}` })\n )\n }\n this.logger.log({\n tag: this.updateSharesFromSpace.name,\n msg: `${action.type} share (${share.id}) for owner ${share.ownerId} from space ${spaceId}`\n })\n }\n }\n }\n\n async updateSharesFromSpaceRoots(\n /* update or remove shares related to space roots changes */\n spaceId: number,\n toRemove: number[],\n toUpdate: {\n id: number\n rmPermissions: SPACE_OPERATION[]\n }[]\n ): Promise<void> {\n // skip if no actions\n if (!toRemove.length && !toUpdate.length) return\n\n for (const root of toUpdate) {\n for (const share of await this.sharesQueries.selectShares({ spaceId: spaceId, spaceRootId: root.id, parentId: null })) {\n this.removeChildSharesPermissions(\n share.id,\n [\n {\n ids: 'all',\n rmPermissions: root.rmPermissions\n }\n ],\n false\n ).catch((e: Error) => this.logger.error({ tag: this.updateSharesFromSpaceRoots.name, msg: `${e}` }))\n }\n }\n\n for (const rootId of toRemove) {\n for (const share of await this.sharesQueries.selectShares({ spaceId: spaceId, spaceRootId: rootId, parentId: null })) {\n // use await ! avoid database lock ! next action is to delete the root space which is cascaded with share.spaceRootId\n await this.removeShareFromOwners(share.id, [share.ownerId], false)\n }\n }\n }\n\n async removeSharesFromSpace(spaceId: number): Promise<void> {\n for (const share of await this.sharesQueries.selectShares({ spaceId: spaceId, parentId: null })) {\n // use await ! avoid database lock ! next action is to delete the space which is cascaded with share.spaceId\n await this.removeShareFromOwners(share.id, [share.ownerId], false)\n }\n }\n\n async generateLinkUUID(userId: number): Promise<{ uuid: string }> {\n let uuid: string = generateShortUUID()\n while (!(await this.linksQueries.isUniqueUUID(userId, uuid))) {\n uuid = generateShortUUID()\n }\n return { uuid: uuid }\n }\n\n listShareLinks(user: UserModel): Promise<ShareLink[]> {\n return this.sharesQueries.listShareLinks(user)\n }\n\n async getShareLink(user: UserModel, shareId: number, asAdmin: boolean = false): Promise<ShareLink> {\n const shareLink: ShareLink = await this.sharesQueries.listShareLinks(user, shareId, asAdmin)\n if (!shareLink) {\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n await this.setAllowedPermissions(user, shareLink)\n if (shareLink.file?.permissions) {\n // share link does not have these permissions\n shareLink.file.permissions = removePermissions(shareLink.file.permissions, [SPACE_OPERATION.SHARE_INSIDE, SPACE_OPERATION.SHARE_OUTSIDE])\n }\n return shareLink\n }\n\n async getLinkFromSpaceOrShare(user: UserModel, linkId: number, spaceOrShareId: number, type: LINK_TYPE): Promise<LinkGuest> {\n let linkGuest: LinkGuest\n if (type === LINK_TYPE.SPACE) {\n linkGuest = await this.linksQueries.linkFromSpace(user.id, linkId, spaceOrShareId)\n } else {\n linkGuest = await this.linksQueries.linkFromShare(user.id, linkId, spaceOrShareId, +user.isAdmin)\n }\n if (!linkGuest) {\n this.logger.warn({ tag: this.getLinkFromSpaceOrShare.name, msg: `unable to find link (${linkId}) on ${type} (${spaceOrShareId})` })\n throw new HttpException('Link not found', HttpStatus.NOT_FOUND)\n }\n return linkGuest\n }\n\n async createOrUpdateLinksAsMembers(\n user: UserModel,\n spaceOrShare: Partial<SpaceProps> | Partial<ShareProps>,\n type: LINK_TYPE,\n links: SpaceMemberDto[] | ShareMemberDto[]\n ): Promise<SpaceMemberDto[] | ShareMemberDto[]> {\n /* only used during the share creation from the share manager */\n const linkMembers: SpaceMemberDto[] | ShareMemberDto[] = []\n for (const link of links) {\n if (link.id < 0) {\n // new link (permissions are needed to create guest link)\n await this.createLinkFromSpaceOrShare(user, link.linkSettings.uuid, spaceOrShare.id, type, {\n ...link.linkSettings,\n permissions: link.permissions\n })\n // notify the guest link (if email is specified)\n this.notifyGuestLink(user, link, spaceOrShare.name, type === LINK_TYPE.SHARE ? ACTION.ADD : ACTION.UPDATE).catch((e: Error) =>\n this.logger.error({ tag: this.createOrUpdateLinksAsMembers.name, msg: `${e}` })\n )\n } else {\n if (link.linkSettings) {\n // modified link\n await this.updateLinkFromSpaceOrShare(user, link.linkId, spaceOrShare.id, type, link.linkSettings)\n }\n // unmodified link\n linkMembers.push(link)\n }\n }\n return linkMembers\n }\n\n async updateLinkFromSpaceOrShare(\n user: UserModel,\n linkId: number,\n spaceOrShareId: number,\n type: LINK_TYPE,\n createOrUpdateLinkDto: CreateOrUpdateLinkDto,\n fromAPI: boolean = false\n ): Promise<LinkGuest> {\n const link: LinkGuest = await this.getLinkFromSpaceOrShare(user, linkId, spaceOrShareId, type)\n if (!link) {\n this.logger.error({\n tag: this.updateLinkFromSpaceOrShare.name,\n msg: `(${linkId}) from ${type} (${spaceOrShareId}) and user (${user.id}) was not found`\n })\n throw new HttpException('Unable to find link', HttpStatus.NOT_FOUND)\n }\n const fieldsWhiteList: (keyof CreateOrUpdateLinkDto)[] = [\n 'name',\n 'email',\n 'requireAuth',\n 'limitAccess',\n 'expiresAt',\n 'language',\n 'isActive',\n 'password',\n 'permissions',\n 'shareName',\n 'shareDescription'\n ]\n const [updateUser, updateLink, updateShare, updateMember]: [\n Partial<Pick<User, 'language' | 'isActive' | 'password'>>,\n Partial<Pick<Link, 'name' | 'email' | 'requireAuth' | 'limitAccess' | 'expiresAt'>>,\n Partial<Pick<Share, 'alias' | 'name' | 'description'>>,\n Partial<Pick<ShareMembers, 'permissions'>>\n ] = [{}, {}, {}, {}]\n for (const [k, v] of Object.entries(createOrUpdateLinkDto) as Entries<CreateOrUpdateLinkDto>) {\n if (fieldsWhiteList.indexOf(k) > -1 && link[k] !== v) {\n switch (k) {\n case 'password':\n if (v) {\n updateUser.password = await hashPassword(v)\n }\n break\n case 'permissions':\n if (fromAPI) {\n // permissions are only present if the share type is link\n // intersect permissions to ensure that the user does not attempt to exceed his rights\n const shareLink: ShareLink = await this.getShareLink(user, spaceOrShareId)\n updateMember.permissions = intersectPermissions(shareLink.file.permissions, v)\n this.sharesQueries\n .clearCachePermissions(shareLink.alias, [link.userId])\n .catch((e: Error) => this.logger.error({ tag: this.updateLinkFromSpaceOrShare.name, msg: `${e}` }))\n }\n break\n case 'language':\n updateUser.language = v\n break\n case 'isActive':\n updateUser.isActive = v\n break\n case 'shareName':\n updateShare.name = v\n updateShare.alias = await this.sharesQueries.uniqueShareAlias(v)\n break\n case 'shareDescription':\n updateShare.description = v\n break\n case 'expiresAt':\n if (JSON.stringify(link[k]) !== JSON.stringify(v)) {\n updateLink[k] = v\n }\n break\n default:\n updateLink[k] = v\n }\n }\n }\n if (!Object.keys(updateUser).length && !Object.keys(updateLink).length && !Object.keys(updateShare).length && !Object.keys(updateMember).length) {\n this.logger.warn({ tag: this.updateLinkFromSpaceOrShare.name, msg: `no diff to update` })\n return fromAPI ? link : null\n }\n try {\n await this.linksQueries.updateLinkFromSpaceOrShare(link, spaceOrShareId, updateUser, updateLink, updateShare, updateMember)\n this.logger.debug({\n tag: this.updateLinkFromSpaceOrShare.name,\n msg: `link (${linkId}) updated : ${JSON.stringify({\n ...{ user: anonymizePassword(updateUser) },\n ...{ link: updateLink },\n ...{ share: updateShare },\n ...{ member: updateMember }\n })}`\n })\n } catch (e) {\n this.logger.error({ tag: this.updateLinkFromSpaceOrShare.name, msg: `${e}` })\n throw new HttpException('Unable to update link', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n if (fromAPI) {\n // for security reasons\n delete updateUser.password\n Object.assign(link, updateUser, updateLink, updateMember)\n return link\n }\n }\n\n async createGuestLink(\n permission: GUEST_PERMISSION.SPACES | GUEST_PERMISSION.SHARES,\n password?: string,\n language?: string,\n isActive: boolean = true\n ): Promise<Partial<User>> {\n const random = generateShortUUID(64)\n const guestLink = {\n login: random,\n email: `${random}@sync-in`,\n firstName: 'Guest',\n lastName: 'Link',\n language: language || null,\n permissions: permission,\n password: await hashPassword(password || generateShortUUID(24)),\n role: USER_ROLE.LINK,\n isActive: isActive\n } satisfies CreateUserDto\n try {\n ;(guestLink as Partial<User>).id = await this.usersQueries.createUserOrGuest(guestLink, USER_ROLE.LINK)\n return guestLink\n } catch (e) {\n this.logger.error({ tag: this.createGuestLink.name, msg: `unable to create guest link : ${e}` })\n throw new HttpException('Unable to create guest link', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n /* MANAGE SHARE LINKS */\n\n async deleteAllLinkMembers(spaceOrShareId: number, type: LINK_TYPE): Promise<void> {\n const ids: { id: number; linkId: number }[] = await this.linksQueries.allLinksFromSpaceOrShare(spaceOrShareId, type)\n await this.deleteGuestLinks(ids)\n }\n\n async deleteLinkMembers(members: SpaceMemberDto[] | ShareMemberDto[]): Promise<void> {\n await this.deleteGuestLinks(members)\n }\n\n async updateSharesExternalPathQuota(): Promise<void>\n async updateSharesExternalPathQuota(shareId: number): Promise<StorageQuota>\n async updateSharesExternalPathQuota(shareId?: number): Promise<void | StorageQuota> {\n for (const share of await this.sharesQueries.sharesQuotaExternalPaths(shareId)) {\n if (!(await isPathExists(share.externalPath))) {\n this.logger.warn({ tag: this.updateSharesExternalPathQuota.name, msg: `*${share.alias}* home path does not exist` })\n continue\n }\n const [size, errors] = await dirSize(share.externalPath)\n for (const [path, error] of Object.entries(errors)) {\n this.logger.warn({ tag: this.updateSharesExternalPathQuota.name, msg: `unable to get size for *${share.alias}* on ${path} : ${error}` })\n }\n const shareQuota: StorageQuota = { storageUsage: size, storageQuota: share.storageQuota }\n this.sharesQueries.cache\n .set(`${CACHE_QUOTA_SHARE_PREFIX}-${share.id}`, shareQuota, CACHE_QUOTA_TTL)\n .catch((e: Error) => this.logger.error({ tag: this.updateSharesExternalPathQuota.name, msg: `share *${share.alias}* (${share.id}) : ${e}` }))\n if (share.storageUsage !== shareQuota.storageUsage) {\n this.sharesQueries.updateShare(share.id, { storageUsage: shareQuota.storageUsage }).then(\n (updated: boolean) =>\n updated &&\n this.logger.log({\n tag: this.updateSharesExternalPathQuota.name,\n msg: `share *${share.alias}* (${share.id}) - storage usage updated : ${shareQuota.storageUsage}`\n })\n )\n }\n if (shareId) {\n return shareQuota\n }\n }\n }\n\n private async updateMembers(user: UserModel, share: Partial<Share>, oldMembers: ShareMemberDto[], currentMembers: ShareMemberDto[]) {\n if (oldMembers.length === 0 && currentMembers.length === 0) {\n return\n }\n // diff\n const [add, update, remove]: [ShareMemberDto[], Record<string | 'object', { old: any; new: any } | ShareMemberDto>[], ShareMemberDto[]] =\n diffCollection(oldMembers, currentMembers, ['permissions'], ['id', 'type'])\n\n // check members whitelists\n let toAdd: ShareMemberDto[] = []\n if (add.length) {\n const [userIdsWhitelist, groupIdsWhitelist] = await Promise.all([\n this.usersQueries.usersWhitelist(user.id),\n this.usersQueries.groupsWhitelist(user.id)\n ])\n toAdd = add.filter((m) => {\n if (\n ((m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && !m.linkId && userIdsWhitelist.indexOf(m.id) === -1) ||\n ((m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && groupIdsWhitelist.indexOf(m.id) === -1)\n ) {\n this.logger.warn({\n tag: this.updateMembers.name,\n msg: `cannot add ${m.type} (${m.id}) to share *${share.alias}* (${share.id}) : not in the members whitelist`\n })\n return false\n }\n return true\n })\n }\n\n // filter links\n const toRemove = remove.filter((m) => !m.linkId)\n // do remove links\n this.deleteLinkMembers(remove.filter((m) => !!m.linkId)).catch((e: Error) => this.logger.error({ tag: this.updateMembers.name, msg: `${e}` }))\n // do update members\n const status: Record<\n Exclude<ACTION, ACTION.DELETE_PERMANENTLY>,\n {\n groupIds: number[]\n userIds: number[]\n }\n > = await this.sharesQueries.updateMembers(share.id, toAdd, convertDiffUpdate(update), toRemove)\n\n // lists deleted and updated members as potential share owners\n const [rmMembersChildShares, upMembersChildShares]: [ShareMemberDto[], { object: ShareMemberDto; rmPermissions: SPACE_OPERATION[] }[]] = [[], []]\n for (const [action, members] of Object.entries(status) as Entries<typeof status>) {\n if (!members.userIds.length && !members.groupIds.length) continue\n if (action === ACTION.DELETE) {\n // stores the removed members who might own child shares from the current share\n rmMembersChildShares.push(\n ...toRemove.filter(\n (m) =>\n ((m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && members.userIds.indexOf(m.id) > -1) ||\n ((m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && members.groupIds.indexOf(m.id) > -1)\n )\n )\n } else if (action === ACTION.UPDATE) {\n // stores permissions updates and members who might own child shares created from the current share\n for (const m of update as { object: ShareMemberDto; permissions: { old: string; new: string } }[]) {\n if (\n ((m.object.type === MEMBER_TYPE.USER || m.object.type === MEMBER_TYPE.GUEST) && members.userIds.indexOf(m.object.id) > -1) ||\n ((m.object.type === MEMBER_TYPE.GROUP || m.object.type === MEMBER_TYPE.PGROUP) && members.groupIds.indexOf(m.object.id) > -1)\n ) {\n const diffPermissions = differencePermissions(m.permissions.old, m.permissions.new) as SPACE_OPERATION[]\n if (diffPermissions.length) {\n upMembersChildShares.push({ object: m.object, rmPermissions: diffPermissions })\n }\n }\n }\n }\n\n // clear cache &|| notify\n this.onShareActionForMembers(share, action, members, user).catch((e: Error) => this.logger.error({ tag: this.updateMembers.name, msg: `${e}` }))\n }\n\n // do updates\n // remove or update potential child shares\n this.updateMembersChildSharesPermissions(share.id, currentMembers, rmMembersChildShares, upMembersChildShares).catch((e: Error) =>\n this.logger.error({ tag: this.updateMembers.name, msg: `${e}` })\n )\n }\n\n private async updateMembersChildSharesPermissions(\n parentShareId: number,\n currentMembers: ShareMemberDto[],\n toRemove: ShareMemberDto[],\n toUpdate: { object: ShareMemberDto; rmPermissions: SPACE_OPERATION[] }[]\n ) {\n /*\n child shares of the member should be deleted if the member is removed from the parent share\n the permissions of the child shares members should be updated if the member's permissions are updated\n */\n const [removeUsersChildShares, updateUsersChildShares] = await this.diffSharesPermissions(currentMembers, toRemove, toUpdate)\n await Promise.all([\n this.removeShareFromOwners(parentShareId, removeUsersChildShares),\n this.removeChildSharesPermissions(parentShareId, updateUsersChildShares)\n ])\n }\n\n private async diffSharesPermissions(\n currentMembers: ShareMemberDto[] | SpaceMemberDto[],\n toRemove: ShareMemberDto[] | SpaceMemberDto[],\n toUpdate: { object: ShareMemberDto | SpaceMemberDto; rmPermissions: SPACE_OPERATION[] }[],\n ignoreUserIds: number[] = []\n ): Promise<[number[], { ids: number[]; rmPermissions: SPACE_OPERATION[] }[]]> {\n // remove shares from members\n const [removeUsersChildShares, removeGroupsChildShares]: number[][] = [[], []]\n for (const m of toRemove) {\n if (m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) {\n if (ignoreUserIds.indexOf(m.id) > -1) {\n continue\n }\n // do not remove child shares if the user is a member of a group with share permission\n const memberGroupIds = await this.usersQueries.groupsWhitelist(m.id)\n const groupSharePermission = currentMembers.find(\n (m) =>\n (m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) &&\n memberGroupIds.indexOf(m.id) > -1 &&\n havePermission(m.permissions, SPACE_OPERATION.SHARE_OUTSIDE)\n )\n if (groupSharePermission) {\n this.logger.debug({\n tag: this.diffSharesPermissions.name,\n msg: `ignore user (${m.id}) removal : is a member of the group (${groupSharePermission.id}) with share permission`\n })\n continue\n }\n removeUsersChildShares.push(m.id)\n } else {\n removeGroupsChildShares.push(m.id)\n }\n }\n\n // update shares permissions from members\n const [updateUsersChildShares, updateGroupsChildShares]: { ids: number[]; rmPermissions: SPACE_OPERATION[] }[][] = [[], []]\n for (const m of toUpdate) {\n // all child share permissions must be updated\n if (m.object.type === MEMBER_TYPE.USER || m.object.type === MEMBER_TYPE.GUEST) {\n if (ignoreUserIds.indexOf(m.object.id) > -1) continue\n // check if the user is a member of the existing groups on the share\n // since group and user permissions are aggregated, we should check the group permissions\n const memberGroupIds = await this.usersQueries.groupsWhitelist(m.object.id)\n const groupPermissions = currentMembers\n .filter((m) => (m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && memberGroupIds.indexOf(m.id) > -1)\n .reduce((perms: string[], m: ShareMemberDto) => {\n for (const p of m.permissions.split(SPACE_PERMS_SEP).filter((p: string) => p !== '' && perms.indexOf(p) === -1)) {\n perms.push(p)\n }\n return perms\n }, [])\n // find all permissions that the user must keep\n const [permsToKeep, permsToRemove]: SPACE_OPERATION[][] = [[], []]\n // compare the permissions removed from group to user's\n m.rmPermissions.forEach((p: SPACE_OPERATION) => (groupPermissions.indexOf(p) > -1 ? permsToKeep.push(p) : permsToRemove.push(p)))\n if (!permsToRemove.length) {\n // the groups provide these permissions to user, no need to update child shares\n continue\n }\n // remove only unmatched permissions\n m.rmPermissions = permsToRemove\n }\n // group members by permissions to optimize queries\n const memberTypeChildShares =\n m.object.type === MEMBER_TYPE.USER || m.object.type === MEMBER_TYPE.GUEST ? updateUsersChildShares : updateGroupsChildShares\n const memberWithSamePermissions = memberTypeChildShares.find((p) => p.rmPermissions.toString() === m.rmPermissions.toString())\n if (memberWithSamePermissions) {\n memberWithSamePermissions.ids.push(m.object.id)\n } else {\n memberTypeChildShares.push({ ids: [m.object.id], rmPermissions: m.rmPermissions })\n }\n }\n\n // retrieves all users from groups and subgroups & add them to the remove and update lists\n if (removeGroupsChildShares.length) {\n // ignore user id if the user is already removed or is a member of the parent share\n const rmUsersFromGroups = (await this.usersQueries.allUserIdsFromGroupsAndSubGroups(removeGroupsChildShares)).filter(\n (id) =>\n ignoreUserIds.indexOf(id) === -1 &&\n removeUsersChildShares.indexOf(id) === -1 &&\n !currentMembers.find((m) => (m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && m.id === id)\n )\n removeUsersChildShares.push(...rmUsersFromGroups)\n }\n if (updateGroupsChildShares.length) {\n for (const g of updateGroupsChildShares) {\n // ignore user id if the user is already removed or is a member of the parent share\n const rmUsersPermissionsFromGroups: number[] = []\n for (const uId of await this.usersQueries.allUserIdsFromGroupsAndSubGroups(g.ids)) {\n if (ignoreUserIds.indexOf(uId) > -1 || removeUsersChildShares.indexOf(uId) > -1) {\n continue\n }\n // check if the user is a member of the existing groups on the share\n // since group and user permissions are aggregated, we should check the group permissions\n const memberGroupIds = await this.usersQueries.groupsWhitelist(uId)\n const groupPermissions = currentMembers\n .filter(\n (m) =>\n ((m.type === MEMBER_TYPE.GROUP || m.type === MEMBER_TYPE.PGROUP) && memberGroupIds.indexOf(m.id) > -1) ||\n ((m.type === MEMBER_TYPE.USER || m.type === MEMBER_TYPE.GUEST) && m.id === uId)\n )\n .reduce((perms: string[], m: ShareMemberDto) => {\n for (const p of m.permissions.split(SPACE_PERMS_SEP).filter((p: string) => p !== '' && perms.indexOf(p) === -1)) {\n perms.push(p)\n }\n return perms\n }, [])\n // find all permissions that the user must keep\n const [permsToKeep, permsToRemove]: SPACE_OPERATION[][] = [[], []]\n // compare the permissions removed from group to user's\n g.rmPermissions.forEach((p: SPACE_OPERATION) => (groupPermissions.indexOf(p) > -1 ? permsToKeep.push(p) : permsToRemove.push(p)))\n if (!permsToKeep.length) {\n // user does not have the removed permissions from groups or from himself, we can remove the permissions to his child shares\n rmUsersPermissionsFromGroups.push(uId)\n } else if (permsToRemove.length) {\n // remove only unmatched permissions\n updateUsersChildShares.push({ ids: [uId], rmPermissions: permsToRemove })\n }\n }\n if (!rmUsersPermissionsFromGroups.length) continue\n // group users by permissions to optimize queries\n const memberWithSamePermissions = updateUsersChildShares.find((p) => p.rmPermissions.toString() === g.rmPermissions.toString())\n if (memberWithSamePermissions) {\n memberWithSamePermissions.ids.push(...rmUsersPermissionsFromGroups)\n } else {\n updateUsersChildShares.push({ ids: rmUsersPermissionsFromGroups, rmPermissions: g.rmPermissions })\n }\n }\n }\n return [removeUsersChildShares, updateUsersChildShares]\n }\n\n private async removeShareFromOwners(shareId: number, ownerIds: number[] | 'all', asParent: boolean = true, fromUserId?: number) {\n // deletes only the first (child) shares, child shares will be deleted in cascade\n const where = { ...(asParent ? { parentId: shareId } : { id: shareId }), ...(ownerIds !== 'all' && { ownerId: ownerIds }) }\n for (const share of await this.sharesQueries.selectShares(where)) {\n try {\n // store current child shares members before delete parent share\n const members: ShareChildMember[] = await this.sharesQueries.membersFromChildSharesPermissions(share.id, [share.ownerId], null, false)\n await this.sharesQueries.deleteShare(share.id)\n this.logger.log({\n tag: this.removeShareFromOwners.name,\n msg: `share *${share.alias}* (${share.id}) from owner (${share.ownerId}) was removed`\n })\n // clear cache and notify users\n if (share.ownerId && (!fromUserId || fromUserId !== share.ownerId)) {\n this.clearCachePermissionsAndOrNotify(share, ACTION.DELETE_PERMANENTLY, [share.ownerId]).catch((e: Error) =>\n this.logger.error({ tag: this.removeShareFromOwners.name, msg: `${e}` })\n )\n }\n members.forEach((m) => this.clearCachePermissionsAndOrNotify({ alias: m.shareAlias, name: m.shareName }, ACTION.DELETE, [m.userId]))\n } catch (e) {\n this.logger.error({\n tag: this.removeShareFromOwners.name,\n msg: `share *${share.alias}* (${share.id}) from owner (${share.ownerId}) was not removed : ${e}`\n })\n }\n }\n }\n\n private async removeChildSharesPermissions(\n shareId: number,\n userPermissions: {\n ids: number[] | 'all'\n rmPermissions: SPACE_OPERATION[]\n }[],\n asParent: boolean = true\n ) {\n // remove permissions of all members of the child shares\n if (!userPermissions.length) return\n for (const userPerm of userPermissions) {\n const members: ShareChildMember[] = await this.sharesQueries.membersFromChildSharesPermissions(\n shareId,\n userPerm.ids,\n userPerm.rmPermissions.join('|'),\n asParent\n )\n for (const m of members) {\n const permissions = removePermissions(m.userPermissions, userPerm.rmPermissions)\n try {\n await this.sharesQueries.updateMember({ permissions: permissions }, { id: m.id })\n this.clearCachePermissionsAndOrNotify(\n {\n alias: m.shareAlias,\n name: m.shareName\n },\n ACTION.UPDATE,\n [m.userId]\n ).catch((e: Error) => this.logger.error({ tag: this.removeChildSharesPermissions.name, msg: `${e}` }))\n this.logger.log({\n tag: this.removeChildSharesPermissions.name,\n msg: `user (${m.id}) permissions ${JSON.stringify(userPerm.rmPermissions)} on share : ${m.shareAlias} (${m.shareId}) was removed`\n })\n } catch (e) {\n this.logger.error({\n tag: this.removeChildSharesPermissions.name,\n msg: `user (${m.id}) permissions on share *${m.shareAlias}* (${m.shareId}) was not removed : ${e}`\n })\n }\n }\n }\n }\n\n private async checkChildSharePermissions(user: UserModel, shareId: number, childId: number): Promise<boolean> {\n const isOwnerForChildShare: number = await this.sharesQueries.childExistsForShareOwner(user.id, shareId, childId, user.isAdmin)\n if (isOwnerForChildShare !== childId) {\n this.logger.warn({\n tag: this.checkChildSharePermissions.name,\n msg: `is not allowed to manage child share (${childId}) from share (${shareId})`\n })\n throw new HttpException('Not authorized', HttpStatus.FORBIDDEN)\n }\n return true\n }\n\n private async onShareActionForMembers(share: Partial<Share>, action: ACTION, members: { groupIds: number[]; userIds: number[] }, user?: UserModel) {\n this.clearCachePermissionsAndOrNotify(\n share,\n action,\n Array.from(new Set([...(await this.usersQueries.allUserIdsFromGroupsAndSubGroups(members.groupIds)), ...members.userIds])).filter(\n (uid) => uid !== user?.id\n ),\n user\n ).catch((e: Error) => this.logger.error({ tag: this.onShareActionForMembers.name, msg: `${e}` }))\n }\n\n private async createLinkFromSpaceOrShare(\n user: UserModel,\n uuid: string,\n spaceOrShareId: number,\n type: LINK_TYPE,\n createOrUpdateLinkDto: CreateOrUpdateLinkDto\n ): Promise<void> {\n /* only used during the share creation from this manager */\n if (!(await this.linksQueries.isReservedUUID(user.id, uuid))) {\n this.logger.error({ tag: this.createLinkFromSpaceOrShare.name, msg: `user attempted to use UUID (${uuid}) was not reserved` })\n throw new HttpException('UUID was not reserved', HttpStatus.BAD_REQUEST)\n }\n const permission = type === LINK_TYPE.SPACE ? GUEST_PERMISSION.SPACES : GUEST_PERMISSION.SHARES\n const guestLink: Partial<User> = await this.createGuestLink(\n permission,\n createOrUpdateLinkDto.password,\n createOrUpdateLinkDto.language,\n createOrUpdateLinkDto.isActive !== undefined ? createOrUpdateLinkDto.isActive : true\n )\n this.logger.debug({ tag: this.createLinkFromSpaceOrShare.name, msg: `guest link (${guestLink.id}) created` })\n let linkId: number\n try {\n linkId = await this.linksQueries.createLinkToSpaceOrShare(guestLink.id, spaceOrShareId, type, {\n ...createOrUpdateLinkDto,\n uuid: uuid,\n userId: guestLink.id\n })\n this.logger.debug({\n tag: this.createLinkFromSpaceOrShare.name,\n msg: `link (${linkId}) for guest link (${guestLink.id}) created : ${JSON.stringify(createOrUpdateLinkDto)}`\n })\n } catch (e) {\n this.logger.error({ tag: this.createLinkFromSpaceOrShare.name, msg: `unable to create link with uuid (${uuid}) : ${e}` })\n throw new HttpException('Unable to update link', HttpStatus.INTERNAL_SERVER_ERROR)\n }\n }\n\n private async deleteGuestLinks(guestLinks: Partial<{ id: number; linkId: number }>[]) {\n for (const guestLink of guestLinks) {\n try {\n await this.usersQueries.deleteGuestLink(guestLink.id)\n this.logger.log({ tag: this.deleteGuestLinks.name, msg: `guest (${guestLink.id}) (link: ${guestLink.linkId}) was removed` })\n } catch (e) {\n this.logger.error({ tag: this.deleteGuestLinks.name, msg: `guest (${guestLink.id}) (link: ${guestLink.linkId}) was not removed : ${e}` })\n }\n }\n }\n\n /* MANAGE CACHE PERMISSIONS AND NOTIFY */\n\n private async clearCachePermissionsAndOrNotify(share: Partial<Share>, action: ACTION, memberIds: number[], user?: UserModel): Promise<void> {\n if (!memberIds?.length) {\n return\n }\n this.logger.verbose({\n tag: this.clearCachePermissionsAndOrNotify.name,\n msg: `share:${share.alias} ${action} members:${JSON.stringify(memberIds)}`\n })\n if (action !== ACTION.ADD) {\n // clear permissions for share members\n this.sharesQueries\n .clearCachePermissions(share.alias, memberIds)\n .catch((e: Error) => this.logger.error({ tag: this.clearCachePermissionsAndOrNotify.name, msg: `${e}` }))\n }\n if (action !== ACTION.UPDATE) {\n // notify the members who have joined or left the share\n const notification: NotificationContent = {\n app: NOTIFICATION_APP.SHARES,\n event: user ? NOTIFICATION_APP_EVENT.SHARES[action] : NOTIFICATION_APP_EVENT.SHARES_WITHOUT_OWNER[action],\n element: share.name,\n url: SPACE_REPOSITORY.SHARES\n }\n this.notificationsManager\n .create(memberIds, notification, {\n currentUrl: this.contextManager.headerOriginUrl(),\n author: user,\n action: action\n })\n .catch((e: Error) => this.logger.error({ tag: this.clearCachePermissionsAndOrNotify.name, msg: `${e}` }))\n }\n }\n\n private async notifyGuestLink(user: UserModel, link: SpaceMemberDto | ShareMemberDto, spaceOrShareName: string, action: ACTION) {\n if (!link.linkSettings.email) {\n return\n }\n this.notificationsManager\n .sendEmailNotification(\n [\n {\n id: -1,\n email: link.linkSettings.email,\n language: link.linkSettings.language,\n notification: USER_NOTIFICATION.APPLICATION_EMAIL\n } satisfies UserMailNotification\n ],\n {\n app: NOTIFICATION_APP.LINKS,\n event: NOTIFICATION_APP_EVENT.LINKS[action],\n element: spaceOrShareName,\n url: null\n } satisfies NotificationContent,\n {\n author: user,\n linkUUID: link.linkSettings.uuid,\n linkPassword: link.linkSettings.password,\n currentUrl: this.contextManager.headerOriginUrl(),\n action: action\n } satisfies NotificationOptions\n )\n .catch((e: Error) => this.logger.error({ tag: this.notifyGuestLink.name, msg: `${e}` }))\n }\n}\n"],"names":["SharesManager","permissions","user","spaceAlias","sharesQueries","id","isAdmin","listShares","listSpaceShares","spaceId","listChildShares","shareId","setAllowedPermissions","share","asAdmin","file","ownerId","externalPath","SHARE_ALL_OPERATIONS","space","alias","spacePermissions","spacesQueries","root","logger","warn","tag","name","msg","JSON","stringify","HttpException","HttpStatus","NOT_FOUND","spaceEnv","SpaceEnv","setPermissions","envPermissions","parent","userId","sharePermissions","error","BAD_REQUEST","getShareWithMembers","FORBIDDEN","createShare","createOrUpdateShareDto","uniqueShareAlias","description","enabled","storageQuota","storageIndexing","disabledAt","Date","type","SHARE_TYPE","COMMON","checkExternalPath","e","message","FileError","httpCode","INTERNAL_SERVER_ERROR","f","getUserFile","path","realPath","join","filesPath","isPathExists","fileProps","getProps","fileId","getOrCreateUserFile","m","members","intersectPermissions","l","links","setPaths","split","slice","spaceRootId","isExternalSpaceRoot","isSpaceRoot","Number","dbFile","undefined","getOrCreateSpaceFile","createOrUpdateLinksAsMembers","LINK_TYPE","SHARE","updateMembers","updateShare","shareDiffProps","modifiedAt","props","prop","linkMembers","deleteShare","shareExistsForOwner","deleteAllLinkMembers","removeShareFromOwners","getChildShare","childId","isLink","checkChildSharePermissions","getShareLink","updateChildShare","deleteChildShare","createChildShare","pSharePermissions","haveSpacePermission","SPACE_OPERATION","SHARE_OUTSIDE","pShare","filePath","highestParentId","findHighestParentShare","shareEnv","pShareEnv","isLinkedToShareSpaceRoot","isLinkedToShareExternalPath","parentId","updateSharesFromSpace","currentMembers","toRemove","toUpdate","length","spaceManagerIds","filter","spaceRole","SPACE_ROLE","IS_MANAGER","map","rmOwners","upOwners","diffSharesPermissions","owners","Object","fromEntries","uId","ACTION","DELETE","reduce","acc","o","ids","push","UPDATE","rmPermissions","selectParentSharesFromSpaceId","keys","parseInt","action","removeChildSharesPermissions","catch","log","updateSharesFromSpaceRoots","selectShares","rootId","removeSharesFromSpace","generateLinkUUID","uuid","generateShortUUID","linksQueries","isUniqueUUID","listShareLinks","shareLink","removePermissions","SHARE_INSIDE","getLinkFromSpaceOrShare","linkId","spaceOrShareId","linkGuest","SPACE","linkFromSpace","linkFromShare","spaceOrShare","link","createLinkFromSpaceOrShare","linkSettings","notifyGuestLink","ADD","updateLinkFromSpaceOrShare","createOrUpdateLinkDto","fromAPI","fieldsWhiteList","updateUser","updateLink","updateMember","k","v","entries","indexOf","password","hashPassword","clearCachePermissions","language","isActive","debug","anonymizePassword","member","assign","createGuestLink","permission","random","guestLink","login","email","firstName","lastName","role","USER_ROLE","LINK","usersQueries","createUserOrGuest","allLinksFromSpaceOrShare","deleteGuestLinks","deleteLinkMembers","updateSharesExternalPathQuota","sharesQuotaExternalPaths","size","errors","dirSize","shareQuota","storageUsage","cache","set","CACHE_QUOTA_SHARE_PREFIX","CACHE_QUOTA_TTL","then","updated","oldMembers","add","update","remove","diffCollection","toAdd","userIdsWhitelist","groupIdsWhitelist","Promise","all","usersWhitelist","groupsWhitelist","MEMBER_TYPE","USER","GUEST","GROUP","PGROUP","status","convertDiffUpdate","rmMembersChildShares","upMembersChildShares","userIds","groupIds","object","diffPermissions","differencePermissions","old","new","onShareActionForMembers","updateMembersChildSharesPermissions","parentShareId","removeUsersChildShares","updateUsersChildShares","ignoreUserIds","removeGroupsChildShares","memberGroupIds","groupSharePermission","find","havePermission","updateGroupsChildShares","groupPermissions","perms","p","SPACE_PERMS_SEP","permsToKeep","permsToRemove","forEach","memberTypeChildShares","memberWithSamePermissions","toString","rmUsersFromGroups","allUserIdsFromGroupsAndSubGroups","g","rmUsersPermissionsFromGroups","ownerIds","asParent","fromUserId","where","membersFromChildSharesPermissions","clearCachePermissionsAndOrNotify","DELETE_PERMANENTLY","shareAlias","shareName","userPermissions","userPerm","isOwnerForChildShare","childExistsForShareOwner","Array","from","Set","uid","isReservedUUID","GUEST_PERMISSION","SPACES","SHARES","createLinkToSpaceOrShare","guestLinks","deleteGuestLink","memberIds","verbose","notification","app","NOTIFICATION_APP","event","NOTIFICATION_APP_EVENT","SHARES_WITHOUT_OWNER","element","url","SPACE_REPOSITORY","notificationsManager","create","currentUrl","contextManager","headerOriginUrl","author","spaceOrShareName","sendEmailNotification","USER_NOTIFICATION","APPLICATION_EMAIL","LINKS","linkUUID","linkPassword","Logger"],"mappings":"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"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
|
|
3
|
-
* This file is part of Sync-in | The open source file sync and share solution
|
|
4
|
-
* See the LICENSE file for licensing details
|
|
5
|
-
*/ "use strict";
|
|
1
|
+
"use strict";
|
|
6
2
|
Object.defineProperty(exports, "__esModule", {
|
|
7
3
|
value: true
|
|
8
4
|
});
|