From 548beca4109a6f98c75c779583b25338f5ec5427 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:07:27 +0100 Subject: [PATCH] updated gethostkey to work with strings, and the rest of the ui had been updated to reflect this --- ShhShell/Host/Host.swift | 6 +++--- ShhShell/SSH/SSHHandler.swift | 10 +++++++--- ShhShell/Views/ConnectionView.swift | 9 ++++----- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/ShhShell/Host/Host.swift b/ShhShell/Host/Host.swift index 7f9a415..a014f69 100644 --- a/ShhShell/Host/Host.swift +++ b/ShhShell/Host/Host.swift @@ -16,7 +16,7 @@ protocol HostPr: Codable, Identifiable, Equatable { var publicKey: Data? { get set } var privateKey: Data? { get set } var passphrase: String { get set } - var key: Data? { get set } + var key: String? { get set } } struct Host: HostPr { @@ -28,7 +28,7 @@ struct Host: HostPr { var publicKey: Data? var privateKey: Data? var passphrase: String = "" - var key: Data? + var key: String? init( address: String, @@ -38,7 +38,7 @@ struct Host: HostPr { publicKey: Data? = nil, privateKey: Data? = nil, passphrase: String = "", - hostkey: Data? = nil + hostkey: String? = nil ) { self.address = address self.port = port diff --git a/ShhShell/SSH/SSHHandler.swift b/ShhShell/SSH/SSHHandler.swift index 8c8b5d0..9a9c30a 100644 --- a/ShhShell/SSH/SSHHandler.swift +++ b/ShhShell/SSH/SSHHandler.swift @@ -33,7 +33,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject { self.host = host } - func getHostkey() -> Data? { + func getHostkey() -> String? { var hostkey: ssh_key? ssh_get_server_publickey(session, &hostkey) @@ -41,7 +41,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject { let status = ssh_pki_export_pubkey_base64(hostkey, &hostkeyB64) guard status == SSH_OK, let cString = hostkeyB64 else { return nil } - return String(cString: cString).data(using: .utf8) + return String(cString: cString) } func go() { @@ -60,7 +60,11 @@ class SSHHandler: @unchecked Sendable, ObservableObject { try? authWithNone() getAuthMethods() - self.host.key = getHostkey() + + if self.host.key != getHostkey() { + self.host.key = getHostkey() + return + } if !host.password.isEmpty { do { try authWithPw() } catch { diff --git a/ShhShell/Views/ConnectionView.swift b/ShhShell/Views/ConnectionView.swift index 17bf70e..d464fb6 100644 --- a/ShhShell/Views/ConnectionView.swift +++ b/ShhShell/Views/ConnectionView.swift @@ -76,10 +76,9 @@ struct ConnectionView: View { TextField("", text: $passphrase, prompt: Text("Passphrase (Optional)")) } - if handler.host.key != nil, - let hostkeyString = String(data: handler.host.key!, encoding: .utf8) { - Text("Hostkey: "+hostkeyString) - .onChange(of: handler.host.key) { _ in + if handler.host.key != nil { + Text("Hostkey: \(handler.getHostkey() ?? hostsManager.getHostMatching(handler.host)?.key ?? "nil")") + .onChange(of: handler.host.key) { _ in guard let previousKnownHost = hostsManager.getHostMatching(handler.host) else { return } guard handler.host.key == previousKnownHost.key else { hostKeyChangedAlert = true @@ -116,7 +115,7 @@ struct ConnectionView: View { handler.host.key = hostsManager.getHostMatching(handler.host)?.key } } message: { - Text("Expected \(hostsManager.getHostMatching(handler.host)?.key?.base64EncodedString() ?? "null")\nbut recieved \(handler.host.key?.base64EncodedString() ?? "null" ) from the server") + Text("Expected \(handler.host.key ?? "nil")\nbut recieved \(handler.getHostkey() ?? "nil") from the server") } .transition(.opacity) .toolbar {