Example #1
0
(function () {
  "use strict";

  var stack = require('./lib/stack')
    , gcf = require('express-chromeframe')
    , addSendJson = require('./lib/jason-res-json')
    , corsSession = require('./lib/connect-cors-session')
    , nowww = require('nowww')
    , queryparser = require('connect-queryparser')
    , xcors = require('connect-xcors')
    , cors
    , session
    , connect
    ;


  connect = stack.create(
      addSendJson()
  );

  cors = xcors();
  session = corsSession();
  connect.addMiddleware(
      nowww()
    , queryparser()
    , cors
    , session
    , gcf()
  );

  // TODO push into middleware layer
  cors.config.headers = cors.config.headers.concat(session.headers.slice());

  module.exports = connect;
}());
Example #2
0
function start(options, app) {
    var corsOptions = {
        origins: ["*"],
        methods: ['HEAD', 'GET', 'POST'],
        credentials: true,
        headers: []
    };

    if (!options) { options = {}; }
    if (!options.port) { options.port = conf.ports.proxy; }
    if (!app) { app = server.start(options); }

    if (!options.route) {
        options.route = "";
    } else if (!options.route.match(/^\//)) {
        options.route = "/" + options.route;
    }

    app.use(function (req, res, next) {
        var headers;

        if (req.headers["access-control-request-headers"]) {
            headers = req.headers["access-control-request-headers"].split(", ");

            headers.forEach(function (header) {
                if (!corsOptions.headers.some(function (h) {
                    return h === header;
                })) {
                    corsOptions.headers.push(header);
                }
            });
        }

        next();
    });

    app.use(cors(corsOptions));

    app.use(express.bodyParser());

    app.all(options.route + "/xhr_proxy", xhrProxyHandler);
    app.all(options.route + "/jsonp_xhr_proxy", jsonpXHRProxyHandler);

    console.log("INFO:".green + " CORS XHR proxy service on: " +
                ("http://localhost:" + app._port + options.route + "/xhr_proxy").cyan);
    console.log("INFO:".green + " JSONP XHR proxy service on: " +
                ("http://localhost:" + app._port + options.route + "/jsonp_xhr_proxy").cyan);

    return app;
}
Example #3
0
module.exports = exports = function(config) {
  if (!config) config = {};

  // Create a simple-stack-common app
  var pack = stack(config);

  pack
    .useAfter("base", cors(config.cors || null))
    .use(require("./lib/not-found")())
    .use(require("./lib/error-handler")());

  // Return the pack
  return pack;
};
Example #4
0
function startServer (onMonitorRequest) {
    var Connect = require('connect'); 
    var CORS = require('connect-xcors');
    var sse = null;

    function processServerRequest(req, res) {

        function replyToSSEInit() {
            if (req.url == '/events') {
                res.writeHead(200, {
                    'Content-Type': 'text/event-stream',
                    'Cache-Control': 'no-cache',
                    'Connection': 'keep-alive'
                });
                res.write("data: ELM server ready\n\n");
                sse = res;
                console.log("Client connected\n");
            } else {
                res.writeHead(404);
                res.end();
            }
        }

        function processMonitorRequest() {
            var command = req.url.substring(1);
            onMonitorRequest(command, sse);

            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.end("Command queued\n");
        }

//        utils.debugHeaders(req);
        if (req.headers.accept && req.headers.accept == 'text/event-stream')
            replyToSSEInit();
        else 
            processMonitorRequest();
    };


    var server = Connect.createServer(
        CORS({}),
        processServerRequest);
    server.listen(9000);
}
Example #5
0
  , temp = require('temp')
  , fs = require('fs')
  , connectXCors = require('connect-xcors')
  , sse = require('connect-sse')()
  , Jobs = require('./jobs')
  , settingsStore = require('./settings')
  , extend = require('./extend')
  , redis = require('redis')
  , bodyParser = require('./bodyParser')()
  , console = require('clim')()

var cors = connectXCors({
  headers: [
    'X-Requested-With',
    'X-HTTP-Method-Override',
    'Content-Type',
    'Accept',
    'Authorization',
  ]
})

var env = {
  GENERATED_FILE_PREFIX: process.env.GENERATED_FILE_PREFIX || 'mediablast',
};

function errorMiddleware(err, req, res, next){
  console.error(err.stack);
  next(err);
}

function noCacheMiddleware(req, res, next){
Example #6
0
/*
	Reference: http://benramsey.com/blog/2008/05/206-partial-content-and-range-requests/
*/

var express = require('express'),
		cors = require('connect-xcors'),
		head = require('./head'),
		get = require('./get')
;


var server = express();

server.
	use(cors({
		headers: ['Accept-Ranges', 'Content-length', 'Content-type', 'Content-Range', 'Date', 'Range']
	})).
	set('port', 8081).
	set('data_dir', __dirname + '/data')
;

server.
	head('/range/:oid', head(server.get('data_dir'))).
	get('/range/:oid', get(server.get('data_dir')))
;


server.listen(server.get('port'));

console.log('Nodejs Example Http Range listen on ' + server.get('port'));
Example #7
0
(function () {
  "use strict";

  var steve = require('./steve')
    , connect = require('connect')
    , app = connect.createServer()
    /*
     *  CONFIG STUFF that should be moved out
     */
    , xcorsOptions
    , xcorsDefaultOptions = { 
          origins: ["http://apps.spotterrf.com", "http://hurpdurp.com"]
        , methods: ['GET', 'POST']
        , headers: ['Content-Type', 'Accept']
        , credentials: false
      }
    , port = process.argv[2] || 7770
    , publicDir = process.argv[3]
    , wacServerUrl = "http://hurpdurp.com"
    /*
     * NORMAL STUFF
     */
    , fs = require('fs')
    , path = require('path')
    , pkgConfigPath = path.join(__dirname, '..', 'package.json')
    , curVer = JSON.parse(fs.readFileSync(pkgConfigPath)).version
    , semver = require('semver')
    , request = require('ahr2')
    , xcors = require('connect-xcors')
    , installer = require('./installer')
    , pullRoute = require('./router')
    , publicPath = path.join(__dirname, '..', 'webclient-deployed')
    , releasesPath = path.join(__dirname, '..', 'webclient-deployed', 'releases')
    , mountDir = path.join(__dirname, 'mounts')
    , mounterFactory = require('connect-mounter')
    //, DomStorage = require('dom-storage')
    //, jsonStorage = require('json-storage').create(DomStorage.create(path.join(__dirname, 'settings.json')))
    , mounter = mounterFactory.create(mountDir)
    , failures = mounterFactory.fail
    , installLock
    ;

  // TODO allow 3rd party stores to be used via oauth or something
  //xcorsOptions = jsonStorage.get('xcors');
  if (!xcorsOptions) {
    xcorsOptions = xcorsDefaultOptions;
  }
  /*
  app.corsConfig.headers = xcorsOptions.headers;
  app.corsConfig.origins = xcorsOptions.origins;
  app.corsConfig.methods = xcorsOptions.methods;
  app.corsConfig.credentials = xcorsOptions.credentials;
  */

  if (failures) {
    console.log('BAD APPS:', failures);
  }

  function update(cb) {
    request.get(wacServerUrl + "/version").when(function(err, ahr, data) {
      var newVer
        , selfUpdate = true
        , callback = null
        , installLockTimeout
        ;

      function removeInstallLock() {
        installLock = false;
        clearTimeout(installLockTimeout);
        installLockTimeout = 0;
      }

      if(err || data.error === true) {
        console.log('Could not contact WebAppsCenter update service. Going it alone...');
        return;
      }

      if (cb) {
        cb (err || data.error, curVer, newVer);
      }

      if (installLock) {
        return;
      }

      if(semver.gt(data.result, curVer)) {
        console.log("New version (" + data.result + ") detected... downloading and installing!");
        newVer = data.result;
        installLock = true;
        installer(null, "client", newVer, selfUpdate, callback, wacServerUrl);
        installLockTimeout = setTimeout(removeInstallLock, 15 * 60 * 1000);
      }
    });
  }

  if((parseFloat(port) !== parseInt(port, 10)) || !isNaN(port)) {
    port = 7770;
  }

  if(typeof publicDir !== 'undefined' && fs.statSync(publicDir).isDirectory()) {
    if (publicDir.substring(0, 1) === '/'
    || (/^win/.exec(process.platform) && /[A-Z]:/.test(publicDir.substring(0,2)))) {
      publicPath = publicDir;
    } else {
      publicPath = __dirname + '/' + publicDir;
    }
  }

  function sendUpdateInfo(req, res) {
    function sendUpdateInfoHelper(err, curVer, newVer) {

      if (err) {
        res.error(err);
      }

      res.json({
          current: curVer
        , latest: newVer
      });
    }

    update(sendUpdateInfoHelper);
  }

  function router(rest) {
    rest.get('/update', sendUpdateInfo);
  }

  // check for updates every 3 hours
  setInterval(update, 3 * 60 * 60 * 1000);
  update();

  app
    .use(steve)
    .use(mounter)
    .use(xcors(xcorsOptions))
    .use(connect.router(pullRoute))
    //TODO remove this static / directory serving. Everything should be
    // being pulled from the HTML5 webapp already.
    .use(connect.static(publicPath))
    .use(connect.static(releasesPath))
    .use(connect.directory(publicPath))
    ;

  module.exports = app;
}());
Example #8
0
(function () {
  "use strict";

  require('http-json')(require('http'));

  var connect = require('connect')
    , fs = require('fs')
    , path = require('path')
    , cookielessSession = require('connect-cookieless-session')
    , pathname = require('connect-pathname')
    , gcf = require('express-chromeframe')
    , nowww = require('nowww')
    , xcors = require('connect-xcors')
    , cors = xcors()
    , session = cookielessSession()
    , app = connect()
    , version = JSON.parse(
          fs.readFileSync(
              path.join(__dirname, '..', 'package.json')
            , 'utf8'
          )
      ).version
    , semver
    ;

  function parseSemver(version) {
    // semver, major, minor, patch
    // https://github.com/mojombo/semver/issues/32
    // https://github.com/isaacs/node-semver/issues/10
    // optional v
    var m = /^\s*(v)?([0-9]+)(\.([0-9]+))(\.([0-9]+))(([\-+])([a-zA-Z0-9\.]+))?\s*$/.exec(version) || []
      , ver = {
            semver: m[0] || version
          , major: m[2]
          , minor: m[4]
          , patch: m[6]
          , revision: m[7]
        }
      ;

    if (!/^v/.test(ver.semver)) {
      ver.semver = 'v' + ver.semver;
    }

    if ('+' === m[8]) {
      ver.build = m[9];
    }

    if ('-' === m[8]) {
      ver.release = m[9];
    }

    return ver;
  }

  function getVersion(res, req, next) {
    res.json(semver);
  }

  semver = parseSemver(version);

  connect.router = require('connect_router');
  connect.corsPolicy = cors.config;

  cors.config.headers = cors.config.headers.concat(session.headers.slice());

  app
    .use(nowww())
    .use(gcf())
    .use(pathname())
    .use(connect.query())
    .use(connect.json())
    .use(connect.urlencoded())
    .use(cors)
    .use(session)
    .use(connect.static(__dirname + '/../static'))
    .use(connect.static(__dirname + '/../public'))
    .use(connect.static(__dirname + '/../var/public'))
    .use('/version', getVersion)
    .use(connect.favicon())
    ;

  module.exports = app;
}());