dependency injection in ShhShellApp via the init

added keymanager to sshhandler so it can access keys
This commit is contained in:
neon443
2025-07-02 08:19:01 +01:00
parent 935c118d35
commit ce162f437a
9 changed files with 29 additions and 15 deletions

View File

@@ -15,6 +15,8 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
private var session: ssh_session? private var session: ssh_session?
private var channel: ssh_channel? private var channel: ssh_channel?
var keyManager: KeyManager
@MainActor var container: TerminalViewContainer { @MainActor var container: TerminalViewContainer {
TerminalViewContainer.shared TerminalViewContainer.shared
} }
@@ -38,8 +40,9 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
private let userDefaults = NSUbiquitousKeyValueStore.default private let userDefaults = NSUbiquitousKeyValueStore.default
private let logger = Logger(subsystem: "xy", category: "sshHandler") private let logger = Logger(subsystem: "xy", category: "sshHandler")
init(host: Host) { init(host: Host, keyManager: KeyManager?) {
self.host = host self.host = host
self.keyManager = keyManager ?? KeyManager()
} }
func getHostkey() -> String? { func getHostkey() -> String? {

View File

@@ -9,9 +9,16 @@ import SwiftUI
@main @main
struct ShhShellApp: App { struct ShhShellApp: App {
@StateObject var sshHandler: SSHHandler = SSHHandler(host: Host.blank) @StateObject var sshHandler: SSHHandler
@StateObject var hostsManager: HostsManager = HostsManager() @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 { var body: some Scene {
WindowGroup { WindowGroup {

View File

@@ -49,9 +49,10 @@ struct ContentView: View {
} }
#Preview { #Preview {
let keymanager = KeyManager()
ContentView( ContentView(
handler: SSHHandler(host: Host.debug), handler: SSHHandler(host: Host.debug, keyManager: keymanager),
hostsManager: HostsManager(), hostsManager: HostsManager(),
keyManager: KeyManager() keyManager: keymanager
) )
} }

View File

@@ -197,9 +197,10 @@ struct ConnectionView: View {
#Preview { #Preview {
let keymanager = KeyManager()
ConnectionView( ConnectionView(
handler: SSHHandler(host: Host.debug), handler: SSHHandler(host: Host.debug, keyManager: keymanager),
hostsManager: HostsManager(), hostsManager: HostsManager(),
keyManager: KeyManager() keyManager: keymanager
) )
} }

View File

@@ -21,7 +21,7 @@ struct HostsView: View {
ForEach(hostsManager.hosts) { host in ForEach(hostsManager.hosts) { host in
NavigationLink() { NavigationLink() {
ConnectionView( ConnectionView(
handler: SSHHandler(host: host), handler: SSHHandler(host: host, keyManager: keyManager),
hostsManager: hostsManager, hostsManager: hostsManager,
keyManager: keyManager keyManager: keyManager
) )
@@ -64,7 +64,7 @@ struct HostsView: View {
ToolbarItem(placement: .confirmationAction) { ToolbarItem(placement: .confirmationAction) {
NavigationLink { NavigationLink {
ConnectionView( ConnectionView(
handler: SSHHandler(host: Host.blank), handler: SSHHandler(host: Host.blank, keyManager: keyManager),
hostsManager: hostsManager, hostsManager: hostsManager,
keyManager: keyManager keyManager: keyManager
) )
@@ -78,7 +78,7 @@ struct HostsView: View {
#Preview { #Preview {
HostsView( HostsView(
handler: SSHHandler(host: Host.debug), handler: SSHHandler(host: Host.debug, keyManager: nil),
hostsManager: HostsManager(), hostsManager: HostsManager(),
keyManager: KeyManager() keyManager: KeyManager()
) )

View File

@@ -59,6 +59,6 @@ struct DialogView: View {
#Preview { #Preview {
ZStack { ZStack {
Color.black Color.black
DialogView(handler: SSHHandler(host: Host.debug), showDialog: true) DialogView(handler: SSHHandler(host: Host.debug, keyManager: nil), showDialog: true)
} }
} }

View File

@@ -9,6 +9,7 @@ import SwiftUI
struct SessionView: View { struct SessionView: View {
@ObservedObject var hostsManager: HostsManager @ObservedObject var hostsManager: HostsManager
@ObservedObject var keyManager: KeyManager
@ObservedObject var container = TerminalViewContainer.shared @ObservedObject var container = TerminalViewContainer.shared
@State var key: UUID @State var key: UUID
@@ -34,7 +35,7 @@ struct SessionView: View {
} }
.fullScreenCover(isPresented: $shellPresented) { .fullScreenCover(isPresented: $shellPresented) {
ShellView( ShellView(
handler: container.sessions[key]?.handler ?? SSHHandler(host: Host.blank), handler: container.sessions[key]?.handler ?? SSHHandler(host: Host.blank, keyManager: keyManager),
hostsManager: hostsManager hostsManager: hostsManager
) )
} }
@@ -44,6 +45,7 @@ struct SessionView: View {
#Preview { #Preview {
SessionView( SessionView(
hostsManager: HostsManager(), hostsManager: HostsManager(),
keyManager: KeyManager(),
key: UUID() key: UUID()
) )
} }

View File

@@ -19,7 +19,7 @@ struct SessionsListView: View {
if !container.sessions.isEmpty { if !container.sessions.isEmpty {
Section("Sessions") { Section("Sessions") {
ForEach(container.sessionIDs, id: \.self) { key in 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) .id(container.sessions[key]!.handler.connected)
} }
} }
@@ -29,7 +29,7 @@ struct SessionsListView: View {
#Preview { #Preview {
SessionsListView( SessionsListView(
handler: SSHHandler(host: Host.debug), handler: SSHHandler(host: Host.debug, keyManager: nil),
hostsManager: HostsManager(), hostsManager: HostsManager(),
keyManager: KeyManager() keyManager: KeyManager()
) )

View File

@@ -69,7 +69,7 @@ struct ShellView: View {
#Preview { #Preview {
ShellView( ShellView(
handler: SSHHandler(host: Host.debug), handler: SSHHandler(host: Host.debug, keyManager: nil),
hostsManager: HostsManager() hostsManager: HostsManager()
) )
} }