From a4900d721f466540987f2770b5cf66aa95164c85 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 27 Jan 2016 09:02:12 +0100 Subject: [PATCH] [Share 2.0] Properly handle user deleted group shares If a user deletes a group share we create a special share entry. To the API this is just a normal group share for that user with permissions 0. But we should not return this. --- apps/files_sharing/api/share20ocs.php | 9 ++++++++- lib/private/share20/defaultshareprovider.php | 2 +- tests/lib/share20/defaultshareprovidertest.php | 14 +++++++------- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/apps/files_sharing/api/share20ocs.php b/apps/files_sharing/api/share20ocs.php index c2ff94db79..7ec15f5b25 100644 --- a/apps/files_sharing/api/share20ocs.php +++ b/apps/files_sharing/api/share20ocs.php @@ -335,7 +335,9 @@ class Share20OCS { $formatted = []; foreach ($shares as $share) { - $formatted[] = $this->formatShare($share); + if ($this->canAccessShare($share)) { + $formatted[] = $this->formatShare($share); + } } return new \OC_OCS_Result($formatted); @@ -430,6 +432,11 @@ class Share20OCS { * @return bool */ protected function canAccessShare(IShare $share) { + // A file with permissions 0 can't be accessed by us. So Don't show it + if ($share->getPermissions() === 0) { + return false; + } + // Owner of the file and the sharer of the file can always get share if ($share->getShareOwner() === $this->currentUser || $share->getSharedBy() === $this->currentUser diff --git a/lib/private/share20/defaultshareprovider.php b/lib/private/share20/defaultshareprovider.php index f2072fe21c..8af2a45139 100644 --- a/lib/private/share20/defaultshareprovider.php +++ b/lib/private/share20/defaultshareprovider.php @@ -697,7 +697,7 @@ class DefaultShareProvider implements IShareProvider { $stmt->closeCursor(); if ($data !== false) { - $share->setPermissions($data['permissions']); + $share->setPermissions((int)$data['permissions']); $share->setTarget($data['file_target']); } diff --git a/tests/lib/share20/defaultshareprovidertest.php b/tests/lib/share20/defaultshareprovidertest.php index 8a82be4161..8eff5fa6ca 100644 --- a/tests/lib/share20/defaultshareprovidertest.php +++ b/tests/lib/share20/defaultshareprovidertest.php @@ -943,13 +943,13 @@ class DefaultShareProviderTest extends \Test\TestCase { $this->assertCount(1, $share); $share = $share[0]; - $this->assertEquals($id, $share->getId()); - $this->assertEquals($group, $share->getSharedWith()); - $this->assertEquals($owner, $share->getShareOwner()); - $this->assertEquals($initiator, $share->getSharedBy()); - $this->assertEquals(\OCP\Share::SHARE_TYPE_GROUP, $share->getShareType()); - $this->assertEquals(0, $share->getPermissions()); - $this->assertEquals('userTarget', $share->getTarget()); + $this->assertSame($id, $share->getId()); + $this->assertSame($group, $share->getSharedWith()); + $this->assertSame($owner, $share->getShareOwner()); + $this->assertSame($initiator, $share->getSharedBy()); + $this->assertSame(\OCP\Share::SHARE_TYPE_GROUP, $share->getShareType()); + $this->assertSame(0, $share->getPermissions()); + $this->assertSame('userTarget', $share->getTarget()); } public function testGetSharesBy() {