diff --git a/deadlock-plugins/deadlock-extension/package.json b/deadlock-plugins/deadlock-extension/package.json index ea003cfaa72af8dad23bf96a2a4091b181d18488..1a35fffc1c8e1db82b442f168cd737a636e06ee6 100644 --- a/deadlock-plugins/deadlock-extension/package.json +++ b/deadlock-plugins/deadlock-extension/package.json @@ -37,6 +37,11 @@ "command": "deadlock.chooseMissionWorkdir", "title": "Choose mission workdir", "category": "Deadlock Coding" + }, + { + "command": "deadlock.clear", + "title": "Clear cache", + "category": "Deadlock Coding" } ], "viewsContainers": { diff --git a/deadlock-plugins/deadlock-extension/src/core/commandHandler.ts b/deadlock-plugins/deadlock-extension/src/core/commandHandler.ts index 8e042408c9f48529d232066e87e16e8811147c41..73999d209c0c0af9da3239d4e5333e446d3026a4 100644 --- a/deadlock-plugins/deadlock-extension/src/core/commandHandler.ts +++ b/deadlock-plugins/deadlock-extension/src/core/commandHandler.ts @@ -13,6 +13,7 @@ export class CommandHandler { initCommandHandler() { commands.registerCommand(CHOOSE_MISSION_WORKDIR_COMMAND.cmd, this.chooseMissionWorkdir.bind(this)); commands.registerCommand(AUTHENTICATE_COMMAND.cmd, this.parent.authenticate.bind(this.parent)); + commands.registerCommand(CLEAR_COMMAND.cmd, this.parent.clear.bind(this.parent)); } async chooseMissionWorkdir() { @@ -38,3 +39,4 @@ export class CommandHandler { export const CHOOSE_MISSION_WORKDIR_COMMAND = new Command('Choose mission workdir', 'deadlock.chooseMissionWorkdir'); export const AUTHENTICATE_COMMAND = new Command('Authenticate', 'deadlock.authenticate'); +export const CLEAR_COMMAND = new Command('Clear', 'deadlock.clear'); diff --git a/deadlock-plugins/deadlock-extension/src/core/controller.ts b/deadlock-plugins/deadlock-extension/src/core/controller.ts index 7a8396c873e7c110d5096ac4dc13b07760ddc939..af61def67cad6c946d7113adedd94ed8701dd199 100644 --- a/deadlock-plugins/deadlock-extension/src/core/controller.ts +++ b/deadlock-plugins/deadlock-extension/src/core/controller.ts @@ -44,12 +44,18 @@ export default class Controller { this.gettingStartedView.isAlreadyConnected = !!(await exensionStorage.getAccessToken()); } + async clear() { + const exensionStorage = ExtensionStore.getInstance(); + await exensionStorage.clear(); + this.gettingStartedView.isAlreadyConnected = false; + } + async authenticate() { const tokens = await this.connection.getToken({ openLink: Controller.openBrowserWithUrl }); const exensionStorage = ExtensionStore.getInstance(); await exensionStorage.setAccessToken(tokens.accessToken); await exensionStorage.setRefreshToken(tokens.refreshToken); - this.gettingStartedView.isAlreadyConnected = !!(await exensionStorage.getAccessToken()); + this.gettingStartedView.isAlreadyConnected = true; } public static openBrowserWithUrl(url: string) { vscode.commands.executeCommand('vscode.open', vscode.Uri.parse(url)); @@ -71,6 +77,8 @@ export default class Controller { const { accessToken, refreshToken } = await this.connection.getToken({ openLink: Controller.openBrowserWithUrl, }); + extensionStore.setAccessToken(accessToken); + extensionStore.setRefreshToken(refreshToken); vscode.window.showInformationMessage('Nouvelle connexion validée'); } else { vscode.window.showInformationMessage('Déjà connecté: session récupérée'); diff --git a/deadlock-plugins/deadlock-extension/src/core/extensionStore.ts b/deadlock-plugins/deadlock-extension/src/core/extensionStore.ts index 678434df6ecd77bfdbc72d8c3c58eabe2f8b7c7e..31d8236674ede35a695dddb94bd7b8d561bd188c 100644 --- a/deadlock-plugins/deadlock-extension/src/core/extensionStore.ts +++ b/deadlock-plugins/deadlock-extension/src/core/extensionStore.ts @@ -14,6 +14,16 @@ export default class ExtensionStore { this.secretStorage = context.secrets; } + public async clear() { + if (this.globalStorage.keys()) { + for (let key of this.globalStorage.keys()) { + this.globalStorage.update(key, undefined); + } + } + if (await this.secretStorage.get(StoreKey.AccessTokenKey)) this.secretStorage.delete(StoreKey.AccessTokenKey); + if (await this.secretStorage.get(StoreKey.RefreshTokenKey)) this.secretStorage.delete(StoreKey.RefreshTokenKey); + } + public static getInstance(): ExtensionStore { if (!ExtensionStore.instance) { throw new Error('ExtensionStore should be initiate with a storage first time');