Browse Source

Properly expose read only public shares as read only

tags/v7.0.0alpha2
Robin Appelman 10 years ago
parent
commit
e7b58ed2bd

+ 7
- 0
apps/files_sharing/ajax/shareinfo.php View File

@@ -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('');


+ 4
- 0
apps/files_sharing/lib/external/scanner.php View File

@@ -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();

+ 27
- 0
apps/files_sharing/lib/readonlycache.php View File

@@ -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;
}
}

+ 56
- 0
apps/files_sharing/lib/readonlywrapper.php View File

@@ -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);
}
}

+ 8
- 0
apps/files_sharing/publicwebdav.php View File

@@ -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);

Loading…
Cancel
Save