diff options
Diffstat (limited to 'apps/files_sharing/src/mixins/ShareDetails.js')
-rw-r--r-- | apps/files_sharing/src/mixins/ShareDetails.js | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/apps/files_sharing/src/mixins/ShareDetails.js b/apps/files_sharing/src/mixins/ShareDetails.js index 3884d22dae6..6ccdf8d63d0 100644 --- a/apps/files_sharing/src/mixins/ShareDetails.js +++ b/apps/files_sharing/src/mixins/ShareDetails.js @@ -1,4 +1,12 @@ -import Share from '../models/Share.js' +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import Share from '../models/Share.ts' +import Config from '../services/ConfigService.ts' +import { ATOMIC_PERMISSIONS } from '../lib/SharePermissionsToolBox.js' +import logger from '../services/logger.ts' export default { methods: { @@ -8,17 +16,30 @@ export default { // TODO : Better name/interface for handler required // For example `externalAppCreateShareHook` with proper documentation if (shareRequestObject.handler) { + const handlerInput = {} if (this.suggestions) { - shareRequestObject.suggestions = this.suggestions - shareRequestObject.fileInfo = this.fileInfo - shareRequestObject.query = this.query + handlerInput.suggestions = this.suggestions + handlerInput.fileInfo = this.fileInfo + handlerInput.query = this.query } - share = await shareRequestObject.handler(shareRequestObject) - share = new Share(share) + const externalShareRequestObject = await shareRequestObject.handler(handlerInput) + share = this.mapShareRequestToShareObject(externalShareRequestObject) } else { share = this.mapShareRequestToShareObject(shareRequestObject) } + if (this.fileInfo.type !== 'dir') { + const originalPermissions = share.permissions + const strippedPermissions = originalPermissions + & ~ATOMIC_PERMISSIONS.CREATE + & ~ATOMIC_PERMISSIONS.DELETE + + if (originalPermissions !== strippedPermissions) { + logger.debug('Removed create/delete permissions from file share (only valid for folders)') + share.permissions = strippedPermissions + } + } + const shareDetails = { fileInfo: this.fileInfo, share, @@ -39,18 +60,19 @@ export default { const share = { attributes: [ { - enabled: true, + value: true, key: 'download', scope: 'permissions', }, ], + hideDownload: false, share_type: shareRequestObject.shareType, share_with: shareRequestObject.shareWith, is_no_user: shareRequestObject.isNoUser, user: shareRequestObject.shareWith, share_with_displayname: shareRequestObject.displayName, subtitle: shareRequestObject.subtitle, - permissions: shareRequestObject.permissions, + permissions: shareRequestObject.permissions ?? new Config().defaultPermissions, expiration: '', } |