diff --git a/Session.xcodeproj/project.pbxproj b/Session.xcodeproj/project.pbxproj index 9dcd1f4fe..c5f755e9a 100644 --- a/Session.xcodeproj/project.pbxproj +++ b/Session.xcodeproj/project.pbxproj @@ -124,6 +124,7 @@ 7B87EF422A8D9840002A0E8F /* DisplayNameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B87EF412A8D9840002A0E8F /* DisplayNameView.swift */; }; 7B87EF442A8DA720002A0E8F /* SessionTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B87EF432A8DA720002A0E8F /* SessionTextField.swift */; }; 7B87EF462A8DDA8E002A0E8F /* PNModeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B87EF452A8DDA8E002A0E8F /* PNModeView.swift */; }; + 7B87EF482A8DFBBF002A0E8F /* RecoveryPasswordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B87EF472A8DFBBF002A0E8F /* RecoveryPasswordView.swift */; }; 7B8914772A7CAAE200A4C627 /* SessionHostingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B8914762A7CAAE200A4C627 /* SessionHostingViewController.swift */; }; 7B8C44C528B49DDA00FBE25F /* NewConversationVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B8C44C428B49DDA00FBE25F /* NewConversationVC.swift */; }; 7B8D5FC428332600008324D9 /* VisibleMessage+Reaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B8D5FC328332600008324D9 /* VisibleMessage+Reaction.swift */; }; @@ -1241,6 +1242,7 @@ 7B87EF412A8D9840002A0E8F /* DisplayNameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayNameView.swift; sourceTree = ""; }; 7B87EF432A8DA720002A0E8F /* SessionTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionTextField.swift; sourceTree = ""; }; 7B87EF452A8DDA8E002A0E8F /* PNModeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PNModeView.swift; sourceTree = ""; }; + 7B87EF472A8DFBBF002A0E8F /* RecoveryPasswordView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecoveryPasswordView.swift; sourceTree = ""; }; 7B8914762A7CAAE200A4C627 /* SessionHostingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionHostingViewController.swift; sourceTree = ""; }; 7B8C44C428B49DDA00FBE25F /* NewConversationVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewConversationVC.swift; sourceTree = ""; }; 7B8D5FC328332600008324D9 /* VisibleMessage+Reaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VisibleMessage+Reaction.swift"; sourceTree = ""; }; @@ -3008,6 +3010,7 @@ 7BDE2A972A8B122900AE4393 /* LandingView.swift */, 7B87EF412A8D9840002A0E8F /* DisplayNameView.swift */, 7B87EF452A8DDA8E002A0E8F /* PNModeView.swift */, + 7B87EF472A8DFBBF002A0E8F /* RecoveryPasswordView.swift */, ); path = Onboarding; sourceTree = ""; @@ -6176,6 +6179,7 @@ B85357BF23A1AE0800AAF6CD /* SeedReminderView.swift in Sources */, FD716E6C28505E1C00C96BF4 /* MessageRequestsViewModel.swift in Sources */, C35E8AAE2485E51D00ACB629 /* IP2Country.swift in Sources */, + 7B87EF482A8DFBBF002A0E8F /* RecoveryPasswordView.swift in Sources */, B835249B25C3AB650089A44F /* VisibleMessageCell.swift in Sources */, B8D0A25025E3678700C1835E /* LinkDeviceVC.swift in Sources */, B894D0752339EDCF00B4D94D /* NukeDataModal.swift in Sources */, diff --git a/Session/Meta/Translations/de.lproj/Localizable.strings b/Session/Meta/Translations/de.lproj/Localizable.strings index ab1c3e18c..403f04d17 100644 --- a/Session/Meta/Translations/de.lproj/Localizable.strings +++ b/Session/Meta/Translations/de.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/en.lproj/Localizable.strings b/Session/Meta/Translations/en.lproj/Localizable.strings index eb9dce0fd..577877d3d 100644 --- a/Session/Meta/Translations/en.lproj/Localizable.strings +++ b/Session/Meta/Translations/en.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/es.lproj/Localizable.strings b/Session/Meta/Translations/es.lproj/Localizable.strings index e9b2957cb..06eae8c50 100644 --- a/Session/Meta/Translations/es.lproj/Localizable.strings +++ b/Session/Meta/Translations/es.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/fa.lproj/Localizable.strings b/Session/Meta/Translations/fa.lproj/Localizable.strings index f2cacd937..c5e5549f5 100644 --- a/Session/Meta/Translations/fa.lproj/Localizable.strings +++ b/Session/Meta/Translations/fa.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/fi.lproj/Localizable.strings b/Session/Meta/Translations/fi.lproj/Localizable.strings index 28447fc30..9cdf0dd4c 100644 --- a/Session/Meta/Translations/fi.lproj/Localizable.strings +++ b/Session/Meta/Translations/fi.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/fr.lproj/Localizable.strings b/Session/Meta/Translations/fr.lproj/Localizable.strings index 122cfd5b2..5b3e290f3 100644 --- a/Session/Meta/Translations/fr.lproj/Localizable.strings +++ b/Session/Meta/Translations/fr.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/hi.lproj/Localizable.strings b/Session/Meta/Translations/hi.lproj/Localizable.strings index 7c872b637..baecae793 100644 --- a/Session/Meta/Translations/hi.lproj/Localizable.strings +++ b/Session/Meta/Translations/hi.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/hr.lproj/Localizable.strings b/Session/Meta/Translations/hr.lproj/Localizable.strings index 81ebd3c8f..d82305abf 100644 --- a/Session/Meta/Translations/hr.lproj/Localizable.strings +++ b/Session/Meta/Translations/hr.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/id-ID.lproj/Localizable.strings b/Session/Meta/Translations/id-ID.lproj/Localizable.strings index 6378d0daf..1227cd1f7 100644 --- a/Session/Meta/Translations/id-ID.lproj/Localizable.strings +++ b/Session/Meta/Translations/id-ID.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/it.lproj/Localizable.strings b/Session/Meta/Translations/it.lproj/Localizable.strings index d453194ac..2c7c2558e 100644 --- a/Session/Meta/Translations/it.lproj/Localizable.strings +++ b/Session/Meta/Translations/it.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/ja.lproj/Localizable.strings b/Session/Meta/Translations/ja.lproj/Localizable.strings index b5307190f..cfa7c9cdf 100644 --- a/Session/Meta/Translations/ja.lproj/Localizable.strings +++ b/Session/Meta/Translations/ja.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/nl.lproj/Localizable.strings b/Session/Meta/Translations/nl.lproj/Localizable.strings index 987bfcfbb..aeda38e50 100644 --- a/Session/Meta/Translations/nl.lproj/Localizable.strings +++ b/Session/Meta/Translations/nl.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/pl.lproj/Localizable.strings b/Session/Meta/Translations/pl.lproj/Localizable.strings index 1bc94d386..73a92b255 100644 --- a/Session/Meta/Translations/pl.lproj/Localizable.strings +++ b/Session/Meta/Translations/pl.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/pt_BR.lproj/Localizable.strings b/Session/Meta/Translations/pt_BR.lproj/Localizable.strings index ed669ec6f..05d5da048 100644 --- a/Session/Meta/Translations/pt_BR.lproj/Localizable.strings +++ b/Session/Meta/Translations/pt_BR.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/ru.lproj/Localizable.strings b/Session/Meta/Translations/ru.lproj/Localizable.strings index 9bf7f0688..69dc97cad 100644 --- a/Session/Meta/Translations/ru.lproj/Localizable.strings +++ b/Session/Meta/Translations/ru.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/si.lproj/Localizable.strings b/Session/Meta/Translations/si.lproj/Localizable.strings index afdba54d5..920318a6b 100644 --- a/Session/Meta/Translations/si.lproj/Localizable.strings +++ b/Session/Meta/Translations/si.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/sk.lproj/Localizable.strings b/Session/Meta/Translations/sk.lproj/Localizable.strings index 71383bb13..670a8bd23 100644 --- a/Session/Meta/Translations/sk.lproj/Localizable.strings +++ b/Session/Meta/Translations/sk.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/sv.lproj/Localizable.strings b/Session/Meta/Translations/sv.lproj/Localizable.strings index 8f314922c..d09e21ee1 100644 --- a/Session/Meta/Translations/sv.lproj/Localizable.strings +++ b/Session/Meta/Translations/sv.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/th.lproj/Localizable.strings b/Session/Meta/Translations/th.lproj/Localizable.strings index 13f5d9bf5..95572a23b 100644 --- a/Session/Meta/Translations/th.lproj/Localizable.strings +++ b/Session/Meta/Translations/th.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/vi-VN.lproj/Localizable.strings b/Session/Meta/Translations/vi-VN.lproj/Localizable.strings index 076f9889e..8c8dbe6bc 100644 --- a/Session/Meta/Translations/vi-VN.lproj/Localizable.strings +++ b/Session/Meta/Translations/vi-VN.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/zh-Hant.lproj/Localizable.strings b/Session/Meta/Translations/zh-Hant.lproj/Localizable.strings index c428df7ba..bedd4ed90 100644 --- a/Session/Meta/Translations/zh-Hant.lproj/Localizable.strings +++ b/Session/Meta/Translations/zh-Hant.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Meta/Translations/zh_CN.lproj/Localizable.strings b/Session/Meta/Translations/zh_CN.lproj/Localizable.strings index e8785a9ce..36a14d5ed 100644 --- a/Session/Meta/Translations/zh_CN.lproj/Localizable.strings +++ b/Session/Meta/Translations/zh_CN.lproj/Localizable.strings @@ -666,3 +666,5 @@ "privacy_policy" = "Privacy Policy"; "onboarding_display_name_explanation" = "It can be your real name, an alias, or anything else you like — and you can change it any time."; "onboarding_display_name_hint" = "Enter your display name"; +"onboarding_recovery_password_title" = "Save your recovery password"; +"onboarding_recovery_password_explanation" = "Use your password to load your account on new devices. Make sure it is stored in a safe place — and don't share it with anyone."; diff --git a/Session/Onboarding/PNModeView.swift b/Session/Onboarding/PNModeView.swift index 8ec3b2105..fa6d3ff9f 100644 --- a/Session/Onboarding/PNModeView.swift +++ b/Session/Onboarding/PNModeView.swift @@ -3,7 +3,6 @@ import SwiftUI import Combine import SessionUIKit -import SessionMessagingKit import SessionSnodeKit import SignalUtilitiesKit import SessionUtilitiesKit diff --git a/Session/Onboarding/RecoveryPasswordView.swift b/Session/Onboarding/RecoveryPasswordView.swift new file mode 100644 index 000000000..24e0d4686 --- /dev/null +++ b/Session/Onboarding/RecoveryPasswordView.swift @@ -0,0 +1,100 @@ +// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved. + +import SwiftUI +import SessionUIKit +import SignalUtilitiesKit +import SessionUtilitiesKit + +struct RecoveryPasswordView: View { + @EnvironmentObject var host: HostWrapper + + private let mnemonic: String + + static let cornerRadius: CGFloat = 13 + + public init() throws { + self.mnemonic = try Identity.mnemonic() + } + + public init(hardcode: String) { + self.mnemonic = hardcode + } + + var body: some View { + NavigationView { + ZStack(alignment: .center) { + if #available(iOS 14.0, *) { + ThemeManager.currentTheme.colorSwiftUI(for: .backgroundPrimary).ignoresSafeArea() + } else { + ThemeManager.currentTheme.colorSwiftUI(for: .backgroundPrimary) + } + + VStack( + alignment: .leading, + spacing: Values.mediumSpacing + ) { + Spacer() + + Text("onboarding_recovery_password_title".localized()) + .bold() + .font(.system(size: Values.veryLargeFontSize)) + .foregroundColor(themeColor: .textPrimary) + .padding(.vertical, Values.mediumSpacing) + + Text("onboarding_recovery_password_explanation".localized()) + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .textPrimary) + .padding(.vertical, Values.mediumSpacing) + + Text(mnemonic) + .font(.spaceMono(size: Values.verySmallFontSize)) + .foregroundColor(themeColor: .primary) + .padding(.all, Values.largeSpacing) + .overlay( + RoundedRectangle( + cornerSize: CGSize( + width: Self.cornerRadius, + height: Self.cornerRadius + ) + ) + .stroke(themeColor: .borderSeparator) + ) + + Spacer() + } + .padding(.horizontal, Values.veryLargeSpacing) + .padding(.bottom, Values.massiveSpacing + Values.largeButtonHeight) + + VStack() { + Spacer() + + Button { + + } label: { + Text("continue_2".localized()) + .bold() + .font(.system(size: Values.smallFontSize)) + .foregroundColor(themeColor: .sessionButton_text) + .frame( + maxWidth: .infinity, + maxHeight: Values.largeButtonHeight, + alignment: .center + ) + .overlay( + Capsule() + .stroke(themeColor: .sessionButton_border) + ) + } + .padding(.horizontal, Values.massiveSpacing) + } + .padding(.vertical, Values.mediumSpacing) + } + } + } +} + +struct RecoveryPasswordView_Previews: PreviewProvider { + static var previews: some View { + RecoveryPasswordView(hardcode: "Voyage urban toyed maverick peculiar tuxedo penguin tree grass building listen speak withdraw terminal plane ") + } +} diff --git a/SessionUtilitiesKit/Database/Models/Identity.swift b/SessionUtilitiesKit/Database/Models/Identity.swift index d7462facb..a79bf72ce 100644 --- a/SessionUtilitiesKit/Database/Models/Identity.swift +++ b/SessionUtilitiesKit/Database/Models/Identity.swift @@ -135,6 +135,34 @@ public extension Identity { return data.toHexString() } + + static func mnemonic() throws -> String { + let dbIsValid: Bool = Storage.shared.isValid + let dbIsSuspendedUnsafe: Bool = Storage.shared.isSuspendedUnsafe + + if let hexEncodedSeed: String = Identity.fetchHexEncodedSeed() { + return Mnemonic.encode(hexEncodedString: hexEncodedSeed) + } + + guard let legacyPrivateKey: String = Identity.fetchUserPrivateKey()?.toHexString() else { + let hasStoredPublicKey: Bool = (Identity.fetchUserPublicKey() != nil) + let hasStoredEdKeyPair: Bool = (Identity.fetchUserEd25519KeyPair() != nil) + let dbStates: [String] = [ + "dbIsValid: \(dbIsValid)", + "dbIsSuspendedUnsafe: \(dbIsSuspendedUnsafe)", + "storedSeed: false", + "userPublicKey: \(hasStoredPublicKey)", + "userPrivateKey: false", + "userEdKeyPair: \(hasStoredEdKeyPair)" + ] + + SNLog("Failed to retrieve keys for mnemonic generation (\(dbStates.joined(separator: ", ")))") + throw StorageError.objectNotFound + } + + // Legacy account + return Mnemonic.encode(hexEncodedString: legacyPrivateKey) + } } // MARK: - Convenience