Skip to content

Commit 0ac580d

Browse files
authored
Merge pull request #12141 from owncloud/feat/psec-permissions
2 parents 9351b65 + 4617080 commit 0ac580d

File tree

5 files changed

+43
-8
lines changed

5 files changed

+43
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Enhancement: Password protected folder permissions
2+
3+
We've added the permissions dropdown into the create password protected folder dialog. Users can now decide what permissions they would like to add to the folder. Permissions are matching folder public link permissions.
4+
5+
https://github.com/owncloud/web/pull/12141
6+
https://github.com/owncloud/web/issues/12039

packages/web-app-password-protected-folders/src/components/CreateFolderModal.vue

+24-3
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,28 @@
1212
:label="$gettext('Password')"
1313
class="oc-mt-s"
1414
/>
15+
16+
<div class="oc-flex oc-flex-middle oc-mt-m">
17+
<oc-icon class="oc-mr-s" :name="selectedTypeIcon" fill-type="line" />
18+
<link-role-dropdown
19+
id="input-folder-permissions"
20+
v-model="formData.selectedType"
21+
:available-link-type-options="availableLinkTypes"
22+
/>
23+
</div>
24+
1525
<input type="submit" class="oc-hidden" />
1626
</form>
1727
</template>
1828

1929
<script lang="ts" setup>
20-
import { useMessages, useResourcesStore, useSpacesStore } from '@ownclouders/web-pkg'
30+
import {
31+
LinkRoleDropdown,
32+
useLinkTypes,
33+
useMessages,
34+
useResourcesStore,
35+
useSpacesStore
36+
} from '@ownclouders/web-pkg'
2137
import { computed, reactive, unref, watch } from 'vue'
2238
import { useGettext } from 'vue3-gettext'
2339
import { useCreateFileHandler } from '../composables/useCreateFileHandler'
@@ -32,13 +48,17 @@ const { showErrorMessage } = useMessages()
3248
const { createFileHandler } = useCreateFileHandler()
3349
const { currentFolder } = useResourcesStore()
3450
const { currentSpace } = useSpacesStore()
51+
const { defaultLinkType, getAvailableLinkTypes, getLinkRoleByType } = useLinkTypes()
3552
3653
const formData = reactive({
3754
folderName: '',
38-
password: ''
55+
password: '',
56+
selectedType: unref(defaultLinkType)
3957
})
4058
4159
const isFormValid = computed(() => formData.folderName !== '' && formData.password !== '')
60+
const availableLinkTypes = computed(() => getAvailableLinkTypes({ isFolder: true }))
61+
const selectedTypeIcon = computed(() => getLinkRoleByType(formData.selectedType).icon)
4262
4363
const onConfirm = async () => {
4464
if (!unref(isFormValid)) {
@@ -50,7 +70,8 @@ const onConfirm = async () => {
5070
fileName: formData.folderName,
5171
currentFolder: unref(currentFolder),
5272
space: unref(currentSpace),
53-
password: formData.password
73+
password: formData.password,
74+
type: formData.selectedType
5475
})
5576
} catch (error) {
5677
console.error(error)

packages/web-app-password-protected-folders/src/composables/useCreateFileHandler.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ export const useCreateFileHandler = () => {
1212
fileName,
1313
space,
1414
currentFolder,
15-
password
15+
password,
16+
type
1617
}: {
1718
fileName: string
1819
space: SpaceResource
1920
currentFolder: Resource
2021
password: string
22+
type: SharingLinkType
2123
}) => {
2224
if (fileName === '') {
2325
return
@@ -32,7 +34,7 @@ export const useCreateFileHandler = () => {
3234
clientService,
3335
space,
3436
resource: folder,
35-
options: { password, type: SharingLinkType.Edit }
37+
options: { password, type }
3638
})
3739

3840
const path = urlJoin(currentFolder.path, fileName + '.psec')

packages/web-app-password-protected-folders/tests/unit/components/CreateFolderModal.spec.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useCreateFileHandler } from '../../../src/composables/useCreateFileHand
44
import { mock } from 'vitest-mock-extended'
55
import { Resource, SpaceResource } from '@ownclouders/web-client'
66
import { VueWrapper } from '@vue/test-utils'
7+
import { SharingLinkType } from '@ownclouders/web-client/graph/generated'
78

89
vi.mock('../../../src/composables/useCreateFileHandler', () => ({
910
useCreateFileHandler: vi.fn().mockReturnValue({ createFileHandler: vi.fn() })
@@ -14,7 +15,8 @@ const currentSpace = mock<SpaceResource>()
1415

1516
const SELECTORS = Object.freeze({
1617
inputFolderName: '#input-folder-name',
17-
inputFolderPassword: '#input-folder-password'
18+
inputFolderPassword: '#input-folder-password',
19+
inputFolderPermissions: '#input-folder-permissions'
1820
})
1921

2022
describe('CreateFolderModal', () => {
@@ -23,17 +25,20 @@ describe('CreateFolderModal', () => {
2325

2426
const folderNameInput = wrapper.findComponent(SELECTORS.inputFolderName) as VueWrapper
2527
const passwordInput = wrapper.findComponent(SELECTORS.inputFolderPassword) as VueWrapper
28+
const permissionsInput = wrapper.findComponent(SELECTORS.inputFolderPermissions) as VueWrapper
2629

2730
folderNameInput.vm.$emit('update:modelValue', 'name')
2831
passwordInput.vm.$emit('update:modelValue', 'password')
32+
permissionsInput.vm.$emit('update:modelValue', SharingLinkType.Edit)
2933

3034
wrapper.vm.onConfirm()
3135

3236
expect(useCreateFileHandler().createFileHandler).toHaveBeenCalledWith({
3337
fileName: 'name',
3438
password: 'password',
3539
space: currentSpace,
36-
currentFolder
40+
currentFolder,
41+
type: SharingLinkType.Edit
3742
})
3843
})
3944

packages/web-app-password-protected-folders/tests/unit/composables/useCreateFileHandler.spec.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ describe('createFileHandler', () => {
1919
fileName: 'protected',
2020
space,
2121
currentFolder,
22-
password: 'Pass$123'
22+
password: 'Pass$123',
23+
type: SharingLinkType.Edit
2324
})
2425

2526
expect(mocks.$clientService.webdav.createFolder).toHaveBeenCalledWith(space, {

0 commit comments

Comments
 (0)