From 22fd2d7189c6f79c843d5e07fa523819cc55120f Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Mon, 22 Apr 2024 20:50:28 +0400 Subject: [PATCH] ios: remove experimental PQ toggle (#4051) * ios: remove experimental PQ toggle * remove header --- apps/ios/Shared/Model/SimpleXAPI.swift | 13 ----- apps/ios/Shared/Views/Chat/ChatInfoView.swift | 53 +------------------ .../Views/UserSettings/DeveloperView.swift | 25 --------- apps/ios/SimpleXChat/APITypes.swift | 11 +--- apps/ios/SimpleXChat/AppGroup.swift | 4 +- 5 files changed, 3 insertions(+), 103 deletions(-) diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 65e24eeb25..b4c9a48d5d 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -272,18 +272,6 @@ func apiGetAppSettings(settings: AppSettings) throws -> AppSettings { throw r } -func apiSetPQEncryption(_ enable: Bool) throws { - let r = chatSendCmdSync(.apiSetPQEncryption(enable: enable)) - if case .cmdOk = r { return } - throw r -} - -func apiSetContactPQ(_ contactId: Int64, _ enable: Bool) async throws -> Contact { - let r = await chatSendCmd(.apiSetContactPQ(contactId: contactId, enable: enable)) - if case let .contactPQAllowed(_, contact, _) = r { return contact } - throw r -} - func apiExportArchive(config: ArchiveConfig) async throws { try await sendCommandOkResp(.apiExportArchive(config: config)) } @@ -1320,7 +1308,6 @@ func initializeChat(start: Bool, confirmStart: Bool = false, dbKey: String? = ni try apiSetTempFolder(tempFolder: getTempFilesDirectory().path) try apiSetFilesFolder(filesFolder: getAppFilesDirectory().path) try apiSetEncryptLocalFiles(privacyEncryptLocalFilesGroupDefault.get()) - try apiSetPQEncryption(pqExperimentalEnabledDefault.get()) m.chatInitialized = true m.currentUser = try apiGetActiveUser() if m.currentUser == nil { diff --git a/apps/ios/Shared/Views/Chat/ChatInfoView.swift b/apps/ios/Shared/Views/Chat/ChatInfoView.swift index 8b60fc7649..56e7cec697 100644 --- a/apps/ios/Shared/Views/Chat/ChatInfoView.swift +++ b/apps/ios/Shared/Views/Chat/ChatInfoView.swift @@ -103,7 +103,6 @@ struct ChatInfoView: View { @State private var sendReceipts = SendReceipts.userDefault(true) @State private var sendReceiptsUserDefault = true @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false - @AppStorage(GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED, store: groupDefaults) private var pqExperimentalEnabled = false enum ChatInfoViewAlert: Identifiable { case clearChatAlert @@ -111,7 +110,6 @@ struct ChatInfoView: View { case switchAddressAlert case abortSwitchAddressAlert case syncConnectionForceAlert - case allowContactPQEncryptionAlert case error(title: LocalizedStringKey, error: LocalizedStringKey = "") var id: String { @@ -121,7 +119,6 @@ struct ChatInfoView: View { case .switchAddressAlert: return "switchAddressAlert" case .abortSwitchAddressAlert: return "abortSwitchAddressAlert" case .syncConnectionForceAlert: return "syncConnectionForceAlert" - case .allowContactPQEncryptionAlert: return "allowContactPQEncryptionAlert" case let .error(title, _): return "error \(title)" } } @@ -168,19 +165,9 @@ struct ChatInfoView: View { } .disabled(!contact.ready || !contact.active) - if pqExperimentalEnabled, - let conn = contact.activeConn { + if let conn = contact.activeConn { Section { infoRow(Text(String("E2E encryption")), conn.connPQEnabled ? "Quantum resistant" : "Standard") - if !conn.pqEncryption { - allowPQButton() - } - } header: { - Text(String("Quantum resistant E2E encryption")) - } footer: { - if !conn.pqEncryption { - Text(String("After allowing quantum resistant encryption, it will be enabled after several messages if your contact also allows it.")) - } } } @@ -256,7 +243,6 @@ struct ChatInfoView: View { case .switchAddressAlert: return switchAddressAlert(switchContactAddress) case .abortSwitchAddressAlert: return abortSwitchAddressAlert(abortSwitchContactAddress) case .syncConnectionForceAlert: return syncConnectionForceAlert({ syncContactConnection(force: true) }) - case .allowContactPQEncryptionAlert: return allowContactPQEncryptionAlert() case let .error(title, error): return mkAlert(title: title, message: error) } } @@ -430,15 +416,6 @@ struct ChatInfoView: View { } } - private func allowPQButton() -> some View { - Button { - alert = .allowContactPQEncryptionAlert - } label: { - Label(String("Allow PQ encryption"), systemImage: "exclamationmark.triangle") - .foregroundColor(.orange) - } - } - private func networkStatusRow() -> some View { HStack { Text("Network status") @@ -572,34 +549,6 @@ struct ChatInfoView: View { } } } - - private func allowContactPQEncryption() { - Task { - do { - let ct = try await apiSetContactPQ(contact.apiId, true) - contact = ct - await MainActor.run { - chatModel.updateContact(ct) - dismiss() - } - } catch let error { - logger.error("allowContactPQEncryption apiSetContactPQ error: \(responseError(error))") - let a = getErrorAlert(error, "Error allowing contact PQ encryption") - await MainActor.run { - alert = .error(title: a.title, error: a.message) - } - } - } - } - - func allowContactPQEncryptionAlert() -> Alert { - Alert( - title: Text(String("Allow quantum resistant encryption?")), - message: Text(String("This is an experimental feature, it is not recommended to enable it for important chats.")), - primaryButton: .destructive(Text(String("Allow")), action: allowContactPQEncryption), - secondaryButton: .cancel() - ) - } } func switchAddressAlert(_ switchAddress: @escaping () -> Void) -> Alert { diff --git a/apps/ios/Shared/Views/UserSettings/DeveloperView.swift b/apps/ios/Shared/Views/UserSettings/DeveloperView.swift index 9b11c6d0f7..3bbfbfe33e 100644 --- a/apps/ios/Shared/Views/UserSettings/DeveloperView.swift +++ b/apps/ios/Shared/Views/UserSettings/DeveloperView.swift @@ -12,7 +12,6 @@ import SimpleXChat struct DeveloperView: View { @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false @AppStorage(GROUP_DEFAULT_CONFIRM_DB_UPGRADES, store: groupDefaults) private var confirmDatabaseUpgrades = false - @AppStorage(GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED, store: groupDefaults) private var pqExperimentalEnabled = false @Environment(\.colorScheme) var colorScheme var body: some View { @@ -43,33 +42,9 @@ struct DeveloperView: View { } footer: { (developerTools ? Text("Show:") : Text("Hide:")) + Text(" ") + Text("Database IDs and Transport isolation option.") } - - if developerTools { - Section { - settingsRow("key") { - Toggle("Post-quantum E2EE", isOn: $pqExperimentalEnabled) - .onChange(of: pqExperimentalEnabled) { - setPQExperimentalEnabled($0) - } - } - } header: { - Text(String("Experimental")) - } footer: { - Text(String("In this version applies only to new contacts.")) - } - } } } } - - private func setPQExperimentalEnabled(_ enable: Bool) { - do { - try apiSetPQEncryption(enable) - } catch let error { - let err = responseError(error) - logger.error("apiSetPQEncryption \(err)") - } - } } struct DeveloperView_Previews: PreviewProvider { diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 1d02f227c8..3aa610e4af 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -32,8 +32,6 @@ public enum ChatCommand { case setTempFolder(tempFolder: String) case setFilesFolder(filesFolder: String) case apiSetEncryptLocalFiles(enable: Bool) - case apiSetPQEncryption(enable: Bool) - case apiSetContactPQ(contactId: Int64, enable: Bool) case apiExportArchive(config: ArchiveConfig) case apiImportArchive(config: ArchiveConfig) case apiDeleteStorage @@ -172,8 +170,6 @@ public enum ChatCommand { case let .setTempFolder(tempFolder): return "/_temp_folder \(tempFolder)" case let .setFilesFolder(filesFolder): return "/_files_folder \(filesFolder)" case let .apiSetEncryptLocalFiles(enable): return "/_files_encrypt \(onOff(enable))" - case let .apiSetPQEncryption(enable): return "/pq \(onOff(enable))" - case let .apiSetContactPQ(contactId, enable): return "/_pq @\(contactId) \(onOff(enable))" case let .apiExportArchive(cfg): return "/_db export \(encodeJSON(cfg))" case let .apiImportArchive(cfg): return "/_db import \(encodeJSON(cfg))" case .apiDeleteStorage: return "/_db delete" @@ -326,8 +322,6 @@ public enum ChatCommand { case .setTempFolder: return "setTempFolder" case .setFilesFolder: return "setFilesFolder" case .apiSetEncryptLocalFiles: return "apiSetEncryptLocalFiles" - case .apiSetPQEncryption: return "apiSetPQEncryption" - case .apiSetContactPQ: return "apiSetContactPQ" case .apiExportArchive: return "apiExportArchive" case .apiImportArchive: return "apiImportArchive" case .apiDeleteStorage: return "apiDeleteStorage" @@ -653,7 +647,6 @@ public enum ChatResponse: Decodable, Error { case remoteCtrlConnected(remoteCtrl: RemoteCtrlInfo) case remoteCtrlStopped(rcsState: RemoteCtrlSessionState, rcStopReason: RemoteCtrlStopReason) // pq - case contactPQAllowed(user: UserRef, contact: Contact, pqEncryption: Bool) case contactPQEnabled(user: UserRef, contact: Contact, pqEnabled: Bool) // misc case versionInfo(versionInfo: CoreVersionInfo, chatMigrations: [UpMigration], agentMigrations: [UpMigration]) @@ -809,8 +802,7 @@ public enum ChatResponse: Decodable, Error { case .remoteCtrlSessionCode: return "remoteCtrlSessionCode" case .remoteCtrlConnected: return "remoteCtrlConnected" case .remoteCtrlStopped: return "remoteCtrlStopped" - case .contactPQAllowed: return "contactPQAllowed" - case .contactPQEnabled: return "contactPQAllowed" + case .contactPQEnabled: return "contactPQEnabled" case .versionInfo: return "versionInfo" case .cmdOk: return "cmdOk" case .chatCmdError: return "chatCmdError" @@ -967,7 +959,6 @@ public enum ChatResponse: Decodable, Error { case let .remoteCtrlSessionCode(remoteCtrl_, sessionCode): return "remoteCtrl_:\n\(String(describing: remoteCtrl_))\nsessionCode: \(sessionCode)" case let .remoteCtrlConnected(remoteCtrl): return String(describing: remoteCtrl) case .remoteCtrlStopped: return noDetails - case let .contactPQAllowed(u, contact, pqEncryption): return withUser(u, "contact: \(String(describing: contact))\npqEncryption: \(pqEncryption)") case let .contactPQEnabled(u, contact, pqEnabled): return withUser(u, "contact: \(String(describing: contact))\npqEnabled: \(pqEnabled)") case let .versionInfo(versionInfo, chatMigrations, agentMigrations): return "\(String(describing: versionInfo))\n\nchat migrations: \(chatMigrations.map(\.upName))\n\nagent migrations: \(agentMigrations.map(\.upName))" case .cmdOk: return noDetails diff --git a/apps/ios/SimpleXChat/AppGroup.swift b/apps/ios/SimpleXChat/AppGroup.swift index cb07ba43ce..0511a8486c 100644 --- a/apps/ios/SimpleXChat/AppGroup.swift +++ b/apps/ios/SimpleXChat/AppGroup.swift @@ -41,7 +41,7 @@ let GROUP_DEFAULT_STORE_DB_PASSPHRASE = "storeDBPassphrase" public let GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE = "initialRandomDBPassphrase" public let GROUP_DEFAULT_CONFIRM_DB_UPGRADES = "confirmDBUpgrades" public let GROUP_DEFAULT_CALL_KIT_ENABLED = "callKitEnabled" -public let GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED = "pqExperimentalEnabled" +public let GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED = "pqExperimentalEnabled" // no longer used public let APP_GROUP_NAME = "group.chat.simplex.app" @@ -199,8 +199,6 @@ public let confirmDBUpgradesGroupDefault = BoolDefault(defaults: groupDefaults, public let callKitEnabledGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_CALL_KIT_ENABLED) -public let pqExperimentalEnabledDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_PQ_EXPERIMENTAL_ENABLED) - public class DateDefault { var defaults: UserDefaults var key: String