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);