UNPKG

terminal-recorder

Version:

Record your terminal session into HTML. Terminal Recorder allows you to record your bash session, and export it to html so then you can share it with your friends.

125 lines (101 loc) 2.25 kB
/** * 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()); } });