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

FilesHome now also returns DAV properties
This commit is contained in:
Morris Jobke 2016-10-06 00:21:44 +02:00 committed by GitHub
commit ff3e8c2139
5 changed files with 18 additions and 107 deletions

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', '');
});

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

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

View file

@ -30,7 +30,7 @@ use Sabre\DAV\ICollection;
class UploadHome implements ICollection {
/**
* FilesHome constructor.
* UploadHome constructor.
*
* @param array $principalInfo
*/

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