From 0f36693af176439e51d45c2ec41de8669a383e9f Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Thu, 16 Oct 2025 13:08:44 +0200 Subject: [PATCH] Fix loading --- apps/desktop/desktop_native/napi/src/lib.rs | 3 +- .../autofill/main/main-ssh-agent.service.ts | 97 ++++++++----------- .../autofill/services/ssh-agent.service.ts | 4 + apps/desktop/src/platform/preload.ts | 3 + 4 files changed, 52 insertions(+), 55 deletions(-) diff --git a/apps/desktop/desktop_native/napi/src/lib.rs b/apps/desktop/desktop_native/napi/src/lib.rs index a0f906b3407..acc9889c487 100644 --- a/apps/desktop/desktop_native/napi/src/lib.rs +++ b/apps/desktop/desktop_native/napi/src/lib.rs @@ -1070,7 +1070,7 @@ pub mod sshagent_v2 { protocol::types::KeyPair, }; use tokio::{self, sync::Mutex}; - use tracing::error; + use tracing::{error, info}; #[napi] pub struct SshAgentState { @@ -1201,6 +1201,7 @@ pub mod sshagent_v2 { #[napi] pub fn stop(agent_state: &mut SshAgentState) -> napi::Result<()> { + info!("Stopping SSH Agent"); agent_state.agent.stop(); Ok(()) } diff --git a/apps/desktop/src/autofill/main/main-ssh-agent.service.ts b/apps/desktop/src/autofill/main/main-ssh-agent.service.ts index eceee3e4b70..bf973327e50 100644 --- a/apps/desktop/src/autofill/main/main-ssh-agent.service.ts +++ b/apps/desktop/src/autofill/main/main-ssh-agent.service.ts @@ -37,6 +37,49 @@ export class MainSshAgentService { ipcMain.handle("sshagent.isloaded", async (event: any) => { return this.agentStateV1 != null && this.agentStateV2 != null; }); + + ipcMain.handle( + "sshagent.setkeys", + async (event: any, keys: { name: string; privateKey: string; cipherId: string }[]) => { + if (this.agentStateV1 != null && (await sshagent.isRunning(this.agentStateV1))) { + sshagent.setKeys(this.agentStateV1, keys); + } + if (this.agentStateV2 != null && (await sshagent_v2.isRunning(this.agentStateV2))) { + sshagent_v2.setKeys(this.agentStateV2, keys); + } + }, + ); + ipcMain.handle( + "sshagent.signrequestresponse", + async (event: any, { requestId, accepted }: { requestId: number; accepted: boolean }) => { + this.requestResponses.push({ requestId, accepted, timestamp: new Date() }); + }, + ); + + ipcMain.handle("sshagent.lock", async (event: any) => { + if (this.agentStateV1 != null && (await sshagent.isRunning(this.agentStateV1))) { + sshagent.lock(this.agentStateV1); + } + if (this.agentStateV2 != null && (await sshagent_v2.isRunning(this.agentStateV2))) { + sshagent_v2.lock(this.agentStateV2); + } + }); + + ipcMain.handle("sshagent.clearkeys", async (event: any) => { + if (this.agentStateV1 != null) { + sshagent.clearKeys(this.agentStateV1); + } + if (this.agentStateV2 != null) { + sshagent_v2.clearKeys(this.agentStateV2); + } + }); + + ipcMain.handle("sshagent.stop", async (event: any) => { + if (this.agentStateV2 != null) { + sshagent_v2.stop(this.agentStateV2); + this.agentStateV2 = null; + } + }); } init_v1() { @@ -94,33 +137,6 @@ export class MainSshAgentService { .catch((e) => { this.logService.error("SSH agent encountered an error: ", e); }); - - ipcMain.handle( - "sshagent.setkeys", - async (event: any, keys: { name: string; privateKey: string; cipherId: string }[]) => { - if (this.agentStateV1 != null && (await sshagent.isRunning(this.agentStateV1))) { - sshagent.setKeys(this.agentStateV1, keys); - } - }, - ); - ipcMain.handle( - "sshagent.signrequestresponse", - async (event: any, { requestId, accepted }: { requestId: number; accepted: boolean }) => { - this.requestResponses.push({ requestId, accepted, timestamp: new Date() }); - }, - ); - - ipcMain.handle("sshagent.lock", async (event: any) => { - if (this.agentStateV1 != null && (await sshagent.isRunning(this.agentStateV1))) { - sshagent.lock(this.agentStateV1); - } - }); - - ipcMain.handle("sshagent.clearkeys", async (event: any) => { - if (this.agentStateV1 != null) { - sshagent.clearKeys(this.agentStateV1); - } - }); } init_v2() { @@ -178,32 +194,5 @@ export class MainSshAgentService { .catch((e) => { this.logService.error("SSH agent encountered an error: ", e); }); - - ipcMain.handle( - "sshagent.setkeys", - async (event: any, keys: { name: string; privateKey: string; cipherId: string }[]) => { - if (this.agentStateV2 != null && (await sshagent_v2.isRunning(this.agentStateV2))) { - sshagent_v2.setKeys(this.agentStateV2, keys); - } - }, - ); - ipcMain.handle( - "sshagent.signrequestresponse", - async (event: any, { requestId, accepted }: { requestId: number; accepted: boolean }) => { - this.requestResponses.push({ requestId, accepted, timestamp: new Date() }); - }, - ); - - ipcMain.handle("sshagent.lock", async (event: any) => { - if (this.agentStateV2 != null && (await sshagent_v2.isRunning(this.agentStateV2))) { - sshagent_v2.lock(this.agentStateV2); - } - }); - - ipcMain.handle("sshagent.clearkeys", async (event: any) => { - if (this.agentStateV2 != null) { - sshagent_v2.clearKeys(this.agentStateV2); - } - }); } } diff --git a/apps/desktop/src/autofill/services/ssh-agent.service.ts b/apps/desktop/src/autofill/services/ssh-agent.service.ts index a7a8c55558e..638e56cea25 100644 --- a/apps/desktop/src/autofill/services/ssh-agent.service.ts +++ b/apps/desktop/src/autofill/services/ssh-agent.service.ts @@ -75,6 +75,10 @@ export class SshAgentService implements OnDestroy { ); await ipc.platform.sshAgent.init(isV2FeatureFlagEnabled ? 2 : 1); } + + if (!enabled) { + await ipc.platform.sshAgent.stop(); + } }), takeUntil(this.destroy$), ) diff --git a/apps/desktop/src/platform/preload.ts b/apps/desktop/src/platform/preload.ts index e509a133af7..b29486c918c 100644 --- a/apps/desktop/src/platform/preload.ts +++ b/apps/desktop/src/platform/preload.ts @@ -63,6 +63,9 @@ const sshAgent = { clearKeys: async () => { return await ipcRenderer.invoke("sshagent.clearkeys"); }, + stop: async () => { + return await ipcRenderer.invoke("sshagent.stop"); + }, isLoaded(): Promise { return ipcRenderer.invoke("sshagent.isloaded"); },