updated gethostkey to work with strings, and the rest of the ui had been updated to reflect this

This commit is contained in:
neon443
2025-06-25 14:07:27 +01:00
parent 43b407b038
commit 548beca410
3 changed files with 14 additions and 11 deletions

View File

@@ -16,7 +16,7 @@ protocol HostPr: Codable, Identifiable, Equatable {
var publicKey: Data? { get set } var publicKey: Data? { get set }
var privateKey: Data? { get set } var privateKey: Data? { get set }
var passphrase: String { get set } var passphrase: String { get set }
var key: Data? { get set } var key: String? { get set }
} }
struct Host: HostPr { struct Host: HostPr {
@@ -28,7 +28,7 @@ struct Host: HostPr {
var publicKey: Data? var publicKey: Data?
var privateKey: Data? var privateKey: Data?
var passphrase: String = "" var passphrase: String = ""
var key: Data? var key: String?
init( init(
address: String, address: String,
@@ -38,7 +38,7 @@ struct Host: HostPr {
publicKey: Data? = nil, publicKey: Data? = nil,
privateKey: Data? = nil, privateKey: Data? = nil,
passphrase: String = "", passphrase: String = "",
hostkey: Data? = nil hostkey: String? = nil
) { ) {
self.address = address self.address = address
self.port = port self.port = port

View File

@@ -33,7 +33,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
self.host = host self.host = host
} }
func getHostkey() -> Data? { func getHostkey() -> String? {
var hostkey: ssh_key? var hostkey: ssh_key?
ssh_get_server_publickey(session, &hostkey) ssh_get_server_publickey(session, &hostkey)
@@ -41,7 +41,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
let status = ssh_pki_export_pubkey_base64(hostkey, &hostkeyB64) let status = ssh_pki_export_pubkey_base64(hostkey, &hostkeyB64)
guard status == SSH_OK, let cString = hostkeyB64 else { return nil } guard status == SSH_OK, let cString = hostkeyB64 else { return nil }
return String(cString: cString).data(using: .utf8) return String(cString: cString)
} }
func go() { func go() {
@@ -60,7 +60,11 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
try? authWithNone() try? authWithNone()
getAuthMethods() getAuthMethods()
if self.host.key != getHostkey() {
self.host.key = getHostkey() self.host.key = getHostkey()
return
}
if !host.password.isEmpty { if !host.password.isEmpty {
do { try authWithPw() } catch { do { try authWithPw() } catch {

View File

@@ -76,9 +76,8 @@ struct ConnectionView: View {
TextField("", text: $passphrase, prompt: Text("Passphrase (Optional)")) TextField("", text: $passphrase, prompt: Text("Passphrase (Optional)"))
} }
if handler.host.key != nil, if handler.host.key != nil {
let hostkeyString = String(data: handler.host.key!, encoding: .utf8) { Text("Hostkey: \(handler.getHostkey() ?? hostsManager.getHostMatching(handler.host)?.key ?? "nil")")
Text("Hostkey: "+hostkeyString)
.onChange(of: handler.host.key) { _ in .onChange(of: handler.host.key) { _ in
guard let previousKnownHost = hostsManager.getHostMatching(handler.host) else { return } guard let previousKnownHost = hostsManager.getHostMatching(handler.host) else { return }
guard handler.host.key == previousKnownHost.key else { guard handler.host.key == previousKnownHost.key else {
@@ -116,7 +115,7 @@ struct ConnectionView: View {
handler.host.key = hostsManager.getHostMatching(handler.host)?.key handler.host.key = hostsManager.getHostMatching(handler.host)?.key
} }
} message: { } 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) .transition(.opacity)
.toolbar { .toolbar {