From 8698d9a41f4f71466f99125d956c64eaf282446f Mon Sep 17 00:00:00 2001 From: Jan Ackermann Date: Fri, 4 Oct 2024 13:13:18 +0200 Subject: [PATCH 1/4] Show error message when accessing space via publik link that is disabled --- packages/web-runtime/src/pages/resolvePublicLink.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web-runtime/src/pages/resolvePublicLink.vue b/packages/web-runtime/src/pages/resolvePublicLink.vue index 4c997aafc8e..82fef2881ca 100644 --- a/packages/web-runtime/src/pages/resolvePublicLink.vue +++ b/packages/web-runtime/src/pages/resolvePublicLink.vue @@ -212,7 +212,7 @@ export default defineComponent({ } catch (e) { authStore.clearPublicLinkContext() console.error(e, e.resource) - return + throw e } } From 3be14b3564a85a7fa3a5e40d12b503cd834f7051 Mon Sep 17 00:00:00 2001 From: Jan Ackermann Date: Fri, 4 Oct 2024 13:16:30 +0200 Subject: [PATCH 2/4] Add changelog item --- ...g-disabled-password-protected-space-does-not-show-error | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 changelog/unreleased/bugfix-accessing-disabled-password-protected-space-does-not-show-error diff --git a/changelog/unreleased/bugfix-accessing-disabled-password-protected-space-does-not-show-error b/changelog/unreleased/bugfix-accessing-disabled-password-protected-space-does-not-show-error new file mode 100644 index 00000000000..3d5bc03e54c --- /dev/null +++ b/changelog/unreleased/bugfix-accessing-disabled-password-protected-space-does-not-show-error @@ -0,0 +1,7 @@ +Bugfix: Accessing disabled password-protected space does not show error + +We've fixed a bug where accessing a disabled password-protected space did not show an error message. +Now, users will see an error message when trying to access a disabled password-protected space. + +https://github.com/owncloud/web/pull/11725 +https://github.com/owncloud/web/issues/11721 From cb8119d20fba8c569f796ed314e6b43d92cf31a7 Mon Sep 17 00:00:00 2001 From: Jan Ackermann Date: Sat, 5 Oct 2024 14:59:17 +0200 Subject: [PATCH 3/4] Add unit test --- .../src/pages/resolvePublicLink.vue | 19 +++++--- .../unit/pages/resolvePublicLink.spec.ts | 44 +++++++++++++++++-- 2 files changed, 53 insertions(+), 10 deletions(-) diff --git a/packages/web-runtime/src/pages/resolvePublicLink.vue b/packages/web-runtime/src/pages/resolvePublicLink.vue index 82fef2881ca..068167a2172 100644 --- a/packages/web-runtime/src/pages/resolvePublicLink.vue +++ b/packages/web-runtime/src/pages/resolvePublicLink.vue @@ -275,14 +275,19 @@ export default defineComponent({ }) onMounted(async () => { - if (unref(isOcmLink)) { - await resolvePublicLinkTask.perform(false) - return - } + try { + if (unref(isOcmLink)) { + await resolvePublicLinkTask.perform(false) + return + } + + await loadPublicSpaceTask.perform() - await loadPublicSpaceTask.perform() - if (!unref(isPasswordRequired)) { - await resolvePublicLinkTask.perform(false) + if (!unref(isPasswordRequired)) { + await resolvePublicLinkTask.perform(false) + } + } catch (e) { + console.error(e) } }) diff --git a/packages/web-runtime/tests/unit/pages/resolvePublicLink.spec.ts b/packages/web-runtime/tests/unit/pages/resolvePublicLink.spec.ts index 00b769ca7ba..501d606888d 100644 --- a/packages/web-runtime/tests/unit/pages/resolvePublicLink.spec.ts +++ b/packages/web-runtime/tests/unit/pages/resolvePublicLink.spec.ts @@ -5,6 +5,7 @@ import { CapabilityStore, ClientService, useRouteParam, useRouteQuery } from '@o import { DavHttpError, SpaceResource } from '@ownclouders/web-client' import { authService } from '../../../src/services/auth' import { ref } from 'vue' +import { DavErrorCode } from '@ownclouders/web-client/src/webdav' vi.mock('../../../src/services/auth') @@ -67,6 +68,31 @@ describe('resolvePublicLink', () => { }) }) }) + describe('error message', () => { + it('should display an error message if the space cannot be resolved', async () => { + const { wrapper, mocks } = getWrapper({ getFileInfoErrorStatusCode: 404 }) + + try { + await wrapper.vm.loadPublicSpaceTask.last + } catch {} + + expect(wrapper.find('.oc-link-resolve-error-message').text()).toContain( + 'The resource could not be located, it may not exist anymore.' + ) + }) + it('should display an error message if the space cannot be resolved after entering password', async () => { + const { wrapper, mocks } = getWrapper({ + passwordRequired: true, + getFileInfoErrorStatusCode: 404 + }) + await wrapper.vm.loadPublicSpaceTask.last + await expect(wrapper.vm.resolvePublicLinkTask.perform(true)).rejects.toThrow() + + expect(wrapper.find('.oc-link-resolve-error-message').text()).toContain( + 'The resource could not be located, it may not exist anymore.' + ) + }) + }) describe('internal link', () => { it('redirects the user to the login page', async () => { const { wrapper, mocks } = getWrapper({ isInternalLink: true }) @@ -82,8 +108,13 @@ describe('resolvePublicLink', () => { function getWrapper({ passwordRequired = false, - isInternalLink = false -}: { passwordRequired?: boolean; isInternalLink?: boolean } = {}) { + isInternalLink = false, + getFileInfoErrorStatusCode = null +}: { + passwordRequired?: boolean + isInternalLink?: boolean + getFileInfoErrorStatusCode?: number +} = {}) { const $clientService = mockDeep() const spaceResource = mockDeep({ driveType: 'public' }) @@ -98,7 +129,14 @@ function getWrapper({ ) } - $clientService.webdav.getFileInfo.mockResolvedValueOnce(spaceResource) + if (getFileInfoErrorStatusCode) { + $clientService.webdav.getFileInfo.mockRejectedValueOnce( + new DavHttpError('', 'ERR_UNKNOWN' as DavErrorCode, undefined, getFileInfoErrorStatusCode) + ) + } else { + $clientService.webdav.getFileInfo.mockResolvedValueOnce(spaceResource) + } + const mocks = { ...defaultComponentMocks(), $clientService } const capabilities = { From d76422277d9663ee275aa1c28cc19067ec9b0da2 Mon Sep 17 00:00:00 2001 From: Jan Ackermann Date: Sat, 5 Oct 2024 18:04:45 +0200 Subject: [PATCH 4/4] fix type --- packages/web-runtime/tests/unit/pages/resolvePublicLink.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web-runtime/tests/unit/pages/resolvePublicLink.spec.ts b/packages/web-runtime/tests/unit/pages/resolvePublicLink.spec.ts index 501d606888d..6f7eeda12d2 100644 --- a/packages/web-runtime/tests/unit/pages/resolvePublicLink.spec.ts +++ b/packages/web-runtime/tests/unit/pages/resolvePublicLink.spec.ts @@ -5,7 +5,7 @@ import { CapabilityStore, ClientService, useRouteParam, useRouteQuery } from '@o import { DavHttpError, SpaceResource } from '@ownclouders/web-client' import { authService } from '../../../src/services/auth' import { ref } from 'vue' -import { DavErrorCode } from '@ownclouders/web-client/src/webdav' +import { DavErrorCode } from '@ownclouders/web-client/webdav' vi.mock('../../../src/services/auth')