Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. open func currentFlow(identity: String, password: String) throws {
  2. let backupPassword = try EThree.derivePasswords(from: password).backupPassword
  3.  
  4. let tokenCallback: EThree.RenewJwtCallback = { completion in
  5. let token = try! self.getTokenFromServer()
  6.  
  7. completion(token, nil)
  8. }
  9.  
  10. self.ethree = try EThree(identity: identity, tokenCallback: tokenCallback)
  11.  
  12. try? self.ethree.cleanUp()
  13.  
  14. do {
  15. let selfCard = try self.ethree.findUser(with: self.ethree.identity, forceReload: true)
  16. .startSync()
  17. .get()
  18.  
  19. try self.safeRestore(password: backupPassword, selfCard: selfCard)
  20. }
  21. catch FindUsersError.cardWasNotFound {
  22. try self.safeRegister(password: backupPassword)
  23. }
  24. }
  25.  
  26. open func safeRegister(password: String) throws {
  27. do {
  28. try self.register().startSync().get()
  29.  
  30. try self.ethree.backupPrivateKey(password: password).startSync().get()
  31. }
  32. catch CloudKeyStorageError.entryAlreadyExists {
  33. try self.ethree.resetPrivateKeyBackup().startSync().get()
  34.  
  35. sleep(2)
  36.  
  37. try self.ethree.backupPrivateKey(password: password).startSync().get()
  38. }
  39. }
  40.  
  41. open func safeRestore(password: String, selfCard: Card) throws {
  42. do {
  43. try self.ethree.restorePrivateKey(password: password).startSync().get()
  44.  
  45. if try !self.isKeyValid(card: selfCard) {
  46. try self.ethree.resetPrivateKeyBackup().startSync().get()
  47.  
  48. try self.proposeRotate(password: password)
  49. }
  50. }
  51. catch CloudKeyStorageError.entryNotFound {
  52. try self.proposeRotate(password: password)
  53. }
  54. }
  55.  
  56. open func isKeyValid(card: Card) throws -> Bool {
  57. let params = try KeychainStorageParams.makeKeychainStorageParams()
  58. let keychain = KeychainStorage(storageParams: params)
  59.  
  60. let entry = try keychain.retrieveEntry(withName: self.ethree.identity)
  61. let keyPair = try self.crypto.importPrivateKey(from: entry.data)
  62.  
  63. return card.publicKey.identifier == keyPair.identifier
  64. }
  65.  
  66. open func proposeRotate(password: String) throws {
  67. let confirmed = try self.proposeUserRotate().startSync().get()
  68.  
  69. guard confirmed else {
  70. throw NSError()
  71. }
  72.  
  73. try? self.ethree.cleanUp()
  74.  
  75. try self.ethree.resetPrivateKeyBackup().startSync().get()
  76. try self.ethree.rotatePrivateKey().startSync().get()
  77. try self.ethree.backupPrivateKey(password: password).startSync().get()
  78.  
  79. try self.notifyContactsAboutRotate()
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement