Compare commits

7 Commits

4 changed files with 145 additions and 51 deletions

View File

@@ -7,7 +7,19 @@ export default class DevstarAPIHandler {
private devstarDomain: string; private devstarDomain: string;
constructor() { /**
* domain使用用户配置
*/
constructor();
/**
* open with vscode链接传入devstarDomain
* @param devstarDomainURL
*/
constructor(devstarDomainURL: string);
constructor(devstarDomainURL?: string) {
if (devstarDomainURL == undefined || devstarDomainURL == "") {
// 获取domain // 获取domain
const devstarDomainFromUserConfig = utils.devstarDomain() const devstarDomainFromUserConfig = utils.devstarDomain()
if (undefined == devstarDomainFromUserConfig || "" == devstarDomainFromUserConfig) { if (undefined == devstarDomainFromUserConfig || "" == devstarDomainFromUserConfig) {
@@ -15,6 +27,10 @@ export default class DevstarAPIHandler {
} else { } else {
this.devstarDomain = devstarDomainFromUserConfig.endsWith('/') ? devstarDomainFromUserConfig.slice(0, -1) : devstarDomainFromUserConfig; this.devstarDomain = devstarDomainFromUserConfig.endsWith('/') ? devstarDomainFromUserConfig.slice(0, -1) : devstarDomainFromUserConfig;
} }
} else {
// open with vscode传入
this.devstarDomain = devstarDomainURL
}
} }
public async verifyToken(token: string, username: string): Promise<boolean> { public async verifyToken(token: string, username: string): Promise<boolean> {

View File

@@ -11,12 +11,33 @@ export default class DSHome {
private devstarHomePageUrl: string; private devstarHomePageUrl: string;
private devstarDomain: string | undefined private devstarDomain: string | undefined
constructor(context: vscode.ExtensionContext, user: User) {
/**
* 配置项提供devstarDomain
* @param context
* @param user
*/
constructor(context: vscode.ExtensionContext, user: User)
/**
* open with vscode链接提供devstarDomain
* @param context
* @param user
* @param devstarDomain
*/
constructor(context: vscode.ExtensionContext, user: User, devstarDomain: string)
constructor(context: vscode.ExtensionContext, user: User, devstarDomain?: string) {
this.context = context; this.context = context;
this.user = user; this.user = user;
this.remoteContainer = new RemoteContainer(user); this.remoteContainer = new RemoteContainer(user);
if (devstarDomain != undefined && devstarDomain != "") {
this.devstarDomain = devstarDomain
} else {
this.devstarDomain = utils.devstarDomain() this.devstarDomain = utils.devstarDomain()
}
if (undefined == this.devstarDomain || "" == this.devstarDomain) { if (undefined == this.devstarDomain || "" == this.devstarDomain) {
this.devstarHomePageUrl = "https://devstar.cn/devstar-home" this.devstarHomePageUrl = "https://devstar.cn/devstar-home"
} else { } else {
@@ -24,6 +45,23 @@ export default class DSHome {
} }
} }
setUser(user: User) {
this.user = user
}
setRemoteContainer(remoteContainer: RemoteContainer) {
this.remoteContainer = remoteContainer
}
setDevstarDomain(devstarDomain: string) {
if (undefined == devstarDomain || "" == devstarDomain) {
this.devstarDomain = devstarDomain
this.devstarHomePageUrl = "https://devstar.cn/devstar-home"
} else {
this.devstarHomePageUrl = devstarDomain.endsWith('/') ? this.devstarDomain + "devstar-home" : devstarDomain + "/devstar-home"
}
}
async toggle(devstarHomePageUrl: string = this.devstarHomePageUrl) { async toggle(devstarHomePageUrl: string = this.devstarHomePageUrl) {
const panel = vscode.window.createWebviewPanel( const panel = vscode.window.createWebviewPanel(
'homeWebview', 'homeWebview',
@@ -49,7 +87,7 @@ export default class DSHome {
const config = { const config = {
language: vscode.env.language language: vscode.env.language
} }
panel.webview.postMessage({command: 'getHomeConfig', data: {homeConfig: config}}) panel.webview.postMessage({ command: 'getHomeConfig', data: { homeConfig: config } })
break; break;
case 'getUserToken': case 'getUserToken':
const userToken = this.user.getUserTokenFromLocal() const userToken = this.user.getUserTokenFromLocal()

View File

@@ -16,6 +16,10 @@ export default class RemoteContainer {
this.user = user this.user = user
} }
public setUser(user: User) {
this.user = user
}
/** /**
* 第一次打开远程项目 * 第一次打开远程项目
* *

View File

@@ -16,26 +16,62 @@ export default class User {
private userToken: string | undefined; private userToken: string | undefined;
private usernameKey: string = 'devstarUsername' private usernameKey: string = 'devstarUsername'
private userTokenKey: string = 'devstarUserToken' private userTokenKey: string = 'devstarUserToken'
private localUserPrivateKeyPath: string = '' private devstarDomain: string;
private devstarHostname: string; private devstarHostname: string;
constructor(context: vscode.ExtensionContext) { /**
* devstarDomain由配置项提供
* @param context
*/
constructor(context: vscode.ExtensionContext);
/**
* devstarDomain由open with vscode链接提供
* @param context
* @param devstarDomain
*/
constructor(context: vscode.ExtensionContext, devstarDomain: string);
constructor(context: vscode.ExtensionContext, devstarDomain?: string) {
this.context = context; this.context = context;
this.username = this.context.globalState.get(this.usernameKey); this.username = this.context.globalState.get(this.usernameKey);
this.userToken = this.context.globalState.get(this.userTokenKey); this.userToken = this.context.globalState.get(this.userTokenKey);
// 提取devstar domain的主域名用于本地ssh key的命名 // 提取devstar domain的主域名用于本地ssh key的命名
if (devstarDomain != undefined && devstarDomain != "") {
// open with vscode链接提供域名
this.devstarDomain = devstarDomain
let parsedUrl = new URL(devstarDomain);
this.devstarHostname = parsedUrl.hostname.replace(/\./g, '_'); //提取hostname并用下划线替换.
} else {
// 用户配置项提供域名
let devstarDomainFromConfig: string | undefined; let devstarDomainFromConfig: string | undefined;
let devstarDomainURL: string; let devstarDomainURL: string;
devstarDomainFromConfig = vscode.workspace.getConfiguration('devstar').get('devstarDomain') devstarDomainFromConfig = vscode.workspace.getConfiguration('devstar').get('devstarDomain')
// 如果没有配置devstar domain则默认domain为https://devstar.cn // 如果没有配置devstar domain则默认domain为https://devstar.cn
devstarDomainURL = (devstarDomainFromConfig === undefined || devstarDomainFromConfig === "") ? 'https://devstar.cn' : devstarDomainFromConfig; devstarDomainURL = (devstarDomainFromConfig === undefined || devstarDomainFromConfig === "") ? 'https://devstar.cn' : devstarDomainFromConfig;
this.devstarDomain = devstarDomainURL
let parsedUrl = new URL(devstarDomainURL); let parsedUrl = new URL(devstarDomainURL);
this.devstarHostname = parsedUrl.hostname.replace(/\./g, '_'); //提取hostname并用下划线替换. this.devstarHostname = parsedUrl.hostname.replace(/\./g, '_'); //提取hostname并用下划线替换.
} }
}
public async login(token: string, username: string) { setDevstarDomainAndHostname(devstarDomain: string) {
const devstarAPIHandler = new DevstarAPIHandler() if (devstarDomain != "") {
this.devstarDomain = devstarDomain
const parsedUrl = new URL(devstarDomain)
this.devstarHostname = parsedUrl.hostname.replace(/\./g, '_');
} else {
console.error(vscode.l10n.t("devstar domain is null"))
}
}
getDevstarDomain(): string {
return this.devstarDomain
}
public async login(token: string, username: string): Promise<string> {
const devstarAPIHandler = new DevstarAPIHandler(this.devstarDomain)
try { try {
const res = await devstarAPIHandler.verifyToken(token, username) const res = await devstarAPIHandler.verifyToken(token, username)
@@ -196,7 +232,7 @@ export default class User {
if (!fs.existsSync(publicKeyDir)) { if (!fs.existsSync(publicKeyDir)) {
console.log(`Directory ${publicKeyDir} does not exist, creating it...`); console.log(`Directory ${publicKeyDir} does not exist, creating it...`);
// 公钥与私钥的目录一样,所以只用创建一次 // 公钥与私钥的目录一样,所以只用创建一次
fs.mkdirSync(publicKeyDir, {recursive: true}) fs.mkdirSync(publicKeyDir, { recursive: true })
} }
fs.writeFileSync(this.getUserPublicKeyPath(), publicKeyStr); fs.writeFileSync(this.getUserPublicKeyPath(), publicKeyStr);