SecretStorage VSCode-Erweiterungs-API

Es gibt verschiedene Möglichkeiten, Benutzereinstellungen in VSCode zu speichern. Vor der Einführung von Version 1.53.0 mussten vertrauliche Informationen in Memento-Objekten in workspaceState und globalState oder beispielsweise Keytar gespeichert werden . Das Speichern von Kennwörtern mit Token in einer Standardkonfigurationsdatei oder die Verwendung von Umgebungsvariablen war nicht die beste Idee, da diese Daten von anderen Erweiterungen gelesen und zwischengespeichert werden konnten.





In diesem Artikel werden Möglichkeiten zum Lesen von Daten aus settings.json



und untersucht environment variables



. Anschließend erstellen wir eine Klasse mit minimaler Funktionalität, die für das Speichern und Bereitstellen von Schlüsseln mit Werten aus VSCode SecretStorage verantwortlich ist.





Wir werden das Projekt üblicherweise benennen fancycolor



. Der Prozess der Projektinitialisierung ist in der Dokumentation zu VSCode Extensions beschrieben. Beginnen wir also sofort.





settings.json

Alle Einstellungen aller VSCode-Erweiterungen werden in einer gemeinsamen Datei gespeichert settings.json



und können daher von jeder Erweiterung aus aufgerufen werden. Beispielsweise fancycolor



können wir in unserer Anwendung leicht eine Liste aller Hosts und ihrer entsprechenden Plattformen aus unserer Konfiguration einer anderen beliebten Anwendung lesen SSH - Remote



.





const configurationWorkspace = workspace.getConfiguration()
const sshRemotePlatform: string | undefined = configurationWorkspace.get(
  "remote.SSH.remotePlatform"
)
console.log(sshRemotePlatform)
      
      



Dieser Code listet Ihre Konfiguration für die Erweiterung auf SSH - Remote



.





Proxy {ubuntu: 'linux', home: 'linux', raspberry: 'linux'}
      
      



Umgebungsvariablen

VSCode . .bashrc



Linux User.Environment



Windows process.env



.





/home/ubuntu/.env



ACCESS_TOKEN_ENV



.bashrc



.





echo 'export ACCESS_TOKEN_ENV="d8aba3b2-fda0-414a-b867-4798b7892bb4"' >> /home/ubuntu/.env
echo "source /home/ubuntu/.env" >> /home/ubuntu/.bashrc
      
      



Windows Powershell.





[System.Environment]::SetEnvironmentVariable('ACCESS_TOKEN_ENV', 'd8aba3b2-fda0-414a-b867-4798b7892bb4', [System.EnvironmentVariableTarget]::User)
      
      



VSCode fancycolor



extension.





import * as process from "process"
export const accessTokenEnv = process.env["ACCESS_TOKEN_ENV"]
console.log(accessTokenEnv)
      
      



.





d8aba3b2-fda0-414a-b867-4798b7892bb4
      
      



SecretStorage

, , VSCode. AuthSettings



, fancycolor_token



, :





  • init



    SecretStorage





  • getter instance







  • storeAuthData



    SecretStorage





  • getAuthData



    SecretStorage





import { ExtensionContext, SecretStorage } from "vscode"

export default class AuthSettings {
	private static _instance: AuthSettings

	constructor(private secretStorage: SecretStorage) {}

	static init(context: ExtensionContext): void {
		/*
		Create instance of new AuthSettings.
		*/
		AuthSettings._instance = new AuthSettings(context.secrets)
	}

	static get instance(): AuthSettings {
		/*
		Getter of our AuthSettings existing instance.
		*/
		return AuthSettings._instance
	}

	async storeAuthData(token?: string): Promise<void> {
		/*
		Update values in bugout_auth secret storage.
		*/
		if (token) {
			this.secretStorage.store("fancycolor_token", token)
		}
	}

	async getAuthData(): Promise<string | undefined> {
		/*
		Retrieve data from secret storage.
		*/
		return await this.secretStorage.get("fancycolor_token")
	}
}
      
      



Mit der extension.ts



Schreibfunktion können Sie das Token mithilfe der Befehle in der Befehlspalette hinzufügen und abrufen.





import * as vscode from "vscode"

import AuthSettings from "./settings"

export function activate(context: vscode.ExtensionContext) {
	// Initialize and get current instance of our Secret Storage
	AuthSettings.init(context)
	const settings = AuthSettings.instance
	
	// Register commands to save and retrieve token
	vscode.commands.registerCommand("fancycolor.setToken", async () => {
		const tokenInput = await vscode.window.showInputBox()
		await settings.storeAuthData(tokenInput)
	})
	vscode.commands.registerCommand("fancycolor.getToken", async () => {
		const tokenOutput = await settings.getAuthData()
		console.log(tokenOutput)
	})
}

export function deactivate() {}
      
      



Es bleibt nur die package.json



Registrierung der Befehle fancycolor.setToken



und fancycolor.getToken



. Wenn wir später mit VSCode SecretStorage arbeiten, können wir uns ausschließlich auf den für unsere Anwendung erstellten spezifischen SecretStorage beziehen, dem unser eigener zugewiesen wird _id: 'undefined_publisher.fancycolor'



.








All Articles