Jelajahi Sumber

create call api method

WESEEK Kaito 6 tahun lalu
induk
melakukan
883940b941

+ 12 - 0
src/client/js/components/Admin/Security/LocalSecuritySetting.jsx

@@ -4,12 +4,24 @@ import PropTypes from 'prop-types';
 import { withTranslation } from 'react-i18next';
 
 import { createSubscribedElement } from '../../UnstatedUtils';
+import { toastSuccess, toastError } from '../../../util/apiNotification';
 
 import AppContainer from '../../../services/AppContainer';
 import AdminGeneralSecurityContainer from '../../../services/AdminGeneralSecurityContainer';
 
 class LocalSecuritySetting extends React.Component {
 
+  async putLocalSecuritySetting() {
+    const { t } = this.props;
+    try {
+      await this.props.adminGeneralSecurityContainer.updateGeneralSecuritySetting();
+      toastSuccess(t('security_setting.updated_general_security_setting'));
+    }
+    catch (err) {
+      toastError(err);
+    }
+  }
+
   render() {
     const { t, adminGeneralSecurityContainer } = this.props;
 

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

@@ -48,8 +48,15 @@ export default class AdminGeneralSecurityContainer extends Container {
     this.changePageCompleteDeletionAuthority = this.changePageCompleteDeletionAuthority.bind(this);
   }
 
-  init() {
+  async init() {
     // TODO GW-583 fetch config value with api
+    const response = await this.appContainer.apiv3.get('/security-setting/');
+    const { localSetting } = response.data.securityParams;
+    this.setState({
+      isLocalEnabled: localSetting.LocalEnabledParams.isLocalEnabled,
+      registrationMode: localSetting.ModeParams.registrationMode,
+      registrationWhiteList: localSetting.WhiteListParams.registrationWhiteList,
+    });
   }
 
 
@@ -119,6 +126,19 @@ export default class AdminGeneralSecurityContainer extends Container {
     this.setState({ registrationMode: value });
   }
 
+  /**
+  * update local security setting
+  */
+  async updateLocalSecuritySetting() {
+    const response = await this.appContainer.apiv3.put('/security-setting/local-setting', {
+      isLocalEnabled: this.state.isLocalEnabled,
+      registrationMode: this.state.registrationMode,
+      registrationWhiteList: this.state.registrationWhiteList,
+    });
+    const { localSecuritySettingParams } = response.data;
+    return localSecuritySettingParams;
+  }
+
   /**
    * Switch LDAP enabled
    */

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

@@ -1,3 +1,4 @@
+/* eslint-disable max-len */
 /* eslint-disable no-unused-vars */
 const loggerFactory = require('@alias/logger');
 
@@ -18,6 +19,11 @@ const validator = {
     body('hideRestrictedByOwner').isBoolean(),
     body('hideRestrictedByGroup').isBoolean(),
   ],
+  localSetting: [
+    body('isLocalEnabled').boolean(),
+    body('registrationMode').isString(),
+    body('registrationWhiteList').isString(),
+  ],
 };
 
 /**
@@ -57,6 +63,26 @@ const validator = {
  *                  hideRestrictedByGroup:
  *                    type: boolean
  *                    description: enable hide by group
+ *          LocalSetting:
+ *            type: object
+ *              LocalEnabledParams:
+ *                type: object
+ *                properties:
+ *                  isLocalEnabled:
+ *                    type: boolean
+ *                    description: enable local
+ *              ModeParams:
+ *                type: object
+ *                properties:
+ *                  registrationMode:
+ *                    type:string
+ *                    description: type of registrationMode
+ *              WhiteListParams:
+ *                type: object
+ *                properties:
+ *                  registrationWhiteList:
+ *                    type:string
+ *                    description: type of registrationwhiteList
  */
 
 module.exports = (crowi) => {
@@ -65,6 +91,40 @@ module.exports = (crowi) => {
   const csrf = require('../../middleware/csrf')(crowi);
 
   const { ApiV3FormValidator } = crowi.middlewares;
+  /**
+   * @swagger
+   *
+   *    /security-setting/:
+   *      get:
+   *        tags: [SecuritySetting]
+   *        description: Get security paramators
+   *        responses:
+   *          200:
+   *            description: params of security
+   *            content:
+   *              application/json:
+   *                schema:
+   *                  properties:
+   *                    securityParams:
+   *                      $ref: '#/components/schemas/SecurityParams'
+   */
+  router.get('/', loginRequiredStrictly, adminRequired, async(req, res) => {
+    const securityParams = {
+      localSetting: {
+        LocalEnabledParams: {
+          isLocalEnabled: await crowi.configManager.getConfig('crowi', 'security:passport-local:isEnabled') || false,
+        },
+        ModeParams: {
+          registrationMode: await crowi.configManager.getConfig('crowi', 'security:registrationMode') || '',
+        },
+        WhiteListParams: {
+          registrationWhiteList: await crowi.configManage.getConfig('crowi', 'security:registrationWhiteList') || '',
+        },
+      },
+    };
+
+    return res.apiv3({ securityParams });
+  });
 
   /**
    * @swagger
@@ -127,5 +187,61 @@ module.exports = (crowi) => {
     }
   });
 
+  /**
+   * @swagger
+   *
+   *    /security-setting/local-setting:
+   *      put:
+   *        tags: [SecuritySetting]
+   *        description: Update LocalSetting
+   *        requestBody:
+   *          required: true
+   *          content:
+   *            application/json:
+   *              schema:
+   *                type: object
+   *                properties:
+   *                  isLocalEnabled:
+   *                    description: enable local
+   *                    type: string
+   *                  registrationMode:
+   *                    type: string
+   *                    description: type of pageDeletionAuthority
+   *                  registrationWhiteList:
+   *                    type: string
+   *                    description: type of registrationWhiteList
+   *        responses:
+   *          200:
+   *            description: Succeeded to update local Setting
+   *            content:
+   *              application/json:
+   *                schema:
+   *                  properties:
+   *                    status:
+   *                      $ref: '#/components/schemas/SecurityParams/LocalSetting'
+   */
+  router.put('/local-setting', loginRequiredStrictly, adminRequired, csrf, validator.localSetting, ApiV3FormValidator, async(req, res) => {
+    const requestParams = {
+      'security:passport-local:isEnabled': req.body.isLocalEnabled,
+      'security:registrationMode': req.body.registrationMode,
+      'security:registrationWhiteList': req.body.registrationWhiteList,
+    };
+
+    try {
+      await crowi.configManager.updateConfigsInTheSameNamespace('crowi', requestParams);
+      const localSecuritySettingParams = {
+        isLocalEnabled: await crowi.configManager.getConfig('crowi', 'security:passport-local:isEnabled'),
+        registrationMode: await crowi.configManager.getConfig('crowi', 'security:registrationMode'),
+        registrationWhiteList: await crowi.configManager.getConfig('crowi', 'security:registrationWhiteList'),
+      };
+      return res.apiv3({ localSecuritySettingParams });
+    }
+    catch (err) {
+      const msg = 'Error occurred in updating local security setting';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'update-local-secuirty-setting failed'));
+    }
+  });
+
   return router;
 };