From c9cfc7dff9a7c665ab2e3d07ae29fdcfe35da36b Mon Sep 17 00:00:00 2001 From: provokateurin Date: Mon, 27 Jan 2025 15:27:46 +0100 Subject: [PATCH 1/2] fix: Improve type checks Signed-off-by: provokateurin --- lib/Command/ACL.php | 16 ++++++++++++++++ lib/Command/Quota.php | 8 +++++++- lib/Command/Scan.php | 7 ++++++- lib/Mount/CacheRootPermissionsMask.php | 2 +- lib/Trash/TrashBackend.php | 4 ++++ lib/Trash/TrashManager.php | 11 ++++++++++- tests/Folder/FolderManagerTest.php | 6 ++++++ 7 files changed, 50 insertions(+), 4 deletions(-) diff --git a/lib/Command/ACL.php b/lib/Command/ACL.php index f2456fe81..102af37de 100644 --- a/lib/Command/ACL.php +++ b/lib/Command/ACL.php @@ -117,8 +117,16 @@ protected function execute(InputInterface $input, OutputInterface $output): int $mappingType = $input->getOption('user') ? 'user' : 'group'; $mappingId = $input->getOption('user') ?: $input->getOption('group'); $path = $input->getArgument('path'); + if (!is_string($path)) { + $output->writeln(' argument has to be a string'); + return -3; + } $path = trim($path, '/'); $permissionStrings = $input->getArgument('permissions'); + if (!is_array($permissionStrings)) { + $output->writeln(' argument has to be an array'); + return -3; + } $mount = $this->mountProvider->getMount( $folder['id'], @@ -147,6 +155,11 @@ protected function execute(InputInterface $input, OutputInterface $output): int } foreach ($permissionStrings as $permission) { + if (!is_string($permission)) { + $output->writeln(' argument has to be an array of strings'); + return -3; + } + if ($permission[0] !== '+' && $permission[0] !== '-') { $output->writeln('incorrect format for permissions "' . $permission . '"'); return -3; @@ -216,6 +229,9 @@ private function printPermissions(InputInterface $input, OutputInterface $output } } + /** + * @param list $permissions + */ private function parsePermissions(array $permissions): array { $mask = 0; $result = 0; diff --git a/lib/Command/Quota.php b/lib/Command/Quota.php index cf0cd0d43..4e777f949 100644 --- a/lib/Command/Quota.php +++ b/lib/Command/Quota.php @@ -29,7 +29,13 @@ protected function execute(InputInterface $input, OutputInterface $output): int return -1; } - $quotaString = strtolower($input->getArgument('quota')); + $quotaString = $input->getArgument('quota'); + if (!is_string($quotaString)) { + $output->writeln(' argument has to be a string'); + return -3; + } + + $quotaString = strtolower($quotaString); $quota = ($quotaString === 'unlimited') ? FileInfo::SPACE_UNLIMITED : \OCP\Util::computerFileSize($quotaString); if ($quota) { $this->folderManager->setFolderQuota($folder['id'], (int)$quota); diff --git a/lib/Command/Scan.php b/lib/Command/Scan.php index b294afb91..0622365cb 100644 --- a/lib/Command/Scan.php +++ b/lib/Command/Scan.php @@ -71,7 +71,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int } $inputPath = $input->getOption('path'); - if ($inputPath) { + if ($inputPath !== null) { + if (!is_string($inputPath)) { + $output->writeln(' option has to be a string'); + return -3; + } + $inputPath = '/' . trim($inputPath, '/'); } else { $inputPath = ''; diff --git a/lib/Mount/CacheRootPermissionsMask.php b/lib/Mount/CacheRootPermissionsMask.php index 9ea66dda4..085a46433 100644 --- a/lib/Mount/CacheRootPermissionsMask.php +++ b/lib/Mount/CacheRootPermissionsMask.php @@ -21,7 +21,7 @@ public function __construct( } protected function formatCacheEntry($entry): ICacheEntry|false { - $path = $entry['path']; + $path = $entry->getPath(); $isRoot = $path === '' || (str_starts_with($path, '__groupfolders') && count(explode('/', $path)) === 2); if (isset($entry['permissions']) && $isRoot) { $entry['scan_permissions'] = $entry['permissions']; diff --git a/lib/Trash/TrashBackend.php b/lib/Trash/TrashBackend.php index e964815f5..8a4b365d3 100644 --- a/lib/Trash/TrashBackend.php +++ b/lib/Trash/TrashBackend.php @@ -468,6 +468,9 @@ private function getTrashForFolders(IUser $user, array $folders): array { return $items; } + /** + * @return list + */ private function getParentOriginalPaths(string $path, array $trashItemsByOriginalPath): array { $parentPaths = []; while ($path !== '') { @@ -494,6 +497,7 @@ public function getTrashNodeById(IUser $user, int $fileId): ?Node { } $absolutePath = $this->appFolder->getMountPoint()->getMountPoint() . $path; + /** @var string $relativePath Missing typing in \OC\Files\Node\LazyFolder */ $relativePath = $trashFolder->getRelativePath($absolutePath); [, $folderId, $nameAndTime] = explode('/', $relativePath); diff --git a/lib/Trash/TrashManager.php b/lib/Trash/TrashManager.php index a88f4e225..81bc1ee55 100644 --- a/lib/Trash/TrashManager.php +++ b/lib/Trash/TrashManager.php @@ -17,6 +17,7 @@ public function __construct( /** * @param int[] $folderIds + * @return list */ public function listTrashForFolders(array $folderIds): array { $query = $this->connection->getQueryBuilder(); @@ -25,7 +26,15 @@ public function listTrashForFolders(array $folderIds): array { ->orderBy('deleted_time') ->where($query->expr()->in('folder_id', $query->createNamedParameter($folderIds, IQueryBuilder::PARAM_INT_ARRAY))); - return $query->executeQuery()->fetchAll(); + return array_values(array_map(fn (array $row): array => [ + 'trash_id' => (int)$row['trash_id'], + 'name' => (string)$row['name'], + 'deleted_time' => (int)$row['deleted_time'], + 'original_location' => (string)$row['original_location'], + 'folder_id' => (int)$row['folder_id'], + 'file_id' => $row['file_id'] !== null ? (int)$row['file_id'] : null, + 'deleted_by' => $row['deleted_by'] !== null ? (string)$row['deleted_by'] : null, + ], $query->executeQuery()->fetchAll())); } public function addTrashItem(int $folderId, string $name, int $deletedTime, string $originalLocation, int $fileId, string $deletedBy): void { diff --git a/tests/Folder/FolderManagerTest.php b/tests/Folder/FolderManagerTest.php index 8698b33d7..ace2a5ff8 100644 --- a/tests/Folder/FolderManagerTest.php +++ b/tests/Folder/FolderManagerTest.php @@ -7,6 +7,7 @@ namespace OCA\GroupFolders\Tests\Folder; use OCA\GroupFolders\Folder\FolderManager; +use OCA\GroupFolders\ResponseDefinitions; use OCP\Constants; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\FileInfo; @@ -22,6 +23,8 @@ /** * @group DB + * + * @psalm-import-type GroupFoldersApplicable from ResponseDefinitions */ class FolderManagerTest extends TestCase { private FolderManager $manager; @@ -58,6 +61,9 @@ private function clean(): void { $query->delete('group_folders_groups')->executeStatement(); } + /** + * @param list, acl?: bool, quota?: int, size?: int}> $folders + */ private function assertHasFolders(array $folders): void { $existingFolders = array_values($this->manager->getAllFolders()); usort($existingFolders, fn (array $a, array $b): int => strcmp($a['mount_point'], $b['mount_point'])); From 6d5c747815f8b834f40641589b69b135a2537212 Mon Sep 17 00:00:00 2001 From: provokateurin Date: Mon, 27 Jan 2025 10:51:40 +0100 Subject: [PATCH 2/2] refactor: Apply rector refactorings Signed-off-by: provokateurin --- lib/ACL/ACLCacheWrapper.php | 4 ++-- lib/ACL/ACLManager.php | 14 ++++++------- lib/ACL/ACLManagerFactory.php | 10 +++++----- lib/ACL/ACLStorageWrapper.php | 4 ++-- lib/ACL/Rule.php | 10 ++-------- lib/ACL/RuleManager.php | 6 +++--- lib/ACL/UserMapping/UserMapping.php | 6 +++--- lib/ACL/UserMapping/UserMappingManager.php | 4 ++-- lib/AppInfo/Application.php | 1 - lib/AppInfo/Capabilities.php | 6 +++--- lib/AuthorizedAdminSettingMiddleware.php | 4 ++-- lib/BackgroundJob/ExpireGroupTrash.php | 6 +++--- lib/BackgroundJob/ExpireGroupVersions.php | 8 ++++---- lib/CacheListener.php | 2 +- lib/Command/ACL.php | 6 +++--- lib/Command/Create.php | 2 +- lib/Command/ExpireGroup/ExpireGroupTrash.php | 4 ++-- .../ExpireGroup/ExpireGroupVersions.php | 4 ++-- .../ExpireGroup/ExpireGroupVersionsTrash.php | 4 ++-- lib/Command/Group.php | 2 +- lib/Command/ListCommand.php | 8 ++++---- lib/Command/Trashbin/Cleanup.php | 2 +- lib/Controller/FolderController.php | 14 ++++++------- lib/DAV/ACLPlugin.php | 8 ++++---- lib/DAV/GroupFolderNode.php | 2 +- lib/DAV/GroupFoldersHome.php | 6 +++--- lib/DAV/RootCollection.php | 6 +++--- lib/Folder/FolderManager.php | 12 +++++------ .../CircleDestroyedEventListener.php | 2 +- lib/Listeners/NodeRenamedListener.php | 2 +- .../Version103000Date20180806161724.php | 2 +- lib/Migration/WrongDefaultQuotaRepairStep.php | 2 +- lib/Mount/CacheRootPermissionsMask.php | 2 +- lib/Mount/GroupFolderStorage.php | 8 ++++---- lib/Mount/GroupMountPoint.php | 2 +- lib/Mount/MountProvider.php | 20 +++++++++---------- lib/Mount/RootPermissionsMask.php | 2 +- lib/Service/ApplicationService.php | 2 +- lib/Service/DelegationService.php | 6 +++--- lib/Service/FoldersFilter.php | 4 ++-- lib/Settings/Admin.php | 8 ++++---- lib/Settings/Section.php | 4 ++-- lib/Trash/GroupTrashItem.php | 4 ++-- lib/Trash/TrashBackend.php | 20 +++++++++---------- lib/Trash/TrashManager.php | 2 +- lib/Versions/ExpireManager.php | 2 +- lib/Versions/GroupVersion.php | 4 ++-- lib/Versions/GroupVersionsExpireManager.php | 10 +++++----- lib/Versions/VersionsBackend.php | 14 ++++++------- tests/ACL/ACLManagerTest.php | 10 +++++----- 50 files changed, 144 insertions(+), 153 deletions(-) diff --git a/lib/ACL/ACLCacheWrapper.php b/lib/ACL/ACLCacheWrapper.php index ba75c2b80..2c94c5495 100644 --- a/lib/ACL/ACLCacheWrapper.php +++ b/lib/ACL/ACLCacheWrapper.php @@ -17,8 +17,8 @@ class ACLCacheWrapper extends CacheWrapper { public function __construct( ICache $cache, - private ACLManager $aclManager, - private bool $inShare, + private readonly ACLManager $aclManager, + private readonly bool $inShare, ) { parent::__construct($cache); } diff --git a/lib/ACL/ACLManager.php b/lib/ACL/ACLManager.php index ad1041f4d..335fa1456 100644 --- a/lib/ACL/ACLManager.php +++ b/lib/ACL/ACLManager.php @@ -17,16 +17,16 @@ use RuntimeException; class ACLManager { - private CappedMemoryCache $ruleCache; + private readonly CappedMemoryCache $ruleCache; public function __construct( - private RuleManager $ruleManager, - private TrashManager $trashManager, - private LoggerInterface $logger, - private IUser $user, - private \Closure $rootFolderProvider, + private readonly RuleManager $ruleManager, + private readonly TrashManager $trashManager, + private readonly LoggerInterface $logger, + private readonly IUser $user, + private readonly \Closure $rootFolderProvider, private ?int $rootStorageId = null, - private bool $inheritMergePerUser = false, + private readonly bool $inheritMergePerUser = false, ) { $this->ruleCache = new CappedMemoryCache(); } diff --git a/lib/ACL/ACLManagerFactory.php b/lib/ACL/ACLManagerFactory.php index cd5915d3a..93108b572 100644 --- a/lib/ACL/ACLManagerFactory.php +++ b/lib/ACL/ACLManagerFactory.php @@ -15,11 +15,11 @@ class ACLManagerFactory { public function __construct( - private RuleManager $ruleManager, - private TrashManager $trashManager, - private IAppConfig $config, - private LoggerInterface $logger, - private \Closure $rootFolderProvider, + private readonly RuleManager $ruleManager, + private readonly TrashManager $trashManager, + private readonly IAppConfig $config, + private readonly LoggerInterface $logger, + private readonly \Closure $rootFolderProvider, ) { } diff --git a/lib/ACL/ACLStorageWrapper.php b/lib/ACL/ACLStorageWrapper.php index a1e1ae1fb..87a615632 100644 --- a/lib/ACL/ACLStorageWrapper.php +++ b/lib/ACL/ACLStorageWrapper.php @@ -17,8 +17,8 @@ use OCP\Files\Storage\IStorage; class ACLStorageWrapper extends Wrapper implements IConstructableStorage { - private ACLManager $aclManager; - private bool $inShare; + private readonly ACLManager $aclManager; + private readonly bool $inShare; public function __construct($arguments) { parent::__construct($arguments); diff --git a/lib/ACL/Rule.php b/lib/ACL/Rule.php index d06f2212a..528151e5c 100644 --- a/lib/ACL/Rule.php +++ b/lib/ACL/Rule.php @@ -40,8 +40,8 @@ class Rule implements XmlSerializable, XmlDeserializable, \JsonSerializable { * and one that specifies the permissions to set for non inherited values (1-> allow, 0 -> deny) */ public function __construct( - private IUserMapping $userMapping, - private int $fileId, + private readonly IUserMapping $userMapping, + private readonly int $fileId, private int $mask, int $permissions, ) { @@ -86,9 +86,6 @@ public function applyPermissions(int $permissions): int { * Apply the deny permissions this rule to an existing permission set, returning the resulting permissions * * Only the deny permissions included in the current mask will overwrite the existing permissions - * - * @param int $permissions - * @return int */ public function applyDenyPermissions(int $permissions): int { $invertedMask = ~$this->mask; @@ -98,9 +95,6 @@ public function applyDenyPermissions(int $permissions): int { return $permissions & $denyMask; } - /** - * @return void - */ public function xmlSerialize(Writer $writer): void { $data = [ self::ACL => [ diff --git a/lib/ACL/RuleManager.php b/lib/ACL/RuleManager.php index 491464860..7997c544f 100644 --- a/lib/ACL/RuleManager.php +++ b/lib/ACL/RuleManager.php @@ -19,9 +19,9 @@ class RuleManager { public function __construct( - private IDBConnection $connection, - private IUserMappingManager $userMappingManager, - private IEventDispatcher $eventDispatcher, + private readonly IDBConnection $connection, + private readonly IUserMappingManager $userMappingManager, + private readonly IEventDispatcher $eventDispatcher, ) { } diff --git a/lib/ACL/UserMapping/UserMapping.php b/lib/ACL/UserMapping/UserMapping.php index 2a9b2e207..c0309c264 100644 --- a/lib/ACL/UserMapping/UserMapping.php +++ b/lib/ACL/UserMapping/UserMapping.php @@ -9,14 +9,14 @@ namespace OCA\GroupFolders\ACL\UserMapping; class UserMapping implements IUserMapping { - private string $displayName; + private readonly string $displayName; /** * @param 'user'|'group'|'dummy' $type */ public function __construct( - private string $type, - private string $id, + private readonly string $type, + private readonly string $id, ?string $displayName = null, ) { $this->displayName = $displayName ?? $id; diff --git a/lib/ACL/UserMapping/UserMappingManager.php b/lib/ACL/UserMapping/UserMappingManager.php index 33a607666..dac155c45 100644 --- a/lib/ACL/UserMapping/UserMappingManager.php +++ b/lib/ACL/UserMapping/UserMappingManager.php @@ -15,8 +15,8 @@ class UserMappingManager implements IUserMappingManager { public function __construct( - private IGroupManager $groupManager, - private IUserManager $userManager, + private readonly IGroupManager $groupManager, + private readonly IUserManager $userManager, ) { } diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 5ca54e458..6f597309c 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -125,7 +125,6 @@ public function register(IRegistrationContext $context): void { $c->get(FolderManager::class), $c->get(TrashManager::class), $c->get('GroupAppFolder'), - $c->get(MountProvider::class), $c->get(ACLManagerFactory::class), $c->get(IRootFolder::class), $c->get(LoggerInterface::class), diff --git a/lib/AppInfo/Capabilities.php b/lib/AppInfo/Capabilities.php index 32a2dbb14..6369e58cd 100644 --- a/lib/AppInfo/Capabilities.php +++ b/lib/AppInfo/Capabilities.php @@ -15,9 +15,9 @@ class Capabilities implements ICapability { public function __construct( - private IUserSession $userSession, - private FolderManager $folderManager, - private IAppManager $appManager, + private readonly IUserSession $userSession, + private readonly FolderManager $folderManager, + private readonly IAppManager $appManager, ) { } diff --git a/lib/AuthorizedAdminSettingMiddleware.php b/lib/AuthorizedAdminSettingMiddleware.php index 0d50af602..7a9a9bd05 100644 --- a/lib/AuthorizedAdminSettingMiddleware.php +++ b/lib/AuthorizedAdminSettingMiddleware.php @@ -21,8 +21,8 @@ class AuthorizedAdminSettingMiddleware extends Middleware { public function __construct( - private DelegationService $delegatedService, - private IRequest $request, + private readonly DelegationService $delegatedService, + private readonly IRequest $request, ) { } diff --git a/lib/BackgroundJob/ExpireGroupTrash.php b/lib/BackgroundJob/ExpireGroupTrash.php index f42b06e2b..8d7732fcc 100644 --- a/lib/BackgroundJob/ExpireGroupTrash.php +++ b/lib/BackgroundJob/ExpireGroupTrash.php @@ -16,9 +16,9 @@ class ExpireGroupTrash extends TimedJob { public function __construct( - private TrashBackend $trashBackend, - private Expiration $expiration, - private IAppConfig $config, + private readonly TrashBackend $trashBackend, + private readonly Expiration $expiration, + private readonly IAppConfig $config, ITimeFactory $timeFactory, ) { parent::__construct($timeFactory); diff --git a/lib/BackgroundJob/ExpireGroupVersions.php b/lib/BackgroundJob/ExpireGroupVersions.php index 96c7461f1..1ae23153a 100644 --- a/lib/BackgroundJob/ExpireGroupVersions.php +++ b/lib/BackgroundJob/ExpireGroupVersions.php @@ -19,10 +19,10 @@ class ExpireGroupVersions extends TimedJob { public function __construct( ITimeFactory $time, - private GroupVersionsExpireManager $expireManager, - private IAppConfig $appConfig, - private FolderManager $folderManager, - private LoggerInterface $logger, + private readonly GroupVersionsExpireManager $expireManager, + private readonly IAppConfig $appConfig, + private readonly FolderManager $folderManager, + private readonly LoggerInterface $logger, ) { parent::__construct($time); diff --git a/lib/CacheListener.php b/lib/CacheListener.php index c84af2e3c..fb3c9c264 100644 --- a/lib/CacheListener.php +++ b/lib/CacheListener.php @@ -16,7 +16,7 @@ class CacheListener { public function __construct( - private IEventDispatcher $eventDispatcher, + private readonly IEventDispatcher $eventDispatcher, ) { } diff --git a/lib/Command/ACL.php b/lib/Command/ACL.php index 102af37de..97c023e2b 100644 --- a/lib/Command/ACL.php +++ b/lib/Command/ACL.php @@ -27,10 +27,10 @@ class ACL extends FolderCommand { public function __construct( FolderManager $folderManager, IRootFolder $rootFolder, - private RuleManager $ruleManager, + private readonly RuleManager $ruleManager, MountProvider $mountProvider, - private ACLManagerFactory $aclManagerFactory, - private IUserManager $userManager, + private readonly ACLManagerFactory $aclManagerFactory, + private readonly IUserManager $userManager, ) { parent::__construct($folderManager, $rootFolder, $mountProvider); } diff --git a/lib/Command/Create.php b/lib/Command/Create.php index 64fe6192c..d93a423f5 100644 --- a/lib/Command/Create.php +++ b/lib/Command/Create.php @@ -16,7 +16,7 @@ class Create extends Base { public function __construct( - private FolderManager $folderManager, + private readonly FolderManager $folderManager, ) { parent::__construct(); } diff --git a/lib/Command/ExpireGroup/ExpireGroupTrash.php b/lib/Command/ExpireGroup/ExpireGroupTrash.php index 99ab7809c..d2ce37dbe 100644 --- a/lib/Command/ExpireGroup/ExpireGroupTrash.php +++ b/lib/Command/ExpireGroup/ExpireGroupTrash.php @@ -15,8 +15,8 @@ class ExpireGroupTrash extends ExpireGroupBase { public function __construct( - private TrashBackend $trashBackend, - private Expiration $expiration, + private readonly TrashBackend $trashBackend, + private readonly Expiration $expiration, ) { parent::__construct(); } diff --git a/lib/Command/ExpireGroup/ExpireGroupVersions.php b/lib/Command/ExpireGroup/ExpireGroupVersions.php index f092d183c..63d53fcf8 100644 --- a/lib/Command/ExpireGroup/ExpireGroupVersions.php +++ b/lib/Command/ExpireGroup/ExpireGroupVersions.php @@ -21,8 +21,8 @@ */ class ExpireGroupVersions extends ExpireGroupBase { public function __construct( - private GroupVersionsExpireManager $expireManager, - private IEventDispatcher $eventDispatcher, + private readonly GroupVersionsExpireManager $expireManager, + private readonly IEventDispatcher $eventDispatcher, ) { parent::__construct(); } diff --git a/lib/Command/ExpireGroup/ExpireGroupVersionsTrash.php b/lib/Command/ExpireGroup/ExpireGroupVersionsTrash.php index 80f73459e..a7a243c1a 100644 --- a/lib/Command/ExpireGroup/ExpireGroupVersionsTrash.php +++ b/lib/Command/ExpireGroup/ExpireGroupVersionsTrash.php @@ -19,8 +19,8 @@ class ExpireGroupVersionsTrash extends ExpireGroupVersions { public function __construct( GroupVersionsExpireManager $expireManager, IEventDispatcher $eventDispatcher, - private TrashBackend $trashBackend, - private Expiration $expiration, + private readonly TrashBackend $trashBackend, + private readonly Expiration $expiration, ) { parent::__construct($expireManager, $eventDispatcher); } diff --git a/lib/Command/Group.php b/lib/Command/Group.php index 823502966..a4ce1705e 100644 --- a/lib/Command/Group.php +++ b/lib/Command/Group.php @@ -29,7 +29,7 @@ class Group extends FolderCommand { public function __construct( FolderManager $folderManager, IRootFolder $rootFolder, - private IGroupManager $groupManager, + private readonly IGroupManager $groupManager, MountProvider $mountProvider, ) { parent::__construct($folderManager, $rootFolder, $mountProvider); diff --git a/lib/Command/ListCommand.php b/lib/Command/ListCommand.php index 2b5eafcc8..202679e95 100644 --- a/lib/Command/ListCommand.php +++ b/lib/Command/ListCommand.php @@ -30,10 +30,10 @@ class ListCommand extends Base { public function __construct( - private FolderManager $folderManager, - private IRootFolder $rootFolder, - private IGroupManager $groupManager, - private IUserManager $userManager, + private readonly FolderManager $folderManager, + private readonly IRootFolder $rootFolder, + private readonly IGroupManager $groupManager, + private readonly IUserManager $userManager, ) { parent::__construct(); } diff --git a/lib/Command/Trashbin/Cleanup.php b/lib/Command/Trashbin/Cleanup.php index 9f595ea60..12391d3fe 100644 --- a/lib/Command/Trashbin/Cleanup.php +++ b/lib/Command/Trashbin/Cleanup.php @@ -24,7 +24,7 @@ class Cleanup extends Base { private ?TrashBackend $trashBackend = null; public function __construct( - private FolderManager $folderManager, + private readonly FolderManager $folderManager, ) { parent::__construct(); if (Server::get(IAppManager::class)->isEnabledForUser('files_trashbin')) { diff --git a/lib/Controller/FolderController.php b/lib/Controller/FolderController.php index 0293a2019..a4d5caa50 100644 --- a/lib/Controller/FolderController.php +++ b/lib/Controller/FolderController.php @@ -35,18 +35,18 @@ * @psalm-import-type InternalFolderOut from FolderManager */ class FolderController extends OCSController { - private ?IUser $user; + private readonly ?IUser $user; public function __construct( string $AppName, IRequest $request, - private FolderManager $manager, - private MountProvider $mountProvider, - private IRootFolder $rootFolder, + private readonly FolderManager $manager, + private readonly MountProvider $mountProvider, + private readonly IRootFolder $rootFolder, IUserSession $userSession, - private FoldersFilter $foldersFilter, - private DelegationService $delegationService, - private IGroupManager $groupManager, + private readonly FoldersFilter $foldersFilter, + private readonly DelegationService $delegationService, + private readonly IGroupManager $groupManager, ) { parent::__construct($AppName, $request); $this->user = $userSession->getUser(); diff --git a/lib/DAV/ACLPlugin.php b/lib/DAV/ACLPlugin.php index a27a68e16..9ad8dd4fd 100644 --- a/lib/DAV/ACLPlugin.php +++ b/lib/DAV/ACLPlugin.php @@ -37,10 +37,10 @@ class ACLPlugin extends ServerPlugin { private ?IUser $user = null; public function __construct( - private RuleManager $ruleManager, - private IUserSession $userSession, - private FolderManager $folderManager, - private IEventDispatcher $eventDispatcher, + private readonly RuleManager $ruleManager, + private readonly IUserSession $userSession, + private readonly FolderManager $folderManager, + private readonly IEventDispatcher $eventDispatcher, ) { } diff --git a/lib/DAV/GroupFolderNode.php b/lib/DAV/GroupFolderNode.php index 481531651..e63adc038 100644 --- a/lib/DAV/GroupFolderNode.php +++ b/lib/DAV/GroupFolderNode.php @@ -16,7 +16,7 @@ class GroupFolderNode extends Directory { public function __construct( View $view, FileInfo $info, - private int $folderId, + private readonly int $folderId, ) { parent::__construct($view, $info); } diff --git a/lib/DAV/GroupFoldersHome.php b/lib/DAV/GroupFoldersHome.php index ea5595280..54c3d221e 100644 --- a/lib/DAV/GroupFoldersHome.php +++ b/lib/DAV/GroupFoldersHome.php @@ -23,9 +23,9 @@ class GroupFoldersHome implements ICollection { public function __construct( private array $principalInfo, - private FolderManager $folderManager, - private IRootFolder $rootFolder, - private IUser $user, + private readonly FolderManager $folderManager, + private readonly IRootFolder $rootFolder, + private readonly IUser $user, ) { } diff --git a/lib/DAV/RootCollection.php b/lib/DAV/RootCollection.php index e1d162af7..1861870a0 100644 --- a/lib/DAV/RootCollection.php +++ b/lib/DAV/RootCollection.php @@ -16,10 +16,10 @@ class RootCollection extends AbstractPrincipalCollection { public function __construct( - private IUserSession $userSession, + private readonly IUserSession $userSession, PrincipalBackend\BackendInterface $principalBackend, - private FolderManager $folderManager, - private IRootFolder $rootFolder, + private readonly FolderManager $folderManager, + private readonly IRootFolder $rootFolder, ) { parent::__construct($principalBackend, 'principals/users'); } diff --git a/lib/Folder/FolderManager.php b/lib/Folder/FolderManager.php index 971aaaea3..0f1c04efc 100644 --- a/lib/Folder/FolderManager.php +++ b/lib/Folder/FolderManager.php @@ -66,12 +66,12 @@ class FolderManager { public const SPACE_DEFAULT = -4; public function __construct( - private IDBConnection $connection, - private IGroupManager $groupManager, - private IMimeTypeLoader $mimeTypeLoader, - private LoggerInterface $logger, - private IEventDispatcher $eventDispatcher, - private IConfig $config, + private readonly IDBConnection $connection, + private readonly IGroupManager $groupManager, + private readonly IMimeTypeLoader $mimeTypeLoader, + private readonly LoggerInterface $logger, + private readonly IEventDispatcher $eventDispatcher, + private readonly IConfig $config, ) { } diff --git a/lib/Listeners/CircleDestroyedEventListener.php b/lib/Listeners/CircleDestroyedEventListener.php index aeb3f00a7..f1ae1a660 100644 --- a/lib/Listeners/CircleDestroyedEventListener.php +++ b/lib/Listeners/CircleDestroyedEventListener.php @@ -19,7 +19,7 @@ */ class CircleDestroyedEventListener implements IEventListener { public function __construct( - private FolderManager $folderManager, + private readonly FolderManager $folderManager, ) { } diff --git a/lib/Listeners/NodeRenamedListener.php b/lib/Listeners/NodeRenamedListener.php index b3281519f..c692d1f20 100644 --- a/lib/Listeners/NodeRenamedListener.php +++ b/lib/Listeners/NodeRenamedListener.php @@ -21,7 +21,7 @@ */ class NodeRenamedListener implements IEventListener { public function __construct( - private TrashManager $trashManager, + private readonly TrashManager $trashManager, ) { } diff --git a/lib/Migration/Version103000Date20180806161724.php b/lib/Migration/Version103000Date20180806161724.php index d6fc5e7a6..25af58890 100644 --- a/lib/Migration/Version103000Date20180806161724.php +++ b/lib/Migration/Version103000Date20180806161724.php @@ -16,7 +16,7 @@ class Version103000Date20180806161724 extends SimpleMigrationStep { private array $applicableData = []; public function __construct( - private IDBConnection $connection, + private readonly IDBConnection $connection, ) { } diff --git a/lib/Migration/WrongDefaultQuotaRepairStep.php b/lib/Migration/WrongDefaultQuotaRepairStep.php index 3d3a367bb..60eb7487a 100644 --- a/lib/Migration/WrongDefaultQuotaRepairStep.php +++ b/lib/Migration/WrongDefaultQuotaRepairStep.php @@ -16,7 +16,7 @@ class WrongDefaultQuotaRepairStep implements IRepairStep { public function __construct( - private FolderManager $manager, + private readonly FolderManager $manager, ) { } diff --git a/lib/Mount/CacheRootPermissionsMask.php b/lib/Mount/CacheRootPermissionsMask.php index 085a46433..3a715a2f6 100644 --- a/lib/Mount/CacheRootPermissionsMask.php +++ b/lib/Mount/CacheRootPermissionsMask.php @@ -15,7 +15,7 @@ class CacheRootPermissionsMask extends CacheWrapper { public function __construct( ICache $cache, - private int $mask, + private readonly int $mask, ) { parent::__construct($cache); } diff --git a/lib/Mount/GroupFolderStorage.php b/lib/Mount/GroupFolderStorage.php index c8ca119fb..58d95d7b1 100644 --- a/lib/Mount/GroupFolderStorage.php +++ b/lib/Mount/GroupFolderStorage.php @@ -19,10 +19,10 @@ use OCP\IUserSession; class GroupFolderStorage extends Quota implements IConstructableStorage { - private int $folderId; - private ?ICacheEntry $rootEntry; - private IUserSession $userSession; - private ?IUser $mountOwner; + private readonly int $folderId; + private readonly ?ICacheEntry $rootEntry; + private readonly IUserSession $userSession; + private readonly ?IUser $mountOwner; /** @var ICache|null */ public $cache; diff --git a/lib/Mount/GroupMountPoint.php b/lib/Mount/GroupMountPoint.php index 4facb1f11..1ace47faa 100644 --- a/lib/Mount/GroupMountPoint.php +++ b/lib/Mount/GroupMountPoint.php @@ -15,7 +15,7 @@ class GroupMountPoint extends MountPoint implements ISystemMountPoint, IShareOwnerlessMount { public function __construct( - private int $folderId, + private readonly int $folderId, IStorage $storage, string $mountpoint, ?array $arguments = null, diff --git a/lib/Mount/MountProvider.php b/lib/Mount/MountProvider.php index f5bc74acb..80e006af7 100644 --- a/lib/Mount/MountProvider.php +++ b/lib/Mount/MountProvider.php @@ -37,16 +37,16 @@ class MountProvider implements IMountProvider { private ?int $rootStorageId = null; public function __construct( - private FolderManager $folderManager, - private \Closure $rootProvider, - private ACLManagerFactory $aclManagerFactory, - private IUserSession $userSession, - private IRequest $request, - private IMountProviderCollection $mountProviderCollection, - private IDBConnection $connection, - private ICache $cache, - private bool $allowRootShare, - private bool $enableEncryption, + private readonly FolderManager $folderManager, + private readonly \Closure $rootProvider, + private readonly ACLManagerFactory $aclManagerFactory, + private readonly IUserSession $userSession, + private readonly IRequest $request, + private readonly IMountProviderCollection $mountProviderCollection, + private readonly IDBConnection $connection, + private readonly ICache $cache, + private readonly bool $allowRootShare, + private readonly bool $enableEncryption, ) { } diff --git a/lib/Mount/RootPermissionsMask.php b/lib/Mount/RootPermissionsMask.php index fd55de8c7..ab3eb2d71 100644 --- a/lib/Mount/RootPermissionsMask.php +++ b/lib/Mount/RootPermissionsMask.php @@ -20,7 +20,7 @@ class RootPermissionsMask extends Wrapper { /** * the permissions bits we want to keep */ - private int $mask; + private readonly int $mask; /** * @param array $arguments ['storage' => $storage, 'mask' => $mask] diff --git a/lib/Service/ApplicationService.php b/lib/Service/ApplicationService.php index 4e3492e04..d9973c272 100644 --- a/lib/Service/ApplicationService.php +++ b/lib/Service/ApplicationService.php @@ -12,7 +12,7 @@ class ApplicationService { public function __construct( - private IAppManager $appManager, + private readonly IAppManager $appManager, ) { } diff --git a/lib/Service/DelegationService.php b/lib/Service/DelegationService.php index 3d642aa62..0569850f9 100644 --- a/lib/Service/DelegationService.php +++ b/lib/Service/DelegationService.php @@ -26,9 +26,9 @@ class DelegationService { private const CLASS_API_ACCESS = DelegationController::class; public function __construct( - private AuthorizedGroupMapper $groupAuthorizationMapper, - private IGroupManager $groupManager, - private IUserSession $userSession, + private readonly AuthorizedGroupMapper $groupAuthorizationMapper, + private readonly IGroupManager $groupManager, + private readonly IUserSession $userSession, ) { } diff --git a/lib/Service/FoldersFilter.php b/lib/Service/FoldersFilter.php index 2f3af74d2..415bd2942 100644 --- a/lib/Service/FoldersFilter.php +++ b/lib/Service/FoldersFilter.php @@ -16,8 +16,8 @@ */ class FoldersFilter { public function __construct( - private IUserSession $userSession, - private IGroupManager $groupManager, + private readonly IUserSession $userSession, + private readonly IGroupManager $groupManager, ) { } diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index 9658cd96a..faee6b94c 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -16,10 +16,10 @@ class Admin implements IDelegatedSettings { public function __construct( - private IInitialState $initialState, - private ApplicationService $applicationService, - private DelegationService $delegationService, - private IAppManager $appManager, + private readonly IInitialState $initialState, + private readonly ApplicationService $applicationService, + private readonly DelegationService $delegationService, + private readonly IAppManager $appManager, ) { } diff --git a/lib/Settings/Section.php b/lib/Settings/Section.php index c87e0527f..7a0bf9fa0 100644 --- a/lib/Settings/Section.php +++ b/lib/Settings/Section.php @@ -13,8 +13,8 @@ class Section implements IIconSection { public function __construct( - private IL10N $l, - private IURLGenerator $url, + private readonly IL10N $l, + private readonly IURLGenerator $url, ) { } diff --git a/lib/Trash/GroupTrashItem.php b/lib/Trash/GroupTrashItem.php index c3f8f9911..a16e65497 100644 --- a/lib/Trash/GroupTrashItem.php +++ b/lib/Trash/GroupTrashItem.php @@ -14,12 +14,12 @@ class GroupTrashItem extends TrashItem { public function __construct( ITrashBackend $backend, - private string $internalOriginalLocation, + private readonly string $internalOriginalLocation, int $deletedTime, string $trashPath, FileInfo $fileInfo, IUser $user, - private string $mountPoint, + private readonly string $mountPoint, ?IUser $deletedBy, ) { parent::__construct($backend, $this->mountPoint . '/' . $this->internalOriginalLocation, $deletedTime, $trashPath, $fileInfo, $user, $deletedBy); diff --git a/lib/Trash/TrashBackend.php b/lib/Trash/TrashBackend.php index 8a4b365d3..8f34cbf37 100644 --- a/lib/Trash/TrashBackend.php +++ b/lib/Trash/TrashBackend.php @@ -16,7 +16,6 @@ use OCA\GroupFolders\ACL\ACLManagerFactory; use OCA\GroupFolders\Folder\FolderManager; use OCA\GroupFolders\Mount\GroupFolderStorage; -use OCA\GroupFolders\Mount\MountProvider; use OCA\GroupFolders\Versions\VersionsBackend; use OCP\Constants; use OCP\Files\Folder; @@ -37,15 +36,14 @@ class TrashBackend implements ITrashBackend { private ?VersionsBackend $versionsBackend = null; public function __construct( - private FolderManager $folderManager, - private TrashManager $trashManager, - private Folder $appFolder, - private MountProvider $mountProvider, - private ACLManagerFactory $aclManagerFactory, - private IRootFolder $rootFolder, - private LoggerInterface $logger, - private IUserManager $userManager, - private IUserSession $userSession, + private readonly FolderManager $folderManager, + private readonly TrashManager $trashManager, + private readonly Folder $appFolder, + private readonly ACLManagerFactory $aclManagerFactory, + private readonly IRootFolder $rootFolder, + private readonly LoggerInterface $logger, + private readonly IUserManager $userManager, + private readonly IUserSession $userSession, ) { } @@ -166,7 +164,7 @@ public function restoreItem(ITrashItem $item): void { try { $targetStorage->moveFromStorage($trashStorage, $trashLocation, $targetLocation); $targetStorage->getUpdater()->renameFromStorage($trashStorage, $trashLocation, $targetLocation); - } catch (DecryptionFailedException $e) { + } catch (DecryptionFailedException) { // Before https://github.com/nextcloud/groupfolders/pull/3425 the key would be in the wrong place, leading to the decryption failure. // for those we fall back to the old restore behavior [$unwrappedTargetStorage, $unwrappedTargetLocation] = $this->unwrapJails($targetStorage, $targetLocation); diff --git a/lib/Trash/TrashManager.php b/lib/Trash/TrashManager.php index 81bc1ee55..955e9a298 100644 --- a/lib/Trash/TrashManager.php +++ b/lib/Trash/TrashManager.php @@ -11,7 +11,7 @@ class TrashManager { public function __construct( - private IDBConnection $connection, + private readonly IDBConnection $connection, ) { } diff --git a/lib/Versions/ExpireManager.php b/lib/Versions/ExpireManager.php index 9f82e42d3..29c8202bb 100644 --- a/lib/Versions/ExpireManager.php +++ b/lib/Versions/ExpireManager.php @@ -32,7 +32,7 @@ class ExpireManager { ]; public function __construct( - private Expiration $expiration, + private readonly Expiration $expiration, ) { } diff --git a/lib/Versions/GroupVersion.php b/lib/Versions/GroupVersion.php index 10f66851a..953a496f4 100644 --- a/lib/Versions/GroupVersion.php +++ b/lib/Versions/GroupVersion.php @@ -26,8 +26,8 @@ public function __construct( IVersionBackend $backend, IUser $user, array $metadata, - private File $versionFile, - private int $folderId, + private readonly File $versionFile, + private readonly int $folderId, ) { parent::__construct($timestamp, $revisionId, $name, $size, $mimetype, $path, $sourceFileInfo, $backend, $user, $metadata); } diff --git a/lib/Versions/GroupVersionsExpireManager.php b/lib/Versions/GroupVersionsExpireManager.php index 12dbf5ecb..8e9878eab 100644 --- a/lib/Versions/GroupVersionsExpireManager.php +++ b/lib/Versions/GroupVersionsExpireManager.php @@ -24,11 +24,11 @@ */ class GroupVersionsExpireManager { public function __construct( - private FolderManager $folderManager, - private ExpireManager $expireManager, - private VersionsBackend $versionsBackend, - private ITimeFactory $timeFactory, - private IEventDispatcher $dispatcher, + private readonly FolderManager $folderManager, + private readonly ExpireManager $expireManager, + private readonly VersionsBackend $versionsBackend, + private readonly ITimeFactory $timeFactory, + private readonly IEventDispatcher $dispatcher, ) { } diff --git a/lib/Versions/VersionsBackend.php b/lib/Versions/VersionsBackend.php index 057990678..0000e9401 100644 --- a/lib/Versions/VersionsBackend.php +++ b/lib/Versions/VersionsBackend.php @@ -38,13 +38,13 @@ */ class VersionsBackend implements IVersionBackend, IMetadataVersionBackend, IDeletableVersionBackend, INeedSyncVersionBackend, IVersionsImporterBackend { public function __construct( - private IRootFolder $rootFolder, - private Folder $appFolder, - private MountProvider $mountProvider, - private LoggerInterface $logger, - private GroupVersionsMapper $groupVersionsMapper, - private IMimeTypeLoader $mimeTypeLoader, - private IUserSession $userSession, + private readonly IRootFolder $rootFolder, + private readonly Folder $appFolder, + private readonly MountProvider $mountProvider, + private readonly LoggerInterface $logger, + private readonly GroupVersionsMapper $groupVersionsMapper, + private readonly IMimeTypeLoader $mimeTypeLoader, + private readonly IUserSession $userSession, ) { } diff --git a/tests/ACL/ACLManagerTest.php b/tests/ACL/ACLManagerTest.php index 136d4865b..49f35ef8c 100644 --- a/tests/ACL/ACLManagerTest.php +++ b/tests/ACL/ACLManagerTest.php @@ -51,11 +51,11 @@ protected function setUp(): void { }); $this->ruleManager->method('getRulesForPrefix') - ->willReturnCallback(function (IUser $user, int $storageId, string $prefix) { - return array_filter($this->rules, function (string $path) use ($prefix) { - return $prefix === $path || str_starts_with($path, $prefix . '/'); - }, ARRAY_FILTER_USE_KEY); - }); + ->willReturnCallback(fn (IUser $user, int $storageId, string $prefix): array => array_filter( + $this->rules, + static fn (string $path): bool => $prefix === $path || str_starts_with($path, $prefix . '/'), + ARRAY_FILTER_USE_KEY, + )); } private function createMapping(string $id): IUserMapping&MockObject {