Browse Source
feat(files_sharing): allow viewing files with download disabled
feat(files_sharing): allow viewing files with download disabled
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>pull/53671/head
committed by
John Molakvoæ
20 changed files with 234 additions and 74 deletions
-
13apps/dav/lib/DAV/ViewOnlyPlugin.php
-
28apps/dav/tests/unit/DAV/ViewOnlyPluginTest.php
-
7apps/files/lib/Controller/ApiController.php
-
15apps/files/tests/Controller/ApiControllerTest.php
-
7apps/files_sharing/lib/Controller/PublicPreviewController.php
-
28apps/files_sharing/tests/Controller/PublicPreviewControllerTest.php
-
1apps/settings/lib/Settings/Admin/Sharing.php
-
10apps/settings/src/components/AdminSettingsSharingForm.vue
-
1build/integration/features/bootstrap/SharingContext.php
-
34build/integration/sharing_features/sharing-v1-part2.feature
-
5core/Controller/PreviewController.php
-
83cypress/e2e/files_sharing/files-download.cy.ts
-
5cypress/e2e/files_versions/version_download.cy.ts
-
4dist/settings-vue-settings-admin-sharing.js
-
2dist/settings-vue-settings-admin-sharing.js.map
-
4lib/private/Share20/Manager.php
-
21lib/private/Share20/Share.php
-
9lib/public/Share/IManager.php
-
7lib/public/Share/IShare.php
-
24tests/Core/Controller/PreviewControllerTest.php
@ -0,0 +1,83 @@ |
|||
/** |
|||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
import type { User } from '@nextcloud/cypress' |
|||
import { createShare } from './FilesSharingUtils.ts' |
|||
import { |
|||
getActionEntryForFile, |
|||
getRowForFile, |
|||
} from '../files/FilesUtils.ts' |
|||
|
|||
describe('files_sharing: Download forbidden', { testIsolation: true }, () => { |
|||
let user: User |
|||
let sharee: User |
|||
|
|||
beforeEach(() => { |
|||
cy.runOccCommand('config:app:set --value yes core shareapi_allow_view_without_download') |
|||
cy.createRandomUser().then(($user) => { |
|||
user = $user |
|||
}) |
|||
cy.createRandomUser().then(($user) => { |
|||
sharee = $user |
|||
}) |
|||
}) |
|||
|
|||
after(() => { |
|||
cy.runOccCommand('config:app:delete core shareapi_allow_view_without_download') |
|||
}) |
|||
|
|||
it('cannot download a folder if disabled', () => { |
|||
// share the folder
|
|||
cy.mkdir(user, '/folder') |
|||
cy.login(user) |
|||
cy.visit('/apps/files') |
|||
createShare('folder', sharee.userId, { read: true, download: false }) |
|||
cy.logout() |
|||
|
|||
// Now for the sharee
|
|||
cy.login(sharee) |
|||
|
|||
// visit shared files view
|
|||
cy.visit('/apps/files') |
|||
// see the shared folder
|
|||
getRowForFile('folder').should('be.visible') |
|||
getActionEntryForFile('folder', 'download').should('not.exist') |
|||
|
|||
// Disable view without download option
|
|||
cy.runOccCommand('config:app:set --value no core shareapi_allow_view_without_download') |
|||
|
|||
// visit shared files view
|
|||
cy.visit('/apps/files') |
|||
// see the shared folder
|
|||
getRowForFile('folder').should('be.visible') |
|||
getActionEntryForFile('folder', 'download').should('not.exist') |
|||
}) |
|||
|
|||
it('cannot download a file if disabled', () => { |
|||
// share the folder
|
|||
cy.uploadContent(user, new Blob([]), 'text/plain', '/file.txt') |
|||
cy.login(user) |
|||
cy.visit('/apps/files') |
|||
createShare('file.txt', sharee.userId, { read: true, download: false }) |
|||
cy.logout() |
|||
|
|||
// Now for the sharee
|
|||
cy.login(sharee) |
|||
|
|||
// visit shared files view
|
|||
cy.visit('/apps/files') |
|||
// see the shared folder
|
|||
getRowForFile('file.txt').should('be.visible') |
|||
getActionEntryForFile('file.txt', 'download').should('not.exist') |
|||
|
|||
// Disable view without download option
|
|||
cy.runOccCommand('config:app:set --value no core shareapi_allow_view_without_download') |
|||
|
|||
// visit shared files view
|
|||
cy.visit('/apps/files') |
|||
// see the shared folder
|
|||
getRowForFile('file.txt').should('be.visible') |
|||
getActionEntryForFile('file.txt', 'download').should('not.exist') |
|||
}) |
|||
}) |
|||
4
dist/settings-vue-settings-admin-sharing.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
2
dist/settings-vue-settings-admin-sharing.js.map
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue