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

+ 7 - 19
src/client/js/services/AdminGeneralSecurityContainer.js

@@ -65,23 +65,7 @@ export default class AdminGeneralSecurityContainer extends Container {
   static getClassName() {
     return 'AdminGeneralSecurityContainer';
   }
-
-  /**
-   * Check one option is enabled at least
-   */
-  isEnabledOneOptionAtLeast() {
-    return (
-      this.state.isLocalEnabled
-                 || this.state.isLdapEnabled
-                 || this.state.isSamlEnabled
-                 || this.state.isOidcEnabled
-                 || this.state.isBasicEnabled
-                 || this.state.isGoogleOAuthEnabled
-                 || this.state.isGithubOAuthEnabled
-                 || this.state.isTwitterOAuthEnabled
-    );
-  }
-
+  
   /**
    * Change restrictGuestMode
    */
@@ -139,8 +123,12 @@ export default class AdminGeneralSecurityContainer extends Container {
   /**
    * Switch local enabled
    */
-  switchIsLocalEnabled() {
-    this.setState({ isLocalEnabled: !this.state.isLocalEnabled });
+  async switchIsLocalEnabled() {
+    await this.setState({ isLocalEnabled: !this.state.isLocalEnabled });
+    return this.appContainer.apiv3.put('/security-setting/toggleIsEnabled', {
+      isEnabled: this.state.isLocalEnabled,
+      target: 'local',
+    });
   }
 
   /**

+ 54 - 0
src/server/routes/apiv3/security-setting.js

@@ -393,6 +393,60 @@ module.exports = (crowi) => {
     return res.apiv3({ securityParams });
   });
 
+  // TODO swagger
+  router.put('/toggleIsEnabled', 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'),
+    };
+
+    // 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'));
+      }
+
+    }
+
+    return res.apiv3Err(new ErrorV3('Can not turn everything off'));
+
+  });
+
   /**
    * @swagger
    *