Browse Source

Merge pull request #1518 from nextcloud/dav-fileshome-directory-properties

FilesHome now also returns DAV properties
tags/v11.0RC2
Morris Jobke 7 years ago
parent
commit
ff3e8c2139

+ 1
- 2
apps/dav/lib/Connector/Sabre/FilesPlugin.php View File

@@ -329,8 +329,7 @@ class FilesPlugin extends ServerPlugin {
});
}

if ($node instanceof \OCA\DAV\Connector\Sabre\Node
|| $node instanceof \OCA\DAV\Files\FilesHome) {
if ($node instanceof \OCA\DAV\Connector\Sabre\Node) {
$propFind->handle(self::DATA_FINGERPRINT_PROPERTYNAME, function() use ($node) {
return $this->config->getSystemValue('data-fingerprint', '');
});

+ 5
- 50
apps/dav/lib/Files/FilesHome.php View File

@@ -23,11 +23,9 @@ namespace OCA\DAV\Files;

use OCA\DAV\Connector\Sabre\Directory;
use Sabre\DAV\Exception\Forbidden;
use Sabre\DAV\ICollection;
use Sabre\DAV\SimpleCollection;
use Sabre\HTTP\URLUtil;

class FilesHome implements ICollection {
class FilesHome extends Directory {

/**
* @var array
@@ -41,30 +39,13 @@ class FilesHome implements ICollection {
*/
public function __construct($principalInfo) {
$this->principalInfo = $principalInfo;
}

function createFile($name, $data = null) {
return $this->impl()->createFile($name, $data);
}

function createDirectory($name) {
$this->impl()->createDirectory($name);
}

function getChild($name) {
return $this->impl()->getChild($name);
}

function getChildren() {
return $this->impl()->getChildren();
}

function childExists($name) {
return $this->impl()->childExists($name);
$view = \OC\Files\Filesystem::getView();
$rootInfo = $view->getFileInfo('');
parent::__construct($view, $rootInfo);
}

function delete() {
$this->impl()->delete();
throw new Forbidden('Permission denied to delete home folder');
}

function getName() {
@@ -75,30 +56,4 @@ class FilesHome implements ICollection {
function setName($name) {
throw new Forbidden('Permission denied to rename this folder');
}

/**
* Returns the last modification time, as a unix timestamp
*
* @return int
*/
function getLastModified() {
return $this->impl()->getLastModified();
}

/**
* @return Directory
*/
private function impl() {
//
// TODO: we need to mount filesystem of the give user
//
$user = \OC::$server->getUserSession()->getUser();
if ($this->getName() !== $user->getUID()) {
return new SimpleCollection($this->getName());
}
$view = \OC\Files\Filesystem::getView();
$rootInfo = $view->getFileInfo('');
$impl = new Directory($view, $rootInfo);
return $impl;
}
}

+ 11
- 2
apps/dav/lib/Files/RootCollection.php View File

@@ -22,7 +22,8 @@
namespace OCA\DAV\Files;

use Sabre\DAVACL\AbstractPrincipalCollection;
use Sabre\DAVACL\IPrincipal;
use Sabre\HTTP\URLUtil;
use Sabre\DAV\SimpleCollection;

class RootCollection extends AbstractPrincipalCollection {

@@ -34,9 +35,17 @@ class RootCollection extends AbstractPrincipalCollection {
* supplied by the authentication backend.
*
* @param array $principalInfo
* @return IPrincipal
* @return INode
*/
function getChildForPrincipal(array $principalInfo) {
list(,$name) = URLUtil::splitPath($principalInfo['uri']);
$user = \OC::$server->getUserSession()->getUser();
if ($name !== $user->getUID()) {
// a user is only allowed to see their own home contents, so in case another collection
// is accessed, we return a simple empty collection for now
// in the future this could be considered to be used for accessing shared files
return new SimpleCollection($name);
}
return new FilesHome($principalInfo);
}


+ 1
- 1
apps/dav/lib/Upload/UploadHome.php View File

@@ -30,7 +30,7 @@ use Sabre\DAV\ICollection;

class UploadHome implements ICollection {
/**
* FilesHome constructor.
* UploadHome constructor.
*
* @param array $principalInfo
*/

+ 0
- 52
apps/dav/tests/unit/Connector/Sabre/FilesPluginTest.php View File

@@ -217,58 +217,6 @@ class FilesPluginTest extends TestCase {
$this->assertEquals([self::SIZE_PROPERTYNAME], $propFind->get404Properties());
}

public function testGetPropertiesForFileHome() {
/** @var \OCA\DAV\Files\FilesHome | \PHPUnit_Framework_MockObject_MockObject $node */
$node = $this->getMockBuilder('\OCA\DAV\Files\FilesHome')
->disableOriginalConstructor()
->getMock();

$propFind = new PropFind(
'/dummyPath',
array(
self::GETETAG_PROPERTYNAME,
self::FILEID_PROPERTYNAME,
self::INTERNAL_FILEID_PROPERTYNAME,
self::SIZE_PROPERTYNAME,
self::PERMISSIONS_PROPERTYNAME,
self::DOWNLOADURL_PROPERTYNAME,
self::OWNER_ID_PROPERTYNAME,
self::OWNER_DISPLAY_NAME_PROPERTYNAME,
self::DATA_FINGERPRINT_PROPERTYNAME,
),
0
);

$user = $this->getMockBuilder('\OC\User\User')
->disableOriginalConstructor()->getMock();
$user->expects($this->never())->method('getUID');
$user->expects($this->never())->method('getDisplayName');

$this->plugin->handleGetProperties(
$propFind,
$node
);

$this->assertEquals(null, $propFind->get(self::GETETAG_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::FILEID_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::INTERNAL_FILEID_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::SIZE_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::PERMISSIONS_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::DOWNLOADURL_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::OWNER_ID_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::OWNER_DISPLAY_NAME_PROPERTYNAME));
$this->assertEquals(['{DAV:}getetag',
'{http://owncloud.org/ns}id',
'{http://owncloud.org/ns}fileid',
'{http://owncloud.org/ns}size',
'{http://owncloud.org/ns}permissions',
'{http://owncloud.org/ns}downloadURL',
'{http://owncloud.org/ns}owner-id',
'{http://owncloud.org/ns}owner-display-name'
], $propFind->get404Properties());
$this->assertEquals('my_fingerprint', $propFind->get(self::DATA_FINGERPRINT_PROPERTYNAME));
}

public function testGetPropertiesStorageNotAvailable() {
/** @var \OCA\DAV\Connector\Sabre\File | \PHPUnit_Framework_MockObject_MockObject $node */
$node = $this->createTestNode('\OCA\DAV\Connector\Sabre\File');

Loading…
Cancel
Save