Skip to content

Commit 01823b5

Browse files
Merge pull request #55488 from nextcloud/backport/55151/stable31
2 parents 5672f33 + b4b9b7d commit 01823b5

File tree

1 file changed

+25
-55
lines changed

1 file changed

+25
-55
lines changed

apps/files_sharing/lib/Controller/ShareAPIController.php

Lines changed: 25 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1745,66 +1745,36 @@ private function parseDate(string $expireDate): \DateTime {
17451745
* @throws ShareNotFound
17461746
*/
17471747
private function getShareById(string $id): IShare {
1748-
$share = null;
1749-
1750-
// First check if it is an internal share.
1751-
try {
1752-
$share = $this->shareManager->getShareById('ocinternal:' . $id, $this->userId);
1753-
return $share;
1754-
} catch (ShareNotFound $e) {
1755-
// Do nothing, just try the other share type
1756-
}
1757-
1758-
1759-
try {
1760-
if ($this->shareManager->shareProviderExists(IShare::TYPE_CIRCLE)) {
1761-
$share = $this->shareManager->getShareById('ocCircleShare:' . $id, $this->userId);
1762-
return $share;
1763-
}
1764-
} catch (ShareNotFound $e) {
1765-
// Do nothing, just try the other share type
1766-
}
1767-
1768-
try {
1769-
if ($this->shareManager->shareProviderExists(IShare::TYPE_EMAIL)) {
1770-
$share = $this->shareManager->getShareById('ocMailShare:' . $id, $this->userId);
1771-
return $share;
1772-
}
1773-
} catch (ShareNotFound $e) {
1774-
// Do nothing, just try the other share type
1775-
}
1776-
1777-
try {
1778-
$share = $this->shareManager->getShareById('ocRoomShare:' . $id, $this->userId);
1779-
return $share;
1780-
} catch (ShareNotFound $e) {
1781-
// Do nothing, just try the other share type
1782-
}
1748+
$providers = [
1749+
'ocinternal' => null, // No type check needed
1750+
'ocCircleShare' => IShare::TYPE_CIRCLE,
1751+
'ocMailShare' => IShare::TYPE_EMAIL,
1752+
'ocRoomShare' => null,
1753+
'deck' => IShare::TYPE_DECK,
1754+
'sciencemesh' => IShare::TYPE_SCIENCEMESH,
1755+
];
17831756

1784-
try {
1785-
if ($this->shareManager->shareProviderExists(IShare::TYPE_DECK)) {
1786-
$share = $this->shareManager->getShareById('deck:' . $id, $this->userId);
1787-
return $share;
1788-
}
1789-
} catch (ShareNotFound $e) {
1790-
// Do nothing, just try the other share type
1757+
// Add federated sharing as a provider only if it's allowed
1758+
if ($this->shareManager->outgoingServer2ServerSharesAllowed()) {
1759+
$providers['ocFederatedSharing'] = null; // No type check needed
17911760
}
17921761

1793-
try {
1794-
if ($this->shareManager->shareProviderExists(IShare::TYPE_SCIENCEMESH)) {
1795-
$share = $this->shareManager->getShareById('sciencemesh:' . $id, $this->userId);
1796-
return $share;
1762+
foreach ($providers as $prefix => $type) {
1763+
try {
1764+
if ($type === null || $this->shareManager->shareProviderExists($type)) {
1765+
return $this->shareManager->getShareById($prefix . ':' . $id, $this->userId);
1766+
}
1767+
} catch (ShareNotFound $e) {
1768+
// Do nothing, continue to next provider
1769+
} catch (\Exception $e) {
1770+
$this->logger->warning('Unexpected error in share provider', [
1771+
'shareId' => $id,
1772+
'provider' => $prefix,
1773+
'exception' => $e,
1774+
]);
17971775
}
1798-
} catch (ShareNotFound $e) {
1799-
// Do nothing, just try the other share type
18001776
}
1801-
1802-
if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) {
1803-
throw new ShareNotFound();
1804-
}
1805-
$share = $this->shareManager->getShareById('ocFederatedSharing:' . $id, $this->userId);
1806-
1807-
return $share;
1777+
throw new ShareNotFound();
18081778
}
18091779

18101780
/**

0 commit comments

Comments
 (0)