You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nextcloud-server/apps/dav/lib/Migration/DisableSystemAddressBook.php

66 lines
2.2 KiB

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\DAV\Migration;
use OCA\DAV\AppInfo\Application;
use OCA\DAV\ConfigLexicon;
use OCP\AppFramework\Services\IAppConfig;
use OCP\IGroupManager;
use OCP\IUserManager;
use OCP\Migration\IOutput;
use OCP\Migration\IRepairStep;
use OCP\Notification\IManager;
use OCP\ServerVersion;
class DisableSystemAddressBook implements IRepairStep {
public function __construct(
private readonly ServerVersion $serverVersion,
private readonly IAppConfig $appConfig,
private readonly IUserManager $userManager,
private readonly IGroupManager $groupManager,
private readonly IManager $notificationManager,
) {
}
/**
* @inheritdoc
*/
public function getName() {
return 'Disable system address book';
}
/**
* @inheritdoc
*/
public function run(IOutput $output) {
// If the system address book exposure was previously set skip the repair step
if ($this->appConfig->hasAppKey(ConfigLexicon::SYSTEM_ADDRESSBOOK_EXPOSED) === true) {
$output->info('Skipping repair step system address book exposed was previously set');
return;
}
// We use count seen because getting a user count from the backend can be very slow
$limit = $this->appConfig->getAppValueInt('system_addressbook_limit', 5000);
if ($this->userManager->countSeenUsers() <= $limit) {
$output->info("Skipping repair step system address book has less then the threshold $limit of contacts no need to disable");
return;
}
$this->appConfig->setAppValueBool(ConfigLexicon::SYSTEM_ADDRESSBOOK_EXPOSED, false);
$output->warning("System address book disabled because it has more then the threshold of $limit contacts this can be re-enabled later");
// Notify all admin users about the system address book being disabled
foreach ($this->groupManager->get('admin')->getUsers() as $user) {
$notification = $this->notificationManager->createNotification();
$notification->setApp(Application::APP_ID)
->setUser($user->getUID())
->setDateTime(new \DateTime())
->setSubject('SystemSystemAddressBookDisabled', []);
$this->notificationManager->notify($notification);
}
}
}