API ekstensi SecretStorage VSCode

Ada beberapa cara untuk menyimpan preferensi pengguna di VSCode. Sebelum kedatangan versi 1.53.0, informasi rahasia harus disimpan di objek Memento di workspaceState dan globalState atau, misalnya, keytar . Dan menyimpan kata sandi dengan token dalam file konfigurasi standar atau menggunakan variabel lingkungan bukanlah ide terbaik, karena data ini dapat dibaca dan di-cache oleh ekstensi lain.





Dalam artikel ini, kita akan melihat cara membaca data dari settings.json



dan environment variables



. Dan kemudian kita akan membuat kelas dengan fungsionalitas minimal yang bertanggung jawab untuk menyimpan dan menyajikan kunci dengan nilai dari VSCode SecretStorage.





Kami akan memberi nama proyek secara konvensional fancycolor



. Proses inisialisasi proyek dirinci dalam dokumentasi VSCode Extensions , jadi mari kita mulai sekarang juga.





settings.json

Semua pengaturan dari semua ekstensi VSCode disimpan dalam file umum settings.json



dan oleh karena itu dapat diakses dari ekstensi apa pun. Misalnya, dari aplikasi fancycolor



kita , kita dapat dengan mudah membaca daftar semua host dan platformnya yang sesuai dari konfigurasi kita tentang aplikasi populer lainnya SSH - Remote



.





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



Kode ini akan mencantumkan konfigurasi Anda untuk ekstensi SSH - Remote



.





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



variabel lingkungan

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")
	}
}
      
      



The extension.ts



fungsi write memungkinkan Anda untuk menambahkan dan mengambil token menggunakan perintah di Command Palette.





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() {}
      
      



Tetap hanya untuk package.json



mendaftarkan perintah fancycolor.setToken



dan fancycolor.getToken



. Nanti, saat bekerja dengan VSCode SecretStorage, kita akan dapat merujuk secara eksklusif ke SecretStorage spesifik yang dibuat untuk aplikasi kita, yang akan diberikan milik kita sendiri _id: 'undefined_publisher.fancycolor'



.








All Articles