| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- 'use strict';
- module.exports = function(crowi, app) {
- var debug = require('debug')('growi:crowi:express-init')
- , path = require('path')
- , express = require('express')
- , bodyParser = require('body-parser')
- , cookieParser = require('cookie-parser')
- , methodOverride = require('method-override')
- , passport = require('passport')
- , session = require('express-session')
- , sanitizer = require('express-sanitizer')
- , basicAuth = require('basic-auth-connect')
- , flash = require('connect-flash')
- , swig = require('swig-templates')
- , webpackAssets = require('express-webpack-assets')
- , i18next = require('i18next')
- , i18nFsBackend = require('i18next-node-fs-backend')
- , i18nSprintf = require('i18next-sprintf-postprocessor')
- , i18nMiddleware = require('i18next-express-middleware')
- , i18nUserSettingDetector = require('../util/i18nUserSettingDetector')
- , env = crowi.node_env
- , config = crowi.getConfig()
- , middleware = require('../util/middlewares')
- , Config = crowi.model('Config')
- , User = crowi.model('User')
- ;
- var lngDetector = new i18nMiddleware.LanguageDetector();
- lngDetector.addDetector(i18nUserSettingDetector);
- i18next
- .use(lngDetector)
- .use(i18nFsBackend)
- .use(i18nSprintf)
- .init({
- // debug: true,
- fallbackLng: [User.LANG_EN_US],
- whitelist: Object.keys(User.getLanguageLabels()).map((k) => User[k]),
- backend: {
- loadPath: crowi.localeDir + '{{lng}}/translation.json'
- },
- detection: {
- order: ['userSettingDetector', 'header', 'navigator'],
- },
- overloadTranslationOptionHandler: i18nSprintf.overloadTranslationOptionHandler
- });
- // omit unnecessary header
- app.disable('x-powered-by');
- app.use(function(req, res, next) {
- var now = new Date()
- , baseUrl
- , tzoffset = -(config.crowi['app:timezone'] || 9) * 60 // for datez
- , Page = crowi.model('Page')
- , User = crowi.model('User')
- , Config = crowi.model('Config')
- ;
- app.set('tzoffset', tzoffset);
- req.config = config;
- req.csrfToken = null;
- config.crowi['app:url'] = baseUrl = (req.headers['x-forwarded-proto'] == 'https' ? 'https' : req.protocol) + '://' + req.get('host');
- res.locals.req = req;
- res.locals.baseUrl = baseUrl;
- res.locals.config = config;
- res.locals.env = env;
- res.locals.now = now;
- res.locals.tzoffset = tzoffset;
- res.locals.consts = {
- pageGrants: Page.getGrantLabels(),
- userStatus: User.getUserStatusLabels(),
- language: User.getLanguageLabels(),
- restrictGuestMode: Config.getRestrictGuestModeLabels(),
- registrationMode: Config.getRegistrationModeLabels(),
- };
- res.locals.local_config = Config.getLocalconfig(config); // config for browser context
- next();
- });
- app.set('port', crowi.port);
- const staticOption = (crowi.node_env === 'production') ? {maxAge: '30d'} : {};
- app.use(express.static(crowi.publicDir, staticOption));
- app.engine('html', swig.renderFile);
- app.use(webpackAssets(
- path.join(crowi.publicDir, 'manifest.json'),
- { devMode: (crowi.node_env === 'development') })
- );
- // app.set('view cache', false); // Default: true in production, otherwise undefined. -- 2017.07.04 Yuki Takei
- app.set('view engine', 'html');
- app.set('views', crowi.viewsDir);
- app.use(methodOverride());
- app.use(bodyParser.urlencoded({ extended: true, limit: '50mb' }));
- app.use(bodyParser.json({limit: '50mb'}));
- app.use(sanitizer());
- app.use(cookieParser());
- app.use(session(crowi.sessionConfig));
- // Set basic auth middleware
- app.use(function(req, res, next) {
- if (req.query.access_token || req.body.access_token) {
- return next();
- }
- if (config.crowi['security:basicName'] && config.crowi['security:basicSecret']) {
- return basicAuth(
- config.crowi['security:basicName'],
- config.crowi['security:basicSecret'])(req, res, next);
- }
- else {
- next();
- }
- });
- // passport
- if (Config.isEnabledPassport(config)) {
- debug('initialize Passport');
- app.use(passport.initialize());
- app.use(passport.session());
- }
- app.use(flash());
- app.use(middleware.swigFilters(crowi, app, swig));
- app.use(middleware.swigFunctions(crowi, app));
- app.use(middleware.csrfKeyGenerator(crowi, app));
- // switch loginChecker
- if (Config.isEnabledPassport(config)) {
- app.use(middleware.loginCheckerForPassport(crowi, app));
- }
- else {
- app.use(middleware.loginChecker(crowi, app));
- }
- app.use(i18nMiddleware.handle(i18next));
- };
|