From d410706b45e8067b2c72473b99c87a2ff2506d26 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Fri, 16 Jan 2026 10:24:57 +0100 Subject: [PATCH] [PM-30846] Fix incorrect log for private key regen in data recovery tool (#18356) * Fix no log * Fix prettier --- .../data-recovery/steps/private-key-step.ts | 13 +++++++++---- .../user-asymmetric-key-regeneration.service.ts | 4 +++- ...ault-user-asymmetric-key-regeneration.service.ts | 6 ++++-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/apps/web/src/app/key-management/data-recovery/steps/private-key-step.ts b/apps/web/src/app/key-management/data-recovery/steps/private-key-step.ts index 82c20c466b8..45c2c6e8a93 100644 --- a/apps/web/src/app/key-management/data-recovery/steps/private-key-step.ts +++ b/apps/web/src/app/key-management/data-recovery/steps/private-key-step.ts @@ -85,9 +85,14 @@ export class PrivateKeyStep implements RecoveryStep { } logger.record("Replacing private key"); - await this.privateKeyRegenerationService.regenerateUserPublicKeyEncryptionKeyPair( - workingData.userId!, - ); - logger.record("Private key replaced successfully"); + const recovered = + await this.privateKeyRegenerationService.regenerateUserPublicKeyEncryptionKeyPair( + workingData.userId!, + ); + if (!recovered) { + logger.record("Private key replacement could not be performed"); + } else { + logger.record("Private key replacement replaced successfully"); + } } } diff --git a/libs/key-management/src/user-asymmetric-key-regeneration/abstractions/user-asymmetric-key-regeneration.service.ts b/libs/key-management/src/user-asymmetric-key-regeneration/abstractions/user-asymmetric-key-regeneration.service.ts index 58620f49ed1..469ed2a00d0 100644 --- a/libs/key-management/src/user-asymmetric-key-regeneration/abstractions/user-asymmetric-key-regeneration.service.ts +++ b/libs/key-management/src/user-asymmetric-key-regeneration/abstractions/user-asymmetric-key-regeneration.service.ts @@ -12,6 +12,8 @@ export abstract class UserAsymmetricKeysRegenerationService { * Performs the regeneration of the user's public/private key pair without checking any preconditions. * This should only be used for V1 encryption accounts * @param userId The user id. + * @returns True if regeneration was performed, false otherwise. + * @throws An error if the regeneration could not be attempted due to missing state */ - abstract regenerateUserPublicKeyEncryptionKeyPair(userId: UserId): Promise; + abstract regenerateUserPublicKeyEncryptionKeyPair(userId: UserId): Promise; } diff --git a/libs/key-management/src/user-asymmetric-key-regeneration/services/default-user-asymmetric-key-regeneration.service.ts b/libs/key-management/src/user-asymmetric-key-regeneration/services/default-user-asymmetric-key-regeneration.service.ts index 36bf9c8a421..f26f5cad6a4 100644 --- a/libs/key-management/src/user-asymmetric-key-regeneration/services/default-user-asymmetric-key-regeneration.service.ts +++ b/libs/key-management/src/user-asymmetric-key-regeneration/services/default-user-asymmetric-key-regeneration.service.ts @@ -123,7 +123,7 @@ export class DefaultUserAsymmetricKeysRegenerationService implements UserAsymmet return false; } - async regenerateUserPublicKeyEncryptionKeyPair(userId: UserId): Promise { + async regenerateUserPublicKeyEncryptionKeyPair(userId: UserId): Promise { const userKey = await firstValueFrom(this.keyService.userKey$(userId)); if (userKey == null) { throw new Error("User key not found"); @@ -152,19 +152,21 @@ export class DefaultUserAsymmetricKeysRegenerationService implements UserAsymmet this.logService.info( "[UserAsymmetricKeyRegeneration] Regeneration not supported for this user at this time.", ); + return false; } else { this.logService.error( "[UserAsymmetricKeyRegeneration] Regeneration error when submitting the request to the server: " + error, ); + return false; } - return; } await this.keyService.setPrivateKey(makeKeyPairResponse.userKeyEncryptedPrivateKey, userId); this.logService.info( "[UserAsymmetricKeyRegeneration] User's asymmetric keys successfully regenerated.", ); + return true; } private async userKeyCanDecrypt(userKey: UserKey, userId: UserId): Promise {