From 176171a2fa24e97e322554e21fd962af5745d28a Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Thu, 6 Jul 2023 23:15:41 +0200 Subject: [PATCH 1/2] preload the acl rules for the root of the groupfolders Signed-off-by: Robin Appelman --- lib/Mount/MountProvider.php | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/lib/Mount/MountProvider.php b/lib/Mount/MountProvider.php index 474ab12e4..11e928768 100644 --- a/lib/Mount/MountProvider.php +++ b/lib/Mount/MountProvider.php @@ -23,6 +23,7 @@ use OC\Files\Storage\Wrapper\Jail; use OC\Files\Storage\Wrapper\PermissionsMask; +use OCA\GroupFolders\ACL\ACLManager; use OCA\GroupFolders\ACL\ACLManagerFactory; use OCA\GroupFolders\ACL\ACLStorageWrapper; use OCA\GroupFolders\Folder\FolderManager; @@ -130,7 +131,16 @@ public function getMountsForUser(IUser $user, IStorageFactory $loader) { }, $folders); $conflicts = $this->findConflictsForUser($user, $mountPoints); - return array_values(array_filter(array_map(function ($folder) use ($user, $loader, $conflicts) { + $foldersWithAcl = array_filter($folders, function(array $folder) { + return $folder['acl']; + }); + $aclRootPaths = array_map(function(array $folder) { + return $this->getJailPath($folder['folder_id']); + }, $foldersWithAcl); + $aclManager = $this->aclManagerFactory->getACLManager($user, $this->getRootStorageId()); + $aclManager->preloadPaths($aclRootPaths); + + return array_values(array_filter(array_map(function ($folder) use ($user, $loader, $conflicts, $aclManager) { // check for existing files in the user home and rename them if needed $originalFolderName = $folder['mount_point']; if (in_array($originalFolderName, $conflicts)) { @@ -157,7 +167,8 @@ public function getMountsForUser(IUser $user, IStorageFactory $loader) { $folder['rootCacheEntry'], $loader, $folder['acl'], - $user + $user, + $aclManager ); }, $folders))); } @@ -180,7 +191,20 @@ private function getCurrentUID(): ?string { return $user ? $user->getUID() : null; } - public function getMount(int $id, string $mountPoint, int $permissions, int $quota, ?ICacheEntry $cacheEntry = null, IStorageFactory $loader = null, bool $acl = false, IUser $user = null): ?IMountPoint { + public function getMount( + int $id, + string $mountPoint, + int $permissions, + int $quota, + ?ICacheEntry $cacheEntry = null, + IStorageFactory $loader = null, + bool $acl = false, + IUser $user = null, + ?ACLManager $aclManager = null + ): ?IMountPoint { + if (!$aclManager) { + $aclManager = $this->aclManagerFactory->getACLManager($user, $this->getRootStorageId()); + } if (!$cacheEntry) { // trigger folder creation $folder = $this->getFolder($id); @@ -197,7 +221,6 @@ public function getMount(int $id, string $mountPoint, int $permissions, int $quo // apply acl before jail if ($acl && $user) { $inShare = $this->getCurrentUID() === null || $this->getCurrentUID() !== $user->getUID(); - $aclManager = $this->aclManagerFactory->getACLManager($user, $this->getRootStorageId()); $storage = new ACLStorageWrapper([ 'storage' => $storage, 'acl_manager' => $aclManager, From 9c7d013e851507d80662d29b64ae2da99b27b4e5 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 12 Jul 2023 15:00:24 +0200 Subject: [PATCH 2/2] add php-gd to ci Signed-off-by: Robin Appelman --- .github/workflows/phpunit-mysql.yml | 2 +- .github/workflows/phpunit-oci.yml | 2 +- .github/workflows/phpunit-pgsql.yml | 2 +- .github/workflows/phpunit-sqlite.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/phpunit-mysql.yml b/.github/workflows/phpunit-mysql.yml index dcdc5ba65..a902767bf 100644 --- a/.github/workflows/phpunit-mysql.yml +++ b/.github/workflows/phpunit-mysql.yml @@ -83,7 +83,7 @@ jobs: with: php-version: ${{ matrix.php-versions }} tools: phpunit - extensions: mbstring, iconv, fileinfo, intl, mysql, pdo_mysql + extensions: mbstring, iconv, fileinfo, intl, mysql, pdo_mysql, gd coverage: none - name: Check composer file existence diff --git a/.github/workflows/phpunit-oci.yml b/.github/workflows/phpunit-oci.yml index f46e55deb..d5576a157 100644 --- a/.github/workflows/phpunit-oci.yml +++ b/.github/workflows/phpunit-oci.yml @@ -74,7 +74,7 @@ jobs: uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} - extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, oci8 + extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, oci8, gd tools: phpunit coverage: none diff --git a/.github/workflows/phpunit-pgsql.yml b/.github/workflows/phpunit-pgsql.yml index 086f4da7c..95f485af5 100644 --- a/.github/workflows/phpunit-pgsql.yml +++ b/.github/workflows/phpunit-pgsql.yml @@ -80,7 +80,7 @@ jobs: with: php-version: ${{ matrix.php-versions }} tools: phpunit - extensions: mbstring, iconv, fileinfo, intl, pgsql, pdo_pgsql + extensions: mbstring, iconv, fileinfo, intl, pgsql, pdo_pgsql, gd coverage: none - name: Check composer file existence diff --git a/.github/workflows/phpunit-sqlite.yml b/.github/workflows/phpunit-sqlite.yml index d75d5a9e1..1ea6ef29e 100644 --- a/.github/workflows/phpunit-sqlite.yml +++ b/.github/workflows/phpunit-sqlite.yml @@ -69,7 +69,7 @@ jobs: with: php-version: ${{ matrix.php-versions }} tools: phpunit - extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite + extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, gd coverage: none - name: Check composer file existence