fix(encryption): Do not register user key related event listeners

when master key is enabled.
Also added a safeguard in PassphraseService.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
This commit is contained in:
Côme Chilliet 2025-06-16 15:44:05 +02:00
parent c2bf3480e4
commit f6365e76a1
No known key found for this signature in database
GPG key ID: A3E2F658B28C760A
2 changed files with 23 additions and 8 deletions

View file

@ -72,7 +72,12 @@ class Application extends App implements IBootstrap {
}
}
public function registerEventListeners(IConfig $config, IEventDispatcher $eventDispatcher, IManager $encryptionManager): void {
public function registerEventListeners(
IConfig $config,
IEventDispatcher $eventDispatcher,
IManager $encryptionManager,
Util $util,
): void {
if (!$encryptionManager->isEnabled()) {
return;
}
@ -84,18 +89,23 @@ class Application extends App implements IBootstrap {
}
// No maintenance so register all events
$eventDispatcher->addServiceListener(UserCreatedEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(UserDeletedEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(BeforePasswordUpdatedEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(PasswordUpdatedEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(BeforePasswordResetEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(PasswordResetEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(UserLoggedInEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(UserLoggedInWithCookieEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(UserLoggedOutEvent::class, UserEventsListener::class);
if (!$util->isMasterKeyEnabled()) {
// Only make sense if no master key is used
$eventDispatcher->addServiceListener(UserCreatedEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(UserDeletedEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(BeforePasswordUpdatedEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(PasswordUpdatedEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(BeforePasswordResetEvent::class, UserEventsListener::class);
$eventDispatcher->addServiceListener(PasswordResetEvent::class, UserEventsListener::class);
}
}
public function registerEncryptionModule(IManager $encryptionManager) {
public function registerEncryptionModule(
IManager $encryptionManager,
) {
$container = $this->getContainer();
$encryptionManager->registerEncryptionModule(

View file

@ -55,6 +55,11 @@ class PassphraseService {
return true;
}
if ($this->util->isMasterKeyEnabled()) {
$this->logger->error('setPassphraseForUser should never be called when master key is enabled');
return true;
}
// Check user exists on backend
$user = $this->userManager->get($userId);
if ($user === null) {