|  |  |  | import PromiseKit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extension Storage { | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     static func prepareForV2KeyPairMigration() { | 
					
						
							|  |  |  |         let userDefaults = UserDefaults.standard | 
					
						
							|  |  |  |         let isUsingAPNs = userDefaults[.isUsingFullAPNs] | 
					
						
							|  |  |  |         if isUsingAPNs, let hexEncodedToken = userDefaults[.deviceToken] { | 
					
						
							|  |  |  |             let token = Data(hex: hexEncodedToken) | 
					
						
							|  |  |  |             PushNotificationAPI.unregister(token).retainUntilComplete() // TODO: Wait for this to complete? | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         let name = Storage.shared.getUser()!.name! | 
					
						
							|  |  |  |         let appDelegate = UIApplication.shared.delegate as! AppDelegate | 
					
						
							|  |  |  |         appDelegate.stopPoller() | 
					
						
							|  |  |  |         appDelegate.stopClosedGroupPoller() | 
					
						
							|  |  |  |         appDelegate.stopOpenGroupPollers() | 
					
						
							|  |  |  |         OWSStorage.resetAllStorage() | 
					
						
							|  |  |  |         OWSUserProfile.resetProfileStorage() | 
					
						
							|  |  |  |         Environment.shared.preferences.clear() | 
					
						
							|  |  |  |         AppEnvironment.shared.notificationPresenter.clearAllNotifications() | 
					
						
							|  |  |  |         userDefaults[.isUsingFullAPNs] = isUsingAPNs | 
					
						
							|  |  |  |         userDefaults[.displayName] = name | 
					
						
							|  |  |  |         userDefaults[.isMigratingToV2KeyPair] = true | 
					
						
							|  |  |  |         exit(0) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     static func finishV2KeyPairMigration(navigationController: UINavigationController) { | 
					
						
							|  |  |  |         let seed = Data.getSecureRandomData(ofSize: 16)! | 
					
						
							|  |  |  |         let (ed25519KeyPair, x25519KeyPair) = KeyPairUtilities.generate(from: seed) | 
					
						
							|  |  |  |         KeyPairUtilities.store(seed: seed, ed25519KeyPair: ed25519KeyPair, x25519KeyPair: x25519KeyPair) | 
					
						
							|  |  |  |         TSAccountManager.sharedInstance().phoneNumberAwaitingVerification = x25519KeyPair.hexEncodedPublicKey | 
					
						
							|  |  |  |         UserDefaults.standard[.hasViewedSeed] = false | 
					
						
							|  |  |  |         let displayName = UserDefaults.standard[.displayName]! // Checked earlier | 
					
						
							|  |  |  |         OWSProfileManager.shared().updateLocalProfileName(displayName, avatarImage: nil, success: { }, failure: { _ in }, requiresSync: false) | 
					
						
							|  |  |  |         TSAccountManager.sharedInstance().didRegister() | 
					
						
							|  |  |  |         let homeVC = HomeVC() | 
					
						
							|  |  |  |         navigationController.setViewControllers([ homeVC ], animated: true) | 
					
						
							|  |  |  |         let syncTokensJob = SyncPushTokensJob(accountManager: AppEnvironment.shared.accountManager, preferences: Environment.shared.preferences) | 
					
						
							|  |  |  |         syncTokensJob.uploadOnlyIfStale = false | 
					
						
							|  |  |  |         let _: Promise<Void> = syncTokensJob.run() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |