Merge pull request #23039 from owncloud/invalid-share-storage

dont break when there is an invalid share
This commit is contained in:
Thomas Müller 2016-03-15 12:15:05 +01:00
commit 0f6ea9fd29
4 changed files with 36 additions and 11 deletions

View file

@ -34,7 +34,7 @@ use OCP\IUser;
use OCA\Files_external\Service\UserStoragesService; use OCA\Files_external\Service\UserStoragesService;
use OCA\Files_External\Service\UserGlobalStoragesService; use OCA\Files_External\Service\UserGlobalStoragesService;
use OCA\Files_External\Lib\StorageConfig; use OCA\Files_External\Lib\StorageConfig;
use OCA\Files_External\Lib\FailedStorage; use OC\Files\Storage\FailedStorage;
use OCP\Files\StorageNotAvailableException; use OCP\Files\StorageNotAvailableException;
/** /**

View file

@ -31,6 +31,7 @@
namespace OC\Files\Storage; namespace OC\Files\Storage;
use OC\Files\Filesystem; use OC\Files\Filesystem;
use OC\Files\Cache\FailedCache;
use OCA\Files_Sharing\ISharedStorage; use OCA\Files_Sharing\ISharedStorage;
use OCP\Constants; use OCP\Constants;
use OCP\Files\Cache\ICacheEntry; use OCP\Files\Cache\ICacheEntry;
@ -67,10 +68,16 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
*/ */
private $sourceStorage; private $sourceStorage;
/**
* @var \OCP\ILogger
*/
private $logger;
public function __construct($arguments) { public function __construct($arguments) {
$this->share = $arguments['share']; $this->share = $arguments['share'];
$this->ownerView = $arguments['ownerView']; $this->ownerView = $arguments['ownerView'];
$this->user = $arguments['user']; $this->user = $arguments['user'];
$this->logger = \OC::$server->getLogger();
} }
private function init() { private function init() {
@ -78,15 +85,19 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
return; return;
} }
$this->initialized = true; $this->initialized = true;
try {
Filesystem::initMountPoints($this->share['uid_owner']); Filesystem::initMountPoints($this->share['uid_owner']);
$sourcePath = $this->ownerView->getPath($this->share['file_source']); $sourcePath = $this->ownerView->getPath($this->share['file_source']);
list($this->sourceStorage, $sourceInternalPath) = $this->ownerView->resolvePath($sourcePath); list($this->sourceStorage, $sourceInternalPath) = $this->ownerView->resolvePath($sourcePath);
$this->sourceRootInfo = $this->sourceStorage->getCache()->get($sourceInternalPath); $this->sourceRootInfo = $this->sourceStorage->getCache()->get($sourceInternalPath);
} catch (\Exception $e) {
$this->logger->logException($e);
}
} }
private function isValid() { private function isValid() {
$this->init(); $this->init();
return ($this->sourceRootInfo->getPermissions() & Constants::PERMISSION_SHARE) === Constants::PERMISSION_SHARE; return $this->sourceRootInfo && ($this->sourceRootInfo->getPermissions() & Constants::PERMISSION_SHARE) === Constants::PERMISSION_SHARE;
} }
/** /**
@ -568,6 +579,9 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage {
public function getCache($path = '', $storage = null) { public function getCache($path = '', $storage = null) {
$this->init(); $this->init();
if (is_null($this->sourceStorage)) {
return new FailedCache(false);
}
if (!$storage) { if (!$storage) {
$storage = $this; $storage = $this;
} }

View file

@ -19,9 +19,8 @@
* *
*/ */
namespace OCA\Files_External\Lib; namespace OC\Files\Cache;
use OC\Files\Cache\CacheEntry;
use OCP\Constants; use OCP\Constants;
use OCP\Files\Cache\ICache; use OCP\Files\Cache\ICache;
@ -29,6 +28,18 @@ use OCP\Files\Cache\ICache;
* Storage placeholder to represent a missing precondition, storage unavailable * Storage placeholder to represent a missing precondition, storage unavailable
*/ */
class FailedCache implements ICache { class FailedCache implements ICache {
/** @var bool whether to show the failed storage in the ui */
private $visible;
/**
* FailedCache constructor.
*
* @param bool $visible
*/
public function __construct($visible = true) {
$this->visible = $visible;
}
public function getNumericStorageId() { public function getNumericStorageId() {
return -1; return -1;
@ -41,7 +52,7 @@ class FailedCache implements ICache {
'size' => 0, 'size' => 0,
'mimetype' => 'httpd/unix-directory', 'mimetype' => 'httpd/unix-directory',
'mimepart' => 'httpd', 'mimepart' => 'httpd',
'permissions' => Constants::PERMISSION_READ, 'permissions' => $this->visible ? Constants::PERMISSION_READ : 0,
'mtime' => time() 'mtime' => time()
]); ]);
} else { } else {

View file

@ -20,10 +20,10 @@
* *
*/ */
namespace OCA\Files_External\Lib; namespace OC\Files\Storage;
use OC\Files\Cache\FailedCache;
use \OCP\Lock\ILockingProvider; use \OCP\Lock\ILockingProvider;
use \OC\Files\Storage\Common;
use \OCP\Files\StorageNotAvailableException; use \OCP\Files\StorageNotAvailableException;
/** /**