|  |  |  | import Sodium | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum Onboarding { | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     enum Flow { | 
					
						
							|  |  |  |         case register, recover, link | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         func preregister(with seed: Data, ed25519KeyPair: Sign.KeyPair, x25519KeyPair: ECKeyPair) { | 
					
						
							|  |  |  |             let userDefaults = UserDefaults.standard | 
					
						
							|  |  |  |             KeyPairUtilities.store(seed: seed, ed25519KeyPair: ed25519KeyPair, x25519KeyPair: x25519KeyPair) | 
					
						
							|  |  |  |             TSAccountManager.sharedInstance().phoneNumberAwaitingVerification = x25519KeyPair.hexEncodedPublicKey | 
					
						
							|  |  |  |             switch self { | 
					
						
							|  |  |  |             case .register: | 
					
						
							|  |  |  |                 userDefaults[.hasViewedSeed] = false | 
					
						
							|  |  |  |                 // Set hasSyncedInitialConfiguration to true so that when we hit the home screen a configuration sync | 
					
						
							|  |  |  |                 // is triggered (yes, the logic is a bit weird). This is needed so that if the user registers and | 
					
						
							|  |  |  |                 // immediately links a device, there'll be a configuration in their swarm. | 
					
						
							|  |  |  |                 userDefaults[.hasSyncedInitialConfiguration] = true | 
					
						
							|  |  |  |             case .recover, .link: | 
					
						
							|  |  |  |                 userDefaults[.hasViewedSeed] = true // No need to show it again if the user is restoring or linking | 
					
						
							|  |  |  |                 userDefaults[.hasSyncedInitialConfiguration] = false | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             switch self { | 
					
						
							|  |  |  |             case .register, .recover: | 
					
						
							|  |  |  |                 // Set both lastDisplayNameUpdate and lastProfilePictureUpdate to the current date, so that | 
					
						
							|  |  |  |                 // we don't overwrite what the user set in the display name step with whatever we find in | 
					
						
							|  |  |  |                 // their swarm. | 
					
						
							|  |  |  |                 userDefaults[.lastDisplayNameUpdate] = Date() | 
					
						
							|  |  |  |                 userDefaults[.lastProfilePictureUpdate] = Date() | 
					
						
							|  |  |  |             case .link: break | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |