From 066e3977f53dfc4e63ffc72dd4bbac3630d3a6d8 Mon Sep 17 00:00:00 2001 From: skjnldsv Date: Wed, 9 Apr 2025 16:12:18 +0200 Subject: [PATCH] fix(files_sharing): fix share creation error handling Signed-off-by: skjnldsv --- .../lib/Controller/ShareAPIController.php | 4 ++++ apps/files_sharing/src/mixins/ShareRequests.js | 6 ++++-- apps/files_sharing/src/views/SharingDetailsTab.vue | 14 ++++++++++++-- tests/lib/Share20/ManagerTest.php | 2 +- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index b630bd602ce..94d1917cc42 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -81,6 +81,7 @@ use OCP\IUserManager; use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; use OCP\Server; +use OCP\Share\Exceptions\GenericShareException; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IManager; use OCP\Share\IShare; @@ -804,6 +805,9 @@ class ShareAPIController extends OCSController { } catch (HintException $e) { $code = $e->getCode() === 0 ? 403 : $e->getCode(); throw new OCSException($e->getHint(), $code); + } catch (GenericShareException|\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + throw new OCSForbiddenException($e->getMessage(), $e); } catch (\Exception $e) { $this->logger->error($e->getMessage(), ['exception' => $e]); throw new OCSForbiddenException('Failed to create share.', $e); diff --git a/apps/files_sharing/src/mixins/ShareRequests.js b/apps/files_sharing/src/mixins/ShareRequests.js index 5f301108f6f..b765ee115b9 100644 --- a/apps/files_sharing/src/mixins/ShareRequests.js +++ b/apps/files_sharing/src/mixins/ShareRequests.js @@ -26,10 +26,12 @@ // TODO: remove when ie not supported import 'url-search-params-polyfill' +import { emit } from '@nextcloud/event-bus' +import { showError } from '@nextcloud/dialogs' import { generateOcsUrl } from '@nextcloud/router' import axios from '@nextcloud/axios' + import Share from '../models/Share.js' -import { emit } from '@nextcloud/event-bus' const shareUrl = generateOcsUrl('apps/files_sharing/api/v1/shares') @@ -65,7 +67,7 @@ export default { } catch (error) { console.error('Error while creating share', error) const errorMessage = error?.response?.data?.ocs?.meta?.message - OC.Notification.showTemporary( + showError( errorMessage ? t('files_sharing', 'Error creating the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error creating the share'), { type: 'error' }, ) diff --git a/apps/files_sharing/src/views/SharingDetailsTab.vue b/apps/files_sharing/src/views/SharingDetailsTab.vue index 3169babeab1..83d8dae8fb2 100644 --- a/apps/files_sharing/src/views/SharingDetailsTab.vue +++ b/apps/files_sharing/src/views/SharingDetailsTab.vue @@ -230,6 +230,7 @@ {{ shareButtonText }}