]> git.proxmox.com Git - mirror_xterm.js.git/blob - example/index.js
c3b3b8baa3815a45f9e676c9e21b85a7d09807fc
[mirror_xterm.js.git] / example / index.js
1 #!/usr/bin/env node
2
3 /**
4 * term.js
5 * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
6 */
7
8 var http = require('http')
9 , express = require('express')
10 , io = require('socket.io')
11 , pty = require('pty.js')
12 , terminal = require('../');
13
14 /**
15 * term.js
16 */
17
18 process.title = 'term.js';
19
20 /**
21 * Dump
22 */
23
24 var stream;
25 if (process.argv[2] === '--dump') {
26 stream = require('fs').createWriteStream(__dirname + '/dump.log');
27 }
28
29 /**
30 * Open Terminal
31 */
32
33 var buff = []
34 , socket
35 , term;
36
37 term = pty.fork(process.env.SHELL || 'sh', [], {
38 name: require('fs').existsSync('/usr/share/terminfo/x/xterm-256color')
39 ? 'xterm-256color'
40 : 'xterm',
41 cols: 80,
42 rows: 24,
43 cwd: process.env.HOME
44 });
45
46 term.on('data', function(data) {
47 if (stream) stream.write('OUT: ' + data + '\n-\n');
48 return !socket
49 ? buff.push(data)
50 : socket.emit('data', data);
51 });
52
53 console.log(''
54 + 'Created shell with pty master/slave'
55 + ' pair (master: %d, pid: %d)',
56 term.fd, term.pid);
57
58 /**
59 * App & Server
60 */
61
62 var app = express()
63 , server = http.createServer(app);
64
65 app.use(function(req, res, next) {
66 var setHeader = res.setHeader;
67 res.setHeader = function(name) {
68 switch (name) {
69 case 'Cache-Control':
70 case 'Last-Modified':
71 case 'ETag':
72 return;
73 }
74 return setHeader.apply(res, arguments);
75 };
76 next();
77 });
78
79 app.use(express.basicAuth(function(user, pass, next) {
80 if (user !== 'foo' || pass !== 'bar') {
81 return next(true);
82 }
83 return next(null, user);
84 }));
85
86 app.use(express.static(__dirname));
87 app.use(terminal.middleware());
88
89 if (!~process.argv.indexOf('-n')) {
90 server.on('connection', function(socket) {
91 var address = socket.remoteAddress;
92 if (address !== '127.0.0.1' && address !== '::1') {
93 try {
94 socket.destroy();
95 } catch (e) {
96 ;
97 }
98 console.log('Attempted connection from %s. Refused.', address);
99 }
100 });
101 }
102
103 server.listen(8080);
104
105 /**
106 * Sockets
107 */
108
109 io = io.listen(server, {
110 log: false
111 });
112
113 io.sockets.on('connection', function(sock) {
114 socket = sock;
115
116 socket.on('data', function(data) {
117 if (stream) stream.write('IN: ' + data + '\n-\n');
118 term.write(data);
119 });
120
121 socket.on('disconnect', function() {
122 socket = null;
123 });
124
125 while (buff.length) {
126 socket.emit('data', buff.shift());
127 }
128 });