mirror_xterm.js/example/index.js
2013-08-11 04:07:20 -05:00

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());
}
});