Merge pull request #27001 from nextcloud/backport/26946/stable20

[stable20] Respect default share permissions for federated reshares
This commit is contained in:
Morris Jobke 2021-05-18 08:27:07 +02:00 committed by GitHub
commit 247c576533
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 1 deletions

View File

@ -49,6 +49,7 @@ use OCP\Federation\ICloudFederationProviderManager;
use OCP\Federation\ICloudFederationShare; use OCP\Federation\ICloudFederationShare;
use OCP\Federation\ICloudIdManager; use OCP\Federation\ICloudIdManager;
use OCP\Files\NotFoundException; use OCP\Files\NotFoundException;
use OCP\IConfig;
use OCP\IDBConnection; use OCP\IDBConnection;
use OCP\IGroupManager; use OCP\IGroupManager;
use OCP\ILogger; use OCP\ILogger;
@ -105,6 +106,9 @@ class CloudFederationProviderFiles implements ICloudFederationProvider {
/** @var IGroupManager */ /** @var IGroupManager */
private $groupManager; private $groupManager;
/** @var IConfig */
private $config;
/** /**
* CloudFederationProvider constructor. * CloudFederationProvider constructor.
* *
@ -136,7 +140,8 @@ class CloudFederationProviderFiles implements ICloudFederationProvider {
ICloudFederationFactory $cloudFederationFactory, ICloudFederationFactory $cloudFederationFactory,
ICloudFederationProviderManager $cloudFederationProviderManager, ICloudFederationProviderManager $cloudFederationProviderManager,
IDBConnection $connection, IDBConnection $connection,
IGroupManager $groupManager IGroupManager $groupManager,
IConfig $config
) { ) {
$this->appManager = $appManager; $this->appManager = $appManager;
$this->federatedShareProvider = $federatedShareProvider; $this->federatedShareProvider = $federatedShareProvider;
@ -152,6 +157,7 @@ class CloudFederationProviderFiles implements ICloudFederationProvider {
$this->cloudFederationProviderManager = $cloudFederationProviderManager; $this->cloudFederationProviderManager = $cloudFederationProviderManager;
$this->connection = $connection; $this->connection = $connection;
$this->groupManager = $groupManager; $this->groupManager = $groupManager;
$this->config = $config;
} }
@ -641,6 +647,11 @@ class CloudFederationProviderFiles implements ICloudFederationProvider {
$senderId = $notification['senderId']; $senderId = $notification['senderId'];
$share = $this->federatedShareProvider->getShareById($id); $share = $this->federatedShareProvider->getShareById($id);
// We have to respect the default share permissions
$permissions = $share->getPermissions() & (int)$this->config->getAppValue('core', 'shareapi_default_permissions', (string)Constants::PERMISSION_ALL);
$share->setPermissions($permissions);
// don't allow to share a file back to the owner // don't allow to share a file back to the owner
try { try {
list($user, $remote) = $this->addressHandler->splitUserRemote($shareWith); list($user, $remote) = $this->addressHandler->splitUserRemote($shareWith);