From 8d90f32921a78b6fb274b1d2ba4cb859fbc7096a Mon Sep 17 00:00:00 2001 From: stickyPiston Date: Tue, 3 Sep 2019 16:15:30 +0200 Subject: [PATCH 1/2] Try #2 --- index.html | 71 +++++++++++++++++++++----------------------------- main.js | 76 ++++++++++++++++++------------------------------------ 2 files changed, 54 insertions(+), 93 deletions(-) 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 -- 2.45.2 From 7a4b5ecc5ed37812bdd712115d68505bd6930531 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Tue, 3 Sep 2019 16:31:37 +0200 Subject: [PATCH 2/2] It works now :D --- index.html | 4 ---- main.js | 6 +++--- package-lock.json | 18 ++++++++++++++++++ package.json | 1 + 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/index.html b/index.html index c0c6de5..93b3f76 100644 --- a/index.html +++ b/index.html @@ -12,7 +12,6 @@ -
@@ -20,11 +19,8 @@ // No idea what these are about. Just copied them from the demo code Terminal.applyAddon(attach); Terminal.applyAddon(fit); - Terminal.applyAddon(winptyCompat); // The terminal const term = new Terminal(); - // No idea what this does - term.winptyCompatInit(); // This kinda makes sense const container = document.getElementById('terminal'); term.open(container); diff --git a/main.js b/main.js index 9577537..559a2a1 100644 --- a/main.js +++ b/main.js @@ -1,11 +1,11 @@ -import * as express from 'express'; -import * as pty from 'node-pty'; +var express = require('express'); +var pty = require('node-pty'); const app = express(); const expressWs = require('express-ws')(app); // Serve static assets from ./static -app.use(express.static(`${__dirname}/static`)); +app.use(express.static('./')); // Instantiate shell and set up data handlers expressWs.app.ws('/shell', (ws, req) => { diff --git a/package-lock.json b/package-lock.json index 0a28f26..bc4e1f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -269,6 +269,24 @@ "vary": "~1.1.2" } }, + "express-ws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/express-ws/-/express-ws-4.0.0.tgz", + "integrity": "sha512-KEyUw8AwRET2iFjFsI1EJQrJ/fHeGiJtgpYgEWG3yDv4l/To/m3a2GaYfeGyB3lsWdvbesjF5XCMx+SVBgAAYw==", + "requires": { + "ws": "^5.2.0" + }, + "dependencies": { + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", diff --git a/package.json b/package.json index 0fd44ba..34474e3 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "license": "UNLICENSED", "dependencies": { "express": "^4.17.1", + "express-ws": "^4.0.0", "node-pty": "^0.8.1", "socket.io": "^2.2.0", "xterm": "^3.14.5" -- 2.45.2