From 596105fa9a56eb3632586d14540deaf2c1b5ca05 Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Mon, 13 May 2019 19:06:31 +0200 Subject: [PATCH] [ADD]Server : first SSH2 client / connection --- package.json | 3 ++- server.js | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 8ff28a4..10ec2e0 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "private": true, "dependencies": { "polka": "^0.5.2", - "sirv": "^0.4.0" + "sirv": "^0.4.0", + "ssh2": "^0.8.4" }, "devDependencies": { "@babel/core": "^7.4.4", diff --git a/server.js b/server.js index ed284d8..d9ad753 100644 --- a/server.js +++ b/server.js @@ -6,12 +6,59 @@ const http = require('http'); const { join } = require('path'); const polka = require('polka'); const sirv = require('sirv'); +const { json } = require('body-parser'); +const sshClient = require('ssh2').Client; const { PORT=3000 } = process.env; -const files = sirv('dist'); +const files = sirv('dist', {dev: true}); const server = http.createServer(); -polka({ server }).use(files).listen(PORT, err => { +let sshConn; + +const sendJSON = (res, httpCode, message) => { + res.writeHead(httpCode, { 'Content-Type': 'application/json' }); + return JSON.stringify(message); +}; + +const connect = (req, res) => { + console.log(req.body); + if (!req.body.address.length || !req.body.username.length || + !req.body.port.length || !req.body.key.length) { + res.end(sendJSON(res, 500, 'Erreur : un champ requis manque.')); + } + sshConn = new sshClient(); + try { + sshConn.on('ready', () => { + console.log('Client :: ready'); + res.end(sendJSON(res, 200, 'OK, connected!')); + }).connect({ + host: req.body.address, + port: req.body.port, + username: req.body.username, + privateKey: req.body.key, + passphrase: req.body.password + }); + sshConn.on('error', (err) => { + console.log(err); + res.end(sendJSON(res, 403, err.message)); + }); + } + catch(err) { + console.log(err); + res.end(sendJSON(res, 403, err.message)); + } +}; + +const disconnect = (req, res) => { + sshConn.end(); + res.end(sendJSON(res, 200, 'OK, disconnected!')); +}; + +polka({ server }) + .use(json(), files) + .post('/connect', connect) + .get('/disconnect', disconnect) + .listen(PORT, err => { if (err) throw err; console.log(`> Running on localhost:${PORT}`); });