Skip to content

Commit 781bd8c

Browse files
committed
fix: Exclude non accepted shares when computing access list
Signed-off-by: Louis Chemineau <louis@chmn.me>
1 parent c1b3f6a commit 781bd8c

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

lib/private/Share20/DefaultShareProvider.php

+12
Original file line numberDiff line numberDiff line change
@@ -1343,6 +1343,18 @@ public function getAccessList($nodes, $currentAccess) {
13431343
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
13441344
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
13451345
));
1346+
1347+
// Ensure accepted is true for user and usergroup type
1348+
$qb->andWhere(
1349+
$qb->expr()->orX(
1350+
$qb->expr()->andX(
1351+
$qb->expr()->neq('share_type', $qb->createNamedParameter(IShare::TYPE_USER)),
1352+
$qb->expr()->neq('share_type', $qb->createNamedParameter(IShare::TYPE_USERGROUP)),
1353+
),
1354+
$qb->expr()->eq('accepted', $qb->createNamedParameter(IShare::STATUS_ACCEPTED, IQueryBuilder::PARAM_INT)),
1355+
),
1356+
);
1357+
13461358
$cursor = $qb->executeQuery();
13471359

13481360
$users = [];

tests/lib/Share20/DefaultShareProviderTest.php

+9
Original file line numberDiff line numberDiff line change
@@ -2702,6 +2702,7 @@ public function testGetAccessListNoCurrentAccessRequired(): void {
27022702
->setShareType(IShare::TYPE_USER)
27032703
->setPermissions(\OCP\Constants::PERMISSION_ALL);
27042704
$share1 = $this->provider->create($share1);
2705+
$share1 = $provider->acceptShare($share1, $u2->getUid());
27052706

27062707
$share2 = $shareManager->newShare();
27072708
$share2->setNode($folder2)
@@ -2714,6 +2715,9 @@ public function testGetAccessListNoCurrentAccessRequired(): void {
27142715

27152716
$shareManager->deleteFromSelf($share2, $u4->getUID());
27162717

2718+
$share2 = $provider->acceptShare($share2, $u3->getUid());
2719+
$share2 = $provider->acceptShare($share2, $u4->getUid());
2720+
27172721
$share3 = $shareManager->newShare();
27182722
$share3->setNode($file1)
27192723
->setSharedBy($u3->getUID())
@@ -2730,6 +2734,7 @@ public function testGetAccessListNoCurrentAccessRequired(): void {
27302734
->setShareType(IShare::TYPE_USER)
27312735
->setPermissions(\OCP\Constants::PERMISSION_READ);
27322736
$share4 = $this->provider->create($share4);
2737+
$share4 = $provider->acceptShare($share4, $u5->getUid());
27332738

27342739
$result = $provider->getAccessList([$folder1, $folder2, $file1], false);
27352740

@@ -2800,6 +2805,7 @@ public function testGetAccessListCurrentAccessRequired(): void {
28002805
->setShareType(IShare::TYPE_USER)
28012806
->setPermissions(\OCP\Constants::PERMISSION_ALL);
28022807
$share1 = $this->provider->create($share1);
2808+
$share1 = $provider->acceptShare($share1, $u2->getUid());
28032809

28042810
$share2 = $shareManager->newShare();
28052811
$share2->setNode($folder2)
@@ -2809,6 +2815,8 @@ public function testGetAccessListCurrentAccessRequired(): void {
28092815
->setShareType(IShare::TYPE_GROUP)
28102816
->setPermissions(\OCP\Constants::PERMISSION_ALL);
28112817
$share2 = $this->provider->create($share2);
2818+
$share2 = $provider->acceptShare($share2, $u3->getUid());
2819+
$share2 = $provider->acceptShare($share2, $u4->getUid());
28122820

28132821
$shareManager->deleteFromSelf($share2, $u4->getUID());
28142822

@@ -2828,6 +2836,7 @@ public function testGetAccessListCurrentAccessRequired(): void {
28282836
->setShareType(IShare::TYPE_USER)
28292837
->setPermissions(\OCP\Constants::PERMISSION_READ);
28302838
$share4 = $this->provider->create($share4);
2839+
$share4 = $provider->acceptShare($share4, $u5->getUid());
28312840

28322841
$result = $provider->getAccessList([$folder1, $folder2, $file1], true);
28332842

0 commit comments

Comments
 (0)