From be7082efffff075671077e484abf8a76bfa9c3f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Thu, 25 Aug 2022 14:41:25 +0200 Subject: Add fileid and permissions to response of bulk upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- apps/dav/lib/BulkUpload/BulkUploadPlugin.php | 3 +++ 1 file changed, 3 insertions(+) (limited to 'apps') diff --git a/apps/dav/lib/BulkUpload/BulkUploadPlugin.php b/apps/dav/lib/BulkUpload/BulkUploadPlugin.php index 6ab4b21a74b..d3c0d060b9d 100644 --- a/apps/dav/lib/BulkUpload/BulkUploadPlugin.php +++ b/apps/dav/lib/BulkUpload/BulkUploadPlugin.php @@ -3,6 +3,7 @@ * @copyright Copyright (c) 2021, Louis Chemineau * * @author Louis Chemineau + * @author Côme Chilliet * * @license AGPL-3.0 * @@ -95,6 +96,8 @@ class BulkUploadPlugin extends ServerPlugin { $writtenFiles[$headers['x-file-path']] = [ "error" => false, "etag" => $node->getETag(), + "fileid" => $node->getId(), + "permissions" => $node->getPermissions(), ]; } catch (\Exception $e) { $this->logger->error($e->getMessage(), ['path' => $headers['x-file-path']]); -- cgit v1.2.3 From 5ae185a8b1427a5daa7bb98499482d4c33f6be29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Thu, 25 Aug 2022 14:47:25 +0200 Subject: Add bulkupload.enabled configuration switch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- apps/dav/lib/Capabilities.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'apps') diff --git a/apps/dav/lib/Capabilities.php b/apps/dav/lib/Capabilities.php index 41d1b983587..fd500ee8012 100644 --- a/apps/dav/lib/Capabilities.php +++ b/apps/dav/lib/Capabilities.php @@ -4,6 +4,7 @@ * * @author Thomas Müller * @author Louis Chemineau + * @author Côme Chilliet * * @license AGPL-3.0 * @@ -23,15 +24,24 @@ namespace OCA\DAV; use OCP\Capabilities\ICapability; +use OCP\IConfig; class Capabilities implements ICapability { + private IConfig $config; + + public function __construct(IConfig $config) { + $this->config = $config; + } + public function getCapabilities() { - return [ + $capabilities = [ 'dav' => [ 'chunking' => '1.0', - // disabled because of https://github.com/nextcloud/desktop/issues/4243 - // 'bulkupload' => '1.0', ] ]; + if ($this->config->getSystemValueBool('bulkupload.enabled', false)) { + $capabilities['dav']['bulkupload'] = '1.0'; + } + return $capabilities; } } -- cgit v1.2.3 From e34f2c4799b271ac1b1c412af4bf2fa1f6279359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Mon, 29 Aug 2022 09:14:52 +0200 Subject: Call the correct functions to get BulkUpload metadata to return MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- apps/dav/lib/BulkUpload/BulkUploadPlugin.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'apps') diff --git a/apps/dav/lib/BulkUpload/BulkUploadPlugin.php b/apps/dav/lib/BulkUpload/BulkUploadPlugin.php index d3c0d060b9d..79a1561ef5b 100644 --- a/apps/dav/lib/BulkUpload/BulkUploadPlugin.php +++ b/apps/dav/lib/BulkUpload/BulkUploadPlugin.php @@ -96,8 +96,8 @@ class BulkUploadPlugin extends ServerPlugin { $writtenFiles[$headers['x-file-path']] = [ "error" => false, "etag" => $node->getETag(), - "fileid" => $node->getId(), - "permissions" => $node->getPermissions(), + "fileid" => $node->getFileId(), + "permissions" => $node->getDavPermissions(), ]; } catch (\Exception $e) { $this->logger->error($e->getMessage(), ['path' => $headers['x-file-path']]); -- cgit v1.2.3 From b3cd9b557358a3aa506d7ad24883650d4449bb8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Mon, 29 Aug 2022 10:37:08 +0200 Subject: Move Dav fileid and permissions logic into OCP\Util to be able to use it for BulkUpload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- apps/dav/lib/BulkUpload/BulkUploadPlugin.php | 17 +++++++------ apps/dav/lib/Connector/Sabre/Node.php | 36 +++------------------------- apps/dav/lib/Server.php | 5 +++- 3 files changed, 15 insertions(+), 43 deletions(-) (limited to 'apps') diff --git a/apps/dav/lib/BulkUpload/BulkUploadPlugin.php b/apps/dav/lib/BulkUpload/BulkUploadPlugin.php index 79a1561ef5b..b5400ec58d2 100644 --- a/apps/dav/lib/BulkUpload/BulkUploadPlugin.php +++ b/apps/dav/lib/BulkUpload/BulkUploadPlugin.php @@ -33,14 +33,13 @@ use OCP\AppFramework\Http; use OCA\DAV\Connector\Sabre\MtimeSanitizer; class BulkUploadPlugin extends ServerPlugin { + private Folder $userFolder; + private LoggerInterface $logger; - /** @var Folder */ - private $userFolder; - - /** @var LoggerInterface */ - private $logger; - - public function __construct(Folder $userFolder, LoggerInterface $logger) { + public function __construct( + Folder $userFolder, + LoggerInterface $logger + ) { $this->userFolder = $userFolder; $this->logger = $logger; } @@ -96,8 +95,8 @@ class BulkUploadPlugin extends ServerPlugin { $writtenFiles[$headers['x-file-path']] = [ "error" => false, "etag" => $node->getETag(), - "fileid" => $node->getFileId(), - "permissions" => $node->getDavPermissions(), + "fileid" => \OCP\Util::getDavFileId($node->getId()), + "permissions" => \OCP\Util::getDavPermissions($node), ]; } catch (\Exception $e) { $this->logger->error($e->getMessage(), ['path' => $headers['x-file-path']]); diff --git a/apps/dav/lib/Connector/Sabre/Node.php b/apps/dav/lib/Connector/Sabre/Node.php index 87f2fea394f..c4fc6282f84 100644 --- a/apps/dav/lib/Connector/Sabre/Node.php +++ b/apps/dav/lib/Connector/Sabre/Node.php @@ -252,10 +252,8 @@ abstract class Node implements \Sabre\DAV\INode { * @return string|null */ public function getFileId() { - if ($this->info->getId()) { - $instanceId = \OC_Util::getInstanceId(); - $id = sprintf('%08d', $this->info->getId()); - return $id . $instanceId; + if ($id = $this->info->getId()) { + return \OCP\Util::getDavFileId($id); } return null; @@ -381,35 +379,7 @@ abstract class Node implements \Sabre\DAV\INode { * @return string */ public function getDavPermissions() { - $p = ''; - if ($this->info->isShared()) { - $p .= 'S'; - } - if ($this->info->isShareable()) { - $p .= 'R'; - } - if ($this->info->isMounted()) { - $p .= 'M'; - } - if ($this->info->isReadable()) { - $p .= 'G'; - } - if ($this->info->isDeletable()) { - $p .= 'D'; - } - if ($this->info->isUpdateable()) { - $p .= 'NV'; // Renameable, Moveable - } - if ($this->info->getType() === \OCP\Files\FileInfo::TYPE_FILE) { - if ($this->info->isUpdateable()) { - $p .= 'W'; - } - } else { - if ($this->info->isCreatable()) { - $p .= 'CK'; - } - } - return $p; + return \OCP\Util::getDavPermissions($this->info); } public function getOwner() { diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php index 2cfcb3f5393..f98dba22925 100644 --- a/apps/dav/lib/Server.php +++ b/apps/dav/lib/Server.php @@ -313,7 +313,10 @@ class Server { $view )); $this->server->addPlugin( - new BulkUploadPlugin($userFolder, $logger) + new BulkUploadPlugin( + $userFolder, + $logger + ) ); } $this->server->addPlugin(new \OCA\DAV\CalDAV\BirthdayCalendar\EnablePlugin( -- cgit v1.2.3 From 9874557e439f1976949e4b190967190864c8d13e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Mon, 29 Aug 2022 15:24:58 +0200 Subject: Fix Capabilities tests for dav application MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- apps/dav/tests/unit/CapabilitiesTest.php | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'apps') diff --git a/apps/dav/tests/unit/CapabilitiesTest.php b/apps/dav/tests/unit/CapabilitiesTest.php index 7abfd08854b..6a9a0c1180a 100644 --- a/apps/dav/tests/unit/CapabilitiesTest.php +++ b/apps/dav/tests/unit/CapabilitiesTest.php @@ -24,6 +24,7 @@ namespace OCA\DAV\Tests\unit; use OCA\DAV\Capabilities; +use OCP\IConfig; use Test\TestCase; /** @@ -31,12 +32,31 @@ use Test\TestCase; */ class CapabilitiesTest extends TestCase { public function testGetCapabilities() { - $capabilities = new Capabilities(); + $config = $this->createMock(IConfig::class); + $config->expects($this->once()) + ->method('getSystemValueBool') + ->with('bulkupload.enabled', $this->isType('bool')) + ->willReturn(false); + $capabilities = new Capabilities($config); $expected = [ 'dav' => [ 'chunking' => '1.0', - // disabled because of https://github.com/nextcloud/desktop/issues/4243 - // 'bulkupload' => '1.0', + ], + ]; + $this->assertSame($expected, $capabilities->getCapabilities()); + } + + public function testGetCapabilitiesWithBulkUpload() { + $config = $this->createMock(IConfig::class); + $config->expects($this->once()) + ->method('getSystemValueBool') + ->with('bulkupload.enabled', $this->isType('bool')) + ->willReturn(true); + $capabilities = new Capabilities($config); + $expected = [ + 'dav' => [ + 'chunking' => '1.0', + 'bulkupload' => '1.0', ], ]; $this->assertSame($expected, $capabilities->getCapabilities()); -- cgit v1.2.3 From 7f80dccbaccd90c0ec015a24e5e564d0a5f5d57c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Mon, 29 Aug 2022 17:47:24 +0200 Subject: Flip bulkupload.enabled default value to true MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- apps/dav/lib/Capabilities.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'apps') diff --git a/apps/dav/lib/Capabilities.php b/apps/dav/lib/Capabilities.php index fd500ee8012..b8096d3395a 100644 --- a/apps/dav/lib/Capabilities.php +++ b/apps/dav/lib/Capabilities.php @@ -39,7 +39,7 @@ class Capabilities implements ICapability { 'chunking' => '1.0', ] ]; - if ($this->config->getSystemValueBool('bulkupload.enabled', false)) { + if ($this->config->getSystemValueBool('bulkupload.enabled', true)) { $capabilities['dav']['bulkupload'] = '1.0'; } return $capabilities; -- cgit v1.2.3 From 4f3b323fbace6afcf50b95073c2560c5b2a0b8f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Tue, 30 Aug 2022 09:55:57 +0200 Subject: Move dav utils functions to OCP\Files\DavUtil MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Côme Chilliet --- apps/dav/lib/BulkUpload/BulkUploadPlugin.php | 5 +++-- apps/dav/lib/Connector/Sabre/Node.php | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'apps') diff --git a/apps/dav/lib/BulkUpload/BulkUploadPlugin.php b/apps/dav/lib/BulkUpload/BulkUploadPlugin.php index b5400ec58d2..0d5cce88d0d 100644 --- a/apps/dav/lib/BulkUpload/BulkUploadPlugin.php +++ b/apps/dav/lib/BulkUpload/BulkUploadPlugin.php @@ -28,6 +28,7 @@ use Sabre\DAV\Server; use Sabre\DAV\ServerPlugin; use Sabre\HTTP\RequestInterface; use Sabre\HTTP\ResponseInterface; +use OCP\Files\DavUtil; use OCP\Files\Folder; use OCP\AppFramework\Http; use OCA\DAV\Connector\Sabre\MtimeSanitizer; @@ -95,8 +96,8 @@ class BulkUploadPlugin extends ServerPlugin { $writtenFiles[$headers['x-file-path']] = [ "error" => false, "etag" => $node->getETag(), - "fileid" => \OCP\Util::getDavFileId($node->getId()), - "permissions" => \OCP\Util::getDavPermissions($node), + "fileid" => DavUtil::getDavFileId($node->getId()), + "permissions" => DavUtil::getDavPermissions($node), ]; } catch (\Exception $e) { $this->logger->error($e->getMessage(), ['path' => $headers['x-file-path']]); diff --git a/apps/dav/lib/Connector/Sabre/Node.php b/apps/dav/lib/Connector/Sabre/Node.php index c4fc6282f84..5fb811ad1ab 100644 --- a/apps/dav/lib/Connector/Sabre/Node.php +++ b/apps/dav/lib/Connector/Sabre/Node.php @@ -38,9 +38,9 @@ namespace OCA\DAV\Connector\Sabre; use OC\Files\Mount\MoveableMount; use OC\Files\Node\File; use OC\Files\Node\Folder; -use OC\Files\Storage\Wrapper\Wrapper; use OC\Files\View; use OCA\DAV\Connector\Sabre\Exception\InvalidPath; +use OCP\Files\DavUtil; use OCP\Files\FileInfo; use OCP\Files\IRootFolder; use OCP\Files\StorageNotAvailableException; @@ -253,7 +253,7 @@ abstract class Node implements \Sabre\DAV\INode { */ public function getFileId() { if ($id = $this->info->getId()) { - return \OCP\Util::getDavFileId($id); + return DavUtil::getDavFileId($id); } return null; @@ -379,7 +379,7 @@ abstract class Node implements \Sabre\DAV\INode { * @return string */ public function getDavPermissions() { - return \OCP\Util::getDavPermissions($this->info); + return DavUtil::getDavPermissions($this->info); } public function getOwner() { -- cgit v1.2.3