diff --git a/src/authenticationProvider.ts b/src/authenticationProvider.ts index f0ad3f4..4487f97 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; diff --git a/src/extension.ts b/src/extension.ts index d6cf4b2..9ee8163 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,12 @@ 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 + + const promises: Promise[] = []; + for (const serverSession of serverSessions) { + promises.push(logout(serverSession[1].serverName)); + } + await Promise.allSettled(promises); +} diff --git a/src/web-extension.ts b/src/web-extension.ts index e7482f9..8812b9c 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); +}