Browse Source

Merge pull request #55151 from nextcloud/feature/share-api-enhanced-logging

refactor(ShareApiController): Add more error handling
fix/imip-set-language-by-user
F. E Noel Nfebe 6 days ago
committed by GitHub
parent
commit
335693e4bb
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 80
      apps/files_sharing/lib/Controller/ShareAPIController.php

80
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();
}
/**

Loading…
Cancel
Save