mirror of
https://git.proxmox.com/git/mirror_xterm.js
synced 2025-11-04 18:32:53 +00:00
125 lines
2.2 KiB
JavaScript
125 lines
2.2 KiB
JavaScript
/**
|
|
* term.js
|
|
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
|
*/
|
|
|
|
var http = require('http')
|
|
, express = require('express')
|
|
, io = require('socket.io')
|
|
, pty = require('pty.js')
|
|
, terminal = require('../');
|
|
|
|
/**
|
|
* term.js
|
|
*/
|
|
|
|
process.title = 'term.js';
|
|
|
|
/**
|
|
* Dump
|
|
*/
|
|
|
|
var stream;
|
|
if (process.argv[2] === '--dump') {
|
|
stream = require('fs').createWriteStream(__dirname + '/dump.log');
|
|
}
|
|
|
|
/**
|
|
* Open Terminal
|
|
*/
|
|
|
|
var buff = []
|
|
, socket
|
|
, term;
|
|
|
|
term = pty.fork(process.env.SHELL || 'sh', [], {
|
|
name: require('fs').existsSync('/usr/share/terminfo/x/xterm-256color')
|
|
? 'xterm-256color'
|
|
: 'xterm',
|
|
cols: 80,
|
|
rows: 24,
|
|
cwd: process.env.HOME
|
|
});
|
|
|
|
term.on('data', function(data) {
|
|
if (stream) stream.write('OUT: ' + data + '\n-\n');
|
|
return !socket
|
|
? buff.push(data)
|
|
: socket.emit('data', data);
|
|
});
|
|
|
|
console.log(''
|
|
+ 'Created shell with pty master/slave'
|
|
+ ' pair (master: %d, pid: %d)',
|
|
term.fd, term.pid);
|
|
|
|
/**
|
|
* App & Server
|
|
*/
|
|
|
|
var app = express()
|
|
, server = http.createServer(app);
|
|
|
|
app.use(function(req, res, next) {
|
|
var setHeader = res.setHeader;
|
|
res.setHeader = function(name) {
|
|
switch (name) {
|
|
case 'Cache-Control':
|
|
case 'Last-Modified':
|
|
case 'ETag':
|
|
return;
|
|
}
|
|
return setHeader.apply(res, arguments);
|
|
};
|
|
next();
|
|
});
|
|
|
|
app.use(express.basicAuth(function(user, pass, next) {
|
|
if (user !== 'foo' || pass !== 'bar') {
|
|
return next(true);
|
|
}
|
|
return next(null, user);
|
|
}));
|
|
|
|
app.use(express.static(__dirname));
|
|
app.use(terminal.middleware());
|
|
|
|
server.listen(8080);
|
|
|
|
server.on('connection', function(socket) {
|
|
var address = socket.remoteAddress;
|
|
if (address !== '127.0.0.1' && address !== '::1') {
|
|
try {
|
|
socket.destroy();
|
|
} catch (e) {
|
|
;
|
|
}
|
|
console.log('Attempted connection from %s. Refused.', address);
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Sockets
|
|
*/
|
|
|
|
io = io.listen(server, {
|
|
log: false
|
|
});
|
|
|
|
io.sockets.on('connection', function(sock) {
|
|
socket = sock;
|
|
|
|
socket.on('data', function(data) {
|
|
if (stream) stream.write('IN: ' + data + '\n-\n');
|
|
term.write(data);
|
|
});
|
|
|
|
socket.on('disconnect', function() {
|
|
socket = null;
|
|
});
|
|
|
|
while (buff.length) {
|
|
socket.emit('data', buff.shift());
|
|
}
|
|
});
|