diff --git a/ShhShell/SSH/SSHHandler.swift b/ShhShell/SSH/SSHHandler.swift index b3537d6..2af4b6f 100644 --- a/ShhShell/SSH/SSHHandler.swift +++ b/ShhShell/SSH/SSHHandler.swift @@ -15,6 +15,8 @@ class SSHHandler: @unchecked Sendable, ObservableObject { private var session: ssh_session? private var channel: ssh_channel? + var keyManager: KeyManager + @MainActor var container: TerminalViewContainer { TerminalViewContainer.shared } @@ -38,8 +40,9 @@ class SSHHandler: @unchecked Sendable, ObservableObject { private let userDefaults = NSUbiquitousKeyValueStore.default private let logger = Logger(subsystem: "xy", category: "sshHandler") - init(host: Host) { + init(host: Host, keyManager: KeyManager?) { self.host = host + self.keyManager = keyManager ?? KeyManager() } func getHostkey() -> String? { diff --git a/ShhShell/ShhShellApp.swift b/ShhShell/ShhShellApp.swift index bd7f567..cb050db 100644 --- a/ShhShell/ShhShellApp.swift +++ b/ShhShell/ShhShellApp.swift @@ -9,9 +9,16 @@ import SwiftUI @main struct ShhShellApp: App { - @StateObject var sshHandler: SSHHandler = SSHHandler(host: Host.blank) + @StateObject var sshHandler: SSHHandler + @StateObject var hostsManager: HostsManager = HostsManager() - @StateObject var keyManager: KeyManager = KeyManager() + @StateObject var keyManager: KeyManager + + init() { + let keyManager = KeyManager() + _sshHandler = StateObject(wrappedValue: SSHHandler(host: Host.blank, keyManager: keyManager)) + _keyManager = StateObject(wrappedValue: keyManager) + } var body: some Scene { WindowGroup { diff --git a/ShhShell/Views/ContentView.swift b/ShhShell/Views/ContentView.swift index 1fa5d9d..412e09a 100644 --- a/ShhShell/Views/ContentView.swift +++ b/ShhShell/Views/ContentView.swift @@ -49,9 +49,10 @@ struct ContentView: View { } #Preview { + let keymanager = KeyManager() ContentView( - handler: SSHHandler(host: Host.debug), + handler: SSHHandler(host: Host.debug, keyManager: keymanager), hostsManager: HostsManager(), - keyManager: KeyManager() + keyManager: keymanager ) } diff --git a/ShhShell/Views/Hosts/ConnectionView.swift b/ShhShell/Views/Hosts/ConnectionView.swift index 62d1bd6..2ad0333 100644 --- a/ShhShell/Views/Hosts/ConnectionView.swift +++ b/ShhShell/Views/Hosts/ConnectionView.swift @@ -197,9 +197,10 @@ struct ConnectionView: View { #Preview { + let keymanager = KeyManager() ConnectionView( - handler: SSHHandler(host: Host.debug), + handler: SSHHandler(host: Host.debug, keyManager: keymanager), hostsManager: HostsManager(), - keyManager: KeyManager() + keyManager: keymanager ) } diff --git a/ShhShell/Views/Hosts/HostsView.swift b/ShhShell/Views/Hosts/HostsView.swift index 62e2264..c639ad0 100644 --- a/ShhShell/Views/Hosts/HostsView.swift +++ b/ShhShell/Views/Hosts/HostsView.swift @@ -21,7 +21,7 @@ struct HostsView: View { ForEach(hostsManager.hosts) { host in NavigationLink() { ConnectionView( - handler: SSHHandler(host: host), + handler: SSHHandler(host: host, keyManager: keyManager), hostsManager: hostsManager, keyManager: keyManager ) @@ -64,7 +64,7 @@ struct HostsView: View { ToolbarItem(placement: .confirmationAction) { NavigationLink { ConnectionView( - handler: SSHHandler(host: Host.blank), + handler: SSHHandler(host: Host.blank, keyManager: keyManager), hostsManager: hostsManager, keyManager: keyManager ) @@ -78,7 +78,7 @@ struct HostsView: View { #Preview { HostsView( - handler: SSHHandler(host: Host.debug), + handler: SSHHandler(host: Host.debug, keyManager: nil), hostsManager: HostsManager(), keyManager: KeyManager() ) diff --git a/ShhShell/Views/Misc/DialogView.swift b/ShhShell/Views/Misc/DialogView.swift index b19a958..13af27d 100644 --- a/ShhShell/Views/Misc/DialogView.swift +++ b/ShhShell/Views/Misc/DialogView.swift @@ -59,6 +59,6 @@ struct DialogView: View { #Preview { ZStack { Color.black - DialogView(handler: SSHHandler(host: Host.debug), showDialog: true) + DialogView(handler: SSHHandler(host: Host.debug, keyManager: nil), showDialog: true) } } diff --git a/ShhShell/Views/Sessions/SessionView.swift b/ShhShell/Views/Sessions/SessionView.swift index 7e83cdc..69fb742 100644 --- a/ShhShell/Views/Sessions/SessionView.swift +++ b/ShhShell/Views/Sessions/SessionView.swift @@ -9,6 +9,7 @@ import SwiftUI struct SessionView: View { @ObservedObject var hostsManager: HostsManager + @ObservedObject var keyManager: KeyManager @ObservedObject var container = TerminalViewContainer.shared @State var key: UUID @@ -34,7 +35,7 @@ struct SessionView: View { } .fullScreenCover(isPresented: $shellPresented) { ShellView( - handler: container.sessions[key]?.handler ?? SSHHandler(host: Host.blank), + handler: container.sessions[key]?.handler ?? SSHHandler(host: Host.blank, keyManager: keyManager), hostsManager: hostsManager ) } @@ -44,6 +45,7 @@ struct SessionView: View { #Preview { SessionView( hostsManager: HostsManager(), + keyManager: KeyManager(), key: UUID() ) } diff --git a/ShhShell/Views/Sessions/SessionsListView.swift b/ShhShell/Views/Sessions/SessionsListView.swift index 69b55cd..d39ecbf 100644 --- a/ShhShell/Views/Sessions/SessionsListView.swift +++ b/ShhShell/Views/Sessions/SessionsListView.swift @@ -19,7 +19,7 @@ struct SessionsListView: View { if !container.sessions.isEmpty { Section("Sessions") { ForEach(container.sessionIDs, id: \.self) { key in - SessionView(hostsManager: hostsManager, key: key) + SessionView(hostsManager: hostsManager, keyManager: keyManager, key: key) .id(container.sessions[key]!.handler.connected) } } @@ -29,7 +29,7 @@ struct SessionsListView: View { #Preview { SessionsListView( - handler: SSHHandler(host: Host.debug), + handler: SSHHandler(host: Host.debug, keyManager: nil), hostsManager: HostsManager(), keyManager: KeyManager() ) diff --git a/ShhShell/Views/Terminal/ShellView.swift b/ShhShell/Views/Terminal/ShellView.swift index 1939dc7..e8869cf 100644 --- a/ShhShell/Views/Terminal/ShellView.swift +++ b/ShhShell/Views/Terminal/ShellView.swift @@ -69,7 +69,7 @@ struct ShellView: View { #Preview { ShellView( - handler: SSHHandler(host: Host.debug), + handler: SSHHandler(host: Host.debug, keyManager: nil), hostsManager: HostsManager() ) }