diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index 208ea79c2aef2c54157f436d8ce58538d4fa8045..1dac86a95142320e6d8b78a293f2e7f352ba24c6 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -759,15 +759,18 @@ class ShareAPIController extends OCSController { $shares = $this->getSharesFromNode($viewer, $node, $reShares); - $formatted = $miniFormatted = []; + $known = $formatted = $miniFormatted = []; $resharingRight = false; foreach ($shares as $share) { + if (in_array($share->getId(), $known) || $share->getSharedWith() === $this->currentUser) { + continue; + } + + $known[] = $share->getId(); try { /** @var IShare $share */ $format = $this->formatShare($share, $node); - if ($share->getSharedWith() !== $this->currentUser) { - $formatted[] = $format; - } + $formatted[] = $format; // let's also build a list of shares created // by the current user only, in case diff --git a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php index ae7fc54599cfaed1dbf428271b16cf0a7030f75f..90238d64274acc3e1ad901b03ff4e4861deed7bb 100644 --- a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php @@ -106,6 +106,9 @@ class ShareAPIControllerTest extends TestCase { ->expects($this->any()) ->method('shareApiEnabled') ->willReturn(true); + $this->shareManager + ->expects($this->any()) + ->method('shareProviderExists')->willReturn(true); $this->groupManager = $this->createMock(IGroupManager::class); $this->userManager = $this->createMock(IUserManager::class); $this->request = $this->createMock(IRequest::class); @@ -170,10 +173,10 @@ class ShareAPIControllerTest extends TestCase { $this->expectExceptionMessage('Wrong share ID, share doesn\'t exist'); $this->shareManager - ->expects($this->exactly(3)) + ->expects($this->exactly(5)) ->method('getShareById') ->will($this->returnCallback(function($id) { - if ($id === 'ocinternal:42' || $id === 'ocRoomShare:42' || $id === 'ocFederatedSharing:42') { + if ($id === 'ocinternal:42' || $id === 'ocRoomShare:42' || $id === 'ocFederatedSharing:42' || $id === 'ocCircleShare:42' || $id === 'ocMailShare:42') { throw new \OCP\Share\Exceptions\ShareNotFound(); } else { throw new \Exception(); @@ -1008,9 +1011,7 @@ class ShareAPIControllerTest extends TestCase { [ ], [ - $file1UserShareOwnerExpected, - $file1UserShareOwnerExpected, - $file1UserShareOwnerExpected, + $file1UserShareOwnerExpected ] ], [