From ce565f109a22ddcf6c717853f48c5b2551756ef7 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 6 Feb 2019 18:03:47 +0000 Subject: [PATCH] Key Backup: Don't fail if no keys Only fail if there were any keys in the backup (which does mean that the backup will always succeed if there aren't any keys which could also be misleading, but is probably not as bad and can probably be fixed with Trust on Decrypt). Also cheekily fix the error message so it talks about passphrases if you used a passphrase and recovery keys if you used a recovery key. --- .../keybackup/RestoreKeyBackupDialog.js | 33 +++++++++++++++---- src/i18n/strings/en_EN.json | 1 + 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js b/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js index fdb4f0a226..e5b82baa92 100644 --- a/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js +++ b/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js @@ -21,6 +21,9 @@ import Modal from '../../../../Modal'; import { _t } from '../../../../languageHandler'; +const RESTORE_TYPE_PASSPHRASE = 0; +const RESTORE_TYPE_RECOVERYKEY = 1; + /** * Dialog for restoring e2e keys from a backup and the user's recovery key */ @@ -36,6 +39,7 @@ export default React.createClass({ recoveryKeyValid: false, forceRecoveryKey: false, passPhrase: '', + restoreType: null, }; }, @@ -80,6 +84,7 @@ export default React.createClass({ this.setState({ loading: true, restoreError: null, + restoreType: RESTORE_TYPE_PASSPHRASE, }); try { const recoverInfo = await MatrixClientPeg.get().restoreKeyBackupWithPassword( @@ -102,6 +107,7 @@ export default React.createClass({ this.setState({ loading: true, restoreError: null, + restoreType: RESTORE_TYPE_PASSPHRASE, }); try { const recoverInfo = await MatrixClientPeg.get().restoreKeyBackupWithRecoveryKey( @@ -184,14 +190,27 @@ export default React.createClass({ } else if (this.state.backupInfo === null) { title = _t("Error"); content = _t("No backup found!"); - } else if (this.state.recoverInfo && this.state.recoverInfo.imported === 0) { + } else if ( + this.state.recoverInfo && + this.state.recoverInfo.imported === 0 && + this.state.recoverInfo.total > 0 + ) { title = _t("Error Restoring Backup"); - content =
-

{_t( - "Backup could not be decrypted with this key: " + - "please verify that you entered the correct recovery key.", - )}

-
; + if (this.state.restoreType === RESTORE_TYPE_RECOVERYKEY) { + content =
+

{_t( + "Backup could not be decrypted with this key: " + + "please verify that you entered the correct recovery key.", + )}

+
; + } else { + content =
+

{_t( + "Backup could not be decrypted with this passphrase: " + + "please verify that you entered the correct recovery passphrase.", + )}

+
; + } } else if (this.state.recoverInfo) { title = _t("Backup Restored"); let failedToDecrypt; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 9e5b32f24c..d9380f06ae 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1120,6 +1120,7 @@ "No backup found!": "No backup found!", "Error Restoring Backup": "Error Restoring Backup", "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.": "Backup could not be decrypted with this key: please verify that you entered the correct recovery key.", + "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.": "Backup could not be decrypted with this passphrase: please verify that you entered the correct recovery passphrase.", "Backup Restored": "Backup Restored", "Failed to decrypt %(failedCount)s sessions!": "Failed to decrypt %(failedCount)s sessions!", "Restored %(sessionCount)s session keys": "Restored %(sessionCount)s session keys",