|
const fs = require('fs'); |
|
const path = require('path'); |
|
const http = require('http'); |
|
const SSHClient = require('ssh2').Client; |
|
const socketIO = require('socket.io'); |
|
|
|
|
|
const server = http.createServer(onRequest); |
|
|
|
|
|
const io = socketIO(server); |
|
|
|
|
|
let staticFiles = {}; |
|
let basePath = path.join(require.resolve('xterm'), '..'); |
|
staticFiles['/xterm.css'] = fs.readFileSync(path.join(basePath, '../css/xterm.css')); |
|
staticFiles['/xterm.js'] = fs.readFileSync(path.join(basePath, 'xterm.js')); |
|
basePath = path.join(require.resolve('xterm-addon-fit'), '..'); |
|
staticFiles['/xterm-addon-fit.js'] = fs.readFileSync(path.join(basePath, 'xterm-addon-fit.js')); |
|
staticFiles['/'] = fs.readFileSync('index.html'); |
|
|
|
|
|
function onRequest(req, res) { |
|
let file; |
|
if (req.method === 'GET' && (file = staticFiles[req.url])) { |
|
res.writeHead(200, { |
|
'Content-Type': 'text/' + (/css$/.test(req.url) ? 'css' : (/js$/.test(req.url) ? 'javascript' : 'html')) |
|
}); |
|
return res.end(file); |
|
} |
|
res.writeHead(404); |
|
res.end(); |
|
} |
|
|
|
|
|
io.on('connection', (socket) => { |
|
const conn = new SSHClient(); |
|
|
|
|
|
conn.on('ready', () => { |
|
socket.emit('data', '\r\n*** SSH CONNECTION ESTABLISHED ***\r\n'); |
|
|
|
|
|
conn.shell((err, stream) => { |
|
if (err) { |
|
return socket.emit('data', '\r\n*** SSH SHELL ERROR: ' + err.message + ' ***\r\n'); |
|
} |
|
|
|
|
|
socket.on('data', (data) => { |
|
stream.write(data); |
|
}); |
|
|
|
|
|
stream.on('data', (d) => { |
|
socket.emit('data', d.toString('binary')); |
|
}).on('close', () => { |
|
conn.end(); |
|
}); |
|
}); |
|
}) |
|
.on('close', () => { |
|
socket.emit('data', '\r\n*** SSH CONNECTION CLOSED ***\r\n'); |
|
}) |
|
.on('error', (err) => { |
|
socket.emit('data', '\r\n*** SSH CONNECTION ERROR: ' + err.message + ' ***\r\n'); |
|
}) |
|
.connect({ |
|
host: process.env.REMOTE_HOST, |
|
port: 22, |
|
username: process.env.REMOTE_USERNAME, |
|
password: process.env.REMOTE_PASSWORD |
|
}); |
|
}); |
|
|
|
|
|
const port = 8000; |
|
console.log('Listening on port', port); |
|
server.listen(port); |
|
|