itizawa 6 лет назад
Родитель
Сommit
bc54da45b0

+ 1 - 1
src/client/js/services/AdminGeneralSecurityContainer.js

@@ -126,7 +126,7 @@ export default class AdminGeneralSecurityContainer extends Container {
   async switchIsLocalEnabled() {
     await this.setState({ isLocalEnabled: !this.state.isLocalEnabled });
     try {
-      await this.appContainer.apiv3.put('/security-setting/toggleIsEnabled', {
+      await this.appContainer.apiv3.put('/security-setting/authentication', {
         isEnabled: this.state.isLocalEnabled,
         target: 'local',
       });

+ 18 - 43
src/server/routes/apiv3/security-setting.js

@@ -394,56 +394,31 @@ module.exports = (crowi) => {
   });
 
   // TODO swagger
-  router.put('/toggleIsEnabled', loginRequiredStrictly, adminRequired, csrf, async(req, res) => {
+  router.put('/authentication', loginRequiredStrictly, adminRequired, csrf, async(req, res) => {
     const { isEnabled, target } = req.body;
 
-    const enableParams = {
-      'security:passport-local:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-local:isEnabled'),
-      'security:passport-ldap:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-ldap:isEnabled'),
-      'security:passport-saml:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-saml:isEnabled'),
-      'security:passport-oidc:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-oidc:isEnabled'),
-      'security:passport-basic:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-basic:isEnabled'),
-      'security:passport-google:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-google:isEnabled'),
-      'security:passport-github:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-github:isEnabled'),
-      'security:passport-twitter:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-twitter:isEnabled'),
-    };
+    let setupStrategies = await crowi.passportService.getSetupStrategies();
 
     // Reflect request param
-    enableParams[`security:passport-${target}:isEnabled`] = isEnabled;
-
-    if (
-      enableParams['security:passport-local:isEnabled']
-      || enableParams['security:passport-ldap:isEnabled']
-      || enableParams['security:passport-saml:isEnabled']
-      || enableParams['security:passport-oidc:isEnabled']
-      || enableParams['security:passport-basic:isEnabled']
-      || enableParams['security:passport-google:isEnabled']
-      || enableParams['security:passport-github:isEnabled']
-      || enableParams['security:passport-twitter:isEnabled']
-    ) {
-      try {
-        await crowi.configManager.updateConfigsInTheSameNamespace('crowi', enableParams);
-        const responseParams = {
-          'security:passport-local:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-local:isEnabled'),
-          'security:passport-ldap:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-ldap:isEnabled'),
-          'security:passport-saml:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-saml:isEnabled'),
-          'security:passport-oidc:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-oidc:isEnabled'),
-          'security:passport-basic:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-basic:isEnabled'),
-          'security:passport-google:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-google:isEnabled'),
-          'security:passport-github:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-github:isEnabled'),
-          'security:passport-twitter:isEnabled': await crowi.configManager.getConfig('crowi', 'security:passport-twitter:isEnabled'),
-        };
-        return res.apiv3({ responseParams });
-      }
-      catch (err) {
-        const msg = 'Error occurred in updating enable setting';
-        logger.error('Error', err);
-        return res.apiv3Err(new ErrorV3(msg, 'update-enable-setting failed'));
-      }
+    setupStrategies = setupStrategies.filter(strategy => strategy !== `passport-${target}`);
+
+    if (setupStrategies.length === 0) {
+      return res.apiv3Err(new ErrorV3('Can not turn everything off'));
+    }
 
+    const enableParams = { [`security:passport-${target}:isEnabled`]: isEnabled };
+
+    try {
+      await crowi.configManager.updateConfigsInTheSameNamespace('crowi', enableParams);
+      const responseParams = { [`security:passport-${target}:isEnabled`]: await crowi.configManager.getConfig('crowi', `security:passport-${target}:isEnabled`) };
+      return res.apiv3({ responseParams });
+    }
+    catch (err) {
+      const msg = 'Error occurred in updating enable setting';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'update-enable-setting failed'));
     }
 
-    return res.apiv3Err(new ErrorV3('Can not turn everything off'));
 
   });
 

+ 21 - 0
src/server/service/passport.js

@@ -83,6 +83,27 @@ class PassportService {
     ];
   }
 
+  /**
+   * get SetupStrategies
+   *
+   * @return {Array}
+   * @memberof PassportService
+   */
+  getSetupStrategies() {
+    const setupStrategies = [];
+
+    if (this.isLocalStrategySetup) { setupStrategies.push('passport-local') }
+    if (this.isLdapStrategySetup) { setupStrategies.push('passport-ldap') }
+    if (this.isSamlStrategySetup) { setupStrategies.push('passport-saml') }
+    if (this.isOidcStrategySetup) { setupStrategies.push('passport-oidc') }
+    if (this.isBasicStrategySetup) { setupStrategies.push('passport-basic') }
+    if (this.isGoogleStrategySetup) { setupStrategies.push('passport-google') }
+    if (this.isGitHubStrategySetup) { setupStrategies.push('passport-github') }
+    if (this.isTwitterStrategySetup) { setupStrategies.push('passport-twitter') }
+
+    return setupStrategies;
+  }
+
   /**
    * reset LocalStrategy
    *