From 3a9f36e2e4bbe48228d18f2f1293a57861ae5664 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 28 Apr 2025 13:09:19 +0100 Subject: [PATCH 1/3] Try to end /api/atelier web sessions when extension deactivates --- src/extension.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index d6cf4b2f..5da93903 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -4,6 +4,7 @@ import * as vscode from "vscode"; import { importFromRegistry } from "./commands/importFromRegistry"; import { ServerManagerView } from "./ui/serverManagerView"; import { commonActivate, extensionId } from "./commonActivate"; +import { logout, serverSessions } from "./makeRESTRequest"; export function activate(context: vscode.ExtensionContext) { const view = new ServerManagerView(context); @@ -20,4 +21,9 @@ export function activate(context: vscode.ExtensionContext) { return commonActivate(context, view); } -export function deactivate() { } +export async function deactivate() { + // Do our best to log out of all sessions + for (const serverSession of serverSessions) { + await logout(serverSession[1].serverName); + } +} From 6b4bc85ebbb0fb4ed95f38a3db5287bfd9a4cbdc Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Mon, 28 Apr 2025 22:40:24 +0100 Subject: [PATCH 2/3] Avoid the credential validity check leaving a stray web session --- src/authenticationProvider.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/authenticationProvider.ts b/src/authenticationProvider.ts index f0ad3f41..4487f97a 100644 --- a/src/authenticationProvider.ts +++ b/src/authenticationProvider.ts @@ -16,7 +16,7 @@ import { import { ServerManagerAuthenticationSession } from "./authenticationSession"; import { globalState } from "./commonActivate"; import { getServerSpec } from "./api/getServerSpec"; -import { makeRESTRequest } from "./makeRESTRequest"; +import { logout, makeRESTRequest } from "./makeRESTRequest"; export const AUTHENTICATION_PROVIDER = "intersystems-server-credentials"; const AUTHENTICATION_PROVIDER_LABEL = "InterSystems Server Credentials"; @@ -230,6 +230,8 @@ export class ServerManagerAuthenticationProvider implements AuthenticationProvid await this._removeSession(session.id, true); return false; } + // Immediately log out the session created by credentials test + await logout(session.serverName); } this._checkedSessions.push(session); return true; From 8edd045cfae548625949f4505a13186236d83ea8 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Wed, 30 Apr 2025 17:30:40 +0100 Subject: [PATCH 3/3] Use Promise.allSettled in deactivate, and add this logic to web-extension --- src/extension.ts | 5 ++++- src/web-extension.ts | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 5da93903..9ee81634 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -23,7 +23,10 @@ export function activate(context: vscode.ExtensionContext) { export async function deactivate() { // Do our best to log out of all sessions + + const promises: Promise[] = []; for (const serverSession of serverSessions) { - await logout(serverSession[1].serverName); + promises.push(logout(serverSession[1].serverName)); } + await Promise.allSettled(promises); } diff --git a/src/web-extension.ts b/src/web-extension.ts index e7482f91..8812b9c8 100644 --- a/src/web-extension.ts +++ b/src/web-extension.ts @@ -3,12 +3,21 @@ import * as vscode from "vscode"; import { ServerManagerView } from "./ui/serverManagerView"; import { commonActivate } from "./commonActivate"; +import { logout, serverSessions } from "./makeRESTRequest"; export function activate(context: vscode.ExtensionContext) { - const view = new ServerManagerView(context); + const view = new ServerManagerView(context); - // Common activation steps - return commonActivate(context, view); + // Common activation steps + return commonActivate(context, view); } -export function deactivate() { } +export async function deactivate() { + // Do our best to log out of all sessions + + const promises: Promise[] = []; + for (const serverSession of serverSessions) { + promises.push(logout(serverSession[1].serverName)); + } + await Promise.allSettled(promises); +}