refactor: only successfully finished first connect then open remote folder
This commit is contained in:
		@@ -31,8 +31,13 @@ export default class DSHome {
 | 
			
		||||
      async (message) => {
 | 
			
		||||
        switch (message.command) {
 | 
			
		||||
          case 'firstOpenRemoteFolder':
 | 
			
		||||
            await this.remoteContainer.firstConnect(message.host, message.username, message.password, message.port);
 | 
			
		||||
            await this.remoteContainer.firstConnect(message.host, message.username, message.password, message.port)
 | 
			
		||||
              .then((result) => {
 | 
			
		||||
                if (result === 'success') {
 | 
			
		||||
                  //  only success then open folder
 | 
			
		||||
                  this.remoteContainer.openRemoteFolder(message.host, message.path);
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
            return;
 | 
			
		||||
          case 'openRemoteFolder':
 | 
			
		||||
            this.remoteContainer.openRemoteFolder(message.host, message.path);
 | 
			
		||||
 
 | 
			
		||||
@@ -3,16 +3,17 @@ import * as path from 'path';
 | 
			
		||||
import * as os from 'os';
 | 
			
		||||
import * as vscode from 'vscode';
 | 
			
		||||
const { NodeSSH } = require('node-ssh')
 | 
			
		||||
import * as utils from './utils';
 | 
			
		||||
 | 
			
		||||
export default class RemoteContainer {
 | 
			
		||||
 | 
			
		||||
  async firstConnect(host: string, username: string, password: string, port: number): Promise<void> {
 | 
			
		||||
  async firstConnect(host: string, username: string, password: string, port: number): Promise<string> {
 | 
			
		||||
    return new Promise(async (resolve, reject) => {
 | 
			
		||||
      // connect the host and add the public key to the remote authorized_keys
 | 
			
		||||
      const defaultPublicKeyPath = path.join(os.homedir(), '.ssh', 'id_rsa.pub');
 | 
			
		||||
      // TODO: if there is no public key, generate one
 | 
			
		||||
      const publicKey = fs.readFileSync(defaultPublicKeyPath, 'utf8');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      // first connect to the remote host using password
 | 
			
		||||
      const ssh = new NodeSSH();
 | 
			
		||||
      try {
 | 
			
		||||
@@ -26,14 +27,10 @@ export default class RemoteContainer {
 | 
			
		||||
        // add the public key to the remote authorized_keys
 | 
			
		||||
        await ssh.execCommand(`mkdir -p ~/.ssh && echo '${publicKey}' >> ~/.ssh/authorized_keys`);
 | 
			
		||||
        console.log('Public key added to remote authorized_keys');
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
      console.error('Error adding public key: ', error);
 | 
			
		||||
    } finally {
 | 
			
		||||
        await ssh.dispose();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        // only connect successfully then save the host info
 | 
			
		||||
        // TODO: request change password
 | 
			
		||||
 | 
			
		||||
        // TODO: use remote.SSH.configFile
 | 
			
		||||
        const sshConfigPath = path.join(os.homedir(), '.ssh', 'config');
 | 
			
		||||
        // append the host to the local ssh config file 
 | 
			
		||||
@@ -42,6 +39,13 @@ export default class RemoteContainer {
 | 
			
		||||
        // append the host to the local ssh config file
 | 
			
		||||
        fs.writeFileSync(sshConfigPath, sshConfigContent, { encoding: 'utf8', flag: 'a' });
 | 
			
		||||
        console.log('Host registered in local ssh config');
 | 
			
		||||
        resolve("success");
 | 
			
		||||
      } catch (error) {
 | 
			
		||||
        console.error('Error adding public key: ', error);
 | 
			
		||||
        await ssh.dispose();
 | 
			
		||||
        reject("failed");
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user