From 86b700cac5c631223ad7cd4a08dc6f3e33ed8604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Thu, 2 Jan 2020 22:15:59 +0100 Subject: [PATCH] Properly setup the filesystem for put operations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is required for versioning/activity as the legacy filesystem hooks are not emitted otherwise, if filesystem operations are executed though the \OCP\Files\Node\File API Signed-off-by: Julius Härtl --- lib/Controller/WopiController.php | 6 ++++-- lib/Service/UserScopeService.php | 13 +++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/Controller/WopiController.php b/lib/Controller/WopiController.php index d485895c1..cca4607d7 100644 --- a/lib/Controller/WopiController.php +++ b/lib/Controller/WopiController.php @@ -444,9 +444,9 @@ class WopiController extends Controller { } $content = fopen('php://input', 'rb'); - // Set the user to register the change under his name $this->userScopeService->setUserScope($wopi->getEditorUid()); + $this->userScopeService->setFilesystemScope($isPutRelative ? $wopi->getEditorUid() : $wopi->getOwnerUid()); try { $this->retryOperation(function () use ($file, $content){ @@ -481,6 +481,8 @@ class WopiController extends Controller { * Just actually routes to the PutFile, the implementation of PutFile * handles both saving and saving as.* Given an access token and a fileId, replaces the files with the request body. * + * FIXME Cleanup this code as is a lot of shared logic between putFile and putRelativeFile + * * @PublicPage * @NoCSRFRequired * @@ -582,9 +584,9 @@ class WopiController extends Controller { } $content = fopen('php://input', 'rb'); - // Set the user to register the change under his name $this->userScopeService->setUserScope($wopi->getEditorUid()); + $this->userScopeService->setFilesystemScope($isPutRelative ? $wopi->getEditorUid() : $wopi->getOwnerUid()); try { $this->retryOperation(function () use ($file, $content){ diff --git a/lib/Service/UserScopeService.php b/lib/Service/UserScopeService.php index c018b3c77..25d6b39d5 100644 --- a/lib/Service/UserScopeService.php +++ b/lib/Service/UserScopeService.php @@ -48,4 +48,17 @@ class UserScopeService { } $this->userSession->setUser($user); } + + /** + * Setup the FS which is needed to emit hooks + * + * This is required for versioning/activity as the legacy filesystem hooks + * are not emitted if filesystem operations are executed though \OCP\Files\Node\File + * + * @param string $owner + */ + public function setFilesystemScope(string $owner): void { + \OC_Util::tearDownFS(); + \OC_Util::setupFS($owner); + } }