From 09704097651a40ea4db41bfdc65a1c31573c3352 Mon Sep 17 00:00:00 2001 From: nfebe Date: Tue, 16 Sep 2025 17:46:21 +0100 Subject: [PATCH] refactor(ShareApiController): Streamline share providers & add error logging 1. Consolidated the repetitive provider code into a clean loop 2. Added exception handling to log unexpected errors Signed-off-by: nfebe --- .../lib/Controller/ShareAPIController.php | 80 ++++++------------- 1 file changed, 25 insertions(+), 55 deletions(-) diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index 2ba7d6e0403..8ba50d54d3f 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -1748,66 +1748,36 @@ class ShareAPIController extends OCSController { * @throws ShareNotFound */ private function getShareById(string $id): IShare { - $share = null; - - // First check if it is an internal share. - try { - $share = $this->shareManager->getShareById('ocinternal:' . $id, $this->userId); - return $share; - } catch (ShareNotFound $e) { - // Do nothing, just try the other share type - } - - - try { - if ($this->shareManager->shareProviderExists(IShare::TYPE_CIRCLE)) { - $share = $this->shareManager->getShareById('ocCircleShare:' . $id, $this->userId); - return $share; - } - } catch (ShareNotFound $e) { - // Do nothing, just try the other share type - } - - try { - if ($this->shareManager->shareProviderExists(IShare::TYPE_EMAIL)) { - $share = $this->shareManager->getShareById('ocMailShare:' . $id, $this->userId); - return $share; - } - } catch (ShareNotFound $e) { - // Do nothing, just try the other share type - } - - try { - $share = $this->shareManager->getShareById('ocRoomShare:' . $id, $this->userId); - return $share; - } catch (ShareNotFound $e) { - // Do nothing, just try the other share type - } + $providers = [ + 'ocinternal' => null, // No type check needed + 'ocCircleShare' => IShare::TYPE_CIRCLE, + 'ocMailShare' => IShare::TYPE_EMAIL, + 'ocRoomShare' => null, + 'deck' => IShare::TYPE_DECK, + 'sciencemesh' => IShare::TYPE_SCIENCEMESH, + ]; - try { - if ($this->shareManager->shareProviderExists(IShare::TYPE_DECK)) { - $share = $this->shareManager->getShareById('deck:' . $id, $this->userId); - return $share; - } - } catch (ShareNotFound $e) { - // Do nothing, just try the other share type + // Add federated sharing as a provider only if it's allowed + if ($this->shareManager->outgoingServer2ServerSharesAllowed()) { + $providers['ocFederatedSharing'] = null; // No type check needed } - try { - if ($this->shareManager->shareProviderExists(IShare::TYPE_SCIENCEMESH)) { - $share = $this->shareManager->getShareById('sciencemesh:' . $id, $this->userId); - return $share; + foreach ($providers as $prefix => $type) { + try { + if ($type === null || $this->shareManager->shareProviderExists($type)) { + return $this->shareManager->getShareById($prefix . ':' . $id, $this->userId); + } + } catch (ShareNotFound $e) { + // Do nothing, continue to next provider + } catch (\Exception $e) { + $this->logger->warning('Unexpected error in share provider', [ + 'shareId' => $id, + 'provider' => $prefix, + 'exception' => $e, + ]); } - } catch (ShareNotFound $e) { - // Do nothing, just try the other share type } - - if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) { - throw new ShareNotFound(); - } - $share = $this->shareManager->getShareById('ocFederatedSharing:' . $id, $this->userId); - - return $share; + throw new ShareNotFound(); } /**