mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-18 07:28:28 +02:00
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:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user