Пример #1
0
var init = exports.init = function (config) {
  var mongodbUrl = config.db_uri;
  console.log('Using MongoDB URL: %s', mongodbUrl);

  mongoose.connect(mongodbUrl, function (error) {
    if (error) {
      console.error('Could not connect to DB: %s', error);
      process.exit(1);
    }
  });

  mongoose.connection.on('error', function (error) {
    console.error('MongoDB connection error: %s', error);
  });

  session_store = new mongoStore({ mongooseConnection: mongoose.connection });

  swig.init({
    root: config.viewpath,
    // allows errors to be thrown and caught by express instead of suppressed by Swig
    allowErrors: true,
    cache: false,
    filters: require('./swig-filters'),
    tags: require('./swig-tags').tags,
    extensions: { plugin: pluginTemplates }
  });

  var app = express();

  if (isDevelopment) {
    app.use(morgan('dev'));
  }

  if (isTest) {
    // awesome view testingness
    require('./views-test')(app);
  }

  app.set('views', path.join(__dirname, 'views'));
  app.engine('html', pluginTemplates.engine);

  if (config.cors) {
    app.use(cors(config.cors));
  }

  app.use(middleware.bodySetter);
  // parse application/x-www-form-urlencoded
  app.use(bodyParser.urlencoded({ extended: false, limit: config.body_parser_limit }))
  // parse application/json
  app.use(bodyParser.json({ limit: config.body_parser_limit }))
  app.use(cookieParser());
  app.use(compression());
  app.use(methodOverride());
  app.use(serveFavicon(path.join(__dirname, '..', 'public', 'favicon.ico'), { maxAge: 2592000000 }));

  app.use(expressSession({
    secret: config.session_secret, store: session_store,
    cookie: {maxAge: MONTH_IN_MILLISECONDS},
    resave: false,
    saveUninitialized: true
  }));
  app.use(connectFlash());

  app.use(function(req, res, next){
    res.locals.models = models;
    next();
  })

  auth.setup(app); // app.use(passport) is included

  app.use('/vendor', express.static(path.join(__dirname, '..', 'vendor'), {maxAge: MONTH_IN_MILLISECONDS}));
  app.use(express.static(path.join(__dirname, '..', 'dist'), {maxAge: MONTH_IN_MILLISECONDS}));
  app.use(express.static(path.join(__dirname, '..', 'public'), {maxAge: MONTH_IN_MILLISECONDS}));

  if (!config.smtp) {
    console.warn('No SMTP creds - forgot password flow will not work');
  }

  // Routes
  app.get('/', routes.index);
  app.get('/about',function(req, res) {
     res.render('about');
  });

  app.get('/status', routes.status);
  app.post('/login', function (req, res, next) {
    if (!req.user) {
      return next();
    }

    res.redirect('/');
  }, auth.authenticate);
  app.get('/logout', auth.logout);
  app.get('/forgot', function (req, res) {
    res.render('forgot.html', {
      user: req.user,
      messages: req.flash('error')
    });
  });
  app.post('/forgot', auth.forgot);
  app.get('/reset/:token', auth.reset);
  app.post('/reset/:token', auth.resetPost);

  // Compiled plugin config assets
  app.get('/scripts/plugin-config-compiled.js', api_config.server('config', 'js'))
  app.get('/styles/plugin-config-compiled.css', api_config.server('config', 'css'))
  app.get('/scripts/account-plugins-compiled.js', api_config.server('account', 'js'))
  app.get('/styles/account-plugins-compiled.css', api_config.server('account', 'css'))
  app.get('/scripts/plugin-status-compiled.js', api_config.server('status', 'js'))
  app.get('/styles/plugin-status-compiled.css', api_config.server('status', 'css'))

  app.get('/admin/projects', auth.requireAdminOr401, routes_admin.projects);
  app.get('/admin/users', auth.requireAdminOr401, routes_admin.users);
  app.get('/admin/jobs', auth.requireAdminOr401, function(req, res) {
    res.render('admin/jobs.html', {
      version: pjson.version
    })
  });
  app.get('/admin/make_admin', auth.requireAdminOr401, routes_admin.make_admin);
  app.post('/admin/remove_user', auth.requireAdminOr401, routes_admin.remove_user);
  app.get('/admin/invites', auth.requireAdminOr401, routes_admin.invites);
  app.get('/admin/:org/:repo/job/:job_id', auth.requireAdminOr401, routes_admin.job);
  app.get('/admin/plugins', auth.requireAdminOr401, routes_admin.plugins.get);
  app.put('/admin/plugins', auth.requireAdminOr401, routes_admin.plugins.put);

  app.use('/account', auth.requireUser, require('./routes/account'));
  app.use('/projects', auth.requireUser, require('./routes/projects'));

  /* Requires at least read-only access to the repository in the path */
  app.get('/:org/:repo/', middleware.project, routes_jobs.html);
  app.put('/:org/:repo/', auth.requireUser, api_repo.create_project);
  app.get('/:org/:repo/job/:job_id?', middleware.project, routes_jobs.multijob);
  app.get('/:org/:repo/jobs/', middleware.project, routes_jobs.jobs);
  app.post('/:org/:repo/start', auth.requireUser, middleware.project, auth.requireProjectAdmin, api_jobs.jobs_start);
  app.delete('/:org/:repo/cache', auth.requireUser, middleware.project, auth.requireProjectAdmin, api_repo.clear_cache);

  app.delete('/:org/:repo/', middleware.project, auth.requireProjectAdmin, api_repo.delete_project);

  // provider
  app.all('/:org/:repo/provider/',
          auth.requireUserOr401,
          middleware.project,
          auth.requireProjectAdmin)
  app.get('/:org/:repo/provider/', routes.getProviderConfig)
  app.post('/:org/:repo/provider/', routes.setProviderConfig)

  // collaborators
  app.all('/:org/:repo/collaborators/',
          auth.requireUserOr401,
          middleware.project,
          auth.requireProjectAdmin)
  app.get('/:org/:repo/collaborators/', api_collaborators.get);
  app.post('/:org/:repo/collaborators/', middleware.requireBody(['email']), api_collaborators.post);
  app.delete('/:org/:repo/collaborators/', middleware.requireBody(['email']), api_collaborators.del);

  // branches
  app.use('/:org/:repo/branches/',
    auth.requireUserOr401,
    middleware.project,
    auth.requireProjectAdmin,
    api_branches
  );

  // keygen
  app.post('/:org/:repo/keygen/', auth.requireUser, middleware.project, auth.requireProjectAdmin, api_config.keygen);

  /* Requires admin access to the repository in the path */
  if ('development' === app.get('env')) {
    app.get('/:org/:repo/config(/*)', auth.requireUser, middleware.project, auth.requireProjectAdmin, routes.reloadConfig, routes.config);
  } else {
    app.get('/:org/:repo/config(/*)', auth.requireUser, middleware.project, auth.requireProjectAdmin, routes.config);
  }

  app.put('/:org/:repo/config', auth.requireUser, middleware.project, auth.requireProjectAdmin, routes.setConfig);

  app.all(
    '/:org/:repo/config/branch/runner(/*)',
    auth.requireUser,
    middleware.project,
    auth.requireProjectAdmin
  )
  app.get('/:org/:repo/config/branch/runner', routes.getRunnerConfig);
  app.put('/:org/:repo/config/branch/runner', routes.setRunnerConfig);
  app.put('/:org/:repo/config/branch/runner/id', routes.setRunnerId);
  app.all(
    '/:org/:repo/config/branch/:plugin',
    auth.requireUser,
    middleware.project,
    auth.requireProjectAdmin,
    middleware.projectPlugin
  )
  app.get('/:org/:repo/config/branch/:plugin', routes.getPluginConfig);
  app.put('/:org/:repo/config/branch/:plugin', routes.setPluginConfig);
  app.put('/:org/:repo/config/branch/', auth.requireUser, middleware.project, auth.requireProjectAdmin, routes.configureBranch)

  // app.get('/api/job/:id', api_jobs.raw);
  app.use('/api', api);
  app.get('/api/jobs', auth.requireUserOr401, api_jobs.jobs);
  // app.get('/api/jobs/:org/:repo', middleware.project, api_jobs.repo_jobs);


  app.get('/api/session', api_session.get);
  app.post('/api/session', api_session.create);


  app.use(function(req, res, next) {
    var user_created_timestamp=0;
    if (req.user !== undefined) {
      user_created_timestamp = parseInt(req.user.id.substr(0,8),16);
    }
    res.locals.user_created_timestamp = user_created_timestamp;
    next();
  });


  common.app = app;
  common.session_store = session_store;
  //
  // ### Strider Webapp Event Emitter
  //
  // Strider has a Node.Js Event Emitter which emits many events.  This can be
  // used by extensions to add extremely flexible custom handling for just about
  // anything.
  //
  common.emitter = new EventEmitter();

  return app;
};
Пример #2
0
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));//是否使用默认的querystring来将字符串转成json
app.use(cookieParser());// req.cookies
//当使用session中间件之后,会在多一个 req.session
var config = require('./config');
app.use(session({
  secret:'5',//加密cookie
  resave:true,
  saveUninitialized:true,
  store:new MongoStore({
    url:config.url
  })
}));
var flash = require('connect-flash');
app.use(flash());//一闪而过 显示一次之后就被清除 req.flash()
app.use(function(req,res,next){
  res.locals.user = req.session.user;//把session中的user取出来赋给模板变量对象
  //把flash也就是session中的信息取出来赋给模板对象
  res.locals.success = req.flash('success').toString();
  res.locals.error = req.flash('error').toString();
  next();
});
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);
app.use('/articles', articles);

// catch 404 and forward to error handler
// 捕获404错误并且转向错误处理中单件
Пример #3
0
app.mongoose.connect(configDB.url);
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({
	secret : 'SECRET'
}));
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'views/war')));
// development only
if ('development' === app.get('env')) {
	app.use(express.errorHandler());
}

require('./routes.js')(app, passport);
require('./config/passport')(passport);

var server = http.createServer(app).listen(app.get('port'), function() {
	console.log('Express server listening on port ' + app.get('port'));
});

var chess = require('./controllers/chessGameController.js');
Пример #4
0
var morgan = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');

// creates new express app
var app = express();
app.use(morgan('dev')); // log every request to the console
app.use(cookieParser()); // read cookies (needed for auth)
app.use(bodyParser()); // get information from html forms

app.use('/static', express.static('./public'));


// configures and connects to db
var configDB = require('./config/database.js');
mongoose.connect(configDB.url);

// required for passport
// require('./config/passport')(passport); // pass passport for configuration
app.use(session({ secret: 'ilovescotchscotchyscotchscotch' })); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persists login sessions
app.use(flash()); // enables flash messages

// requires routes
require('./routes.js')(app, passport);

app.listen(3000, function(){
  console.log("server running on local host 3000!")
});
Пример #5
0
module.exports = function (PORT, PATH, CALLBACK) {
  if (isDebug) mongodb.enableDebug();
  mongodb.connect(mongodb.PRODUCTION_URI, () => {
    const lookup = require('./server/controllers/lookup.js');
    lookup.getAll((err) => {
      if (!err) console.log('Lookups cached');
    });
  });

  if (config.aws_mysql.host) {
    if (isDebug) db.enableDebug();
    db.connect(db.MODE_PRODUCTION, config.aws_mysql, (err) => {
      if (err) {
        console.log('Unable to connect to MySQL.');
        process.exit(1);
      } else {
        console.log('MySQL connection established');
      }
    });
  } else if (config.mysql.host) {
    db.connect(db.MODE_PRODUCTION, config.mysql, (err) => {
      if (err) {
        console.log('Unable to connect to MySQL.');
        process.exit(1);
      } else {
        console.log('MySQL connection established');
      }
    });
  } else {
    db.fakeDB(() => {
      console.log('Spoofed MySQL connection established');
    });
  }


  const app = express();

  // enables gzip
  app.use(compression());

  // view engine setup
  // app.set('views', path.join(__dirname, 'views'));
  // app.set('view engine', 'ejs');
  app.set('views', path.join(__dirname, 'server/views'));
  app.set('view engine', 'pug');

  // uncomment after placing your favicon in /public
  // app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  app.use(logger('dev'));
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({
    extended: false,
  }));

  // Configuring Passport
  const passport = require('passport');
  const expressSession = require('express-session');
  app.use(expressSession({
    secret: config.passport.secret,
    resave: false,
    saveUninitialized: false,
  }));
  app.use(passport.initialize());
  app.use(passport.session());

  // Using the flash middleware provided by connect-flash to store messages in session
  // and displaying in templates
  const flash = require('connect-flash');
  app.use(flash());

  // Initialize Passport
  const initPassport = require('./server/passport/init');
  initPassport(passport);

  const routes = require('./server/routes/index')(passport);
  app.use('/', routes);

  app.use(express.static(path.join(__dirname, PATH)));

  // catch 404 and forward to error handler
  app.use((req, res, next) => {
    const err = new Error('Not Found');
    err.status = 404;
    next(err);
  });

  // error handlers

  // development error handler
  // will print stacktrace
  if (app.get('env') === 'development') {
    app.use((err, req, res, next) => {
      res.status(err.status || 500);
      res.render('pages/error.jade', {
        message: err.message,
        error: err,
      });
    });
  }

  // Force ssl on heroku if in production mode
  const forceSsl = function forceSsl(req, res, next) {
    if (req.headers['x-forwarded-proto'] !== 'https') {
      return res.redirect(['https://', req.get('Host'), req.url].join(''));
    }
    return next();
  };
  if (app.get('env') === 'production') {
    app.use(forceSsl);
  }

  // production error handler
  // no stacktraces leaked to user
  app.use((err, req, res) => {
    res.status(err.status || 500);
    res.render('pages/error.jade', {
      message: err.message,
      error: {},
    });
  });

  /**
   * Module dependencies.
   */

  const debug = require('debug')('passport-mongo:server');
  const http = require('http');

  /**
   * Get port from config or environment and store in Express.
   */

  let port = PORT || config.server.port;
  if (!port) port = process.env.PORT || '3000';
  app.set('port', port);

  /**
   * Create HTTP server.
   */

  const server = http.createServer(app);

  /**
   * Listen on provided port, on all network interfaces.
   */

  server.listen(port);
  server.on('error', onError);
  server.on('listening', onListening);

  /**
   * Event listener for HTTP server "error" event.
   */

  function onError(error) {
    if (error.syscall !== 'listen') {
      throw error;
    }

    const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`;

    // handle specific listen errors with friendly messages
    switch (error.code) {
      case 'EACCES':
        console.error(`${bind} requires elevated privileges`);
        process.exit(1);
        break;
      case 'EADDRINUSE':
        console.error(`${bind} is already in use`);
        process.exit(1);
        break;
      default:
        throw error;
    }
  }

  /**
   * Event listener for HTTP server "listening" event.
   */

  function onListening() {
    CALLBACK();
    const addr = server.address();
    const bind = typeof addr === 'string' ?
      `pipe ${addr}` :
      `port ${addr.port}`;
    debug(`Listening on ${bind}`);
  }
};
Пример #6
0
module.exports = function (app, passport, db) {

    app.set('showStackError', true);

    // Prettify HTML
    app.locals.pretty = true;

    // cache=memory or swig dies in NODE_ENV=production
    app.locals.cache = 'memory';

    // Should be placed before express.static
    // To ensure that all assets and data are compressed (utilize bandwidth)
    app.use(compression({
        // Levels are specified in a range of 0 to 9, where-as 0 is
        // no compression and 9 is best compression, but slowest
        level: 9
    }));

    // Only use logger for development environment
    if (process.env.NODE_ENV === 'development') {
        app.use(morgan('dev'));
    }

    // assign the template engine to .html files
    app.engine('html', consolidate[config.templateEngine]);

    // set .html as the default extension
    app.set('view engine', 'html');

    // The cookieParser should be above session
    app.use(cookieParser());

    // Request body parsing middleware should be above methodOverride
    app.use(expressValidator());
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({
        extended: true
    }));
    app.use(methodOverride());

    // Import the assets file and add to locals
    var assets = assetmanager.process({
        assets: require('./assets.json'), debug: process.env.NODE_ENV !== 'production', webroot: /public\/|packages\//g
    });

    // Add assets to local variables
    app.use(function (req, res, next) {
        res.locals.assets = assets;

        mean.aggregated('js', 'header', function (data) {
            res.locals.headerJs = data;
            next();
        });
    });

    // Express/Mongo session storage
    app.use(session({
        secret: config.sessionSecret,
        store: new mongoStore({
            db: db.connection.db,
            collection: config.sessionCollection
        }), cookie: config.sessionCookie,
        name: config.sessionName,
        resave: true,
        saveUninitialized: true
    }));

    // Dynamic helpers
    app.use(helpers(config.app.name));

    // Use passport session
    app.use(passport.initialize());
    app.use(passport.session());

    //mean middleware from modules before routes
    app.use(mean.chainware.before);

    // Connect flash for flash messages
    app.use(flash());
};
Пример #7
0
module.exports = function(app) {

// In our app.js configuration



    if (app.get('env') === 'development') {
        //console.log('development');
        //if (process.env.NODE_ENV === 'name')
        //app.use(require('connect-livereload')());

        // Disable caching of scripts for easier testing
        app.use(function noCache(req, res, next) {
            if (req.url.indexOf('/scripts/') === 0) {
                //res.header('Cache-Control', 'no-cache, no-store, must-revalidate');
                res.header('Pragma', 'no-cache');
                res.header('Expires', 0);
            }
            next();
        });

        //app.use(statick(path.join(config.root, '.tmp')));
        app.use(statick(path.join(config.root, 'app')));
        app.use(errorHandler());
        app.set('views', config.root + '/app/views');
        //app.use(logger);
    };

    app.set('trust proxy', true);
    /*app.use('/', function(req, res, next) {
     console.log('%s %s — %s and ip - %s', (new Date).toString(), req.method, req.url,req.ip);
     return next();
     });
     */


    if (app.get('env') === 'production') {
        console.log('production');
        app.use(favicon(path.join(config.root, 'app', 'favicon.ico')));
        app.use(statick(path.join(config.root, 'app')));
        app.set('views', config.root + '/views');
    };


    //app.engine('pdf', require('ejs').renderFile);
    app.set('view engine', 'jade');
    app.use(bodyParser({limit: '50mb'}));
    app.use(multer({ dest: './uploads/'}))
    app.use(methodOverride());
    app.use(cookieParser());
    //app.use(useragent.express());

    /*app.use(session({
     //key: "mysite.sid.uid.whatever",
     secret: 'mysite.sid.uid.whatever'
     *//*cookie: {
     maxAge: 26784000000 // 31 days
     }*//*
     }));*/

    // Persist sessions with mongoStore
    app.use(session({
        secret: 'angular-fullstack secret',
        store: new mongoStore({
            url: config.mongo.uri,
            collection: 'sessions'
        })
    }));


    //use passport session
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(flash()); // use connect-flash for flash messages stored in session


    // Router needs to be last
    // app.use(app.router);

};
Пример #8
0
module.exports = function () {
    var app = express();
    var server = http.createServer(app);
    var io = socketio.listen(server);

    if(app.get('env') === 'production'){
        app.use(compress());
    }

    app.use(bodyParser.urlencoded({extended: true}));
    app.use(bodyParser.json());
    app.use(methodOverride());
    app.use(cookieParser());

    var leanStore = new LeanStore();

    app.use(session({
        saveUninitialized: true,
        resave: true,
        secret: 'SessionSecret',
        store: leanStore
    }));
    
    app.set('views', './app/views');
    app.set('view engine', 'ejs');
    app.use(express.static('./public'));
    
    app.use(flash());
    app.use(passport.initialize());
    app.use(passport.session());

    // 加载云代码方法
    app.use(AV.Cloud);
    
    // 使用 avos-express-cookie-session 记录登录信息到 cookie
    //app.use(AV.Cloud.CookieSession({ secret: 'abcdefgh', maxAge: 3600000, fetchUser: false }));

    require('../app/routes/index.server.routes.js')(app);
    require('../app/routes/weixin.server.routes.js')(app);
    require('../app/routes/users.server.routes.js')(app);
    require('../app/routes/articles.server.routes.js')(app);

    app.use(function(req, res, next) {
        var err = new Error('Not Found');
        err.status = 404;
        next(err);
    });

    if (app.get('env') === 'development') {
        app.use(function (err, req, res, next) {
            res.status(err.status || 500);
            res.render('error', {
                message: err.message,
                error: err
            });
        });
    } else {
        app.use(function (err, req, res, next) {
            res.status(err.status || 500);
            res.render('error', {
                message: err.message,
                error: {}
            });
        });
    }

    require('./socketio')(server, io, leanStore);

    return server;
}
Пример #9
0
module.exports = function(mongooseConnection, redisClient) {

  require('../config/passport.js')(passport);

  var app = express();

  // Middleware

  // In production we use a CDN
  if (!isProduction) {
    app.use(stylusMiddleware());
  }

  app.use(slashes(false));
  app.use(logger('dev'));
  app.use(express.static(path.join(__dirname, '../public')));

  app.engine('jsx', render);
  app.set('views', path.join(__dirname, 'views'));
  app.set('view engine', 'jsx');

  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: true }));
  app.use(multer());

  app.use(cookieParser());
  app.use(session({
    resave: false, // don't save session if unmodified
    saveUninitialized: false, // don't create session until something stored
    secret: 'bodhi',
    store: new RedisStore({
      client: redisClient,
      ttl: 14 * 86400 // 14 days expiration
    })
  }));

  app.use(passport.initialize());
  app.use(passport.session());

  // Always after sessions
  app.use(flash());

  // Don't need CSRF w/ access tokens
  var csrfMiddleware = csrf();
  app.use(function(req, res, next) {
    var isAPI = req.originalUrl.slice(0, 4) === '/api';
    var accessToken = req.query.access_token || req.body.access_token || null;
    if (!isAPI || !accessToken) {
      csrfMiddleware.apply(null, arguments);
    } else {
      next();
    }
  });
  app.use(function(req, res, next) {
    if (req.csrfToken)
      res.locals.csrf_token = req.csrfToken();
    next();
  });

  // Pretty print
  if (app.get('env') === 'development') {
    app.set('json spaces', 2);
    // app.locals.pretty = true;
  }

  // Append the user to the locals for use in every view
  app.use(function(req, res, next) {
    res.locals.user = req.user;
    next();
  });

  require('../config/routes.js')(app, passport);

  app.listen(process.env.PORT || 8080);

};
Пример #10
0
module.exports = function () {

	/*
	 * Express configuration
	 */

	// Create app
	var app = express();

	// view engine setup
	app.set('views', './views');
	app.set('view engine', 'jade');
	// jade layouts disabled by default
	app.set('view options', {
		layout: false
	});
	// show pretty html
	app.locals.pretty = true;

	// Parse JSON
	app.use(bodyParser.json());
	app.use(bodyParser.urlencoded({
		extended: true
	}));

	// Use morgan for request logs
	app.use(morgan(config.morgan, {
		"stream": {
			write: function (message, encoding) {
				logger.info(message);
			}
		}
	}));

	// Passport references
	app.use(session({
		secret: config.sessionSecret,
		resave: false,
		saveUninitialized: true,
		store: new redisStore({
			url: config.redis.uri
		})
	}));
	app.use(passport.initialize());
	app.use(passport.session());
	app.use(flash());


	/*
	 * Routes
	 */

	// Enable cross-domain requests for all routes
	app.use(cors());

	// Static files (CSS, JS, etc...)
	app.use(serveStatic('./public', {
		index: false
	}));

	// Documentation - static
	app.use('/docs', express.static('docs'));
	// Static/generic routes
	app.use('/', require('../routes/static'));
	// Auth routes
	app.use('/auth', require('../routes/auth'));
	// Threads routes
	app.use('/threads', require('../routes/threads'));
	// Test services routes
	app.use('/services', require('../routes/services'));

	/*
	 * HTTP server setup
	 */
	var server = require('http').createServer(app);
	server.listen(config.port);
	console.log("Environment: " + config.mode);
	console.log("HTTP server listening on port " + config.port);

	// Return the express app
	return app;
};
Пример #11
0
    app.configure(function () {
        // bodyParser should be above methodOverride
        app.use(express.bodyParser());
        app.use(express.methodOverride());

        // cookieParser should be above session
        app.use(express.cookieParser());
        app.use(express.session({
            secret: pkg.name,
            store: new mongoStore({
                url: config.db,
                collection : "sessions"
            })
        }));

        // Passport session
        app.use(passport.initialize());
        app.use(passport.session());

        // Flash messages
        app.use(flash());

        // expose pkg and node env to views
        app.use(function (req, res, next) {
            res.locals.pkg = pkg
            res.locals.env = env
            next();
        });

        // View helpers
        app.use(helpers(pkg.name));

        // adds CSRF support
        if (process.env.NODE_ENV !== "test") {
            app.use(express.csrf());

            app.use(function(req, res, next) {
                res.locals.csrf_token = req.csrfToken();
                next();
            });
        }
        // Supported locales
        app.locales = ["en", "ja"];

        i18n.expressBind(app, {
            locales: app.locales,
            subdomain: true,
            query: env === "development"
        });

        // Generate a URL given a path and a locale
        app.genURL = function(locale, path) {
            var base = locale === "en" || !locale || env === "development" ?
                app.baseURL() :
                app.baseURL().replace(/:\/\//, "://" + locale + ".");

            // Only use a query string in dev mode and if we're
            // on a non-default locale
            if (env === "development" && locale !== app.locales[0]) {
                path += (/\?/.test(path) ? "&" : "?") + "lang=" + locale;
            }

            return base + path;
        };

        // The base URL for all pages
        app.baseURL = function() {
            return process.env.BASE_URL ||
                "http://localhost:" + process.env.PORT;
        };

        // The base URL for storage
        app.baseDataURL = function() {
            return process.env.BASE_DATA_URL ||
                "http://localhost:" + process.env.PORT;
        };

        // Generate a data URL
        app.dataURL = function(source, type) {
            return app.baseDataURL() + source + "/" + (type || "");
        };

        app.use(function(req, res, next) {
            res.locals.CDN = CDN(req, res);

            var otherLocale = function(req) {
                return req.i18n.getLocale() === "en" ? "ja" : "en";
            };

            res.locals.getSiteCategory = function() {
                if (req.path.indexOf("/source") === 0) {
                    return "sources";
                } else if (req.path.indexOf("/artist") === 0) {
                    return "artists";
                } else if (req.path.indexOf("/about") === 0) {
                    return "about";
                } else if (!req.path || req.path === "/") {
                    return "home";
                }

                return "search";
            };

            res.locals.getOtherURL = function() {
                return app.genURL(otherLocale(req), req.path);
            };

            res.locals.curLocale = function() {
                return req.i18n.getLocale();
            };

            res.locals.URL = function(path) {
                return path.getURL ?
                    path.getURL(req.i18n.getLocale()) :
                    app.genURL(req.i18n.getLocale(), path);
            };

            res.locals.fullName = function(item) {
                var locale = req.i18n.getLocale();
                return item.getFullName ?
                    item.getFullName(locale) :
                    locale === "ja" && item.kanji || item.name || item;
            };

            res.locals.shortName = function(item) {
                return item.getShortName(req.i18n.getLocale());
            };

            res.locals.getTitle = function(item) {
                return item.getTitle(req.i18n.getLocale());
            };

            res.locals.getDate = function(item) {
                return item.dateCreated ?
                    res.locals.getDate(item.dateCreated) :
                    (item.circa ? "ca. " : "") +
                        item.start + (item.end && item.end !== item.start ?
                        "-" + item.end : "");
            };

            next();
        });

        // routes should be at the last
        app.use(app.router);

        // custom error handler
        app.use(function (err, req, res, next) {
            if (err.message
                && (~err.message.indexOf("not found")
                || (~err.message.indexOf("Cast to ObjectId failed")))) {
                return next();
            }

            console.error(err.stack);
            res.status(500).render("500");
        })

        app.use(function (req, res, next) {
            res.status(404).render("404", { url: req.originalUrl });
        });
    })
Пример #12
0
module.exports = function (app, config) {
	// configuration of server here
	app.use(express.static(config.root + '/public'));

	app.use(multer({
		dest: config.uploadPath
	}));

	app.use(bodyParser.json());
	app.use(bodyParser.urlencoded({
		extended: true
	}));

	app.use(cookieParser('monty-python-and-the-holy-grail'));
	app.use(session({secret: 'montypythonholygrail'}));

	app.use(passport.initialize());
		app.use(passport.session());
		app.use(flash());

	mongoose.connect(config.db);
	var db = mongoose.connection;
	db.on('error', function () {
		throw new Error('Unable to connect to database at ' + config.db);
	});

	app.set('views', config.root + '/app/views');
		app.engine('handlebars', exphbs.create({
			defaultLayout: 'main',
			layoutsDir: app.get('views') + '/layouts'
		}).engine);
	app.set('view engine', 'handlebars');

	var models = glob.sync(config.root + '/app/models/*.js');
	models.forEach(function (model) {
		require(model);
	});

	// passport
	require('./passport')(passport);

	app.use(function (req, res, next) {
		if (req.session && req.session.passport) {
			res.locals.userID = req.session.passport.user;
		}
		next();
	});

	var controllers = glob.sync(config.root + '/app/controllers/*.js');
	controllers.forEach(function (controller) {
		require(controller)(app, passport);
	});

	app.use(function (req, res, next) {
		var err = new Error('Not Found!');
		err.status = 404;
		next(err);
	});

	app.use(function (req, res, next) {
		var err = new Error('Server Error!');
		err.status = 500;
		next(err);
	});

	app.use(function (err, req, res, next) {
		res.status(err.status);
		res.send(err.message || 'Something Broke!');
	});
};
Пример #13
0
module.exports.initMiddleware = function(app) {
  winston.info('Initializing Middleware...');

  // Showing stack errors
  app.set('showStackError', true);

  // Enable jsonp
  app.enable('jsonp callback');

  // Should be placed before express.static
  app.use(compress({
    filter: function(req, res) {
      return (/json|text|javascript|css|font|svg/).test(res.getHeader('Content-Type'));
    },
    level: 9
  }));

  // Initialize favicon middleware
  app.use(favicon('./modules/core/client/img/brand/favicon.ico'));

  // Environment dependent middleware
  if (process.env.NODE_ENV === 'development') {
    // Enable logger (morgan)
    //app.use(morgan('dev'));

    // Disable views cache
    app.set('view cache', false);
  } else if (process.env.NODE_ENV === 'production') {
    app.locals.cache = 'memory';
  }

  // Request body parsing middleware should be above methodOverride
  app.use(bodyParser.urlencoded({
    extended: true
  }));
  app.use(bodyParser.json());
  app.use(methodOverride());

  // Add the cookie parser and flash middleware
  app.use(cookieParser());
  app.use(flash());

  // Add multipart handling middleware
  var storage = multer.diskStorage({
    destination: function(req, file, cb) {
      cb(null, './public/uploads/users/profile');
    },
    filename: function(req, file, cb) {
      var getFileExt = function(fileName) {
        var fileExt = fileName.split(".");
        if (fileExt.length === 1 || (fileExt[0] === "" && fileExt.length === 2)) {
          return "";
        }
        return fileExt.pop();
      };
      cb(null, Date.now() + '.' + getFileExt(file.originalname));
    }
  });

  app.use(multer({
    storage: storage
  }).single('file'));

};
Пример #14
0
app.configure(function() {
  app.use(express.cookieParser('keyboard cat'));
  app.use(express.session({ cookie: { maxAge: 60000 }}));
  app.use(flash());
});
Пример #15
0
module.exports = function(app) {
	var relativePath = nconf.get('relative_path');

	middleware = require('./middleware')(app);

	app.engine('tpl', templates.__express);
	app.set('view engine', 'tpl');
	app.set('views', nconf.get('views_dir'));
	app.set('json spaces', process.env.NODE_ENV === 'development' ? 4 : 0);
	app.use(flash());

	app.enable('view cache');

	app.use(compression());

	setupFavicon(app);

	app.use(relativePath + '/apple-touch-icon', middleware.routeTouchIcon);

	app.use(bodyParser.urlencoded({extended: true}));
	app.use(bodyParser.json());
	app.use(cookieParser());

	var cookie = {
		maxAge: 1000 * 60 * 60 * 24 * parseInt(meta.config.loginDays || 14, 10)
	};

	if (meta.config.cookieDomain) {
		cookie.domain = meta.config.cookieDomain;
	}

	if (nconf.get('secure')) {
		cookie.secure = true;
	}

	app.use(session({
		store: db.sessionStore,
		secret: nconf.get('secret'),
		key: 'express.sid',
		cookie: cookie,
		resave: true,
		saveUninitialized: true
	}));

	app.use(function (req, res, next) {
		res.setHeader('X-Powered-By', 'NodeBB');

		if (meta.config['allow-from-uri']) {
			res.setHeader('X-Frame-Options', 'ALLOW-FROM ' + meta.config['allow-from-uri']);
		} else {
			res.setHeader('X-Frame-Options', 'SAMEORIGIN');
		}

		next();
	});

	app.use(middleware.processRender);
	auth.initialize(app, middleware);

	return middleware;
};
Пример #16
0
exports.start = function(callback) {
    var app = express();

    app.map = function(a, route){
        route = route || '';
        for (var key in a) {
            if (a.hasOwnProperty(key)) {
                switch (typeof a[key]) {
                case 'object':
                    // { '/path': { ... }}
                    app.map(a[key], route + key);
                    break;
                case 'function':
                    // get: function(){ ... }
                    app[key](route, a[key]);
                    break;
                }
            }
        }
    };

    app.use(express.static(path.resolve(__dirname + '/../client')));

    app.use(express.urlencoded());
    app.use(cookieSession({
        name: process.env.SESSION_COOKIE_KEY,
        keys: [process.env.SESSION_COOKIE_SECRET],
        cookie: { maxAge: 14 * 24 * 60 * 60 * 1000 }
    }));
    app.use(flash());

    app.use(passport.initialize());

    app.set('view engine', 'html');
    app.set('views', __dirname + '/views');
    app.engine('html', require('hogan-express'));

    var passportOptions = {
        successRedirect: '/user/details',
        failureRedirect: '/user/details',
        failureFlash: true,
        session: false // Not using passport for session management
    };

    app.get('/auth/facebook', passport.authenticate('facebook'));
    app.get('/auth/facebook/callback', passport.authenticate('facebook', passportOptions));

    app.get('/auth/twitter', passport.authenticate('twitter'));
    app.get('/auth/twitter/callback',passport.authenticate('twitter', passportOptions));

    app.get('/auth/google', passport.authenticate('google', { scope: ['openid'] }));
    app.get('/auth/google/callback',passport.authenticate('google', passportOptions));

    app.map(multiplayerRoute());
    app.map(userRoute());

    if (process.env.GOOGLE_ANALYTICS) {
        app.get('/analytics/google.js', function (req, res) {
            res.set('Content-Type', 'application/javascript');
            res.send('(function(i,s,o,g,r,a,m){i[\'GoogleAnalyticsObject\']=r;i[r]=i[r]||function(){' +
                '(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),' +
                'm=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)' +
                '})(window,document,\'script\',\'//www.google-analytics.com/analytics.js\',\'ga\');' +
                'ga(\'create\', \'' + process.env.GOOGLE_ANALYTICS + '\', \'tineargames.com\');' +
                'ga(\'send\', \'pageview\');');
        });
    }

    var port = process.env.PORT || TEST_PORT;
    console.log('starting server on port ' + port);
    var server = app.listen(port, callback);
    lobby(server);
};
Пример #17
0
    app.configure(function() {
        //cookieParser should be above session
        app.use(express.cookieParser());

        //bodyParser should be above methodOverride
        app.use(express.bodyParser());
        app.use(express.methodOverride());

        var allowCrossDomain = function(req, res, next) {
            res.header('Access-Control-Allow-Origin', config.allowedDomains);
            res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
            res.header('Access-Control-Allow-Headers', 'Content-Type');

            next();
        }

        app.use(allowCrossDomain);

        app.use(function(req, res, next) {
            var oneof = false;
            if(req.headers.origin) {
                res.header('Access-Control-Allow-Origin', req.headers.origin);
                oneof = true;
            }
            if(req.headers['access-control-request-method']) {
                res.header('Access-Control-Allow-Methods', req.headers['access-control-request-method']);
                oneof = true;
            }
            if(req.headers['access-control-request-headers']) {
                res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']);
                oneof = true;
            }
            if(oneof) {
                res.header('Access-Control-Max-Age', 60 * 60 * 24 * 365);
            }

            // intercept OPTIONS method
            if (oneof && req.method == 'OPTIONS') {
                res.send(200);
            }
            else {
                next();
            }
        });

        //express/mongo session storage
        app.use(express.session({
            secret: 'MEAN',
            store: new mongoStore({
                url: config.db,
                collection: 'sessions'
            })
        }));

        //connect flash for flash messages
        app.use(flash());

        //dynamic helpers
        app.use(helpers(config.app.name));

        //use passport session
        app.use(passport.initialize());
        app.use(passport.session());
        app.use(jsonToken());

        //routes should be at the last
        app.use(app.router);

        //Assume "not found" in the error msgs is a 404. this is somewhat silly, but valid, you can do whatever you like, set properties, use instanceof etc.
        app.use(function(err, req, res, next) {
            //Treat as 404
            if (~err.message.indexOf('not found')) return next();

            //Log it
            console.error(err.stack);

            //Error page
            res.status(500).render('500', {
                error: err.stack
            });
        });

        //Assume 404 since no middleware responded
        app.use(function(req, res, next) {
            res.status(404).render('404', {
                url: req.originalUrl,
                error: 'Not found'
            });
        });

    });
Пример #18
0
/**
 * Database models.
 */
var User = require('../models/user');

/**
 * Renders the home page.
 */
router.get('/', function(req, res) {
    res.render('home');
});

/**
 * Renders the registration page.
 */
router.get('/register', flash(), function(req, res) {
    if (req.user) {
        return res.redirect('/dashboard');
    }
    res.render('register', {
        title: 'Create a new account',
        duplicateUser: req.flash('duplicateUser')[0],
        invalidUsername: req.flash('invalidUsername')[0],
        invalidPassword: req.flash('invalidPassword')[0],
        invalidPasswordConfirm: req.flash('invalidPasswordConfirm')[0]
    });
});

/**
 * Creates a new user and logs in.
 */
Пример #19
0
    exports.configure = function(app, options) {

        var ensureAuthenticated = function(req, res, next) {
            console.log(req.session);
            if (process.env.AUTHTYPE == "skip") {
                req.user = {
                    username: "******"
                };
                return next();
            }
            if (req.isAuthenticated()) {
                return next();
            }

            req.session.callbackUrl = req.path;

            //            console.log (req.url);
            //  res.redirect(settings.baseUrl + '/login');

            res.locals({
                title: settings.title,
                customCss: settings.customCss,
                loginUrl: settings.baseUrl+"/login",
                flash: {
                    error: "Authentication Required"
                }
            });
            res.status(401);
            renderLogin(res);
        };


        app.use(passport.initialize());
        app.use(passport.session());
        app.use(flash());


        app.use(require('express-partials')());

        var extend = require("extend");
        extend(settings, options);

        //console.log(settings);

        if (options.db) {
            db = options.db;
        }
        ensureDbReady(function() {});

        app.use("/authstarter", express.static(__dirname + '/static'));

        if (!app.engines[".jshtml"]) {
            app.engine('jshtml', require("jshtml-express"));
        }


        var renderLogin = function(res) {
            var customviewpath = app.get("views");
            var defaultviewpath = __dirname + "/views/";
            var relative = path.relative(customviewpath, defaultviewpath);

            var view = __dirname + '/views/login.jshtml';
            var layout = __dirname + '/views/blanklayout.jshtml';

            if (fs.existsSync(customviewpath + "/login.jshtml")) view = customviewpath + "/login.jshtml";

            if (fs.existsSync(customviewpath + "/" + settings.layout + ".jshtml")) layout = customviewpath + "/" + settings.layout + ".jshtml";

            res.render(view, {
                layout: layout
            });

        };


        app.get('/logout', function(req, res) {
            req.logout();
            res.redirect(settings.baseUrl + '/');
        });

        app.get('/login', function(req, res) {

            res.locals({
                title: settings.title,
                customCss: settings.customCss,
                flash: req.flash(),
                loginUrl: settings.baseUrl+"/login",
                originalUrl: req.session.callbackUrl
            });

            renderLogin(res);

        });

        var authInternal = function(req, res, next) {
            //            console.log("auth for " + req.body.originalUrl);
            req.session.callbackUrl = req.body.originalUrl;
            return passport.authenticate('local', {
                successRedirect: settings.baseUrl + '/loginredirect',
                failureRedirect: settings.baseUrl + '/login',
                failureFlash: true
            })(req, res, next);

        };
        app.post('/login', authInternal);

        app.get("/loginredirect", function(req, res) {
            //            console.log("redirecting - original url is " + req.session.callbackUrl);
            res.redirect(req.session.callbackUrl || (settings.baseUrl + "/"));
        });


        exports.ensureAuthenticated = ensureAuthenticated;


    };
Пример #20
0
  return new Promise((resolve, reject) => {
    debug('in AppUi init() async');

  //  self.services = services;

    self.app = feathers();
    var optionsUi = {
        key: fs.readFileSync(ca.masterUiPrivateKeyFile),
        cert: fs.readFileSync(ca.masterUiCertFile),
        ca: [
          fs.readFileSync(ca.intCertFile)

          /*
           * root cert placed in /usr/share/ca-certificates/partout and updated
           * /etc/ca-certificates.conf to point to it.
           * run update-ca-certificates
           * only include intermediate ca here, and import this into
           * browsers cert stores
           */
        ],
        requestCert: true,
        rejectUnauthorized: false
      };

    self.app.opts = opts;
    self.app.set('cfg', cfg);

    /*
    var store = new ArangoDBStore({
      url: cfg.database_url,
      dbName: cfg.database_name
    });

    store.on('error', function (err) {
      if (err) {
        throw new Error(err);
      }
    });
    */

    self.app
    .use(compression())
    .use(cors())
    .use(logger)
    .use('/', staticServe('public'))  // assets
    .use('/dist', staticServe('dist'))
    .use('/node_modules', staticServe('node_modules'))
    .use(flash())
    .configure(hooks())
    .configure(rest())
    .configure(socketio(function (io) {

      io.on('connection', function (socket) {
        debug('socket connection recvd');

        socket.on('login', function(entity, info) {
          debug('(Socket) User logged in', entity);
          debug('(Socket) user:'******'logout', function(tokenPayload, info) {
          debug('(Socket) User logged out', tokenPayload);
        });
      });

      io.use(function (socket, next) {
        //console.log('socket event:', socket);
        next();
      });
    }))
    .configure(services(function (err, orm) {
      debug('services cb');

      // Create issue reporter for collection into db/ui
      const issues = new Issues(self.app);
      self.report_issue = self.app.report_issue = issues.report_issue.bind(issues);

      self.app
      //.use(express.static('public')); // /assets, /css. etc
      .use(bodyParser.json())
      .use(bodyParser.urlencoded({ extended: true }))
      .set('query parser', 'extended')
      .use(cookieParser());
      debug('after app configures');

      self.app.use('/', routerUi);

      require('./lib/ui/routes')(routerUi, cfg, serverMetrics, self.app, auth.hooks);

      self.app.set('views', 'public/views');
      self.app.set('view engine', 'ejs');

      // Template variables
      self.app.locals = {
        banner: utils.getBanner(),
        master_hostname: cfg.partout_master_hostname,
        master_api_port: cfg.partout_api_port,
        role: 'master'
      };
      self.app.engine('html', require('ejs').renderFile);

//      self.app.use(function (req, res, next) {
//        console.log('IN MY FUNC');
//        next(new Error('TEST errorHandler'));
//      });

      self.app.use(errorHandler({
        html: function (error, req, res, next) {
          console.error('errorHandler html error:', error);
          self.app.report_issue(error);
          next();
        }
      }));

      ///////////////////////////////////////////

      self.app.on('login', function(entity, info) {
        debug('(Rest) User logged in', entity);
      });
      self.app.on('logout', function(tokenPayload, info) {
        debug('(Rest) User logged out', tokenPayload);
      });

      var server = httpsUi.createServer(optionsUi, self.app)
      .listen(cfg.partout_ui_port);
      console.info('Master UI listening on port', cfg.partout_ui_port);

      var io = require('socket.io').listen(server);

      self.app.setup(server);
      resolve();
    }));

  });
Пример #21
0
module.exports = function(db) {
  // Initialize express app
  var app = express();

  // Globbing model files
  config.getGlobbedFiles('./app/models/**/*.js').forEach(function(modelPath) {
    require(path.resolve(modelPath));
  });

  // Setting application local variables
  app.locals.title = config.app.title;
  app.locals.description = config.app.description;
  app.locals.keywords = config.app.keywords;
  app.locals.facebookAppId = config.facebook.clientID;
  app.locals.GAcode = config.GA.code;
  app.locals.jsFiles = config.getJavaScriptAssets();
  app.locals.cssFiles = config.getCSSAssets();
  app.locals.languages = require('../public/modules/core/languages/languages.json');
  app.locals.appSettings = config.app.settings;
  app.locals.appSettings.time = new Date().toISOString();
  app.locals.appSettings.https = config.https;

  // Passing the request url to environment locals
  app.use(function(req, res, next) {
    res.locals.url = req.protocol + '://' + req.headers.host + '/';// + req.url;
    next();
  });

  // Should be placed before express.static
  app.use(compress({
    filter: function(req, res) {
      return (/json|text|javascript|css/).test(res.getHeader('Content-Type'));
    },
    level: 9
  }));

  // Showing stack errors
  app.set('showStackError', true);

  // Set swig as the template engine
  app.engine('server.view.html', consolidate[config.templateEngine]);

  // Set views path and view engine
  app.set('view engine', 'server.view.html');
  app.set('views', './app/views');

  // Environment dependent middleware
  if (process.env.NODE_ENV === 'development') {
    // Enable logger (morgan)
    app.use(morgan('dev'));

    // Disable views cache
    app.set('view cache', false);
  } else if (process.env.NODE_ENV === 'production') {
    app.locals.cache = 'memory';
  }

  // Request body parsing middleware should be above methodOverride
  app.use(bodyParser.urlencoded({
    extended: true
  }));
  app.use(bodyParser.json());
  app.use(methodOverride());

  // CookieParser should be above session
  app.use(cookieParser());

  // Express MongoDB session storage
  app.use(session({
    saveUninitialized: true,
    resave: true,
    secret: config.sessionSecret,
    store: new mongoStore({
      db: db.connection.db,
      collection: config.sessionCollection
    })
  }));

  // use passport session
  app.use(passport.initialize());
  app.use(passport.session());

  // connect flash for flash messages
  app.use(flash());

  // Use helmet to secure Express headers
  app.use(helmet.xframe());
  app.use(helmet.xssFilter());
  app.use(helmet.nosniff());
  app.use(helmet.ienoopen());
  app.disable('x-powered-by');

  // Setting the app router and static folder
  app.use(express.static(path.resolve('./public')));

  // Globbing routing files
  config.getGlobbedFiles('./app/routes/**/*.js').forEach(function(routePath) {
    require(path.resolve(routePath))(app);
  });

  // Assume 'not found' in the error msgs is a 404. this is somewhat silly, but valid, you can do whatever you like, set properties, use instanceof etc.
  app.use(function(err, req, res, next) {
    // If the error object doesn't exists
    if (!err) return next();

    // Log it
    console.error(err.stack);

    // Error page
    res.status(500).render('500', {
      error: err.stack
    });
  });

  // Assume 404 since no middleware responded
  app.use(function(req, res) {
    res.status(404).render('404', {
      url: req.originalUrl,
      error: 'Not Found'
    });
  });

  // Attach Socket.io
  // @link: http://vexxhost.com/blog/mean-socket-io-integration-tutorial/
  var server = http.createServer(app);
  var io = socketio.listen(server);
  app.set('socketio', io);
  app.set('server', server);

  return app;
};
Пример #22
0
exports = module.exports = function(IoC, settings, sessions, User, policies) {

  var app = this;

  // pass a secret to cookieParser() for signed cookies
  app.all(policies.notApiRouteRegexp, cookieParser(settings.cookieParser));

  // add req.session cookie support
  settings.session.store = sessions;
  app.all(policies.notApiRouteRegexp, session(settings.session));

  // support live reload
  // (note this must come after sessions)
  // <http://stackoverflow.com/a/26740588>
  if (settings.liveReload.enabled)
    app.all(policies.notApiRouteRegexp, connectLiveReload(settings.liveReload.options));

  // add support for authentication
  app.use(passport.initialize());
  app.all(policies.notApiRouteRegexp, passport.session());

  // add flash message support
  app.use(session(settings.session));
  app.use(flash());
  app.all(policies.notApiRouteRegexp, flash());

  // add passport strategies
  passport.use(User.createStrategy());
  passport.serializeUser(User.serializeUser());
  passport.deserializeUser(User.deserializeUser());

  // ## Google Authentication
  if (settings.google.enabled) {

    // web-based
    passport.use(new GoogleStrategy({
      callbackURL: settings.url + '/auth/google/callback',
      clientID: settings.google.clientID,
      clientSecret: settings.google.clientSecret
    }, providerAuthCallback));

    // token-based
    passport.use(new GoogleTokenStrategy({
      clientID: settings.google.clientID,
      clientSecret: settings.google.clientSecret
    }, providerAuthCallback));

  }

  // ## Facebook Authentication
  if (settings.facebook.enabled) {

    // web-based
    passport.use(new FacebookStrategy({
      callbackURL: settings.url + '/auth/facebook/callback',
      clientID: settings.facebook.appID,
      clientSecret: settings.facebook.appSecret
    }, providerAuthCallback));

    // token-based
    passport.use(new FacebookTokenStrategy({
      clientID: settings.facebook.appID,
      clientSecret: settings.facebook.appSecret
    }, providerAuthCallback));

  }

  function providerAuthCallback(accessToken, refreshToken, profile, done) {

    if (profile.emails.length === 0 || !_.isObject(profile.emails[0]) || !validator.isEmail(profile.emails[0].value)) {
      return done(new Error('Your account did not have an email address associated with it'));
    }

    var $or = [
      {
        email: profile.emails[0].value
      }
    ];

    // normalize the auth callbacks by simply pushing to the
    // $or query that will be executed with User.findOne below
    // this allows us to simply have one auth callback for
    // different providers like Facebook, Google, etc.
    var provider = {};
    provider[profile.provider + '_id'] = profile.id;
    // note that we unshift instead of push, since we want findOne
    // to return the user based off `profile.id` which takes
    // precedence over the user's email address in `profile.emails`
    $or.unshift(provider);

    User.findOne({
      $or: $or
    }, function(err, user) {

      if (err) return done(err);

      if (user) {

        if (!user[profile.provider + '_id']) {
          user[profile.provider + '_id'] = profile.id;
        }

        if (accessToken)
          user[profile.provider + '_access_token'] = accessToken;

        if (refreshToken)
          user[profile.provider + '_refresh_token'] = refreshToken;

        return user.save(done);

      }

      user = {
        email: profile.emails[0].value,
        name: profile.name.givenName,
        surname: profile.name.familyName
      };

      user[profile.provider + '_id'] = profile.id;

      if (accessToken)
        user[profile.provider + '_access_token'] = accessToken;

      if (refreshToken)
        user[profile.provider + '_refresh_token'] = refreshToken;

      // if the user signed in with another service
      // then create a random password for them
      User.register(user, randomstring.token(), function(err, user) {
        if (err) return done(err);
        if (!user)
          return done(new Error('An error has occured while registering, please try later'));
        done(null, user);
        user.sendWelcomeEmail();
      });

    });

  }

};
app.disable('x-powered-by'); // remove powered by express

// views
app.set('views', path.join(__dirname, 'server/views'));
app.set('view engine', 'ejs');

// middlewares
app.use(morgan('dev'));
app.use(bodyParser.json()); // parses application/json
app.use(bodyParser.urlencoded({ extended: true })); // parses application/x-www-form-urlencoded
app.use(compression()); // compression middleware
app.use(methodOverride());  // HTTP verbs like PUT or DELETE
app.use(requestID); // request id for logger
app.use(helmet()); // implements 6 measures for security headers
app.use(log4js.connectLogger(log4js.getLogger("http"), { level: 'auto' }));
app.use(flash()); //use flash

app.use(require('serve-favicon')(__dirname + '/public/images/favicon.ico')); //serve favicon
app.use(require('serve-static')(path.join(__dirname, 'public'))); //  server static files

// routes
require('./server/routes/index')(app);

//initialize
//require(__base + '/server/init/mongo'); //mongo using mongoose
//require(__base + '/server/init/rabbit'); rabbitmq using ampq-coffee

logger = require(__base + '/server/init/logger').main;

// start listening
var server = app.listen(app.get('port'), function() {
Пример #24
0
module.exports = function (app, passport) {

  // Compression middleware (should be placed before express.static)
  app.use(compression({
    threshold: 512
  }));

  // Static files middleware
  app.use(express.static(config.root + '/public'));

  // Use winston on production
  let log = 'dev';
  if (env !== 'development') {
    log = {
      stream: {
        write: message => winston.info(message)
      }
    };
  }

  // Don't log during tests
  // Logging middleware
  if (env !== 'test') app.use(morgan(log));

  // Swig templating engine settings
  if (env === 'development' || env === 'test') {
    swig.setDefaults({
      cache: false
    });
  }

  // set views path, template engine and default layout
  app.engine('html', swig.renderFile);
  app.set('views', config.root + '/server/views');
  app.set('view engine', 'html');

  // expose package.json to views
  app.use(function (req, res, next) {
    res.locals.pkg = pkg;
    res.locals.env = env;
    next();
  });

  // bodyParser should be above methodOverride
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: true }));
  app.use(multer().array('image', 1));
  app.use(methodOverride(function (req) {
    if (req.body && typeof req.body === 'object' && '_method' in req.body) {
      // look in urlencoded POST bodies and delete it
      var method = req.body._method;
      delete req.body._method;
      return method;
    }
  }));

  // CookieParser should be above session
  app.use(cookieParser());
  app.use(cookieSession({ secret: 'secret' }));
  app.use(session({
    resave: true,
    saveUninitialized: true,
    secret: pkg.name,
    store: new mongoStore({
      url: config.db,
      collection : 'sessions'
    })
  }));

  // use passport session
  app.use(passport.initialize());
  app.use(passport.session());

  // connect flash for flash messages - should be declared after sessions
  app.use(flash());

  // should be declared after session and flash
  app.use(helpers(pkg.name));

  if (env !== 'test') {
    /*app.use(csrf());

    // This could be moved to view-helpers :-)
    app.use(function (req, res, next) {
      res.locals.csrf_token = req.csrfToken();
      next();
    });*/
  }
};
Пример #25
0
module.exports = function (app, config, passport) {

  app.set('showStackError', true);

  // should be placed before express.static
  // app.use(express.compress({
  //   filter: function (req, res) {
  //     return /json|text|javascript|css/.test(res.getHeader('Content-Type'))
  //   },
  //   level: 9
  // }))

  app.use(favicon());
  app.use(express.static(config.root + '/public'))

  // Logging
  if (env !== 'test') app.use(logger('dev'));

  // set views path, template engine and default layout
  app.set('views', config.root + '/views');
  app.set('view engine', 'ejs');

  // expose package.json to views
  app.use(function (req, res, next) {
    res.locals.pkg = pkg
    next()
  })

  // cookieParser should be above session
  app.use(cookieParser());

  // bodyParser
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded());
  app.use(multer({ dest: config.root + '/uploads' }));

  // expresssession storage
  app.use(session({ 
    store: new mongoStore({
        url: config.db,
        collection : 'sessions'
      }),
    secret: pkg.name, 
    resave: true, 
    saveUninitialized: true
  }));

  // use passport session
  app.use(passport.initialize());
  app.use(passport.session());

  // connect flash for flash messages - should be declared after sessions
  app.use(flash());

  // should be declared after session and flash
  // app.use(helpers(pkg.name))

  // adds CSRF support
  // if (process.env.NODE_ENV !== 'test') {
  //   app.use(express.csrf())

  //   // This could be moved to view-helpers :-)
  //   app.use(function(req, res, next){
  //     res.locals.csrf_token = req.csrfToken()
  //     next()
  //   })
  // }

  // Add user to all renders
  app.use(function(req, res, next){
    res.locals.user = req.user;
    // res.locals.message = [''];
    res.locals.message = { 
      'info': req.flash('info'),
      'error': req.flash('error')
    };
    next();
  });

  // Bootstrap routes
  require('./routes')(app, passport);

  /// catch 404 and forward to error handler
  app.use(function(req, res, next) {
      var err = new Error('Not Found');
      err.status = 404;
      next(err);
  });

  /// error handlers

  // development error handler
  // will print stacktrace
  if (app.get('env') === 'development') {
      app.use(function(err, req, res, next) {
          res.status(err.status || 500);
          res.render('error', {
              message: err.message,
              error: err,
              user: req.user
          });
      });
  }

  // production error handler
  // no stacktraces leaked to user
  app.use(function(err, req, res, next) {
      res.status(err.status || 500);
      res.render('error', {
          message: err.message,
          error: {},
          user: req.user
      });
  });

  // // assume "not found" in the error msgs
  // // is a 404. this is somewhat silly, but
  // // valid, you can do whatever you like, set
  // // properties, use instanceof etc.
  // app.use(function(err, req, res, next){
  //   // treat as 404
  //   if (err.message
  //     && (~err.message.indexOf('not found')
  //     || (~err.message.indexOf('Cast to ObjectId failed')))) {
  //     return next()
  //   }

  //   // log it
  //   // send emails if you want
  //   console.error(err.stack)

  //   // error page
  //   res.status(500).render('500', { error: err.stack })
  // })

  // // assume 404 since no middleware responded
  // app.use(function(req, res, next){
  //   res.status(404).render('404', {
  //     url: req.originalUrl,
  //     error: 'Not found'
  //   })
  // })
}
Пример #26
0
var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger({
	stream : accessLogfile
}));
app.use(favicon());
// app.use(logger('dev'));
app.use(bodyParser());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(flash()); // used before session
app.use(session({
	secret : settings.cookieSecret,
	key : settings.db, // cookie name
	cookie : {
		maxAge : 1000 * 60 * 60 * 24 * 30,
	}, // 30 days
	store : new MongoStore({
		db : settings.db
	})
}));

// dynamicHelper
app.use(function(req, res, next) {
	res.locals.user = req.session.user;
Пример #27
0
      var namespace = param.split('.')
      , root    = namespace.shift()
      , formParam = root;

    while(namespace.length) {
      formParam += '[' + namespace.shift() + ']';
    }
    return {
      param : formParam,
      msg   : msg,
      value : value
    };
  }
}));

app.use(connectFlash());
app.use(function (req, res, next) {
  res.locals.messages = require('express-messages')(req, res);
  next();
});

app.get('*', function(req, res, next){
  res.locals.user = req.user || null;
  next();
});

// Specify routing
app.use('/', routes);
app.use('/users', users);

// catch 404 and forward to error handler
Пример #28
0
module.exports = function(db) {
	// Initialize express app
	var app = express();

	// Globbing model files
	config.getGlobbedFiles('./app/models/**/*.js').forEach(function(modelPath) {
		require(path.resolve(modelPath));
	});

	// Setting application local variables
	app.locals.title = config.app.title;
	app.locals.description = config.app.description;
	app.locals.keywords = config.app.keywords;
	app.locals.facebookAppId = config.facebook.clientID;
	app.locals.jsFiles = config.getJavaScriptAssets();
	app.locals.cssFiles = config.getCSSAssets();

	// Passing the request url to environment locals
	app.use(function(req, res, next) {
		res.locals.url = req.protocol + '://' + req.headers.host + req.url;
		next();
	});

	// Should be placed before express.static
	app.use(compress({
		filter: function(req, res) {
			return (/json|text|javascript|css/).test(res.getHeader('Content-Type'));
		},
		level: 9
	}));

	// Showing stack errors
	app.set('showStackError', true);

	// Set swig as the template engine
	app.engine('server.view.html', consolidate[config.templateEngine]);

	// Set views path and view engine
	app.set('view engine', 'server.view.html');
	app.set('views', './app/views');

	// Environment dependent middleware
	if (process.env.NODE_ENV === 'development') {
		// Enable logger (morgan)
		app.use(morgan('dev'));

		// Disable views cache
		app.set('view cache', false);
	} else if (process.env.NODE_ENV === 'production') {
		app.locals.cache = 'memory';
	}

	// Request body parsing middleware should be above methodOverride
	app.use(bodyParser.urlencoded({
		extended: true
	}));
	app.use(bodyParser.json());
	app.use(methodOverride());

	// CookieParser should be above session
	app.use(cookieParser());

	// Express MongoDB session storage
	app.use(session({
		saveUninitialized: true,
		resave: true,
		secret: config.sessionSecret,
		store: new mongoStore({
			db: db.connection.db,
			collection: config.sessionCollection
		})
	}));

	// use passport session
	app.use(passport.initialize());
	app.use(passport.session());

	// connect flash for flash messages
	app.use(flash());

	// Use helmet to secure Express headers
	app.use(helmet.xframe());
	app.use(helmet.xssFilter());
	app.use(helmet.nosniff());
	app.use(helmet.ienoopen());
	app.disable('x-powered-by');

	// Setting the app router and static folder
	app.use(express.static(path.resolve('./public')));

	// Globbing routing files
	config.getGlobbedFiles('./app/routes/**/*.js').forEach(function(routePath) {
		require(path.resolve(routePath))(app);
	});

	// Assume 'not found' in the error msgs is a 404. this is somewhat silly, but valid, you can do whatever you like, set properties, use instanceof etc.
	app.use(function(err, req, res, next) {
		// If the error object doesn't exists
		if (!err) return next();

		// Log it
		console.error(err.stack);

		// Error page
		res.status(500).render('500', {
			error: err.stack
		});
	});

	// Assume 404 since no middleware responded
	app.use(function(req, res) {
		res.status(404).render('404', {
			url: req.originalUrl,
			error: 'Not Found'
		});
	});

	if (process.env.NODE_ENV === 'secure') {
		// Log SSL usage
		console.log('Securely using https protocol');

		// Load SSL key and certificate
		var privateKey = fs.readFileSync('./config/sslcerts/key.pem', 'utf8');
		var certificate = fs.readFileSync('./config/sslcerts/cert.pem', 'utf8');

		// Create HTTPS Server
		var httpsServer = https.createServer({
			key: privateKey,
			cert: certificate
		}, app);

		// Return HTTPS server instance
		return httpsServer;
	}
	
	// Attach Socket.io
var server = http.createServer(app);
var io = socketio.listen(server);
app.set('socketio', io);
app.set('server', server);

//When recieve join event from items controller add user id to room. (used for only sending data to correct users)
io.on('connection', function (socket) {
  console.log(socket.id);
  socket.on('join',function(user){
      socket.join(user);
  });
});

	// Return Express server instance
	return app;
};
Пример #29
0
// Configure app
var app = express();
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');

// Set up middleware
app.use(express.responseTime());
app.use(express.logger());
app.use(express.favicon());
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.session({store: new RedisSessionStore({ttl: 60 * 30}),
                         secret: "BadWolf"}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(app.router);
app.use(express.static(__dirname + '/public'));

// Start listening
var server = app.listen(8000);
console.log('Server listening at http://127.0.0.1:8000/');

// Connect socket.io
io = socketio.listen(server);
io.set('log level', 2);

io.sockets.on('connection', function (socket) {
    console.log("SocketIO Connection");
    socket.on('new point', function (data) {
        console.log("New Point: " + data.trackid + ", Lon: " + data.lon + ", Lat: " + data.lat);
Пример #30
0
  , app             = express()
  , morgan          = require('morgan')
  , favicon         = require('serve-favicon')
  , cookieParser    = require('cookie-parser')
  , methodOverride  = require('method-override')
  , session         = require('express-session')
  , errorHandler    = require('errorhandler')
  , bodyParser      = require('body-parser')
  , marked          = require('marked').setOptions({ breaks: true })
  , db              = require('./app/model/index.js')
  , env             = (process.env.NODE_ENV || 'development');

// configuration ==============
  // boilerplate
app.use(cookieParser()); app.use(methodOverride()); app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json()); app.use(errorHandler()); app.use(morgan('dev'));  app.use(flash());

app.set('port', process.env.PORT || 8080);
app.use(favicon(__dirname + '/public/src/assets/favicon/favicon.ico'));
app.use('/public', express.static('public'));
app.use('/parser', express.static('parser'));
app.use('/bower', express.static('bower_components'));

// view template engine
app.set('view engine', 'jade');
app.set('views', __dirname + '/app/view');

// models
// app.set('models', require('./app/model'));

// MVC Definitions =============