express-init.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. 'use strict';
  2. module.exports = function(crowi, app) {
  3. var express = require('express')
  4. , bodyParser = require('body-parser')
  5. , multer = require('multer')
  6. , morgan = require('morgan')
  7. , cookieParser = require('cookie-parser')
  8. , methodOverride = require('method-override')
  9. , errorHandler = require('errorhandler')
  10. , session = require('express-session')
  11. , basicAuth = require('basic-auth-connect')
  12. , flash = require('connect-flash')
  13. , cons = require('consolidate')
  14. , swig = require('swig')
  15. , env = crowi.node_env
  16. , middleware = require('../util/middlewares')
  17. ;
  18. app.use(function(req, res, next) {
  19. var now = new Date()
  20. , fbparams = {}
  21. , baseUrl
  22. , config = crowi.getConfig()
  23. , tzoffset = -(config.crowi['app:timezone'] || 9) * 60 // for datez
  24. , Page = crowi.model('Page')
  25. , User = crowi.model('User')
  26. , Config = crowi.model('Config')
  27. ;
  28. app.set('tzoffset', tzoffset);
  29. req.config = config;
  30. config.crowi['app:url'] = baseUrl = (req.headers['x-forwarded-proto'] == 'https' ? 'https' : req.protocol) + '://' + req.get('host');
  31. res.locals.req = req;
  32. res.locals.baseUrl = baseUrl;
  33. res.locals.config = config;
  34. res.locals.env = env;
  35. res.locals.now = now;
  36. res.locals.tzoffset = tzoffset;
  37. res.locals.facebook = {appId: config.crowi['facebook:appId'] || ''};
  38. res.locals.consts = {
  39. pageGrants: Page.getGrantLabels(),
  40. userStatus: User.getUserStatusLabels(),
  41. registrationMode: Config.getRegistrationModeLabels(),
  42. };
  43. next();
  44. });
  45. // Set basic auth middleware
  46. app.use(function(req, res, next) {
  47. var config = crowi.getConfig();
  48. if (config.crowi['security:basicName'] && config.crowi['security:basicSecret']) {
  49. return basicAuth(
  50. config.crowi['security:basicName'],
  51. config.crowi['security:basicSecret'])(req, res, next);
  52. } else {
  53. next();
  54. }
  55. });
  56. // Register Facebook middleware
  57. app.use(function(req, res, next) {
  58. var config = crowi.getConfig()
  59. , facebook = require('facebook-node-sdk')
  60. ;
  61. if (config.crowi['facebook:appId'] && config.crowi['facebook:secret']) {
  62. return facebook.middleware({
  63. appId: config.crowi['facebook:appId'],
  64. secret: config.crowi['facebook:secret']
  65. })(req, res, next);
  66. } else {
  67. return next();
  68. }
  69. });
  70. app.set('port', crowi.port);
  71. app.use(express.static(crowi.publicDir));
  72. app.engine('html', cons.swig);
  73. app.set('view cache', false);
  74. app.set('view engine', 'html');
  75. app.set('views', crowi.viewsDir);
  76. app.use(methodOverride());
  77. app.use(bodyParser.urlencoded({ extended: true, limit: '50mb' }));
  78. app.use(bodyParser.json({limit: '50mb'}));
  79. app.use(cookieParser());
  80. app.use(multer());
  81. app.use(session(crowi.sessionConfig));
  82. app.use(flash());
  83. app.use(middleware.swigFilters(app, swig));
  84. app.use(middleware.swigFunctions(crowi, app));
  85. app.use(middleware.loginChecker(crowi, app));
  86. if (env == 'development') {
  87. swig.setDefaults({ cache: false });
  88. app.use(errorHandler({ dumpExceptions: true, showStack: true }));
  89. app.use(morgan('dev'));
  90. }
  91. if (env == 'production') {
  92. var oneYear = 31557600000;
  93. app.use(morgan('combined'));
  94. app.use(function (err, req, res, next) {
  95. res.status(500);
  96. res.render('500', { error: err });
  97. });
  98. }
  99. };