odsa/server.js

65 lines
1.8 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
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', {dev: true});
const server = http.createServer();
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}`);
});