Skip to content
Snippets Groups Projects
Commit 978303e0 authored by Vincent Petry's avatar Vincent Petry
Browse files

Add internal fileid to webdav response

Introduce a new property "oc:fileid" to return the internal file id.

This is because the original "oc:id" property is a compound and it is
not possible to extract the real id without knowing the instance id. The
instance id is not available to external clients.
parent 6efa7286
No related branches found
No related tags found
No related merge requests found
...@@ -37,6 +37,7 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin { ...@@ -37,6 +37,7 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
// namespace // namespace
const NS_OWNCLOUD = 'http://owncloud.org/ns'; const NS_OWNCLOUD = 'http://owncloud.org/ns';
const FILEID_PROPERTYNAME = '{http://owncloud.org/ns}id'; const FILEID_PROPERTYNAME = '{http://owncloud.org/ns}id';
const INTERNAL_FILEID_PROPERTYNAME = '{http://owncloud.org/ns}fileid';
const PERMISSIONS_PROPERTYNAME = '{http://owncloud.org/ns}permissions'; const PERMISSIONS_PROPERTYNAME = '{http://owncloud.org/ns}permissions';
const DOWNLOADURL_PROPERTYNAME = '{http://owncloud.org/ns}downloadURL'; const DOWNLOADURL_PROPERTYNAME = '{http://owncloud.org/ns}downloadURL';
const SIZE_PROPERTYNAME = '{http://owncloud.org/ns}size'; const SIZE_PROPERTYNAME = '{http://owncloud.org/ns}size';
...@@ -98,6 +99,7 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin { ...@@ -98,6 +99,7 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
$server->xmlNamespaces[self::NS_OWNCLOUD] = 'oc'; $server->xmlNamespaces[self::NS_OWNCLOUD] = 'oc';
$server->protectedProperties[] = self::FILEID_PROPERTYNAME; $server->protectedProperties[] = self::FILEID_PROPERTYNAME;
$server->protectedProperties[] = self::INTERNAL_FILEID_PROPERTYNAME;
$server->protectedProperties[] = self::PERMISSIONS_PROPERTYNAME; $server->protectedProperties[] = self::PERMISSIONS_PROPERTYNAME;
$server->protectedProperties[] = self::SIZE_PROPERTYNAME; $server->protectedProperties[] = self::SIZE_PROPERTYNAME;
$server->protectedProperties[] = self::DOWNLOADURL_PROPERTYNAME; $server->protectedProperties[] = self::DOWNLOADURL_PROPERTYNAME;
...@@ -175,6 +177,10 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin { ...@@ -175,6 +177,10 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin {
return $node->getFileId(); return $node->getFileId();
}); });
$propFind->handle(self::INTERNAL_FILEID_PROPERTYNAME, function() use ($node) {
return $node->getInternalFileId();
});
$propFind->handle(self::PERMISSIONS_PROPERTYNAME, function() use ($node) { $propFind->handle(self::PERMISSIONS_PROPERTYNAME, function() use ($node) {
$perms = $node->getDavPermissions(); $perms = $node->getDavPermissions();
if ($this->isPublic) { if ($this->isPublic) {
......
...@@ -206,6 +206,13 @@ abstract class Node implements \Sabre\DAV\INode { ...@@ -206,6 +206,13 @@ abstract class Node implements \Sabre\DAV\INode {
return null; return null;
} }
/**
* @return string
*/
public function getInternalFileId() {
return $this->info->getId();
}
/** /**
* @return string|null * @return string|null
*/ */
......
...@@ -11,6 +11,7 @@ namespace OCA\DAV\Tests\Unit\Connector\Sabre; ...@@ -11,6 +11,7 @@ namespace OCA\DAV\Tests\Unit\Connector\Sabre;
class FilesPlugin extends \Test\TestCase { class FilesPlugin extends \Test\TestCase {
const GETETAG_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::GETETAG_PROPERTYNAME; const GETETAG_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::GETETAG_PROPERTYNAME;
const FILEID_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::FILEID_PROPERTYNAME; const FILEID_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::FILEID_PROPERTYNAME;
const INTERNAL_FILEID_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::INTERNAL_FILEID_PROPERTYNAME;
const SIZE_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::SIZE_PROPERTYNAME; const SIZE_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::SIZE_PROPERTYNAME;
const PERMISSIONS_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::PERMISSIONS_PROPERTYNAME; const PERMISSIONS_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::PERMISSIONS_PROPERTYNAME;
const LASTMODIFIED_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::LASTMODIFIED_PROPERTYNAME; const LASTMODIFIED_PROPERTYNAME = \OCA\DAV\Connector\Sabre\FilesPlugin::LASTMODIFIED_PROPERTYNAME;
...@@ -69,7 +70,10 @@ class FilesPlugin extends \Test\TestCase { ...@@ -69,7 +70,10 @@ class FilesPlugin extends \Test\TestCase {
$node->expects($this->any()) $node->expects($this->any())
->method('getFileId') ->method('getFileId')
->will($this->returnValue(123)); ->will($this->returnValue('00000123instanceid'));
$node->expects($this->any())
->method('getInternalFileId')
->will($this->returnValue('123'));
$node->expects($this->any()) $node->expects($this->any())
->method('getEtag') ->method('getEtag')
->will($this->returnValue('"abc"')); ->will($this->returnValue('"abc"'));
...@@ -90,6 +94,7 @@ class FilesPlugin extends \Test\TestCase { ...@@ -90,6 +94,7 @@ class FilesPlugin extends \Test\TestCase {
array( array(
self::GETETAG_PROPERTYNAME, self::GETETAG_PROPERTYNAME,
self::FILEID_PROPERTYNAME, self::FILEID_PROPERTYNAME,
self::INTERNAL_FILEID_PROPERTYNAME,
self::SIZE_PROPERTYNAME, self::SIZE_PROPERTYNAME,
self::PERMISSIONS_PROPERTYNAME, self::PERMISSIONS_PROPERTYNAME,
self::DOWNLOADURL_PROPERTYNAME, self::DOWNLOADURL_PROPERTYNAME,
...@@ -125,7 +130,8 @@ class FilesPlugin extends \Test\TestCase { ...@@ -125,7 +130,8 @@ class FilesPlugin extends \Test\TestCase {
); );
$this->assertEquals('"abc"', $propFind->get(self::GETETAG_PROPERTYNAME)); $this->assertEquals('"abc"', $propFind->get(self::GETETAG_PROPERTYNAME));
$this->assertEquals(123, $propFind->get(self::FILEID_PROPERTYNAME)); $this->assertEquals('00000123instanceid', $propFind->get(self::FILEID_PROPERTYNAME));
$this->assertEquals('123', $propFind->get(self::INTERNAL_FILEID_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::SIZE_PROPERTYNAME)); $this->assertEquals(null, $propFind->get(self::SIZE_PROPERTYNAME));
$this->assertEquals('DWCKMSR', $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('http://example.com/', $propFind->get(self::DOWNLOADURL_PROPERTYNAME));
...@@ -186,7 +192,7 @@ class FilesPlugin extends \Test\TestCase { ...@@ -186,7 +192,7 @@ class FilesPlugin extends \Test\TestCase {
); );
$this->assertEquals('"abc"', $propFind->get(self::GETETAG_PROPERTYNAME)); $this->assertEquals('"abc"', $propFind->get(self::GETETAG_PROPERTYNAME));
$this->assertEquals(123, $propFind->get(self::FILEID_PROPERTYNAME)); $this->assertEquals('00000123instanceid', $propFind->get(self::FILEID_PROPERTYNAME));
$this->assertEquals(1025, $propFind->get(self::SIZE_PROPERTYNAME)); $this->assertEquals(1025, $propFind->get(self::SIZE_PROPERTYNAME));
$this->assertEquals('DWCKMSR', $propFind->get(self::PERMISSIONS_PROPERTYNAME)); $this->assertEquals('DWCKMSR', $propFind->get(self::PERMISSIONS_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::DOWNLOADURL_PROPERTYNAME)); $this->assertEquals(null, $propFind->get(self::DOWNLOADURL_PROPERTYNAME));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment