From ffce4fc6a9bd4b6f77b5268e7bc139d994efaac6 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sun, 28 Feb 2016 21:24:23 +0100 Subject: [PATCH 1/2] For now only allow 1 link share per file/folder Fixes #22692 This is a temp fix util we get #22327 We just block it in the OCS Share API since we have 1 endpoint now anyway. --- apps/files_sharing/api/share20ocs.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apps/files_sharing/api/share20ocs.php b/apps/files_sharing/api/share20ocs.php index f5834fb2831..4abd821f2ae 100644 --- a/apps/files_sharing/api/share20ocs.php +++ b/apps/files_sharing/api/share20ocs.php @@ -303,6 +303,15 @@ class Share20OCS { return new \OC_OCS_Result(null, 404, 'public link sharing is disabled by the administrator'); } + /* + * For now we only allow 1 link share. + * Return the existing link share if this is a duplicate + */ + $existingShares = $this->shareManager->getSharesBy($this->currentUser->getUID(), \OCP\Share::SHARE_TYPE_LINK, $path, false, 1, 0); + if (!empty($existingShares)) { + return new \OC_OCS_Result($this->formatShare($existingShares[0])); + } + $publicUpload = $this->request->getParam('publicUpload', null); if ($publicUpload === 'true') { // Check if public upload is allowed From 0dd0adf69f4f507551389b147985f92c9d922d43 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Mon, 29 Feb 2016 14:20:36 +0100 Subject: [PATCH 2/2] Intergration tests --- .../features/bootstrap/Sharing.php | 20 +++++++++++++++++++ build/integration/features/sharing-v1.feature | 12 +++++++++++ 2 files changed, 32 insertions(+) diff --git a/build/integration/features/bootstrap/Sharing.php b/build/integration/features/bootstrap/Sharing.php index faf8e0bf507..2073c840095 100644 --- a/build/integration/features/bootstrap/Sharing.php +++ b/build/integration/features/bootstrap/Sharing.php @@ -17,6 +17,9 @@ trait Sharing{ /** @var SimpleXMLElement */ private $lastShareData = null; + /** @var int */ + private $savedShareId = null; + /** * @When /^creating a share with$/ * @param \Behat\Gherkin\Node\TableNode|null $formData @@ -414,5 +417,22 @@ trait Sharing{ } } + /** + * @When save last share id + */ + public function saveLastShareId() + { + $this->savedShareId = $this->lastShareData['data']['id']; + } + + /** + * @Then share ids should match + */ + public function shareIdsShouldMatch() + { + if ($this->savedShareId !== $this->lastShareData['data']['id']) { + throw new \Excetion('Expected the same link share to be returned'); + } + } } diff --git a/build/integration/features/sharing-v1.feature b/build/integration/features/sharing-v1.feature index 8faffdd2965..00e760ce167 100644 --- a/build/integration/features/sharing-v1.feature +++ b/build/integration/features/sharing-v1.feature @@ -547,3 +547,15 @@ Feature: sharing When Updating last share with | permissions | 31 | Then the OCS status code should be "404" + + Scenario: Only allow 1 link share per file/folder + Given user "user0" exists + And As an "user0" + And creating a share with + | path | welcome.txt | + | shareType | 3 | + When save last share id + And creating a share with + | path | welcome.txt | + | shareType | 3 | + Then share ids should match