feat: create user's ssh key
This commit is contained in:
		@@ -98,7 +98,8 @@
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "fs-plus": "~3.1.1",
 | 
					    "fs-plus": "~3.1.1",
 | 
				
			||||||
    "node-ssh": "^13.2.0"
 | 
					    "node-ssh": "^13.2.0",
 | 
				
			||||||
 | 
					    "sshpk": "^1.18.0"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@babel/core": "~7.21.3",
 | 
					    "@babel/core": "~7.21.3",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -96,7 +96,7 @@ export default class DSHome {
 | 
				
			|||||||
              break;
 | 
					              break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          case 'createUserPublicKey':
 | 
					          case 'createUserPublicKey':
 | 
				
			||||||
            this.user.createUserSSHKey();
 | 
					            await this.user.createUserSSHKey();
 | 
				
			||||||
            if (this.user.existUserPublicKey()) {
 | 
					            if (this.user.existUserPublicKey()) {
 | 
				
			||||||
              panel.webview.postMessage({command: 'createUserPublicKey', data: {ok: true}})
 | 
					              panel.webview.postMessage({command: 'createUserPublicKey', data: {ok: true}})
 | 
				
			||||||
              break;
 | 
					              break;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										15
									
								
								src/user.ts
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								src/user.ts
									
									
									
									
									
								
							@@ -4,7 +4,9 @@ import * as os from 'os';
 | 
				
			|||||||
import * as fs from 'fs';
 | 
					import * as fs from 'fs';
 | 
				
			||||||
const {
 | 
					const {
 | 
				
			||||||
  generateKeyPairSync,
 | 
					  generateKeyPairSync,
 | 
				
			||||||
} = require('node:crypto')
 | 
					  createHash
 | 
				
			||||||
 | 
					} = require('node:crypto');
 | 
				
			||||||
 | 
					const sshpk = require('sshpk');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class User {
 | 
					export default class User {
 | 
				
			||||||
    private context:vscode.ExtensionContext;
 | 
					    private context:vscode.ExtensionContext;
 | 
				
			||||||
@@ -93,7 +95,7 @@ export default class User {
 | 
				
			|||||||
        return fs.readFileSync(userPrivateKey, 'utf-8');
 | 
					        return fs.readFileSync(userPrivateKey, 'utf-8');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public createUserSSHKey() {
 | 
					    public async createUserSSHKey() {
 | 
				
			||||||
        if (this.existUserPublicKey() && this.existUserPrivateKey()) {
 | 
					        if (this.existUserPublicKey() && this.existUserPrivateKey()) {
 | 
				
			||||||
            // if both public and private key exists, stop
 | 
					            // if both public and private key exists, stop
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
@@ -102,7 +104,7 @@ export default class User {
 | 
				
			|||||||
        const {
 | 
					        const {
 | 
				
			||||||
          publicKey,
 | 
					          publicKey,
 | 
				
			||||||
          privateKey,
 | 
					          privateKey,
 | 
				
			||||||
        } = generateKeyPairSync('rsa', {
 | 
					        } = await generateKeyPairSync('rsa', {
 | 
				
			||||||
          modulusLength: 4096,
 | 
					          modulusLength: 4096,
 | 
				
			||||||
          publicKeyEncoding: {
 | 
					          publicKeyEncoding: {
 | 
				
			||||||
            type: 'spki',
 | 
					            type: 'spki',
 | 
				
			||||||
@@ -115,10 +117,13 @@ export default class User {
 | 
				
			|||||||
            passphrase: 'devstar'
 | 
					            passphrase: 'devstar'
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					        const publicKeyFingerprint = sshpk.parseKey(publicKey, 'pem').toString('ssh');
 | 
				
			||||||
 | 
					        const publicKeyStr = publicKeyFingerprint; // public key is public key fingerprint
 | 
				
			||||||
 | 
					        const privateKeyStr = privateKey;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
          fs.writeFileSync(this.getUserPublicKeyPath(), publicKey);
 | 
					          fs.writeFileSync(this.getUserPublicKeyPath(), publicKeyStr);
 | 
				
			||||||
          fs.writeFileSync(this.getUserPrivateKeyPath(), privateKey);
 | 
					          fs.writeFileSync(this.getUserPrivateKeyPath(), privateKeyStr);
 | 
				
			||||||
        } catch(error) {
 | 
					        } catch(error) {
 | 
				
			||||||
          console.error("Failed to write public/private key into the default ssh public/key file: ", error);
 | 
					          console.error("Failed to write public/private key into the default ssh public/key file: ", error);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user