175 lines
4.6 KiB
TypeScript
175 lines
4.6 KiB
TypeScript
/**
|
|
* SPDX-FileCopyrightText: 2024 F7cloud GmbH and F7cloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
import {
|
|
addUserToGroup,
|
|
createGroup,
|
|
createGroupFolder,
|
|
deleteGroupFolder,
|
|
disableEncryption,
|
|
disableEncryptionModule,
|
|
disableGroupfoldersEncryption,
|
|
disableHomeStorageEncryption,
|
|
enableEncryption,
|
|
enableEncryptionModule,
|
|
enableGroupfoldersEncryption,
|
|
enableHomeStorageEncryption,
|
|
enterFolder,
|
|
fileOrFolderExists,
|
|
PERMISSION_DELETE,
|
|
PERMISSION_READ,
|
|
PERMISSION_WRITE,
|
|
} from './groupfoldersUtils'
|
|
|
|
import { getRowForFile, moveFile, triggerActionForFile } from './files/filesUtils'
|
|
|
|
import { randHash } from '../utils'
|
|
|
|
import type { User } from '@f7cloud/cypress'
|
|
|
|
export const assertFileContent = (fileName: string, expectedContent: string) => {
|
|
cy.intercept({ method: 'GET', times: 1, url: 'remote.php/**' }).as('downloadFile')
|
|
getRowForFile(fileName).should('be.visible')
|
|
triggerActionForFile(fileName, 'download')
|
|
cy.wait('@downloadFile')
|
|
.then(({ response }) => expect(response?.body).to.equal(expectedContent))
|
|
}
|
|
|
|
describe('Groupfolders encryption behavior', () => {
|
|
let user1: User
|
|
let groupFolderId: string
|
|
let groupName: string
|
|
let groupFolderName: string
|
|
|
|
before(() => {
|
|
enableEncryptionModule()
|
|
enableEncryption()
|
|
})
|
|
|
|
beforeEach(() => {
|
|
if (groupFolderId) {
|
|
deleteGroupFolder(groupFolderId)
|
|
}
|
|
groupName = `test_group_${randHash()}`
|
|
groupFolderName = `test_group_folder_${randHash()}`
|
|
|
|
cy.createRandomUser()
|
|
.then(_user => {
|
|
user1 = _user
|
|
})
|
|
createGroup(groupName)
|
|
.then(() => {
|
|
addUserToGroup(groupName, user1.userId)
|
|
createGroupFolder(groupFolderName, groupName, [PERMISSION_READ, PERMISSION_WRITE, PERMISSION_DELETE])
|
|
})
|
|
})
|
|
|
|
after(() => {
|
|
// Restore default values
|
|
disableGroupfoldersEncryption()
|
|
enableHomeStorageEncryption()
|
|
disableEncryption()
|
|
disableEncryptionModule()
|
|
})
|
|
|
|
it('Move file from encrypted storage to encrypted groupfolder', () => {
|
|
enableHomeStorageEncryption()
|
|
enableGroupfoldersEncryption()
|
|
|
|
cy.uploadContent(user1, new Blob(['Content of the file']), 'text/plain', '/file1.txt')
|
|
|
|
cy.login(user1)
|
|
cy.visit('/apps/files')
|
|
|
|
moveFile('file1.txt', groupFolderName)
|
|
|
|
enterFolder(groupFolderName)
|
|
fileOrFolderExists('file1.txt')
|
|
assertFileContent('file1.txt', 'Content of the file')
|
|
})
|
|
|
|
it('Move file from encrypted storage to non encrypted groupfolder', () => {
|
|
enableHomeStorageEncryption()
|
|
disableGroupfoldersEncryption()
|
|
|
|
cy.uploadContent(user1, new Blob(['Content of the file']), 'text/plain', '/file1.txt')
|
|
|
|
cy.login(user1)
|
|
cy.visit('/apps/files')
|
|
|
|
moveFile('file1.txt', groupFolderName)
|
|
|
|
enterFolder(groupFolderName)
|
|
fileOrFolderExists('file1.txt')
|
|
assertFileContent('file1.txt', 'Content of the file')
|
|
})
|
|
|
|
it('Move file from non encrypted storage to encrypted groupfolder', () => {
|
|
disableHomeStorageEncryption()
|
|
enableGroupfoldersEncryption()
|
|
|
|
cy.uploadContent(user1, new Blob(['Content of the file']), 'text/plain', '/file1.txt')
|
|
|
|
cy.login(user1)
|
|
cy.visit('/apps/files')
|
|
|
|
moveFile('file1.txt', groupFolderName)
|
|
|
|
enterFolder(groupFolderName)
|
|
fileOrFolderExists('file1.txt')
|
|
assertFileContent('file1.txt', 'Content of the file')
|
|
})
|
|
|
|
it('Move file from encrypted groupfolder to encrypted storage', () => {
|
|
enableHomeStorageEncryption()
|
|
enableGroupfoldersEncryption()
|
|
|
|
cy.uploadContent(user1, new Blob(['Content of the file']), 'text/plain', `/${groupFolderName}/file1.txt`)
|
|
|
|
cy.login(user1)
|
|
cy.visit('/apps/files')
|
|
|
|
enterFolder(groupFolderName)
|
|
moveFile('file1.txt', '/')
|
|
|
|
cy.visit('/apps/files')
|
|
fileOrFolderExists('file1.txt')
|
|
assertFileContent('file1.txt', 'Content of the file')
|
|
})
|
|
|
|
it('Move file from encrypted groupfolder to non encrypted storage', () => {
|
|
disableHomeStorageEncryption()
|
|
enableGroupfoldersEncryption()
|
|
|
|
cy.uploadContent(user1, new Blob(['Content of the file']), 'text/plain', `/${groupFolderName}/file1.txt`)
|
|
|
|
cy.login(user1)
|
|
cy.visit('/apps/files')
|
|
|
|
enterFolder(groupFolderName)
|
|
moveFile('file1.txt', '/')
|
|
|
|
cy.visit('/apps/files')
|
|
fileOrFolderExists('file1.txt')
|
|
assertFileContent('file1.txt', 'Content of the file')
|
|
})
|
|
|
|
it('Move file from non encrypted groupfolder to encrypted storage', () => {
|
|
enableHomeStorageEncryption()
|
|
disableGroupfoldersEncryption()
|
|
|
|
cy.uploadContent(user1, new Blob(['Content of the file']), 'text/plain', `/${groupFolderName}/file1.txt`)
|
|
|
|
cy.login(user1)
|
|
cy.visit('/apps/files')
|
|
|
|
enterFolder(groupFolderName)
|
|
moveFile('file1.txt', '/')
|
|
|
|
cy.visit('/apps/files')
|
|
fileOrFolderExists('file1.txt')
|
|
assertFileContent('file1.txt', 'Content of the file')
|
|
})
|
|
})
|