mirror of
https://github.com/nextcloud/server.git
synced 2026-06-11 01:30:50 -04:00
Add nc:share-attributes Webdav property
Signed-off-by: Vincent Petry <vincent@nextcloud.com>
This commit is contained in:
parent
4b1649fbf3
commit
0c468ede91
3 changed files with 84 additions and 0 deletions
|
|
@ -64,6 +64,7 @@ class FilesPlugin extends ServerPlugin {
|
|||
public const PERMISSIONS_PROPERTYNAME = '{http://owncloud.org/ns}permissions';
|
||||
public const SHARE_PERMISSIONS_PROPERTYNAME = '{http://open-collaboration-services.org/ns}share-permissions';
|
||||
public const OCM_SHARE_PERMISSIONS_PROPERTYNAME = '{http://open-cloud-mesh.org/ns}share-permissions';
|
||||
public const SHARE_ATTRIBUTES_PROPERTYNAME = '{http://nextcloud.org/ns}share-attributes';
|
||||
public const DOWNLOADURL_PROPERTYNAME = '{http://owncloud.org/ns}downloadURL';
|
||||
public const SIZE_PROPERTYNAME = '{http://owncloud.org/ns}size';
|
||||
public const GETETAG_PROPERTYNAME = '{DAV:}getetag';
|
||||
|
|
@ -172,6 +173,7 @@ class FilesPlugin extends ServerPlugin {
|
|||
$server->protectedProperties[] = self::PERMISSIONS_PROPERTYNAME;
|
||||
$server->protectedProperties[] = self::SHARE_PERMISSIONS_PROPERTYNAME;
|
||||
$server->protectedProperties[] = self::OCM_SHARE_PERMISSIONS_PROPERTYNAME;
|
||||
$server->protectedProperties[] = self::SHARE_ATTRIBUTES_PROPERTYNAME;
|
||||
$server->protectedProperties[] = self::SIZE_PROPERTYNAME;
|
||||
$server->protectedProperties[] = self::DOWNLOADURL_PROPERTYNAME;
|
||||
$server->protectedProperties[] = self::OWNER_ID_PROPERTYNAME;
|
||||
|
|
|
|||
|
|
@ -322,6 +322,26 @@ abstract class Node implements \Sabre\DAV\INode {
|
|||
return $permissions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getShareAttributes(): array {
|
||||
$attributes = [];
|
||||
|
||||
try {
|
||||
$storage = $this->info->getStorage();
|
||||
} catch (StorageNotAvailableException $e) {
|
||||
$storage = null;
|
||||
}
|
||||
|
||||
if ($storage && $storage->instanceOfStorage('\OCA\Files_Sharing\SharedStorage')) {
|
||||
/** @var \OCA\Files_Sharing\SharedStorage $storage */
|
||||
$attributes = $storage->getShare()->getAttributes()->toArray();
|
||||
}
|
||||
|
||||
return $attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $user
|
||||
* @return string
|
||||
|
|
|
|||
|
|
@ -29,8 +29,11 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre;
|
|||
|
||||
use OC\Files\FileInfo;
|
||||
use OC\Files\View;
|
||||
use OC\Share20\ShareAttributes;
|
||||
use OCA\Files_Sharing\SharedStorage;
|
||||
use OCP\Files\Mount\IMountPoint;
|
||||
use OCP\Files\Storage;
|
||||
use OCP\Share\IAttributes;
|
||||
use OCP\Share\IManager;
|
||||
use OCP\Share\IShare;
|
||||
|
||||
|
|
@ -169,6 +172,65 @@ class NodeTest extends \Test\TestCase {
|
|||
$this->assertEquals($expected, $node->getSharePermissions($user));
|
||||
}
|
||||
|
||||
public function testShareAttributes() {
|
||||
$storage = $this->getMockBuilder(SharedStorage::class)
|
||||
->disableOriginalConstructor()
|
||||
->setMethods(['getShare'])
|
||||
->getMock();
|
||||
|
||||
$shareManager = $this->getMockBuilder(IManager::class)->disableOriginalConstructor()->getMock();
|
||||
$share = $this->getMockBuilder(IShare::class)->disableOriginalConstructor()->getMock();
|
||||
|
||||
$storage->expects($this->once())
|
||||
->method('getShare')
|
||||
->willReturn($share);
|
||||
|
||||
$attributes = new ShareAttributes();
|
||||
$attributes->setAttribute('permissions', 'download', false);
|
||||
|
||||
$share->expects($this->once())->method('getAttributes')->willReturn($attributes);
|
||||
|
||||
$info = $this->getMockBuilder(FileInfo::class)
|
||||
->disableOriginalConstructor()
|
||||
->setMethods(['getStorage', 'getType'])
|
||||
->getMock();
|
||||
|
||||
$info->method('getStorage')->willReturn($storage);
|
||||
$info->method('getType')->willReturn(FileInfo::TYPE_FOLDER);
|
||||
|
||||
$view = $this->getMockBuilder(View::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$node = new \OCA\DAV\Connector\Sabre\File($view, $info);
|
||||
$this->invokePrivate($node, 'shareManager', [$shareManager]);
|
||||
$this->assertEquals($attributes->toArray(), $node->getShareAttributes());
|
||||
}
|
||||
|
||||
public function testShareAttributesNonShare() {
|
||||
$storage = $this->getMockBuilder(Storage::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$shareManager = $this->getMockBuilder(IManager::class)->disableOriginalConstructor()->getMock();
|
||||
|
||||
$info = $this->getMockBuilder(FileInfo::class)
|
||||
->disableOriginalConstructor()
|
||||
->setMethods(['getStorage', 'getType'])
|
||||
->getMock();
|
||||
|
||||
$info->method('getStorage')->willReturn($storage);
|
||||
$info->method('getType')->willReturn(FileInfo::TYPE_FOLDER);
|
||||
|
||||
$view = $this->getMockBuilder(View::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$node = new \OCA\DAV\Connector\Sabre\File($view, $info);
|
||||
$this->invokePrivate($node, 'shareManager', [$shareManager]);
|
||||
$this->assertEquals([], $node->getShareAttributes());
|
||||
}
|
||||
|
||||
public function sanitizeMtimeProvider() {
|
||||
return [
|
||||
[123456789, 123456789],
|
||||
|
|
|
|||
Loading…
Reference in a new issue