aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/Share20/Manager.php9
-rw-r--r--tests/lib/Share20/ManagerTest.php33
2 files changed, 38 insertions, 4 deletions
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index da90b2183ae..6348292088a 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -1488,6 +1488,15 @@ class Manager implements IManager {
$this->deleteShare($share);
throw new ShareNotFound($this->l->t('The requested share does not exist anymore'));
}
+
+ try {
+ $share->getNode();
+ // Ignore share, file is still accessible
+ } catch (NotFoundException) {
+ // Access lost, but maybe only temporarily, so don't delete the share right away
+ throw new ShareNotFound($this->l->t('The requested share does not exist anymore'));
+ }
+
if ($this->config->getAppValue('files_sharing', 'hide_disabled_user_shares', 'no') === 'yes') {
$uids = array_unique([$share->getShareOwner(),$share->getSharedBy()]);
foreach ($uids as $uid) {
diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php
index 5a0ca230186..79a88f9af9e 100644
--- a/tests/lib/Share20/ManagerTest.php
+++ b/tests/lib/Share20/ManagerTest.php
@@ -25,6 +25,7 @@ use OCP\Files\Mount\IMountManager;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\Mount\IShareOwnerlessMount;
use OCP\Files\Node;
+use OCP\Files\NotFoundException;
use OCP\Files\Storage\IStorage;
use OCP\HintException;
use OCP\IConfig;
@@ -667,6 +668,24 @@ class ManagerTest extends \Test\TestCase {
}
+ public function testGetShareByIdNodeAccessible(): void {
+ $share = $this->createMock(IShare::class);
+ $share
+ ->expects($this->once())
+ ->method('getNode')
+ ->willThrowException(new NotFoundException());
+
+ $this->defaultProvider
+ ->expects($this->once())
+ ->method('getShareById')
+ ->with(42)
+ ->willReturn($share);
+
+ $this->expectException(ShareNotFound::class);
+ $this->manager->getShareById('default:42');
+ }
+
+
public function testGetExpiredShareById(): void {
$this->expectException(\OCP\Share\Exceptions\ShareNotFound::class);
@@ -2875,10 +2894,11 @@ class ManagerTest extends \Test\TestCase {
}
public function testGetSharesBy(): void {
- $share = $this->manager->newShare();
-
$node = $this->createMock(Folder::class);
+ $share = $this->manager->newShare();
+ $share->setNode($node);
+
$this->defaultProvider->expects($this->once())
->method('getSharesBy')
->with(
@@ -2930,6 +2950,8 @@ class ManagerTest extends \Test\TestCase {
* deleted (as they are evaluated). but share 8 should still be there.
*/
public function testGetSharesByExpiredLinkShares(): void {
+ $node = $this->createMock(File::class);
+
$manager = $this->createManagerMock()
->setMethods(['deleteShare'])
->getMock();
@@ -2943,6 +2965,7 @@ class ManagerTest extends \Test\TestCase {
for ($i = 0; $i < 8; $i++) {
$share = $this->manager->newShare();
$share->setId($i);
+ $share->setNode($node);
$shares[] = $share;
}
@@ -2963,8 +2986,6 @@ class ManagerTest extends \Test\TestCase {
$shares2[] = clone $shares[$i];
}
- $node = $this->createMock(File::class);
-
/*
* Simulate the getSharesBy call.
*/
@@ -3126,8 +3147,10 @@ class ManagerTest extends \Test\TestCase {
$date = new \DateTime();
$date->setTime(0, 0, 0);
$date->add(new \DateInterval('P2D'));
+ $node = $this->createMock(File::class);
$share = $this->manager->newShare();
$share->setExpirationDate($date);
+ $share->setNode($node);
$share->setShareOwner('owner');
$share->setSharedBy('sharedBy');
@@ -3205,8 +3228,10 @@ class ManagerTest extends \Test\TestCase {
$date = new \DateTime();
$date->setTime(0, 0, 0);
$date->add(new \DateInterval('P2D'));
+ $node = $this->createMock(Folder::class);
$share = $this->manager->newShare();
$share->setExpirationDate($date);
+ $share->setNode($node);
$this->defaultProvider->expects($this->once())
->method('getShareByToken')