From b207e28c706ac5e05c9d861892fc98af52cadc00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Mon, 6 Mar 2023 21:58:20 +0100 Subject: [PATCH] fix(references): Mute NoPermissionException as it is expected to happen for references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/Reference/BoardReferenceProvider.php | 8 +++++++- lib/Reference/CardReferenceProvider.php | 13 ++++++++++--- lib/Reference/CommentReferenceProvider.php | 12 +++++++++--- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/lib/Reference/BoardReferenceProvider.php b/lib/Reference/BoardReferenceProvider.php index f0f9abbfb..8443341a3 100644 --- a/lib/Reference/BoardReferenceProvider.php +++ b/lib/Reference/BoardReferenceProvider.php @@ -23,6 +23,7 @@ namespace OCA\Deck\Reference; use OCA\Deck\AppInfo\Application; +use OCA\Deck\NoPermissionException; use OCA\Deck\Service\BoardService; use OCP\Collaboration\Reference\IReference; use OCP\Collaboration\Reference\IReferenceProvider; @@ -67,7 +68,12 @@ public function resolveReference(string $referenceText): ?IReference { if ($this->matchReference($referenceText)) { $boardId = $this->getBoardId($referenceText); if ($boardId !== null) { - $board = $this->boardService->find($boardId)->jsonSerialize(); + try { + $board = $this->boardService->find($boardId)->jsonSerialize(); + } catch (NoPermissionException $e) { + // Skip throwing if user has no permissions + return null; + } $board = $this->sanitizeSerializedBoard($board); /** @var IReference $reference */ $reference = new Reference($referenceText); diff --git a/lib/Reference/CardReferenceProvider.php b/lib/Reference/CardReferenceProvider.php index f0bea2cc0..45e0c0d8c 100644 --- a/lib/Reference/CardReferenceProvider.php +++ b/lib/Reference/CardReferenceProvider.php @@ -27,6 +27,7 @@ use OCA\Deck\Db\Attachment; use OCA\Deck\Db\Label; use OCA\Deck\Model\CardDetails; +use OCA\Deck\NoPermissionException; use OCA\Deck\Service\BoardService; use OCA\Deck\Service\CardService; use OCA\Deck\Service\StackService; @@ -121,9 +122,15 @@ public function resolveReference(string $referenceText): ?IReference { $ids = $this->getBoardCardId($referenceText); if ($ids !== null) { [$boardId, $cardId] = $ids; - $card = $this->cardService->find((int) $cardId)->jsonSerialize(); - $board = $this->boardService->find((int) $boardId)->jsonSerialize(); - $stack = $this->stackService->find((int) $card['stackId'])->jsonSerialize(); + try { + $card = $this->cardService->find((int) $cardId)->jsonSerialize(); + $board = $this->boardService->find((int) $boardId)->jsonSerialize(); + $stack = $this->stackService->find((int) $card['stackId'])->jsonSerialize(); + } catch (NoPermissionException $e) { + // Skip throwing if user has no permissions + return null; + } + $card = $this->sanitizeSerializedCard($card); $board = $this->sanitizeSerializedBoard($board); diff --git a/lib/Reference/CommentReferenceProvider.php b/lib/Reference/CommentReferenceProvider.php index e31323c2e..c45b61bee 100644 --- a/lib/Reference/CommentReferenceProvider.php +++ b/lib/Reference/CommentReferenceProvider.php @@ -27,6 +27,7 @@ use OCA\Deck\Db\Attachment; use OCA\Deck\Db\Label; use OCA\Deck\Model\CardDetails; +use OCA\Deck\NoPermissionException; use OCA\Deck\Service\BoardService; use OCA\Deck\Service\CardService; use OCA\Deck\Service\CommentService; @@ -85,9 +86,14 @@ public function resolveReference(string $referenceText): ?IReference { if ($ids !== null) { [$boardId, $cardId, $commentId] = $ids; - $card = $this->cardService->find($cardId)->jsonSerialize(); - $board = $this->boardService->find($boardId)->jsonSerialize(); - $stack = $this->stackService->find((int) $card['stackId'])->jsonSerialize(); + try { + $card = $this->cardService->find($cardId)->jsonSerialize(); + $board = $this->boardService->find($boardId)->jsonSerialize(); + $stack = $this->stackService->find((int) $card['stackId'])->jsonSerialize(); + } catch (NoPermissionException $e) { + // Skip throwing if user has no permissions + return null; + } $card = $this->sanitizeSerializedCard($card); $board = $this->sanitizeSerializedBoard($board); $stack = $this->sanitizeSerializedStack($stack);