Exemplo n.º 1
0
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;
};
Exemplo n.º 2
0
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;
};
Exemplo n.º 3
0
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;
};