@@ -33,6 +33,13 @@ $linkItem = $data['linkItem']; | |||
// Load the files | |||
$path = $data['realPath']; | |||
$isWritable = $linkItem['permissions'] & \OCP\PERMISSION_CREATE; | |||
if (!$isWritable) { | |||
\OC\Files\Filesystem::addStorageWrapper('readonly', function ($mountPoint, $storage) { | |||
return new \OCA\Files_Sharing\ReadOnlyWrapper(array('storage' => $storage)); | |||
}); | |||
} | |||
$rootInfo = \OC\Files\Filesystem::getFileInfo($path); | |||
$rootView = new \OC\Files\View(''); | |||
@@ -14,6 +14,10 @@ class Scanner extends \OC\Files\Cache\Scanner { | |||
*/ | |||
protected $storage; | |||
public function scan($path, $recursive = self::SCAN_RECURSIVE, $reuse = -1) { | |||
$this->scanAll(); | |||
} | |||
public function scanAll() { | |||
$remote = $this->storage->getRemote(); | |||
$token = $this->storage->getToken(); |
@@ -0,0 +1,27 @@ | |||
<?php | |||
/** | |||
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> | |||
* This file is licensed under the Affero General Public License version 3 or | |||
* later. | |||
* See the COPYING-README file. | |||
*/ | |||
namespace OCA\Files_Sharing; | |||
use OC\Files\Cache\Cache; | |||
class ReadOnlyCache extends Cache { | |||
public function get($path) { | |||
$data = parent::get($path); | |||
$data['permissions'] &= (\OCP\PERMISSION_READ | \OCP\PERMISSION_SHARE); | |||
return $data; | |||
} | |||
public function getFolderContents($path) { | |||
$content = parent::getFolderContents($path); | |||
foreach ($content as &$data) { | |||
$data['permissions'] &= (\OCP\PERMISSION_READ | \OCP\PERMISSION_SHARE); | |||
} | |||
return $content; | |||
} | |||
} |
@@ -0,0 +1,56 @@ | |||
<?php | |||
/** | |||
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com> | |||
* This file is licensed under the Affero General Public License version 3 or | |||
* later. | |||
* See the COPYING-README file. | |||
*/ | |||
namespace OCA\Files_Sharing; | |||
use OC\Files\Storage\Wrapper\Wrapper; | |||
class ReadOnlyWrapper extends Wrapper { | |||
public function isUpdatable($path) { | |||
return false; | |||
} | |||
public function isCreatable($path) { | |||
return false; | |||
} | |||
public function isDeletable($path) { | |||
return false; | |||
} | |||
public function getPermissions($path) { | |||
return $this->storage->getPermissions($path) & (\OCP\PERMISSION_READ | \OCP\PERMISSION_SHARE); | |||
} | |||
public function rename($path1, $path2) { | |||
return false; | |||
} | |||
public function touch($path, $mtime = null) { | |||
return false; | |||
} | |||
public function mkdir($path) { | |||
return false; | |||
} | |||
public function rmdir($path) { | |||
return false; | |||
} | |||
public function unlink($path) { | |||
return false; | |||
} | |||
public function getCache($path = '', $storage = null) { | |||
if (!$storage) { | |||
$storage = $this; | |||
} | |||
return new ReadOnlyCache($storage); | |||
} | |||
} |
@@ -37,7 +37,15 @@ $server->addPlugin(new OC_Connector_Sabre_ExceptionLoggerPlugin('webdav')); | |||
$server->subscribeEvent('beforeMethod', function () use ($server, $objectTree, $authBackend) { | |||
$share = $authBackend->getShare(); | |||
$owner = $share['uid_owner']; | |||
$isWritable = $share['permissions']; | |||
$fileId = $share['file_source']; | |||
if (!$isWritable) { | |||
\OC\Files\Filesystem::addStorageWrapper('readonly', function ($mountPoint, $storage) { | |||
return new \OCA\Files_Sharing\ReadOnlyWrapper(array('storage' => $storage)); | |||
}); | |||
} | |||
OC_Util::setupFS($owner); | |||
$ownerView = \OC\Files\Filesystem::getView(); | |||
$path = $ownerView->getPath($fileId); |