Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2017-05-23 14:13:45 +0300
committerGitHub <noreply@github.com>2017-05-23 14:13:45 +0300
commit746c263e44f96115c5879e664a2dd0597c76db10 (patch)
treea704f0a8e590fffd32c64e87ffc7b109e83dfc79 /apps/files_sharing
parent6c01b214a6f9b7d7391be275848b13e7a4bcd09c (diff)
parent1fd6369a600054db8e46517c4efa77826174182c (diff)
Merge pull request #5052 from nextcloud/stable11-downstream-27027
Stable11 downstream 27027
Diffstat (limited to 'apps/files_sharing')
-rw-r--r--apps/files_sharing/lib/SharedStorage.php20
-rw-r--r--apps/files_sharing/tests/SharedStorageTest.php38
2 files changed, 56 insertions, 2 deletions
diff --git a/apps/files_sharing/lib/SharedStorage.php b/apps/files_sharing/lib/SharedStorage.php
index 888cbfda143..ddbc9b8a898 100644
--- a/apps/files_sharing/lib/SharedStorage.php
+++ b/apps/files_sharing/lib/SharedStorage.php
@@ -31,16 +31,16 @@
namespace OCA\Files_Sharing;
-use OC\Files\Filesystem;
use OC\Files\Cache\FailedCache;
+use OC\Files\Filesystem;
use OC\Files\Storage\Wrapper\PermissionsMask;
-use OCA\Files_Sharing\ISharedStorage;
use OC\Files\Storage\FailedStorage;
use OCP\Constants;
use OCP\Files\Cache\ICacheEntry;
use OCP\Files\NotFoundException;
use OCP\Files\Storage\IStorage;
use OCP\Lock\ILockingProvider;
+use OC\User\NoUserException;
/**
* Convert target path to source path and pass the function call to the correct storage provider
@@ -99,6 +99,7 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
private function getSourceRootInfo() {
if (is_null($this->sourceRootInfo)) {
if (is_null($this->superShare->getNodeCacheEntry())) {
+ $this->init();
$this->sourceRootInfo = $this->nonMaskedStorage->getCache()->get($this->rootPath);
} else {
$this->sourceRootInfo = $this->superShare->getNodeCacheEntry();
@@ -121,13 +122,25 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
'mask' => $this->superShare->getPermissions()
]);
} catch (NotFoundException $e) {
+ // original file not accessible or deleted, set FailedStorage
+ $this->storage = new FailedStorage(['exception' => $e]);
+ $this->cache = new FailedCache();
+ $this->rootPath = '';
+ } catch (NoUserException $e) {
+ // sharer user deleted, set FailedStorage
$this->storage = new FailedStorage(['exception' => $e]);
+ $this->cache = new FailedCache();
$this->rootPath = '';
} catch (\Exception $e) {
$this->storage = new FailedStorage(['exception' => $e]);
+ $this->cache = new FailedCache();
$this->rootPath = '';
$this->logger->logException($e);
}
+
+ if (!$this->nonMaskedStorage) {
+ $this->nonMaskedStorage = $this->storage;
+ }
}
/**
@@ -344,6 +357,9 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
if (!$storage) {
$storage = $this;
}
+ if ($this->storage instanceof FailedStorage) {
+ return new FailedCache();
+ }
$this->cache = new \OCA\Files_Sharing\Cache($storage, $this->getSourceRootInfo(), $this->superShare);
return $this->cache;
}
diff --git a/apps/files_sharing/tests/SharedStorageTest.php b/apps/files_sharing/tests/SharedStorageTest.php
index eaa138b0f70..7d007cb6414 100644
--- a/apps/files_sharing/tests/SharedStorageTest.php
+++ b/apps/files_sharing/tests/SharedStorageTest.php
@@ -28,6 +28,11 @@
namespace OCA\Files_Sharing\Tests;
+use OCA\Files_Sharing\SharedStorage;
+use OCP\Share\IShare;
+use OC\Files\View;
+use OCP\Files\NotFoundException;
+
/**
* Class SharedStorageTest
*
@@ -559,4 +564,37 @@ class SharedStorageTest extends TestCase {
$this->shareManager->deleteShare($share);
}
+
+ public function testInitWithNonExistingUser() {
+ $share = $this->createMock(IShare::class);
+ $share->method('getShareOwner')->willReturn('unexist');
+ $ownerView = $this->createMock(View::class);
+ $storage = new SharedStorage([
+ 'ownerView' => $ownerView,
+ 'superShare' => $share,
+ 'groupedShares' => [$share],
+ 'user' => 'user1',
+ ]);
+
+ // trigger init
+ $this->assertInstanceOf(\OC\Files\Storage\FailedStorage::class, $storage->getSourceStorage());
+ $this->assertInstanceOf(\OC\Files\Cache\FailedCache::class, $storage->getCache());
+ }
+
+ public function testInitWithNotFoundSource() {
+ $share = $this->createMock(IShare::class);
+ $share->method('getShareOwner')->willReturn(self::TEST_FILES_SHARING_API_USER1);
+ $ownerView = $this->createMock(View::class);
+ $ownerView->method('getPath')->will($this->throwException(new NotFoundException()));
+ $storage = new SharedStorage([
+ 'ownerView' => $ownerView,
+ 'superShare' => $share,
+ 'groupedShares' => [$share],
+ 'user' => 'user1',
+ ]);
+
+ // trigger init
+ $this->assertInstanceOf(\OC\Files\Storage\FailedStorage::class, $storage->getSourceStorage());
+ $this->assertInstanceOf(\OC\Files\Cache\FailedCache::class, $storage->getCache());
+ }
}