diff options
author | F. E Noel Nfebe <fenn25.fn@gmail.com> | 2024-09-23 12:58:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-23 12:58:11 +0100 |
commit | e939fd70244477c3dc81ff29a469c97c3c1b720b (patch) | |
tree | 704a5491cc4e5fc8dadafbf3c81097d25765edca /apps | |
parent | 81216ed24955e9adf01d341368e198336f3e2438 (diff) | |
parent | 339ca15f144c5ab8effaf7e7e955c789da516a92 (diff) | |
download | nextcloud-server-e939fd70244477c3dc81ff29a469c97c3c1b720b.tar.gz nextcloud-server-e939fd70244477c3dc81ff29a469c97c3c1b720b.zip |
Merge pull request #48227 from nextcloud/backport/47441/stable29
[stable29] fix(FileList): Show correct avatar for federated share owner
Diffstat (limited to 'apps')
-rw-r--r-- | apps/dav/lib/Connector/Sabre/FilesPlugin.php | 7 | ||||
-rw-r--r-- | apps/files/src/init.ts | 1 | ||||
-rw-r--r-- | apps/files_sharing/src/actions/sharingStatusAction.ts | 19 | ||||
-rw-r--r-- | apps/files_sharing/src/utils/AccountIcon.ts | 18 |
4 files changed, 30 insertions, 15 deletions
diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index 7c9c7099878..a0667f3bd72 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -81,6 +81,7 @@ class FilesPlugin extends ServerPlugin { public const MOUNT_TYPE_PROPERTYNAME = '{http://nextcloud.org/ns}mount-type'; public const MOUNT_ROOT_PROPERTYNAME = '{http://nextcloud.org/ns}is-mount-root'; public const IS_ENCRYPTED_PROPERTYNAME = '{http://nextcloud.org/ns}is-encrypted'; + public const IS_FEDERATED_PROPERTYNAME = '{http://nextcloud.org/ns}is-federated'; public const METADATA_ETAG_PROPERTYNAME = '{http://nextcloud.org/ns}metadata_etag'; public const UPLOAD_TIME_PROPERTYNAME = '{http://nextcloud.org/ns}upload_time'; public const CREATION_TIME_PROPERTYNAME = '{http://nextcloud.org/ns}creation_time'; @@ -149,6 +150,7 @@ class FilesPlugin extends ServerPlugin { $server->protectedProperties[] = self::HAS_PREVIEW_PROPERTYNAME; $server->protectedProperties[] = self::MOUNT_TYPE_PROPERTYNAME; $server->protectedProperties[] = self::IS_ENCRYPTED_PROPERTYNAME; + $server->protectedProperties[] = self::IS_FEDERATED_PROPERTYNAME; $server->protectedProperties[] = self::SHARE_NOTE; // normally these cannot be changed (RFC4918), but we want them modifiable through PROPPATCH @@ -413,6 +415,11 @@ class FilesPlugin extends ServerPlugin { $propFind->handle(self::DISPLAYNAME_PROPERTYNAME, function () use ($node) { return $node->getName(); }); + + $propFind->handle(self::IS_FEDERATED_PROPERTYNAME, function () use ($node) { + return $node->getFileInfo()->getMountPoint() + instanceof \OCA\Files_Sharing\External\Mount; + }); } if ($node instanceof \OCA\DAV\Connector\Sabre\File) { diff --git a/apps/files/src/init.ts b/apps/files/src/init.ts index a9af6a8c65f..f3672e3f26f 100644 --- a/apps/files/src/init.ts +++ b/apps/files/src/init.ts @@ -72,5 +72,6 @@ registerPreviewServiceWorker() registerDavProperty('nc:hidden', { nc: 'http://nextcloud.org/ns' }) registerDavProperty('nc:is-mount-root', { nc: 'http://nextcloud.org/ns' }) +registerDavProperty('nc:is-federated', { nc: 'http://nextcloud.org/ns' }) initLivePhotos() diff --git a/apps/files_sharing/src/actions/sharingStatusAction.ts b/apps/files_sharing/src/actions/sharingStatusAction.ts index 4f9648fa27f..8dd1b403304 100644 --- a/apps/files_sharing/src/actions/sharingStatusAction.ts +++ b/apps/files_sharing/src/actions/sharingStatusAction.ts @@ -29,25 +29,13 @@ import LinkSvg from '@mdi/svg/svg/link.svg?raw' import CircleSvg from '../../../../core/img/apps/circles.svg?raw' import { action as sidebarAction } from '../../../files/src/actions/sidebarAction' -import { generateUrl } from '@nextcloud/router' import { getCurrentUser } from '@nextcloud/auth' +import { generateAvatarSvg } from '../utils/AccountIcon.ts' import './sharingStatusAction.scss' -const isDarkMode = window?.matchMedia?.('(prefers-color-scheme: dark)')?.matches === true - || document.querySelector('[data-themes*=dark]') !== null - -const generateAvatarSvg = (userId: string, isGuest = false) => { - const url = isDarkMode ? '/avatar/{userId}/32/dark' : '/avatar/{userId}/32' - const avatarUrl = generateUrl(isGuest ? url : url + '?guestFallback=true', { userId }) - return `<svg width="32" height="32" viewBox="0 0 32 32" - xmlns="http://www.w3.org/2000/svg" class="sharing-status__avatar"> - <image href="${avatarUrl}" height="32" width="32" /> - </svg>` -} - const isExternal = (node: Node) => { - return node.attributes.remote_id !== undefined + return node.attributes?.['is-federated'] ?? false } export const action = new FileAction({ @@ -110,7 +98,8 @@ export const action = new FileAction({ const ownerId = node?.attributes?.['owner-id'] if (ownerId && (ownerId !== getCurrentUser()?.uid || isExternal(node))) { - return generateAvatarSvg(ownerId, isExternal(node)) + const sanitizeId = (id: string) => id.replace(/[^a-zA-Z0-9._%+@-]+/g, '').replace(/\//g, '') + return generateAvatarSvg(sanitizeId(ownerId), isExternal(node)) } return AccountPlusSvg diff --git a/apps/files_sharing/src/utils/AccountIcon.ts b/apps/files_sharing/src/utils/AccountIcon.ts new file mode 100644 index 00000000000..ccae8d50c82 --- /dev/null +++ b/apps/files_sharing/src/utils/AccountIcon.ts @@ -0,0 +1,18 @@ +/*! + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +import { generateUrl } from '@nextcloud/router' + +const isDarkMode = window?.matchMedia?.('(prefers-color-scheme: dark)')?.matches === true + || document.querySelector('[data-themes*=dark]') !== null + +export const generateAvatarSvg = (userId: string, isExternalUser = false) => { + console.log('User ID:', userId) + const url = isDarkMode ? '/avatar/{userId}/32/dark' : '/avatar/{userId}/32' + const avatarUrl = generateUrl(isExternalUser ? url + '?guestFallback=true' : url, { userId }) + return `<svg width="32" height="32" viewBox="0 0 32 32" + xmlns="http://www.w3.org/2000/svg" class="sharing-status__avatar"> + <image href="${avatarUrl}" height="32" width="32" /> + </svg>` +} |