diff options
author | Côme Chilliet <come.chilliet@nextcloud.com> | 2022-02-07 12:54:50 +0100 |
---|---|---|
committer | Côme Chilliet <come.chilliet@nextcloud.com> | 2022-02-10 17:46:09 +0100 |
commit | 3c259d76ee9ad88b7e796a0313bac91bcc2d90c9 (patch) | |
tree | 566635561d4f1d08549f2a8498c24c6793677fda /apps/user_ldap/lib | |
parent | b9544626679189bb47664866feeb02519e3cc929 (diff) | |
download | nextcloud-server-3c259d76ee9ad88b7e796a0313bac91bcc2d90c9.tar.gz nextcloud-server-3c259d76ee9ad88b7e796a0313bac91bcc2d90c9.zip |
Fix ldap:update-uuid
Generators cannot be iterated with while or returned by an other
generator, using foreach instead.
And a few other problems.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Diffstat (limited to 'apps/user_ldap/lib')
-rw-r--r-- | apps/user_ldap/lib/Access.php | 2 | ||||
-rw-r--r-- | apps/user_ldap/lib/Command/UpdateUUID.php | 45 | ||||
-rw-r--r-- | apps/user_ldap/lib/Mapping/AbstractMapping.php | 4 |
3 files changed, 30 insertions, 21 deletions
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index 47e4cb8be67..b6ef7d22527 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -1792,7 +1792,7 @@ class Access extends LDAPUtility { * @param string $dn * @param bool $isUser * @param null $ldapRecord - * @return bool|string + * @return false|string * @throws ServerNotAvailableException */ public function getUUID($dn, $isUser = true, $ldapRecord = null) { diff --git a/apps/user_ldap/lib/Command/UpdateUUID.php b/apps/user_ldap/lib/Command/UpdateUUID.php index b655fe21ed5..716bc2d0563 100644 --- a/apps/user_ldap/lib/Command/UpdateUUID.php +++ b/apps/user_ldap/lib/Command/UpdateUUID.php @@ -6,6 +6,7 @@ declare(strict_types=1); * @copyright Copyright (c) 2021 Arthur Schiwon <blizzz@arthur-schiwon.de> * * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * @author Côme Chilliet <come.chilliet@nextcloud.com> * * @license GNU AGPL version 3 or any later version * @@ -55,7 +56,7 @@ class UuidUpdateReport { public $oldUuid = ''; public $newUuid = ''; - public function __construct(string $id, string $dn, bool $isUser, int $state, $oldUuid = '', $newUuid = '') { + public function __construct(string $id, string $dn, bool $isUser, int $state, string $oldUuid = '', string $newUuid = '') { $this->id = $id; $this->dn = $dn; $this->isUser = $isUser; @@ -74,7 +75,7 @@ class UpdateUUID extends Command { private $userProxy; /** @var Group_Proxy */ private $groupProxy; - /** @var array<UuidUpdateReport> */ + /** @var array<UuidUpdateReport[]> */ protected $reports = []; /** @var LoggerInterface */ private $logger; @@ -136,10 +137,14 @@ class UpdateUUID extends Command { protected function execute(InputInterface $input, OutputInterface $output): int { $this->dryRun = $input->getOption('dry-run'); - $entriesToUpdates = $this->estimateNumberOfUpdates($input); - $progressBar = new ProgressBar($output); - $progressBar->iterate($this->handleUpdates($input), $entriesToUpdates); - $this->printReport($input, $output); + $entriesToUpdate = $this->estimateNumberOfUpdates($input); + $progress = new ProgressBar($output); + $progress->start($entriesToUpdate); + foreach($this->handleUpdates($input) as $_) { + $progress->advance(); + } + $progress->finish(); + $output->writeln(''); $this->printReport($output); return count($this->reports[UuidUpdateReport::UNMAPPED]) === 0 && count($this->reports[UuidUpdateReport::UNREADABLE]) === 0 @@ -148,7 +153,7 @@ class UpdateUUID extends Command { : 1; } - protected function printReport(OutputInterface $output) { + protected function printReport(OutputInterface $output): void { if ($output->isQuiet()) { return; } @@ -214,33 +219,37 @@ class UpdateUUID extends Command { protected function handleUpdates(InputInterface $input): \Generator { if ($input->getOption('all')) { - return $this->handleMappingBasedUpdates(false); + foreach($this->handleMappingBasedUpdates(false) as $_) { + yield; + } } else if ($input->getOption('userId') || $input->getOption('groupId') || $input->getOption('dn') ) { - while($this->handleUpdatesByUserId($input->getOption('userId'))) { + foreach($this->handleUpdatesByUserId($input->getOption('userId')) as $_) { yield; } - while($this->handleUpdatesByUserId($input->getOption('groupId'))) { + foreach($this->handleUpdatesByGroupId($input->getOption('groupId')) as $_) { yield; } - while($this->handleUpdatesByDN($input->getOption('dn'))) { + foreach($this->handleUpdatesByDN($input->getOption('dn')) as $_) { yield; } } else { - return $this->handleMappingBasedUpdates(true); + foreach($this->handleMappingBasedUpdates(true) as $_) { + yield; + } } } protected function handleUpdatesByUserId(array $userIds): \Generator { - while($this->handleUpdatesByEntryId($userIds, $this->userMapping)) { + foreach($this->handleUpdatesByEntryId($userIds, $this->userMapping) as $_) { yield; } } protected function handleUpdatesByGroupId(array $groupIds): \Generator { - while($this->handleUpdatesByEntryId($groupIds, $this->groupMapping)) { + foreach($this->handleUpdatesByEntryId($groupIds, $this->groupMapping) as $_) { yield; } } @@ -263,10 +272,10 @@ class UpdateUUID extends Command { $this->reports[UuidUpdateReport::UNMAPPED][] = new UuidUpdateReport('', $dn, true, UuidUpdateReport::UNMAPPED); yield; } - while($this->handleUpdatesByList($this->userMapping, $userList)) { + foreach($this->handleUpdatesByList($this->userMapping, $userList) as $_) { yield; } - while($this->handleUpdatesByList($this->groupMapping, $groupList)) { + foreach($this->handleUpdatesByList($this->groupMapping, $groupList) as $_) { yield; } } @@ -284,7 +293,7 @@ class UpdateUUID extends Command { $uuid = $mapping->getUUIDByDN($dn); $list[] = ['name' => $id, 'uuid' => $uuid]; } - while($this->handleUpdatesByList($mapping, $list)) { + foreach($this->handleUpdatesByList($mapping, $list) as $_) { yield; } } @@ -347,7 +356,7 @@ class UpdateUUID extends Command { } } - protected function estimateNumberOfUpdates(InputInterface $input) { + protected function estimateNumberOfUpdates(InputInterface $input): int { if ($input->getOption('all')) { return $this->userMapping->count() + $this->groupMapping->count(); } else if ($input->getOption('userId') diff --git a/apps/user_ldap/lib/Mapping/AbstractMapping.php b/apps/user_ldap/lib/Mapping/AbstractMapping.php index 653d0e5fbc4..16973f76ff4 100644 --- a/apps/user_ldap/lib/Mapping/AbstractMapping.php +++ b/apps/user_ldap/lib/Mapping/AbstractMapping.php @@ -329,12 +329,12 @@ abstract class AbstractMapping { return $this->getXbyY('directory_uuid', 'ldap_dn_hash', $this->getDNHash($dn)); } - public function getList(int $offset = null, int $limit = null, $invalidatedOnly = false): array { + public function getList(int $offset = 0, int $limit = null, bool $invalidatedOnly = false): array { $select = $this->dbc->getQueryBuilder(); $select->selectAlias('ldap_dn', 'dn') ->selectAlias('owncloud_name', 'name') ->selectAlias('directory_uuid', 'uuid') - ->from($this->getTableName(false)) + ->from($this->getTableName()) ->setMaxResults($limit) ->setFirstResult($offset); |