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