Secure backup: Allow to execute a random closure the secure backup is unlocked

Only from swift.
We should change the name "SecretsRecovery" classes
This commit is contained in:
manuroe
2021-06-16 07:44:12 +02:00
parent 961d323407
commit df628da793
8 changed files with 83 additions and 27 deletions

View File

@@ -73,27 +73,13 @@ final class SecretsRecoveryWithPassphraseViewModel: SecretsRecoveryWithPassphras
return
}
let secretIds: [String]?
if case SecretsRecoveryGoal.keyBackup = self.recoveryGoal {
secretIds = [MXSecretId.keyBackup.takeUnretainedValue() as String]
} else {
secretIds = nil
switch self.recoveryGoal {
case .unlockSecureBackup(let block):
self.execute(block: block, privateKey: privateKey)
default:
self.recoverSecrets(privateKey: privateKey)
}
self.recoveryService.recoverSecrets(secretIds, withPrivateKey: privateKey, recoverServices: true, success: { [weak self] _ in
guard let self = self else {
return
}
self.update(viewState: .loaded)
self.coordinatorDelegate?.secretsRecoveryWithPassphraseViewModelDidRecover(self)
}, failure: { [weak self] error in
guard let self = self else {
return
}
self.update(viewState: .error(error))
})
}, failure: { [weak self] error in
guard let self = self else {
return
@@ -102,6 +88,44 @@ final class SecretsRecoveryWithPassphraseViewModel: SecretsRecoveryWithPassphras
})
}
private func recoverSecrets(privateKey: Data) {
let secretIds: [String]?
if case SecretsRecoveryGoal.keyBackup = self.recoveryGoal {
secretIds = [MXSecretId.keyBackup.takeUnretainedValue() as String]
} else {
secretIds = nil
}
self.recoveryService.recoverSecrets(secretIds, withPrivateKey: privateKey, recoverServices: true, success: { [weak self] _ in
guard let self = self else {
return
}
self.update(viewState: .loaded)
self.coordinatorDelegate?.secretsRecoveryWithPassphraseViewModelDidRecover(self)
}, failure: { [weak self] error in
guard let self = self else {
return
}
self.update(viewState: .error(error))
})
}
private func execute(block: (_ privateKey: Data, _ completion: @escaping (Result<Void, Error>) -> Void) -> Void, privateKey: Data) {
// Run the extenal code while the view state is .loading
block(privateKey) { result in
MXLog.debug("[SecretsRecoveryWithPassphraseViewModel] execute: Block returned: \(result)")
switch result {
case .success:
self.update(viewState: .loaded)
self.coordinatorDelegate?.secretsRecoveryWithPassphraseViewModelDidRecover(self)
case .failure(let error):
self.update(viewState: .error(error))
}
}
}
private func update(viewState: SecretsRecoveryWithPassphraseViewState) {
self.viewDelegate?.secretsRecoveryWithPassphraseViewModel(self, didUpdateViewState: viewState)
}