Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open func currentFlow(identity: String, password: String) throws {
- let backupPassword = try EThree.derivePasswords(from: password).backupPassword
- let tokenCallback: EThree.RenewJwtCallback = { completion in
- let token = try! self.getTokenFromServer()
- completion(token, nil)
- }
- self.ethree = try EThree(identity: identity, tokenCallback: tokenCallback)
- try? self.ethree.cleanUp()
- do {
- let selfCard = try self.ethree.findUser(with: self.ethree.identity, forceReload: true)
- .startSync()
- .get()
- try self.safeRestore(password: backupPassword, selfCard: selfCard)
- }
- catch FindUsersError.cardWasNotFound {
- try self.safeRegister(password: backupPassword)
- }
- }
- open func safeRegister(password: String) throws {
- do {
- try self.register().startSync().get()
- try self.ethree.backupPrivateKey(password: password).startSync().get()
- }
- catch CloudKeyStorageError.entryAlreadyExists {
- try self.ethree.resetPrivateKeyBackup().startSync().get()
- sleep(2)
- try self.ethree.backupPrivateKey(password: password).startSync().get()
- }
- }
- open func safeRestore(password: String, selfCard: Card) throws {
- do {
- try self.ethree.restorePrivateKey(password: password).startSync().get()
- if try !self.isKeyValid(card: selfCard) {
- try self.ethree.resetPrivateKeyBackup().startSync().get()
- try self.proposeRotate(password: password)
- }
- }
- catch CloudKeyStorageError.entryNotFound {
- try self.proposeRotate(password: password)
- }
- }
- open func isKeyValid(card: Card) throws -> Bool {
- let params = try KeychainStorageParams.makeKeychainStorageParams()
- let keychain = KeychainStorage(storageParams: params)
- let entry = try keychain.retrieveEntry(withName: self.ethree.identity)
- let keyPair = try self.crypto.importPrivateKey(from: entry.data)
- return card.publicKey.identifier == keyPair.identifier
- }
- open func proposeRotate(password: String) throws {
- let confirmed = try self.proposeUserRotate().startSync().get()
- guard confirmed else {
- throw NSError()
- }
- try? self.ethree.cleanUp()
- try self.ethree.resetPrivateKeyBackup().startSync().get()
- try self.ethree.rotatePrivateKey().startSync().get()
- try self.ethree.backupPrivateKey(password: password).startSync().get()
- try self.notifyContactsAboutRotate()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement