* core, iOS: support for self-destruct password * disable test logging * core: fix tests, iOS: remove notifications on removal * change alerts
78 lines
3.0 KiB
Swift
78 lines
3.0 KiB
Swift
//
|
|
// LocalAuthView.swift
|
|
// SimpleX (iOS)
|
|
//
|
|
// Created by Evgeny on 10/04/2023.
|
|
// Copyright © 2023 SimpleX Chat. All rights reserved.
|
|
//
|
|
|
|
import SwiftUI
|
|
import SimpleXChat
|
|
|
|
struct LocalAuthView: View {
|
|
@EnvironmentObject var m: ChatModel
|
|
var authRequest: LocalAuthRequest
|
|
@State private var password = ""
|
|
|
|
var body: some View {
|
|
PasscodeView(passcode: $password, title: authRequest.title ?? "Enter Passcode", reason: authRequest.reason, submitLabel: "Submit") {
|
|
if let sdPassword = kcSelfDestructPassword.get(), authRequest.selfDestruct && password == sdPassword {
|
|
deleteStorageAndRestart(sdPassword) { r in
|
|
m.laRequest = nil
|
|
authRequest.completed(r)
|
|
}
|
|
return
|
|
}
|
|
let r: LAResult = password == authRequest.password
|
|
? .success
|
|
: .failed(authError: NSLocalizedString("Incorrect passcode", comment: "PIN entry"))
|
|
m.laRequest = nil
|
|
authRequest.completed(r)
|
|
} cancel: {
|
|
m.laRequest = nil
|
|
authRequest.completed(.failed(authError: NSLocalizedString("Authentication cancelled", comment: "PIN entry")))
|
|
}
|
|
}
|
|
|
|
private func deleteStorageAndRestart(_ password: String, completed: @escaping (LAResult) -> Void) {
|
|
Task {
|
|
do {
|
|
try await stopChatAsync()
|
|
try await deleteChatAsync()
|
|
_ = kcAppPassword.set(password)
|
|
_ = kcSelfDestructPassword.remove()
|
|
await NtfManager.shared.removeAllNotifications()
|
|
let displayName = UserDefaults.standard.string(forKey: DEFAULT_LA_SELF_DESTRUCT_DISPLAY_NAME)
|
|
UserDefaults.standard.removeObject(forKey: DEFAULT_LA_SELF_DESTRUCT)
|
|
UserDefaults.standard.removeObject(forKey: DEFAULT_LA_SELF_DESTRUCT_DISPLAY_NAME)
|
|
await MainActor.run {
|
|
m.chatDbChanged = true
|
|
m.chatInitialized = false
|
|
}
|
|
resetChatCtrl()
|
|
try initializeChat(start: true)
|
|
m.chatDbChanged = false
|
|
appStateGroupDefault.set(.active)
|
|
if m.currentUser != nil { return }
|
|
var profile: Profile? = nil
|
|
if let displayName = displayName, displayName != "" {
|
|
profile = Profile(displayName: displayName, fullName: "")
|
|
}
|
|
m.currentUser = try apiCreateActiveUser(profile)
|
|
onboardingStageDefault.set(.onboardingComplete)
|
|
m.onboardingStage = .onboardingComplete
|
|
try startChat()
|
|
completed(.success)
|
|
} catch {
|
|
completed(.failed(authError: NSLocalizedString("Incorrect passcode", comment: "PIN entry")))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct LocalAuthView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
LocalAuthView(authRequest: LocalAuthRequest.sample)
|
|
}
|
|
}
|