Key Backup: Use legacy screens if the private key does not work

This commit is contained in:
manuroe
2020-04-08 16:48:12 +02:00
parent 641025fac4
commit 14f707c2e5
5 changed files with 48 additions and 10 deletions
@@ -48,15 +48,11 @@ final class KeyBackupRecoverCoordinator: KeyBackupRecoverCoordinatorType {
// Check if we have the private key locally
if self.session.crypto.backup.hasPrivateKeyInCryptoStore {
rootCoordinator = createRecoverFromPrivateKeyCoordinator()
}
// Check if a passphrase has been set for given backup
else if let megolmBackupAuthData = MXMegolmBackupAuthData(fromJSON: self.keyBackupVersion.authData), megolmBackupAuthData.privateKeySalt != nil {
rootCoordinator = self.createRecoverFromPassphraseCoordinator()
rootCoordinator = self.createRecoverFromPrivateKeyCoordinator()
} else {
rootCoordinator = self.createRecoverFromRecoveryKeyCoordinator()
rootCoordinator = self.createRecoverWithUserInteractionCoordinator()
}
rootCoordinator.start()
self.add(childCoordinator: rootCoordinator)
@@ -70,6 +66,18 @@ final class KeyBackupRecoverCoordinator: KeyBackupRecoverCoordinatorType {
// MARK: - Private
private func createRecoverWithUserInteractionCoordinator() -> Coordinator & Presentable {
let coordinator: Coordinator & Presentable
// Check if a passphrase has been set for given backup
if let megolmBackupAuthData = MXMegolmBackupAuthData(fromJSON: self.keyBackupVersion.authData), megolmBackupAuthData.privateKeySalt != nil {
coordinator = self.createRecoverFromPassphraseCoordinator()
} else {
coordinator = self.createRecoverFromRecoveryKeyCoordinator()
}
return coordinator
}
private func createRecoverFromPrivateKeyCoordinator() -> KeyBackupRecoverFromPrivateKeyCoordinator {
let coordinator = KeyBackupRecoverFromPrivateKeyCoordinator(keyBackup: self.session.crypto.backup, keyBackupVersion: self.keyBackupVersion)
coordinator.delegate = self
@@ -105,14 +113,30 @@ final class KeyBackupRecoverCoordinator: KeyBackupRecoverCoordinatorType {
keyBackupRecoverSuccessViewController.delegate = self
self.navigationRouter.push(keyBackupRecoverSuccessViewController, animated: true, popCompletion: nil)
}
private func showRecoverFallback() {
let coordinator = self.createRecoverWithUserInteractionCoordinator()
self.add(childCoordinator: coordinator)
// Skip the previously displayed KeyBackupRecoverFromPrivateKeyCoordinator in the navigation stack
self.navigationRouter.setRootModule(coordinator)
coordinator.start()
}
}
// MARK: - KeyBackupRecoverFromPassphraseCoordinatorDelegate
extension KeyBackupRecoverCoordinator: KeyBackupRecoverFromPrivateKeyCoordinatorDelegate {
func keyBackupRecoverFromPrivateKeyCoordinatorDidRecover(_ coordinator: KeyBackupRecoverFromPrivateKeyCoordinatorType) {
self.showRecoverSuccess()
}
func keyBackupRecoverFromPrivateKeyCoordinatorDidPrivateKeyFail(_ coordinator: KeyBackupRecoverFromPrivateKeyCoordinatorType) {
// The private key did not work. Ask the user to enter their passphrase or recovery key
self.showRecoverFallback()
}
func keyBackupRecoverFromPrivateKeyCoordinatorDidCancel(_ coordinator: KeyBackupRecoverFromPrivateKeyCoordinatorType) {
self.delegate?.keyBackupRecoverCoordinatorDidCancel(self)
}