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'
.