]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix ldap:update-uuid
authorCôme Chilliet <come.chilliet@nextcloud.com>
Mon, 7 Feb 2022 11:54:50 +0000 (12:54 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Thu, 10 Feb 2022 21:40:24 +0000 (21:40 +0000)
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>
apps/user_ldap/lib/Access.php
apps/user_ldap/lib/Command/UpdateUUID.php
apps/user_ldap/lib/Mapping/AbstractMapping.php

index 88146d210627684ac3d4c71a83c36adee49794d5..9580a4d1a7c675fdeab126f5e59109e0d06fe932 100644 (file)
@@ -1793,7 +1793,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) {
index b655fe21ed542e7f5ad5ef370216d78423b5abf0..716bc2d0563bd9c4fdf909f998d264f9fc43f997 100644 (file)
@@ -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')
index e44743b95016fa3f3f1b1e7e42ac41f9caee2b95..0a1f18b2fee9a89f1a0cb69774a17ce5eaeccb03 100644 (file)
@@ -330,12 +330,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);