diff options
author | Max <max@nextcloud.com> | 2022-04-21 13:03:13 +0300 |
---|---|---|
committer | Max <max@nextcloud.com> | 2022-06-07 20:41:59 +0300 |
commit | 4f958dee9bcdf3d5db27161833de49d5fd3b711f (patch) | |
tree | 2cde8d8a6d6fb6393cb6797ee882fc54238f8604 | |
parent | 05a9190c5021682e29ececf6305b1683019df647 (diff) |
fix: image rendering via public previews
Public Preview only has one route - it does not make use of the fileId.
Signed-off-by: Max <max@nextcloud.com>
-rw-r--r-- | src/services/ImageResolver.js | 16 | ||||
-rw-r--r-- | src/tests/services/ImageResolver.spec.js | 15 |
2 files changed, 22 insertions, 9 deletions
diff --git a/src/services/ImageResolver.js b/src/services/ImageResolver.js index 9a2874390..eec02ea7c 100644 --- a/src/services/ImageResolver.js +++ b/src/services/ImageResolver.js @@ -106,15 +106,19 @@ export default class ImageResolver { #previewUrl(src) { const imageFileId = getQueryVariable(src, 'fileId') const path = this.#filePath(src) - const fileQuery = (imageFileId) - ? `?fileId=${imageFileId}&file=${encodeURIComponent(path)}` - : `?file=${encodeURIComponent(path)}` + const fileQuery = `file=${encodeURIComponent(path)}` const query = fileQuery + '&x=1024&y=1024&a=true' + if (this.#user && imageFileId) { + return generateUrl(`/core/preview?fileId=${imageFileId}&${query}`) + } if (this.#user) { - return generateUrl('/core/preview') + query - } else { - return generateUrl(`/apps/files_sharing/publicpreview/${this.#shareToken}${query}`) + return generateUrl(`/core/preview.png?${query}`) + } + if (this.#shareToken) { + return generateUrl(`/apps/files_sharing/publicpreview/${this.#shareToken}?${query}`) } + console.error('No way to authenticate image retrival - need to be logged in or provide a token') + return src } #davUrl(src) { diff --git a/src/tests/services/ImageResolver.spec.js b/src/tests/services/ImageResolver.spec.js index 9e02213d0..55837a8f2 100644 --- a/src/tests/services/ImageResolver.spec.js +++ b/src/tests/services/ImageResolver.spec.js @@ -86,11 +86,20 @@ describe('Image resolver', () => { expect(url).toContain('/core/preview?fileId=7') }) - it('uses fileId for public preview', () => { + it('uses .png endpoint if no fileId is given', () => { + const src = '/Media/photo.jpeg?mimetype=image%2Fjpeg&hasPreview=true' + const resolver = new ImageResolver({ user }) + const [url] = resolver.resolve(src) + expect(url).toBe('/nc-webroot/core/preview.png?file=%2FMedia%2Fphoto.jpeg&x=1024&y=1024&a=true') + }) + + it('retrieves public preview by path', () => { const src = '/Media/photo.jpeg?fileId=7#mimetype=image%2Fjpeg&hasPreview=true' - const resolver = new ImageResolver({ shareToken: 'SHARE_TOKEN' }) + const resolver = new ImageResolver({ + shareToken: 'SHARE_TOKEN' + }) const [url] = resolver.resolve(src) - expect(url).toContain('/apps/files_sharing/publicpreview/SHARE_TOKEN?fileId=7') + expect(url).toBe('/nc-webroot/apps/files_sharing/publicpreview/SHARE_TOKEN?file=%2FMedia%2Fphoto.jpeg&x=1024&y=1024&a=true') }) it('handles old .attachments urls via webdav with text API fallback', () => { |