diff options
author | Joas Schilling <coding@schilljs.com> | 2025-04-24 12:08:57 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2025-04-24 13:03:14 +0200 |
commit | 4fc5eaeff0c7ecc03a3ae407b9bda74a30d427fc (patch) | |
tree | 88ead75cf155fbe1ad7458b5a892e5596a268ed2 | |
parent | 94538c11c7cdd059ad03b52d5db28d53b6e1a842 (diff) | |
download | nextcloud-server-4fc5eaeff0c7ecc03a3ae407b9bda74a30d427fc.tar.gz nextcloud-server-4fc5eaeff0c7ecc03a3ae407b9bda74a30d427fc.zip |
fix(federation): Allow federation file sharing when federation app is disabledbugfix/49973/allow-federated-filesharing-without-federation-app
The app id might be misleading, the federation app is for syncing addressbooks
with trusted servers. It is not always enabled and show not have to be.
Signed-off-by: Joas Schilling <coding@schilljs.com>
3 files changed, 17 insertions, 4 deletions
diff --git a/apps/cloud_federation_api/lib/Config.php b/apps/cloud_federation_api/lib/Config.php index cb3f4a2ae76..f7c14a75c37 100644 --- a/apps/cloud_federation_api/lib/Config.php +++ b/apps/cloud_federation_api/lib/Config.php @@ -6,6 +6,7 @@ namespace OCA\CloudFederationAPI; use OCP\Federation\ICloudFederationProviderManager; +use Psr\Log\LoggerInterface; /** * Class config @@ -18,6 +19,7 @@ class Config { public function __construct( private ICloudFederationProviderManager $cloudFederationProviderManager, + private LoggerInterface $logger, ) { } @@ -32,6 +34,7 @@ class Config { $provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType); return $provider->getSupportedShareTypes(); } catch (\Exception $e) { + $this->logger->error('Failed to create federation provider', ['exception' => $e]); return []; } } diff --git a/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php b/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php index 86af7924e6f..cbd66f52382 100644 --- a/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php +++ b/apps/cloud_federation_api/lib/Controller/RequestHandlerController.php @@ -452,7 +452,7 @@ class RequestHandlerController extends Controller { */ private function getHostFromFederationId(string $entry): string { if (!str_contains($entry, '@')) { - throw new IncomingRequestException('entry ' . $entry . ' does not contains @'); + throw new IncomingRequestException('entry ' . $entry . ' does not contain @'); } $rightPart = substr($entry, strrpos($entry, '@') + 1); diff --git a/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php b/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php index 585fb8e1d97..836b6610199 100644 --- a/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php +++ b/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php @@ -67,7 +67,6 @@ class CloudFederationProviderFiles implements ISignedCloudFederationProvider { private LoggerInterface $logger, private IFilenameValidator $filenameValidator, private readonly IProviderFactory $shareProviderFactory, - private TrustedServers $trustedServers, ) { } @@ -156,6 +155,17 @@ class CloudFederationProviderFiles implements ISignedCloudFederationProvider { // get DisplayName about the owner of the share $ownerDisplayName = $this->getUserDisplayName($ownerFederatedId); + $trustedServers = null; + if ($this->appManager->isEnabledForAnyone('federation') + && class_exists(TrustedServers::class)) { + try { + $trustedServers = Server::get(TrustedServers::class); + } catch (\Throwable $e) { + $this->logger->debug('Failed to create TrustedServers', ['exception' => $e]); + } + } + + if ($shareType === IShare::TYPE_USER) { $event = $this->activityManager->generateEvent(); $event->setApp('files_sharing') @@ -167,7 +177,7 @@ class CloudFederationProviderFiles implements ISignedCloudFederationProvider { $this->notifyAboutNewShare($shareWith, $shareId, $ownerFederatedId, $sharedByFederatedId, $name, $ownerDisplayName); // If auto-accept is enabled, accept the share - if ($this->federatedShareProvider->isFederatedTrustedShareAutoAccept() && $this->trustedServers->isTrustedServer($remote)) { + if ($this->federatedShareProvider->isFederatedTrustedShareAutoAccept() && $trustedServers?->isTrustedServer($remote) === true) { $this->externalShareManager->acceptShare($shareId, $shareWith); } } else { @@ -183,7 +193,7 @@ class CloudFederationProviderFiles implements ISignedCloudFederationProvider { $this->notifyAboutNewShare($user->getUID(), $shareId, $ownerFederatedId, $sharedByFederatedId, $name, $ownerDisplayName); // If auto-accept is enabled, accept the share - if ($this->federatedShareProvider->isFederatedTrustedShareAutoAccept() && $this->trustedServers->isTrustedServer($remote)) { + if ($this->federatedShareProvider->isFederatedTrustedShareAutoAccept() && $trustedServers?->isTrustedServer($remote) === true) { $this->externalShareManager->acceptShare($shareId, $user->getUID()); } } |