From 12e950bf3efc94bf9f26ab6d3db17c0e00728fb6 Mon Sep 17 00:00:00 2001 From: Levi Yan Date: Sun, 22 Jun 2025 16:00:29 +0800 Subject: [PATCH] refactor: no longer set username and userToken as member variables in user class and get them only by global state --- src/user.ts | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/user.ts b/src/user.ts index 38fc7ef..65c0fc2 100644 --- a/src/user.ts +++ b/src/user.ts @@ -12,12 +12,11 @@ const sshpk = require('sshpk'); export default class User { private context: vscode.ExtensionContext; - private username: string | undefined; - private userToken: string | undefined; - private usernameKey: string = 'devstarUsername' - private userTokenKey: string = 'devstarUserToken' + // 修改devstarDomain会影响hostname, username key, user token key private devstarDomain: string; private devstarHostname: string; + private usernameKey: string; // devstarUsername_ + private userTokenKey: string; // devstarUserToken_ /** * devstarDomain由配置项提供 @@ -34,8 +33,6 @@ export default class User { constructor(context: vscode.ExtensionContext, devstarDomain?: string) { this.context = context; - this.username = this.context.globalState.get(this.usernameKey); - this.userToken = this.context.globalState.get(this.userTokenKey); // 提取devstar domain的主域名,用于本地ssh key的命名 if (devstarDomain != undefined && devstarDomain != "") { @@ -66,6 +63,8 @@ export default class User { this.devstarDomain = devstarDomain.endsWith('/') ? devstarDomain.slice(0, -1) : devstarDomain const parsedUrl = new URL(devstarDomain) this.devstarHostname = parsedUrl.hostname.replace(/\./g, '_'); + this.usernameKey = "devstarUsername_" + this.devstarDomain + this.userTokenKey = "devstarUserToken_" + this.devstarDomain } else { console.error(vscode.l10n.t("devstar domain is null")) } @@ -133,16 +132,15 @@ export default class User { } public getUsernameFromLocal(): string | undefined { - return this.username; + return this.context.globalState.get(this.usernameKey); } public getUserTokenFromLocal(): string | undefined { - return this.userToken; + return this.context.globalState.get(this.userTokenKey); } public setUsernameToLocal(username: string) { this.context.globalState.update(this.usernameKey, username); - this.username = username; if (username !== "") { console.log('Username has been stored.') } else { @@ -152,7 +150,6 @@ export default class User { public setUserTokenToLocal(userToken: string) { this.context.globalState.update(this.userTokenKey, userToken) - this.userToken = userToken if (userToken !== "") { console.log('Token has been stored.'); } else { @@ -169,19 +166,23 @@ export default class User { } public getUserPrivateKeyPath(): string { - if (!this.isLogged) { + if (!this.isLogged()) { return ''; + } else { + const username: string|undefined = this.context.globalState.get(this.usernameKey) + // islogged为true,username不为空 + return path.join(os.homedir(), '.ssh', `id_rsa_${username}_${this.devstarHostname}`) } - - return path.join(os.homedir(), '.ssh', `id_rsa_${this.username}_${this.devstarHostname}`) } public getUserPublicKeyPath(): string { - if (!this.isLogged) { + if (!this.isLogged()) { return ''; + } else { + const username: string|undefined = this.context.globalState.get(this.usernameKey) + // islogged为true,username不为空 + return path.join(os.homedir(), '.ssh', `id_rsa_${username}_${this.devstarHostname}.pub`) } - - return path.join(os.homedir(), '.ssh', `id_rsa_${this.username}_${this.devstarHostname}.pub`) } public existUserPublicKey(): boolean { @@ -249,7 +250,8 @@ export default class User { this.updateLocalUserPrivateKeyPath(this.getUserPrivateKeyPath()) console.log(`Update local user private key path.`) } catch (error) { - console.error(`Failed to write public/private key into the user(${this.username}) ssh public/key file: `, error); + const username: string|undefined = this.context.globalState.get(this.usernameKey) + console.error(`Failed to write public/private key into the user(${username}) ssh public/key file: `, error); } } } \ No newline at end of file