From 725c79d1ec03a712d671498417b0061a1da3073b Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Wed, 10 Nov 2021 15:40:32 +0000 Subject: [PATCH] Desktop: Fixed button to upgrade a master key --- .../EncryptionConfigScreen.tsx | 10 ++++++---- .../lib/components/EncryptionConfigScreen/utils.ts | 13 +++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/app-desktop/gui/EncryptionConfigScreen/EncryptionConfigScreen.tsx b/packages/app-desktop/gui/EncryptionConfigScreen/EncryptionConfigScreen.tsx index 96a932a47..caf9e94e7 100644 --- a/packages/app-desktop/gui/EncryptionConfigScreen/EncryptionConfigScreen.tsx +++ b/packages/app-desktop/gui/EncryptionConfigScreen/EncryptionConfigScreen.tsx @@ -5,7 +5,7 @@ import { _ } from '@joplin/lib/locale'; import time from '@joplin/lib/time'; import shim from '@joplin/lib/shim'; import dialogs from '../dialogs'; -import { decryptedStatText, dontReencryptData, enableEncryptionConfirmationMessages, onSavePasswordClick, onToggleEnabledClick, reencryptData, upgradeMasterKey, useInputPasswords, useNeedMasterPassword, usePasswordChecker, useStats, useToggleShowDisabledMasterKeys } from '@joplin/lib/components/EncryptionConfigScreen/utils'; +import { decryptedStatText, determineKeyPassword, dontReencryptData, enableEncryptionConfirmationMessages, onSavePasswordClick, onToggleEnabledClick, reencryptData, upgradeMasterKey, useInputPasswords, useNeedMasterPassword, usePasswordChecker, useStats, useToggleShowDisabledMasterKeys } from '@joplin/lib/components/EncryptionConfigScreen/utils'; import { MasterKeyEntity } from '@joplin/lib/services/e2ee/types'; import { getEncryptionEnabled, masterKeyEnabled, SyncInfo } from '@joplin/lib/services/synchronizer/syncInfoUtils'; import { getDefaultMasterKey, getMasterPasswordStatusMessage, masterPasswordIsValid, toggleAndSetupEncryption } from '@joplin/lib/services/e2ee/utils'; @@ -41,9 +41,11 @@ const EncryptionConfigScreen = (props: Props) => { const { showDisabledMasterKeys, toggleShowDisabledMasterKeys } = useToggleShowDisabledMasterKeys(); const needMasterPassword = useNeedMasterPassword(passwordChecks, props.masterKeys); - const onUpgradeMasterKey = useCallback((mk: MasterKeyEntity) => { - void upgradeMasterKey(mk, passwordChecks, props.passwords); - }, [passwordChecks, props.passwords]); + const onUpgradeMasterKey = useCallback(async (mk: MasterKeyEntity) => { + const password = determineKeyPassword(mk.id, masterPasswordKeys, props.masterPassword, props.passwords); + const result = await upgradeMasterKey(mk, password); + alert(result); + }, [props.passwords, masterPasswordKeys, props.masterPassword]); const renderNeedUpgradeSection = () => { if (!shim.isElectron()) return null; diff --git a/packages/lib/components/EncryptionConfigScreen/utils.ts b/packages/lib/components/EncryptionConfigScreen/utils.ts index b39879ebf..097adbd9c 100644 --- a/packages/lib/components/EncryptionConfigScreen/utils.ts +++ b/packages/lib/components/EncryptionConfigScreen/utils.ts @@ -198,14 +198,19 @@ export const useNeedMasterPassword = (passwordChecks: PasswordChecks, masterKeys return false; }; -export const upgradeMasterKey = async (masterKey: MasterKeyEntity, passwordChecks: PasswordChecks, passwords: Record): Promise => { - const passwordCheck = passwordChecks[masterKey.id]; - if (!passwordCheck) { +export const determineKeyPassword = (masterKeyId: string, masterPasswordKeys: PasswordChecks, masterPassword: string, passwords: Record): string => { + if (masterPasswordKeys[masterKeyId]) return masterPassword; + return passwords[masterKeyId]; +}; + +export const upgradeMasterKey = async (masterKey: MasterKeyEntity, password: string): Promise => { + if (!password) { return _('Please enter your password in the master key list below before upgrading the key.'); } try { - const password = passwords[masterKey.id]; + // Just re-encrypt the master key, but using the new encryption method + // (which would be the default). const newMasterKey = await EncryptionService.instance().reencryptMasterKey(masterKey, password, password); await MasterKey.save(newMasterKey); void reg.waitForSyncFinishedThenSync();