Procházet zdrojové kódy

Fix moving movablemount over webdav

tags/v7.0.0alpha2
Robin Appelman před 10 roky
rodič
revize
07fdeba50b

+ 2
- 1
apps/files/appinfo/remote.php Zobrazit soubor

@@ -49,8 +49,9 @@ $server->subscribeEvent('beforeMethod', function () use ($server, $objectTree) {
$rootInfo = $view->getFileInfo('');

// Create ownCloud Dir
$mountManager = \OC\Files\Filesystem::getMountManager();
$rootDir = new OC_Connector_Sabre_Directory($view, $rootInfo);
$objectTree->init($rootDir, $view);
$objectTree->init($rootDir, $view, $mountManager);

$server->addPlugin(new OC_Connector_Sabre_AbortedUploadDetectionPlugin($view));
$server->addPlugin(new OC_Connector_Sabre_QuotaPlugin($view));

+ 2
- 1
apps/files_encryption/tests/webdav.php Zobrazit soubor

@@ -235,7 +235,8 @@ class Test_Encryption_Webdav extends \PHPUnit_Framework_TestCase {
$view = new \OC\Files\View($root);
$publicDir = new OC_Connector_Sabre_Directory($view, $view->getFileInfo(''));
$objectTree = new \OC\Connector\Sabre\ObjectTree();
$objectTree->init($publicDir, $view);
$mountManager = \OC\Files\Filesystem::getMountManager();
$objectTree->init($publicDir, $view, $mountManager);

// Fire up server
$server = new \Sabre\DAV\Server($publicDir);

+ 2
- 1
apps/files_sharing/publicwebdav.php Zobrazit soubor

@@ -64,7 +64,8 @@ $server->subscribeEvent('beforeMethod', function () use ($server, $objectTree, $
} else {
$root = new OC_Connector_Sabre_File($view, $rootInfo);
}
$objectTree->init($root, $view);
$mountManager = \OC\Files\Filesystem::getMountManager();
$objectTree->init($root, $view, $mountManager);

$server->addPlugin(new OC_Connector_Sabre_AbortedUploadDetectionPlugin($view));
$server->addPlugin(new OC_Connector_Sabre_QuotaPlugin($view));

+ 16
- 7
lib/private/connector/sabre/objecttree.php Zobrazit soubor

@@ -10,6 +10,7 @@ namespace OC\Connector\Sabre;

use OC\Files\FileInfo;
use OC\Files\Filesystem;
use OC\Files\Mount\MoveableMount;

class ObjectTree extends \Sabre\DAV\ObjectTree {

@@ -18,6 +19,11 @@ class ObjectTree extends \Sabre\DAV\ObjectTree {
*/
protected $fileView;

/**
* @var \OC\Files\Mount\Manager
*/
protected $mountManager;

/**
* Creates the object
*
@@ -29,10 +35,12 @@ class ObjectTree extends \Sabre\DAV\ObjectTree {
/**
* @param \Sabre\DAV\ICollection $rootNode
* @param \OC\Files\View $view
* @param \OC\Files\Mount\Manager $mountManager
*/
public function init(\Sabre\DAV\ICollection $rootNode, \OC\Files\View $view) {
public function init(\Sabre\DAV\ICollection $rootNode, \OC\Files\View $view, \OC\Files\Mount\Manager $mountManager) {
$this->rootNode = $rootNode;
$this->fileView = $view;
$this->mountManager = $mountManager;
}

/**
@@ -115,14 +123,15 @@ class ObjectTree extends \Sabre\DAV\ObjectTree {
list($sourceDir,) = \Sabre\DAV\URLUtil::splitPath($sourcePath);
list($destinationDir,) = \Sabre\DAV\URLUtil::splitPath($destinationPath);

$isShareMountPoint = false;
list($storage, $internalPath) = \OC\Files\Filesystem::resolvePath( '/' . \OCP\User::getUser() . '/files/' . $sourcePath);
if ($storage instanceof \OCA\Files_Sharing\ISharedStorage && !$internalPath) {
$isShareMountPoint = true;
$isMovableMount = false;
$sourceMount = $this->mountManager->find($this->fileView->getAbsolutePath($sourcePath));
$internalPath = $sourceMount->getInternalPath($this->fileView->getAbsolutePath($sourcePath));
if ($sourceMount instanceof MoveableMount && $internalPath === '') {
$isMovableMount = true;
}

// check update privileges
if (!$this->fileView->isUpdatable($sourcePath) && !$isShareMountPoint) {
if (!$this->fileView->isUpdatable($sourcePath) && !$isMovableMount) {
throw new \Sabre\DAV\Exception\Forbidden();
}
if ($sourceDir !== $destinationDir) {
@@ -132,7 +141,7 @@ class ObjectTree extends \Sabre\DAV\ObjectTree {
if (!$this->fileView->isUpdatable($destinationDir)) {
throw new \Sabre\DAV\Exception\Forbidden();
}
if (!$this->fileView->isDeletable($sourcePath)) {
if (!$this->fileView->isDeletable($sourcePath) && !$isMovableMount) {
throw new \Sabre\DAV\Exception\Forbidden();
}
}

+ 2
- 1
tests/lib/connector/sabre/objecttree.php Zobrazit soubor

@@ -110,7 +110,8 @@ class ObjectTree extends PHPUnit_Framework_TestCase {
->will($this->returnValue(false));

/** @var $objectTree \OC\Connector\Sabre\ObjectTree */
$objectTree->init($rootDir, $view);
$mountManager = \OC\Files\Filesystem::getMountManager();
$objectTree->init($rootDir, $view, $mountManager);
$objectTree->move($source, $dest);
}


Načítá se…
Zrušit
Uložit