2024-07-02 12:15:39 +08:00
|
|
|
import * as vscode from 'vscode';
|
2024-10-28 15:52:55 +08:00
|
|
|
import * as os from 'os';
|
2024-07-16 17:37:42 +08:00
|
|
|
import RemoteContainer from './remote-container';
|
2024-10-23 13:45:19 +08:00
|
|
|
import User from './user';
|
2024-10-17 16:06:28 +08:00
|
|
|
import * as utils from './utils'
|
2024-07-02 12:15:39 +08:00
|
|
|
|
2024-07-16 23:28:56 +08:00
|
|
|
export default class DSHome {
|
2024-07-16 17:37:42 +08:00
|
|
|
private context: vscode.ExtensionContext;
|
|
|
|
private remoteContainer: RemoteContainer;
|
2024-10-23 13:45:19 +08:00
|
|
|
private user:User;
|
2024-10-01 11:58:55 +08:00
|
|
|
static defaultUrl = 'http://localhost:8080/test/index.html';
|
2024-07-02 12:15:39 +08:00
|
|
|
|
2024-07-03 11:55:49 +08:00
|
|
|
constructor(context: vscode.ExtensionContext) {
|
|
|
|
this.context = context;
|
2024-10-23 13:45:19 +08:00
|
|
|
this.user = new User(context);
|
2024-10-28 19:02:56 +08:00
|
|
|
this.remoteContainer = new RemoteContainer(this.user);
|
2024-07-02 12:15:39 +08:00
|
|
|
}
|
|
|
|
|
2024-07-16 23:28:56 +08:00
|
|
|
async toggle(url: string = DSHome.defaultUrl) {
|
2024-07-16 17:37:42 +08:00
|
|
|
console.log(url);
|
2024-07-02 12:15:39 +08:00
|
|
|
const panel = vscode.window.createWebviewPanel(
|
2024-09-18 20:46:25 +08:00
|
|
|
'homeWebview',
|
|
|
|
'Home',
|
2024-07-02 12:15:39 +08:00
|
|
|
vscode.ViewColumn.One,
|
2024-07-16 17:37:42 +08:00
|
|
|
{
|
|
|
|
enableScripts: true,
|
|
|
|
}
|
2024-07-02 12:15:39 +08:00
|
|
|
);
|
|
|
|
|
2024-10-17 16:06:28 +08:00
|
|
|
utils.fetch(url).then(async (content) => {
|
2024-07-16 17:37:42 +08:00
|
|
|
panel.webview.html = await this.getWebviewContent(content);
|
|
|
|
})
|
2024-07-02 12:15:39 +08:00
|
|
|
|
|
|
|
panel.webview.onDidReceiveMessage(
|
2024-07-16 17:37:42 +08:00
|
|
|
async (message) => {
|
2024-10-23 01:58:10 +08:00
|
|
|
const data = message.data
|
2024-07-02 12:15:39 +08:00
|
|
|
switch (message.command) {
|
2024-10-28 17:02:42 +08:00
|
|
|
// ----------------- frequent -----------------------
|
|
|
|
case 'getUserToken':
|
|
|
|
const userToken = this.user.getUserTokenFromLocal()
|
|
|
|
if (userToken === undefined) {
|
|
|
|
panel.webview.postMessage({ command: 'getUserToken', data: {userToken: ''}})
|
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
panel.webview.postMessage({ command: 'getUserToken', data: {userToken: userToken}})
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 'getUsername':
|
|
|
|
const username = this.user.getUsernameFromLocal()
|
|
|
|
if (username === undefined) {
|
|
|
|
panel.webview.postMessage({command: 'getUsername', data: {username: ''}})
|
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
panel.webview.postMessage({command: 'getUsername', data: {username: username}})
|
|
|
|
break;
|
|
|
|
}
|
2024-07-16 17:37:42 +08:00
|
|
|
case 'firstOpenRemoteFolder':
|
2024-10-23 01:58:10 +08:00
|
|
|
const path = data.path
|
|
|
|
await this.remoteContainer.firstConnect(data.host, data.username, data.port)
|
2024-10-15 17:13:58 +08:00
|
|
|
.then((_res) => {
|
|
|
|
if (_res == 'success') {
|
|
|
|
// only success then open folder
|
2024-10-23 01:58:10 +08:00
|
|
|
this.remoteContainer.openRemoteFolder(data.host, path);
|
2024-10-15 17:13:58 +08:00
|
|
|
}
|
|
|
|
}).catch(error => {
|
2024-10-23 01:58:10 +08:00
|
|
|
console.error(`Failed to connect ${data.host}: `, error)
|
2024-07-30 23:35:08 +08:00
|
|
|
})
|
2024-09-18 20:46:25 +08:00
|
|
|
break;
|
2024-07-16 17:37:42 +08:00
|
|
|
case 'openRemoteFolder':
|
2024-10-23 01:58:10 +08:00
|
|
|
this.remoteContainer.openRemoteFolder(data.host, data.path);
|
2024-09-18 20:46:25 +08:00
|
|
|
break;
|
2024-10-28 17:02:42 +08:00
|
|
|
// ----------------- not frequent -----------------------
|
2024-09-18 20:46:25 +08:00
|
|
|
case 'setUserToken':
|
2024-10-23 13:45:19 +08:00
|
|
|
this.user.setUserTokenToLocal(data.userToken)
|
|
|
|
if (data.userToken === this.user.getUserTokenFromLocal()) {
|
2024-09-18 20:46:25 +08:00
|
|
|
panel.webview.postMessage({ command: 'setUserToken', data: {ok: true}})
|
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
panel.webview.postMessage({ command: 'setUserToken', data: {ok: false}})
|
|
|
|
break;
|
|
|
|
}
|
2024-10-23 16:22:50 +08:00
|
|
|
case 'setUsername':
|
|
|
|
this.user.setUsernameToLocal(data.username);
|
|
|
|
if (data.username === this.user.getUsernameFromLocal()) {
|
|
|
|
panel.webview.postMessage({command: 'setUsername', data: {ok: true}});
|
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
panel.webview.postMessage({command: 'setUsername', data: {ok: false}});
|
|
|
|
break;
|
|
|
|
}
|
2024-10-23 18:37:27 +08:00
|
|
|
case 'getUserPublicKey':
|
|
|
|
var userPublicKey = '';
|
|
|
|
if (this.user.existUserPrivateKey()) {
|
|
|
|
userPublicKey = this.user.getUserPublicKey();
|
|
|
|
panel.webview.postMessage({command: 'getUserPublicKey', data: {userPublicKey: userPublicKey}})
|
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
panel.webview.postMessage({command: 'getUserPublicKey', data: {userPublicKey: userPublicKey}})
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 'createUserPublicKey':
|
2024-10-28 14:58:10 +08:00
|
|
|
await this.user.createUserSSHKey();
|
2024-10-23 18:37:27 +08:00
|
|
|
if (this.user.existUserPublicKey()) {
|
|
|
|
panel.webview.postMessage({command: 'createUserPublicKey', data: {ok: true}})
|
|
|
|
break;
|
|
|
|
} else {
|
|
|
|
panel.webview.postMessage({command: 'createUserPublicKey', data: {ok: false}})
|
|
|
|
break;
|
|
|
|
}
|
2024-10-28 15:52:55 +08:00
|
|
|
case 'getMachineName':
|
|
|
|
const machineName = os.hostname();
|
|
|
|
panel.webview.postMessage({command: 'getMachineName', data: {machineName: machineName}})
|
2024-10-17 16:06:28 +08:00
|
|
|
case 'getDefaultPublicKey':
|
|
|
|
var defaultPublicKey;
|
|
|
|
if (utils.existDefaultPublicKey()) {
|
|
|
|
defaultPublicKey = utils.getDefaultPublicKey();
|
|
|
|
} else {
|
|
|
|
// if default public key doesn't exist, create it
|
|
|
|
utils.createSSHKey();
|
|
|
|
defaultPublicKey = utils.getDefaultPublicKey();
|
|
|
|
}
|
|
|
|
panel.webview.postMessage({ command: 'getDefaultPublicKey', data: {defaultPublicKey: defaultPublicKey}})
|
2024-07-02 12:15:39 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
undefined,
|
2024-07-03 11:55:49 +08:00
|
|
|
this.context.subscriptions
|
2024-07-02 12:15:39 +08:00
|
|
|
);
|
2024-07-03 11:55:49 +08:00
|
|
|
|
|
|
|
this.context.subscriptions.push(panel)
|
2024-07-02 12:15:39 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-07-16 17:37:42 +08:00
|
|
|
async getWebviewContent(content: string): Promise<string> {
|
|
|
|
return `${content}`
|
2024-07-02 12:15:39 +08:00
|
|
|
}
|
|
|
|
}
|