summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2015-07-13 14:20:35 +0200
committerVincent Petry <pvince81@owncloud.com>2015-07-13 14:20:35 +0200
commitb3b080e1c04274fb880ce79c8ee8a8e5d0702989 (patch)
tree7da865092f0a3c98ab69fdfb8dd1eb7e8f2981ed
parent1006ec56ceb2c7c5bc14a5401d46767cb4b72e6c (diff)
downloadnextcloud-server-b3b080e1c04274fb880ce79c8ee8a8e5d0702989.tar.gz
nextcloud-server-b3b080e1c04274fb880ce79c8ee8a8e5d0702989.zip
Strip public webdav info about sharing and mount points
Remove information about whether a file is an incoming share or mount point when requested over public webdav.
-rw-r--r--apps/files_sharing/publicwebdav.php2
-rw-r--r--lib/private/connector/sabre/filesplugin.php18
-rw-r--r--tests/lib/connector/sabre/filesplugin.php31
3 files changed, 45 insertions, 6 deletions
diff --git a/apps/files_sharing/publicwebdav.php b/apps/files_sharing/publicwebdav.php
index c0a9dc328d1..5bde908109d 100644
--- a/apps/files_sharing/publicwebdav.php
+++ b/apps/files_sharing/publicwebdav.php
@@ -45,7 +45,7 @@ $defaults = new OC_Defaults();
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName()));
// FIXME: The following line is a workaround for legacy components relying on being able to send a GET to /
$server->addPlugin(new \OC\Connector\Sabre\DummyGetResponsePlugin());
-$server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree));
+$server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree, true));
$server->addPlugin(new \OC\Connector\Sabre\MaintenancePlugin(\OC::$server->getConfig()));
$server->addPlugin(new \OC\Connector\Sabre\ExceptionLoggerPlugin('webdav', \OC::$server->getLogger()));
diff --git a/lib/private/connector/sabre/filesplugin.php b/lib/private/connector/sabre/filesplugin.php
index 608e8cd9017..84620f454aa 100644
--- a/lib/private/connector/sabre/filesplugin.php
+++ b/lib/private/connector/sabre/filesplugin.php
@@ -56,10 +56,19 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
private $tree;
/**
+ * Whether this is public webdav.
+ * If true, some returned information will be stripped off.
+ *
+ * @var bool
+ */
+ private $isPublic;
+
+ /**
* @param \Sabre\DAV\Tree $tree
*/
- public function __construct(\Sabre\DAV\Tree $tree) {
+ public function __construct(\Sabre\DAV\Tree $tree, $isPublic = false) {
$this->tree = $tree;
+ $this->isPublic = $isPublic;
}
/**
@@ -129,7 +138,12 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
});
$propFind->handle(self::PERMISSIONS_PROPERTYNAME, function() use ($node) {
- return $node->getDavPermissions();
+ $perms = $node->getDavPermissions();
+ if ($this->isPublic) {
+ // remove mount information
+ $perms = str_replace(['S', 'M'], '', $perms);
+ }
+ return $perms;
});
$propFind->handle(self::GETETAG_PROPERTYNAME, function() use ($node) {
diff --git a/tests/lib/connector/sabre/filesplugin.php b/tests/lib/connector/sabre/filesplugin.php
index 54d43d66dda..a4cf9f7bfb9 100644
--- a/tests/lib/connector/sabre/filesplugin.php
+++ b/tests/lib/connector/sabre/filesplugin.php
@@ -62,7 +62,7 @@ class FilesPlugin extends \Test\TestCase {
->will($this->returnValue('"abc"'));
$node->expects($this->any())
->method('getDavPermissions')
- ->will($this->returnValue('R'));
+ ->will($this->returnValue('DWCKMSR'));
return $node;
}
@@ -98,11 +98,36 @@ class FilesPlugin extends \Test\TestCase {
$this->assertEquals('"abc"', $propFind->get(self::GETETAG_PROPERTYNAME));
$this->assertEquals(123, $propFind->get(self::FILEID_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::SIZE_PROPERTYNAME));
- $this->assertEquals('R', $propFind->get(self::PERMISSIONS_PROPERTYNAME));
+ $this->assertEquals('DWCKMSR', $propFind->get(self::PERMISSIONS_PROPERTYNAME));
$this->assertEquals('http://example.com/', $propFind->get(self::DOWNLOADURL_PROPERTYNAME));
$this->assertEquals(array(self::SIZE_PROPERTYNAME), $propFind->get404Properties());
}
+ public function testGetPublicPermissions() {
+ $this->plugin = new \OC\Connector\Sabre\FilesPlugin($this->tree, true);
+ $this->plugin->initialize($this->server);
+
+ $propFind = new \Sabre\DAV\PropFind(
+ '/dummyPath',
+ [
+ self::PERMISSIONS_PROPERTYNAME,
+ ],
+ 0
+ );
+
+ $node = $this->createTestNode('\OC\Connector\Sabre\File');
+ $node->expects($this->any())
+ ->method('getDavPermissions')
+ ->will($this->returnValue('DWCKMSR'));
+
+ $this->plugin->handleGetProperties(
+ $propFind,
+ $node
+ );
+
+ $this->assertEquals('DWCKR', $propFind->get(self::PERMISSIONS_PROPERTYNAME));
+ }
+
public function testGetPropertiesForDirectory() {
$node = $this->createTestNode('\OC\Connector\Sabre\Directory');
@@ -132,7 +157,7 @@ class FilesPlugin extends \Test\TestCase {
$this->assertEquals('"abc"', $propFind->get(self::GETETAG_PROPERTYNAME));
$this->assertEquals(123, $propFind->get(self::FILEID_PROPERTYNAME));
$this->assertEquals(1025, $propFind->get(self::SIZE_PROPERTYNAME));
- $this->assertEquals('R', $propFind->get(self::PERMISSIONS_PROPERTYNAME));
+ $this->assertEquals('DWCKMSR', $propFind->get(self::PERMISSIONS_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::DOWNLOADURL_PROPERTYNAME));
$this->assertEquals(array(self::DOWNLOADURL_PROPERTYNAME), $propFind->get404Properties());
}