module.exports = function(opt) { opt = opt || {}; var schema = opt.secure ? 'https' : 'http'; var app = express(); app.set('view engine', 'html'); app.set('views', __dirname + '/views'); app.engine('html', require('hbs').__express); app.use(express.favicon()); app.use(browserkthx({ ie: '< 9' })); app.use(taters({ cache: kProduction })); app.use(stylish({ src: __dirname + '/static/', compress: kProduction, cache: kProduction, setup: function(stylus) { return stylus.use(makeover()); } })); app.use(enchilada({ src: __dirname + '/static/', compress: kProduction, cache: kProduction })); app.use('/css/widgets.css', makeup(__dirname + '/static/css/widgets.css')); app.use(express.static(__dirname + '/static')); app.use(app.router); app.get('/', function(req, res, next) { if (req.query['new'] === undefined) { return next(); } var req_id = rand_id(); debug('making new client with id %s', req_id); new_client(req_id, opt, function(err, info) { if (err) { res.statusCode = 500; return res.end(err.message); } var url = schema + '://' + req_id + '.' + req.headers.host; info.url = url; res.end(JSON.stringify(info)); }); }); app.get('/', function(req, res, next) { return res.render('index'); }); app.get('/:req_id', function(req, res, next) { var req_id = req.param('req_id'); if (! /[A-Za-z0-9]{4,10}/.test(req_id)) { return next(); } debug('making new client with id %s', req_id); new_client(req_id, opt, function(err, info) { if (err) { res.statusCode = 500; return res.end(err.message); } var url = schema + '://' + req_id + '.' + req.headers.host; info.url = url; res.end(JSON.stringify(info)); }); }); var app_port = 0; var app_server = app.listen(app_port, function() { app_port = app_server.address().port; }); // connected engine.io sockets for stats updates var eio_sockets = []; setInterval(function() { eio_sockets.forEach(function(socket) { socket.send(JSON.stringify(stats)); }); }, 1000); var eio_server = engine.attach(app_server); eio_server.on('connection', function (socket) { eio_sockets.push(socket); socket.send(JSON.stringify(stats)); socket.on('error', function(err) { log.error(err); socket.close(); }); socket.on('close', function() { // remove from socket pool so no more updates are sent var idx = eio_sockets.indexOf(socket); if (idx >= 0) { eio_sockets.splice(idx, 1); } }); }); var server = bouncy(function(req, res, bounce) { debug('request %s', req.url); // if we should bounce this request, then don't send to our server if (maybe_bounce(req, res, bounce)) { return; }; bounce(app_port); }); return server; };
module.exports = function(opt) { opt = opt || {}; var schema = opt.secure ? 'https' : 'http'; var app = express(); app.set('view engine', 'html'); app.set('views', __dirname + '/views'); app.engine('html', require('hbs').__express); app.use(express.favicon()); app.use(browserkthx({ ie: '< 9' })); app.use(taters({ cache: kProduction })); app.use(stylish({ src: __dirname + '/static/', compress: kProduction, cache: kProduction, setup: function(stylus) { return stylus.use(makeover()); } })); app.use(enchilada({ src: __dirname + '/static/', compress: kProduction, cache: kProduction })); app.use('/css/widgets.css', makeup(__dirname + '/static/css/widgets.css')); app.use(express.static(__dirname + '/static')); app.use(app.router); app.get('/', function(req, res, next) { if (req.query['new'] === undefined) { return next(); } var req_id = rand_id(); debug('making new client with id %s', req_id); new_client(req_id, opt, function(err, info) { if (err) { res.statusCode = 500; return res.end(err.message); } var url = schema + '://' + req_id + '.' + req.headers.host; info.url = url; res.json(info); }); }); app.get('/', function(req, res, next) { return res.render('index'); }); app.get('/:req_id', function(req, res, next) { var req_id = req.param('req_id'); // limit requested hostnames to 20 characters if (! /^[A-Za-z0-9]{4,20}$/.test(req_id)) { var err = new Error('Invalid subdomain. Subdomains must be between 4 and 20 alphanumeric characters.'); err.statusCode = 403; return next(err); } debug('making new client with id %s', req_id); new_client(req_id, opt, function(err, info) { if (err) { return next(err); } var url = schema + '://' + req_id + '.' + req.headers.host; info.url = url; res.json(info); }); }); app.use(function(err, req, res, next) { var status = err.statusCode || err.status || 500; res.status(status).json({ message: err.message }); }); var app_port = 0; var app_server = app.listen(app_port, function() { app_port = app_server.address().port; }); var server = bouncy(function(req, res, bounce) { debug('request %s', req.url); // if we should bounce this request, then don't send to our server if (maybe_bounce(req, res, bounce)) { return; }; bounce(app_port); }); return server; };
module.exports = function(opt) { opt = opt || {}; var server = createRawServer(); var app = express(); app.set('view engine', 'html'); app.set('views', __dirname + '/views'); app.engine('html', require('hbs').__express); app.use(function(req, res, next) { if (middleware(req, res)) { return; } next(); }); app.use(express.favicon()); app.use(browserkthx({ ie: '< 9' })); app.use(taters({ cache: kProduction })); app.use(enchilada({ src: __dirname + '/static/', compress: kProduction, cache: kProduction })); app.use('/css/widgets.css', makeup(__dirname + '/static/css/widgets.css')); app.use(express.static(__dirname + '/static')); app.use(app.router); app.get('/', function(req, res, next) { return res.render('index'); }); // connected engine.io sockets for stats updates var eio_sockets = []; setInterval(function() { eio_sockets.forEach(function(socket) { socket.send(JSON.stringify(stats)); }); }, 1000); var eio_server = new engine.Server(); eio_server.on('connection', function (socket) { eio_sockets.push(socket); socket.send(JSON.stringify(stats)); socket.on('close', function() { // remove from socket pool so no more updates are sent var idx = eio_sockets.indexOf(socket); if (idx >= 0) { eio_sockets.splice(idx, 1); } }); }); app.use('/engine.io', function(req, res, next) { eio_server.handleRequest(req, res); }); server.on('request', app); server.on('upgrade', handle_upgrade); server.on('upgrade', function(req, socket, head) { if (handle_upgrade(req, socket, head)) { return; } eio_server.handleUpgrade(req, socket, head); }); return server; };