From 9de08d80b621205047af4241d3bc7f539debf861 Mon Sep 17 00:00:00 2001
From: Christian Zheng <czheng@takima.fr>
Date: Mon, 11 Apr 2022 19:34:10 +0200
Subject: [PATCH] feat(login): add cleaner command + some bug fixes

---
 deadlock-plugins/deadlock-extension/package.json       |  5 +++++
 .../deadlock-extension/src/core/commandHandler.ts      |  2 ++
 .../deadlock-extension/src/core/controller.ts          | 10 +++++++++-
 .../deadlock-extension/src/core/extensionStore.ts      | 10 ++++++++++
 4 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/deadlock-plugins/deadlock-extension/package.json b/deadlock-plugins/deadlock-extension/package.json
index ea003cfa..1a35fffc 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 8e042408..73999d20 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 7a8396c8..af61def6 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 678434df..31d82366 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');
-- 
GitLab