mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
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>
This commit is contained in:
parent
91578d0e5a
commit
ef11c61f19
3 changed files with 30 additions and 21 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue