Compare commits

7 Commits

27 changed files with 3297 additions and 3209 deletions

View File

@@ -13,13 +13,10 @@
"warn",
{
"selector": "import",
"format": [
"camelCase",
"PascalCase"
]
"format": [ "camelCase", "PascalCase" ]
}
],
"@typescript-eslint/semi": "off", //关闭分号检查
"@typescript-eslint/semi": "warn",
"curly": "warn",
"eqeqeq": "warn",
"no-throw-literal": "warn",

View File

@@ -7,7 +7,19 @@ export default class DevstarAPIHandler {
private devstarDomain: string;
constructor() {
/**
* domain使用用户配置
*/
constructor();
/**
* open with vscode链接传入devstarDomain
* @param devstarDomainURL
*/
constructor(devstarDomainURL: string);
constructor(devstarDomainURL?: string) {
if (devstarDomainURL == undefined || devstarDomainURL == "") {
// 获取domain
const devstarDomainFromUserConfig = utils.devstarDomain()
if (undefined == devstarDomainFromUserConfig || "" == devstarDomainFromUserConfig) {
@@ -15,6 +27,10 @@ export default class DevstarAPIHandler {
} else {
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> {

View File

@@ -11,12 +11,33 @@ export default class DSHome {
private devstarHomePageUrl: string;
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.user = user;
this.remoteContainer = new RemoteContainer(user);
if (devstarDomain != undefined && devstarDomain != "") {
this.devstarDomain = devstarDomain
} else {
this.devstarDomain = utils.devstarDomain()
}
if (undefined == this.devstarDomain || "" == this.devstarDomain) {
this.devstarHomePageUrl = "https://devstar.cn/devstar-home"
} 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) {
const panel = vscode.window.createWebviewPanel(
'homeWebview',
@@ -49,7 +87,7 @@ export default class DSHome {
const config = {
language: vscode.env.language
}
panel.webview.postMessage({command: 'getHomeConfig', data: {homeConfig: config}})
panel.webview.postMessage({ command: 'getHomeConfig', data: { homeConfig: config } })
break;
case 'getUserToken':
const userToken = this.user.getUserTokenFromLocal()

View File

@@ -16,6 +16,10 @@ export default class RemoteContainer {
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 usernameKey: string = 'devstarUsername'
private userTokenKey: string = 'devstarUserToken'
private localUserPrivateKeyPath: string = ''
private devstarDomain: 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.username = this.context.globalState.get(this.usernameKey);
this.userToken = this.context.globalState.get(this.userTokenKey);
// 提取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 devstarDomainURL: string;
devstarDomainFromConfig = vscode.workspace.getConfiguration('devstar').get('devstarDomain')
// 如果没有配置devstar domain则默认domain为https://devstar.cn
devstarDomainURL = (devstarDomainFromConfig === undefined || devstarDomainFromConfig === "") ? 'https://devstar.cn' : devstarDomainFromConfig;
this.devstarDomain = devstarDomainURL
let parsedUrl = new URL(devstarDomainURL);
this.devstarHostname = parsedUrl.hostname.replace(/\./g, '_'); //提取hostname并用下划线替换.
}
}
public async login(token: string, username: string) {
const devstarAPIHandler = new DevstarAPIHandler()
setDevstarDomainAndHostname(devstarDomain: string) {
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 {
const res = await devstarAPIHandler.verifyToken(token, username)
@@ -196,7 +232,7 @@ export default class User {
if (!fs.existsSync(publicKeyDir)) {
console.log(`Directory ${publicKeyDir} does not exist, creating it...`);
// 公钥与私钥的目录一样,所以只用创建一次
fs.mkdirSync(publicKeyDir, {recursive: true})
fs.mkdirSync(publicKeyDir, { recursive: true })
}
fs.writeFileSync(this.getUserPublicKeyPath(), publicKeyStr);

View File

@@ -17,9 +17,6 @@ header("Allow: GET, POST, OPTIONS, PUT, DELETE");
<iframe id="embedded-devstar" src="http://localhost:8080/test/home.html" width="100%" height="100%" frameborder="0"
style="border: 0; left: 0; right: 0; bottom: 0; top: 0; position:absolute;">
</iframe>
<!-- <iframe id="embedded-devstar" src="http://localhost:8080/home.html" width="100%" height="100%" frameborder="0"
style="border: 0; left: 0; right: 0; bottom: 0; top: 0; position:absolute;">
</iframe> -->
<!-- <iframe
id="embedded-devstar"