diff --git a/index.html b/index.html index aa60f09..c0c6de5 100644 --- a/index.html +++ b/index.html @@ -4,51 +4,38 @@ - webssh_plus - - - - - + bash + + + + + + + + -
- -
+
\ No newline at end of file diff --git a/main.js b/main.js index 26fb5df..9577537 100644 --- a/main.js +++ b/main.js @@ -1,55 +1,29 @@ -// Reference: https://hub.packtpub.com/making-simple-web-based-ssh-client-using-nodejs-and-socketio/ +import * as express from 'express'; +import * as pty from 'node-pty'; -var express = require('express'); -var https = require('https'); -var http = require('http'); -var fs = require('fs'); -var pty = require('node-pty'); +const app = express(); +const expressWs = require('express-ws')(app); -// Set port -var port = 9774; +// Serve static assets from ./static +app.use(express.static(`${__dirname}/static`)); -// Set up express server -let app = express(); +// Instantiate shell and set up data handlers +expressWs.app.ws('/shell', (ws, req) => { + // Spawn the shell + const shell = pty.spawn('/bin/bash', [], { + name: 'xterm-color', + cwd: process.env.PWD, + env: process.env + }); + // For all shell data send it to the websocket + shell.on('data', (data) => { + ws.send(data); + }); + // For all websocket data send it to the shell + ws.on('message', (msg) => { + shell.write(msg); + }); +}); -// Set HTTP server root folder -app.use("/", express.static("./")); - -// Creating an HTTP server -var server = http.createServer(app).listen(port); -console.log(`Listening on port ${port}`); - -var io = require('socket.io')(server); - -// When a new socket connects -io.on('connection', function (socket) { - console.log('Client connect'); - socket.emit('client_identify'); - - socket.on('client_size', function (size) { - // Create terminal - console.log(size); - console.log({ cols: Math.floor(size.width / 9), rows: Math.floor(size.height / 10) }) - - var term = pty.spawn('sh', [], { - name: 'xterm-color', - cols: Math.floor(size.width / 9), - rows: Math.floor(size.height / 10), - cwd: process.env.HOME, - env: process.env - }); - // Listen on the terminal for output and send it to the client - term.on('data', function (data) { - socket.emit('output', data); - }); - // Listen on the client and send any input to the terminal - socket.on('input', function (data) { - term.write(data); - }); - // When socket disconnects, destroy the terminal - socket.on("disconnect", function () { - term.destroy(); - console.log("Client disconnect"); - }); - }) -}); \ No newline at end of file +// Start the application +app.listen(9774); \ No newline at end of file