From e730cc150c560277e0be89348de54c537f6c5d5d Mon Sep 17 00:00:00 2001
From: Joas Schilling <coding@schilljs.com>
Date: Fri, 28 Jun 2024 10:52:02 +0200
Subject: [PATCH] fix(workflows): Fix file systemtag cache

Signed-off-by: Joas Schilling <coding@schilljs.com>
---
 .../lib/Check/FileSystemTags.php              | 30 ++++++-------------
 1 file changed, 9 insertions(+), 21 deletions(-)

diff --git a/apps/workflowengine/lib/Check/FileSystemTags.php b/apps/workflowengine/lib/Check/FileSystemTags.php
index 351364c5562e8..6be818acef7c0 100644
--- a/apps/workflowengine/lib/Check/FileSystemTags.php
+++ b/apps/workflowengine/lib/Check/FileSystemTags.php
@@ -26,6 +26,7 @@
  */
 namespace OCA\WorkflowEngine\Check;
 
+use OC\Files\Storage\Wrapper\Jail;
 use OCA\Files_Sharing\SharedStorage;
 use OCA\WorkflowEngine\Entity\File;
 use OCP\Files\Cache\ICache;
@@ -39,7 +40,6 @@
 use OCP\SystemTag\TagNotFoundException;
 use OCP\WorkflowEngine\ICheck;
 use OCP\WorkflowEngine\IFileCheck;
-use OC\Files\Storage\Wrapper\Wrapper;
 
 class FileSystemTags implements ICheck, IFileCheck {
 	use TFileCheck;
@@ -154,27 +154,15 @@ protected function getSystemTags() {
 	 * @return int[]
 	 */
 	protected function getFileIds(ICache $cache, $path, $isExternalStorage) {
-		/** @psalm-suppress InvalidArgument */
-		if ($this->storage->instanceOfStorage(\OCA\GroupFolders\Mount\GroupFolderStorage::class)) {
-			// Special implementation for groupfolder since all groupfolders share the same storage
-			// id so add the group folder id in the cache key too.
-			$groupFolderStorage = $this->storage;
-			if ($this->storage instanceof Wrapper) {
-				$groupFolderStorage = $this->storage->getInstanceOfStorage(\OCA\GroupFolders\Mount\GroupFolderStorage::class);
-			}
-			if ($groupFolderStorage === null) {
-				throw new \LogicException('Should not happen: Storage is instance of GroupFolderStorage but no group folder storage found while unwrapping.');
-			}
-			/**
-			 * @psalm-suppress UndefinedDocblockClass
-			 * @psalm-suppress UndefinedInterfaceMethod
-			 */
-			$cacheId = $cache->getNumericStorageId() . '/' . $groupFolderStorage->getFolderId();
+		$cacheId = $cache->getNumericStorageId();
+		if ($this->storage->instanceOfStorage(Jail::class)) {
+			$absolutePath = $this->storage->getUnjailedPath($path);
 		} else {
-			$cacheId = $cache->getNumericStorageId();
+			$absolutePath = $path;
 		}
-		if (isset($this->fileIds[$cacheId][$path])) {
-			return $this->fileIds[$cacheId][$path];
+
+		if (isset($this->fileIds[$cacheId][$absolutePath])) {
+			return $this->fileIds[$cacheId][$absolutePath];
 		}
 
 		$parentIds = [];
@@ -189,7 +177,7 @@ protected function getFileIds(ICache $cache, $path, $isExternalStorage) {
 			$parentIds[] = $fileId;
 		}
 
-		$this->fileIds[$cacheId][$path] = $parentIds;
+		$this->fileIds[$cacheId][$absolutePath] = $parentIds;
 
 		return $parentIds;
 	}