From 83b77748b6d54dd08ad9bd4dd2863a5000aa1903 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sun, 25 Sep 2022 20:53:32 +0100 Subject: [PATCH] ios: fix: storing passphrase makes in available in NSE, do not allow empty current passphrase, reset files count after deletion (#1125) --- apps/ios/Shared/Views/Database/DatabaseEncryptionView.swift | 2 ++ apps/ios/Shared/Views/Database/DatabaseView.swift | 1 + apps/ios/SimpleX NSE/NotificationService.swift | 5 ++++- apps/ios/SimpleXChat/API.swift | 3 ++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/ios/Shared/Views/Database/DatabaseEncryptionView.swift b/apps/ios/Shared/Views/Database/DatabaseEncryptionView.swift index 442fa15e33..f98b5191bf 100644 --- a/apps/ios/Shared/Views/Database/DatabaseEncryptionView.swift +++ b/apps/ios/Shared/Views/Database/DatabaseEncryptionView.swift @@ -87,6 +87,7 @@ struct DatabaseEncryptionView: View { } } .disabled( + (m.chatDbEncrypted == true && currentKey == "") || currentKey == newKey || newKey != confirmNewKey || newKey == "" || @@ -184,6 +185,7 @@ struct DatabaseEncryptionView: View { message: Text("Instant push notifications will be hidden!\n") + storeSecurelyDanger(), primaryButton: .destructive(Text("Remove")) { if removeDatabaseKey() { + logger.debug("passphrase removed from keychain") setUseKeychain(false) storedKey = false } else { diff --git a/apps/ios/Shared/Views/Database/DatabaseView.swift b/apps/ios/Shared/Views/Database/DatabaseView.swift index 320a305e50..d5b023608f 100644 --- a/apps/ios/Shared/Views/Database/DatabaseView.swift +++ b/apps/ios/Shared/Views/Database/DatabaseView.swift @@ -337,6 +337,7 @@ struct DatabaseView: View { _ = removeDatabaseKey() storeDBPassphraseGroupDefault.set(true) await operationEnded(.chatDeleted) + appFilesCountAndSize = directoryFileCountAndSize(getAppFilesDirectory()) } catch let error { await operationEnded(.error(title: "Error deleting database", error: responseError(error))) } diff --git a/apps/ios/SimpleX NSE/NotificationService.swift b/apps/ios/SimpleX NSE/NotificationService.swift index 1684a4b9e7..1ff189d25d 100644 --- a/apps/ios/SimpleX NSE/NotificationService.swift +++ b/apps/ios/SimpleX NSE/NotificationService.swift @@ -159,7 +159,10 @@ func startChat() -> DBMigrationResult? { hs_init(0, nil) if chatStarted { return .ok } let (_, dbStatus) = chatMigrateInit() - if dbStatus != .ok { return dbStatus } + if dbStatus != .ok { + resetChatCtrl() + return dbStatus + } if let user = apiGetActiveUser() { logger.debug("active user \(String(describing: user))") do { diff --git a/apps/ios/SimpleXChat/API.swift b/apps/ios/SimpleXChat/API.swift index 1b7715f33b..4eadb4c1a5 100644 --- a/apps/ios/SimpleXChat/API.swift +++ b/apps/ios/SimpleXChat/API.swift @@ -19,14 +19,15 @@ public func getChatCtrl(_ useKey: String? = nil) -> chat_ctrl { public func chatMigrateInit(_ useKey: String? = nil) -> (Bool, DBMigrationResult) { if let res = migrationResult { return res } - logger.debug("chatMigrateInit \(storeDBPassphraseGroupDefault.get())") let dbPath = getAppDatabasePath().path var dbKey = "" let useKeychain = storeDBPassphraseGroupDefault.get() + logger.debug("chatMigrateInit uses keychain: \(useKeychain)") if let key = useKey { dbKey = key } else if useKeychain { if !hasDatabase() { + logger.debug("chatMigrateInit generating a random DB key") dbKey = randomDatabasePassword() initialRandomDBPassphraseGroupDefault.set(true) } else if let key = getDatabaseKey() {