clone3 commited on
Commit
f5f8a63
·
verified ·
1 Parent(s): 8e6003e

Update app/server.js

Browse files
Files changed (1) hide show
  1. app/server.js +46 -31
app/server.js CHANGED
@@ -1,13 +1,18 @@
1
- var fs = require('fs');
2
- var path = require('path');
3
- var server = require('http').createServer(onRequest);
 
 
4
 
5
- var io = require('socket.io')(server);
6
- var SSHClient = require('ssh2').Client;
 
 
 
7
 
8
  // Load static files into memory
9
- var staticFiles = {};
10
- var basePath = path.join(require.resolve('xterm'), '..');
11
  staticFiles['/xterm.css'] = fs.readFileSync(path.join(basePath, '../css/xterm.css'));
12
  staticFiles['/xterm.js'] = fs.readFileSync(path.join(basePath, 'xterm.js'));
13
  basePath = path.join(require.resolve('xterm-addon-fit'), '..');
@@ -16,13 +21,10 @@ staticFiles['/'] = fs.readFileSync('index.html');
16
 
17
  // Handle static file serving
18
  function onRequest(req, res) {
19
- var file;
20
  if (req.method === 'GET' && (file = staticFiles[req.url])) {
21
  res.writeHead(200, {
22
- 'Content-Type': 'text/'
23
- + (/css$/.test(req.url)
24
- ? 'css'
25
- : (/js$/.test(req.url) ? 'javascript' : 'html'))
26
  });
27
  return res.end(file);
28
  }
@@ -30,35 +32,48 @@ function onRequest(req, res) {
30
  res.end();
31
  }
32
 
33
- io.on('connection', function(socket) {
34
- var conn = new SSHClient();
35
- conn.on('ready', function() {
 
 
 
36
  socket.emit('data', '\r\n*** SSH CONNECTION ESTABLISHED ***\r\n');
37
- conn.shell(function(err, stream) {
38
- if (err)
 
 
39
  return socket.emit('data', '\r\n*** SSH SHELL ERROR: ' + err.message + ' ***\r\n');
40
- socket.on('data', function(data) {
 
 
 
41
  stream.write(data);
42
  });
43
- stream.on('data', function(d) {
 
 
44
  socket.emit('data', d.toString('binary'));
45
- }).on('close', function() {
46
  conn.end();
47
  });
48
  });
49
- }).on('close', function() {
 
50
  socket.emit('data', '\r\n*** SSH CONNECTION CLOSED ***\r\n');
51
- }).on('error', function(err) {
 
52
  socket.emit('data', '\r\n*** SSH CONNECTION ERROR: ' + err.message + ' ***\r\n');
53
- }).connect({
54
- host: 'process.env.REMOTE_HOST',
55
- port: 22,
56
- username: 'process.env.REMOTE_USERNAME',
57
- password: 'process.env.REMOTE_PASSWORD'
58
- //privateKey: require('fs').readFileSync('path/to/keyfile')
59
  });
60
  });
61
 
62
- let port = 8000;
63
- console.log('Listening on port', port)
64
- server.listen(port);
 
 
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+ const http = require('http');
4
+ const SSHClient = require('ssh2').Client;
5
+ const socketIO = require('socket.io');
6
 
7
+ // Create HTTP server
8
+ const server = http.createServer(onRequest);
9
+
10
+ // Attach Socket.IO to the server
11
+ const io = socketIO(server);
12
 
13
  // Load static files into memory
14
+ let staticFiles = {};
15
+ let basePath = path.join(require.resolve('xterm'), '..');
16
  staticFiles['/xterm.css'] = fs.readFileSync(path.join(basePath, '../css/xterm.css'));
17
  staticFiles['/xterm.js'] = fs.readFileSync(path.join(basePath, 'xterm.js'));
18
  basePath = path.join(require.resolve('xterm-addon-fit'), '..');
 
21
 
22
  // Handle static file serving
23
  function onRequest(req, res) {
24
+ let file;
25
  if (req.method === 'GET' && (file = staticFiles[req.url])) {
26
  res.writeHead(200, {
27
+ 'Content-Type': 'text/' + (/css$/.test(req.url) ? 'css' : (/js$/.test(req.url) ? 'javascript' : 'html'))
 
 
 
28
  });
29
  return res.end(file);
30
  }
 
32
  res.end();
33
  }
34
 
35
+ // Setup WebSocket connection
36
+ io.on('connection', (socket) => {
37
+ const conn = new SSHClient();
38
+
39
+ // On SSH connection ready
40
+ conn.on('ready', () => {
41
  socket.emit('data', '\r\n*** SSH CONNECTION ESTABLISHED ***\r\n');
42
+
43
+ // Start shell session
44
+ conn.shell((err, stream) => {
45
+ if (err) {
46
  return socket.emit('data', '\r\n*** SSH SHELL ERROR: ' + err.message + ' ***\r\n');
47
+ }
48
+
49
+ // When data is received from the client, write to the stream
50
+ socket.on('data', (data) => {
51
  stream.write(data);
52
  });
53
+
54
+ // Send data back to the client when received from the SSH session
55
+ stream.on('data', (d) => {
56
  socket.emit('data', d.toString('binary'));
57
+ }).on('close', () => {
58
  conn.end();
59
  });
60
  });
61
+ })
62
+ .on('close', () => {
63
  socket.emit('data', '\r\n*** SSH CONNECTION CLOSED ***\r\n');
64
+ })
65
+ .on('error', (err) => {
66
  socket.emit('data', '\r\n*** SSH CONNECTION ERROR: ' + err.message + ' ***\r\n');
67
+ })
68
+ .connect({
69
+ host: process.env.REMOTE_HOST, // Use environment variable
70
+ port: 22, // Default SSH port
71
+ username: process.env.REMOTE_USERNAME, // Use environment variable
72
+ password: process.env.REMOTE_PASSWORD // Use environment variable (or use privateKey if required)
73
  });
74
  });
75
 
76
+ // Start the server
77
+ const port = 8000;
78
+ console.log('Listening on port', port);
79
+ server.listen(port);