From 6a7dc8edfa7d385e2b3f4b91c2a899d24e9bf474 Mon Sep 17 00:00:00 2001
From: Christian Zheng <czheng@takima.fr>
Date: Mon, 11 Apr 2022 09:51:14 +0200
Subject: [PATCH] feat(login): add persistence

---
 .../src/core/extensionStore.ts                | 54 ++++++++++++++++---
 1 file changed, 46 insertions(+), 8 deletions(-)

diff --git a/deadlock-plugins/deadlock-extension/src/core/extensionStore.ts b/deadlock-plugins/deadlock-extension/src/core/extensionStore.ts
index 5f8a7fd5..4caf27ca 100644
--- a/deadlock-plugins/deadlock-extension/src/core/extensionStore.ts
+++ b/deadlock-plugins/deadlock-extension/src/core/extensionStore.ts
@@ -1,4 +1,5 @@
-import { Memento, ExtensionContext } from 'vscode';
+import { ExtensionContext, Memento, SecretStorage, window } from 'vscode';
+import { log } from '../recorder/utils';
 
 export type GlobalStorageType = Memento & { setKeysForSync(keys: readonly string[]): void };
 
@@ -6,9 +7,11 @@ export default class ExtensionStore {
 	private static instance: ExtensionStore;
 
 	private globalStorage: GlobalStorageType;
+	private secretStorage: SecretStorage;
 
-	private constructor(globalStorage: GlobalStorageType) {
-		this.globalStorage = globalStorage;
+	private constructor(context: ExtensionContext) {
+		this.globalStorage = context.globalState;
+		this.secretStorage = context.secrets;
 	}
 
 	public static getInstance(): ExtensionStore {
@@ -24,18 +27,53 @@ export default class ExtensionStore {
 			return ExtensionStore.instance;
 		}
 
-		ExtensionStore.instance = new ExtensionStore(context.globalState);
+		ExtensionStore.instance = new ExtensionStore(context);
 	}
 
-	public getMissionWorkdir(): string | undefined {
+	getMissionWorkdir(): string | undefined {
 		return this.globalStorage.get<string>(StoreKey.MissionWorkDirKey);
 	}
 
-	public setMissionWorkdir(path: string): Thenable<void> {
-		return this.globalStorage.update(StoreKey.MissionWorkDirKey, path);
+	setMissionWorkdir(path: string) {
+		this.globalStorage.update(StoreKey.MissionWorkDirKey, path);
+		window.showInformationMessage(`Nouveau dossier de stockage des missions: ${path}`);
+	}
+
+	public async getAccessToken() {
+		return this._readSecret(StoreKey.AccessTokenKey);
+	}
+
+	public async getRefreshToken() {
+		return this._readSecret(StoreKey.RefreshTokenKey);
+	}
+
+	public async setAccessToken(accessToken: string) {
+		if (!accessToken) {
+			log('Attempt to store undefined access token');
+			return;
+		}
+		return this._storeSecret(StoreKey.AccessTokenKey, accessToken);
+	}
+
+	public async setRefreshToken(refreshToken: string) {
+		if (!refreshToken) {
+			log('Attempt to store undefined refresh token');
+			return;
+		}
+		return this._storeSecret(StoreKey.RefreshTokenKey, refreshToken);
+	}
+
+	private async _storeSecret(key: StoreKey, value: string) {
+		this.secretStorage.store(key, value);
+	}
+
+	private async _readSecret(key: StoreKey) {
+		return this.secretStorage.get(key);
 	}
 }
 
 enum StoreKey {
-	MissionWorkDirKey = 'mission-workdir-key',
+	MissionWorkDirKey = 'mission-wordir-key',
+	AccessTokenKey = 'access-token-key',
+	RefreshTokenKey = 'refresh-token-key',
 }
-- 
GitLab