summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2020-03-05 14:56:31 +0100
committerJulius Härtl <jus@bitgrid.net>2020-05-26 11:34:05 +0200
commitf50bf10bec8fc1ccd834c16379ddb502972a2174 (patch)
tree159685b6a0d0ff8c797337c13d0839e36616a17a
parent703fca8ec6290a9b8404b6105ba2b4c525d3ee5f (diff)
downloadnextcloud-server-f50bf10bec8fc1ccd834c16379ddb502972a2174.tar.gz
nextcloud-server-f50bf10bec8fc1ccd834c16379ddb502972a2174.zip
Link shares have reshare permission if outgoing federated shares are enabled
Signed-off-by: Julius Härtl <jus@bitgrid.net>
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php13
-rw-r--r--apps/files_sharing/tests/ApiTest.php7
-rw-r--r--lib/private/Share20/Manager.php5
3 files changed, 13 insertions, 12 deletions
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index 09489861e1c..299744d6dff 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -470,15 +470,18 @@ class ShareAPIController extends OCSController {
throw new OCSNotFoundException($this->l->t('Public upload is only possible for publicly shared folders'));
}
- $share->setPermissions(
- Constants::PERMISSION_READ |
+ $permissions = Constants::PERMISSION_READ |
Constants::PERMISSION_CREATE |
Constants::PERMISSION_UPDATE |
- Constants::PERMISSION_DELETE
- );
+ Constants::PERMISSION_DELETE;
} else {
- $share->setPermissions(Constants::PERMISSION_READ);
+ $permissions = Constants::PERMISSION_READ;
+ }
+ // TODO: It might make sense to have a dedicated setting to allow/deny converting link shares into federated ones
+ if ($this->shareManager->outgoingServer2ServerSharesAllowed()) {
+ $permissions |= Constants::PERMISSION_SHARE;
}
+ $share->setPermissions($permissions);
// Set password
if ($password !== '') {
diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php
index 0616daed62d..22cd32c4876 100644
--- a/apps/files_sharing/tests/ApiTest.php
+++ b/apps/files_sharing/tests/ApiTest.php
@@ -203,7 +203,9 @@ class ApiTest extends TestCase {
$ocs->cleanup();
$data = $result->getData();
- $this->assertEquals(1, $data['permissions']);
+ $this->assertEquals(\OCP\Constants::PERMISSION_READ |
+ \OCP\Constants::PERMISSION_SHARE,
+ $data['permissions']);
$this->assertEmpty($data['expiration']);
$this->assertTrue(is_string($data['token']));
@@ -228,7 +230,8 @@ class ApiTest extends TestCase {
\OCP\Constants::PERMISSION_READ |
\OCP\Constants::PERMISSION_CREATE |
\OCP\Constants::PERMISSION_UPDATE |
- \OCP\Constants::PERMISSION_DELETE,
+ \OCP\Constants::PERMISSION_DELETE |
+ \OCP\Constants::PERMISSION_SHARE,
$data['permissions']
);
$this->assertEmpty($data['expiration']);
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index f13878d71b4..6a6b52f2c80 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -537,11 +537,6 @@ class Manager implements IManager {
throw new \Exception('Link sharing is not allowed');
}
- // Link shares by definition can't have share permissions
- if ($share->getPermissions() & \OCP\Constants::PERMISSION_SHARE) {
- throw new \InvalidArgumentException('Link shares can’t have reshare permissions');
- }
-
// Check if public upload is allowed
if (!$this->shareApiLinkAllowPublicUpload() &&
($share->getPermissions() & (\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE))) {