Browse Source

switch settings on boot according to isEnabledPassport

Yuki Takei 8 years ago
parent
commit
6a0435ac5b
5 changed files with 48 additions and 8 deletions
  1. 15 6
      lib/crowi/express-init.js
  2. 11 1
      lib/crowi/index.js
  3. 6 0
      lib/models/config.js
  4. 12 1
      lib/routes/index.js
  5. 4 0
      lib/service/passport.js

+ 15 - 6
lib/crowi/express-init.js

@@ -19,8 +19,10 @@ module.exports = function(crowi, app) {
     , 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')
     ;
 
@@ -47,7 +49,6 @@ module.exports = function(crowi, app) {
   app.use(function(req, res, next) {
     var now = new Date()
       , baseUrl
-      , config = crowi.getConfig()
       , tzoffset = -(config.crowi['app:timezone'] || 9) * 60 // for datez
       , Page = crowi.model('Page')
       , User = crowi.model('User')
@@ -98,7 +99,6 @@ module.exports = function(crowi, app) {
 
   // Set basic auth middleware
   app.use(function(req, res, next) {
-    var config = crowi.getConfig();
     if (req.query.access_token || req.body.access_token) {
       return next();
     }
@@ -113,8 +113,11 @@ module.exports = function(crowi, app) {
   });
 
   // passport
-  app.use(passport.initialize());
-  app.use(passport.session());
+  if (Config.isEnabledPassport(config)) {
+    debug('initialize Passport')
+    app.use(passport.initialize());
+    app.use(passport.session());
+  }
 
   app.use(flash());
 
@@ -122,8 +125,14 @@ module.exports = function(crowi, app) {
   app.use(middleware.swigFunctions(crowi, app));
 
   app.use(middleware.csrfKeyGenerator(crowi, app));
-  // app.use(middleware.loginChecker(crowi, app));
-  app.use(middleware.loginCheckerForPassport(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));
 };

+ 11 - 1
lib/crowi/index.js

@@ -252,6 +252,16 @@ Crowi.prototype.getInterceptorManager = function() {
 }
 
 Crowi.prototype.setupPassport = function() {
+  const config = this.getConfig();
+  const Config = this.model('Config');
+
+  if (!Config.isEnabledPassport(config)) {
+    // disabled
+    return;
+  }
+
+  debug('Passport is enabled');
+
   const PassportService = require('../service/passport');
 
   const passportService = new PassportService(this);
@@ -379,7 +389,7 @@ Crowi.prototype.buildServer = function() {
   var Config = this.model('Config');
   var isEnabledPlugins = Config.isEnabledPlugins(this.config);
   if (isEnabledPlugins) {
-    debug('plugins enabled');
+    debug('Plugins are enabled');
     var PluginService = require('../plugins/plugin.service');
     var pluginService = new PluginService(this, app);
     pluginService.autoDetectAndLoadPlugins();

+ 6 - 0
lib/models/config.js

@@ -239,6 +239,12 @@ module.exports = function(crowi) {
       });
   };
 
+  configSchema.statics.isEnabledPassport = function(config)
+  {
+    const key = 'security:isEnabledPassport';
+    return getValueForCrowiNS(config, key);
+  };
+
   configSchema.statics.isUploadable = function(config)
   {
     var method = crowi.env.FILE_UPLOAD || 'aws';

+ 12 - 1
lib/routes/index.js

@@ -19,6 +19,9 @@ module.exports = function(crowi, app) {
     , loginRequired = middleware.loginRequired
     , accessTokenParser = middleware.accessTokenParser(crowi, app)
     , csrf      = middleware.csrfVerify(crowi, app)
+
+    , config    = crowi.getConfig()
+    , Config    = crowi.model('Config')
     ;
 
   app.get('/'                        , middleware.applicationInstalled(), loginRequired(crowi, app, false) , page.pageListShow);
@@ -31,7 +34,15 @@ module.exports = function(crowi, app) {
   app.get('/login'                   , middleware.applicationInstalled()    , login.login);
   app.get('/login/invited'           , login.invited);
   app.post('/login/activateInvited'  , form.invited                         , csrf, login.invited);
-  app.post('/login'                  , form.login                           , csrf, loginPassport.loginWithLdap, loginPassport.loginWithLocal, loginPassport.loginFailure);
+
+  // switch POST /login route
+  if (Config.isEnabledPassport(config)) {
+    app.post('/login'                , form.login                           , csrf, loginPassport.loginWithLdap, loginPassport.loginWithLocal, loginPassport.loginFailure);
+  }
+  else {
+    app.post('/login'                , form.login                           , csrf, login.login);
+  }
+
   app.post('/register'               , form.register                        , csrf, login.register);
   app.get('/register'                , middleware.applicationInstalled()    , login.register);
   app.post('/register/google'        , login.registerGoogle);

+ 4 - 0
lib/service/passport.js

@@ -21,6 +21,8 @@ class PassportService {
    * @memberof PassportService
    */
   setupLocalStrategy() {
+    debug('setup LocalStrategy');
+
     const User = this.crowi.model('User');
 
     passport.use(new LocalStrategy(
@@ -48,6 +50,8 @@ class PassportService {
    * @memberof PassportService
    */
   setupSerializer() {
+    debug('setup serializer and deserializer');
+
     const User = this.crowi.model('User');
 
     passport.serializeUser(function(user, done) {