Просмотр исходного кода

Merge pull request #1455 from weseek/call-api-security-general-setting

Call api security general setting
itizawa 6 лет назад
Родитель
Сommit
c5f6bb8ac8

+ 1 - 1
resource/locales/ja/translation.json

@@ -405,7 +405,7 @@
   },
   "security_setting": {
     "Guest Users Access": "ゲストユーザーのアクセス",
-    "Fixed by env var": "環境変数 <code>%s=%s</code> により固定されています。",
+    "Fixed by env var": "環境変数 <code>{{forcewikimode}}={{wikimode}}</code> により固定されています。",
     "Register limitation": "登録の制限",
     "Register limitation desc": "新しいユーザーを登録する方法を制限します.",
     "The whitelist of registration permission E-mail address": "登録許可メールアドレスの<br>ホワイトリスト",

+ 31 - 6
src/client/js/components/Admin/Security/SecuritySetting.jsx

@@ -14,13 +14,28 @@ class SecuritySetting extends React.Component {
   constructor(props) {
     super(props);
 
+    this.state = {
+      retrieveError: null,
+    };
     this.putSecuritySetting = this.putSecuritySetting.bind(this);
   }
 
+  async componentDidMount() {
+    const { adminGeneralSecurityContainer } = this.props;
+
+    try {
+      await adminGeneralSecurityContainer.retrieveSecurityData();
+    }
+    catch (err) {
+      toastError(err);
+      this.setState({ retrieveError: err });
+    }
+  }
+
   async putSecuritySetting() {
-    const { t } = this.props;
+    const { t, adminGeneralSecurityContainer } = this.props;
     try {
-      await this.props.adminGeneralSecurityContainer.updateGeneralSecuritySetting();
+      await adminGeneralSecurityContainer.updateGeneralSecuritySetting();
       toastSuccess(t('security_setting.updated_general_security_setting'));
     }
     catch (err) {
@@ -32,10 +47,19 @@ class SecuritySetting extends React.Component {
     const { t, adminGeneralSecurityContainer } = this.props;
     const helpPageListingByOwner = { __html: t('security_setting.page_listing_1') };
     const helpPageListingByGroup = { __html: t('security_setting.page_listing_2') };
+    // eslint-disable-next-line max-len
+    const helpForceWikiMode = { __html: t('security_setting.Fixed by env var', { forcewikimode: 'FORCE_WIKI_MODE', wikimode: adminGeneralSecurityContainer.state.wikiMode }) };
+
+
     return (
       <React.Fragment>
         <fieldset>
           <legend className="alert-anchor">{ t('security_settings') }</legend>
+          {this.state.retrieveError != null && (
+            <div className="alert alert-danger">
+              <p>{t('Error occurred')} : {this.state.err}</p>
+            </div>
+          )}
           {/* TODO adjust layout */}
           <div className="row mb-5">
             <strong className="col-xs-3 text-right"> { t('security_setting.Guest Users Access') } </strong>
@@ -80,11 +104,12 @@ class SecuritySetting extends React.Component {
           </div>
           {adminGeneralSecurityContainer.state.isWikiModeForced && (
             <div className="row mb-5">
-              <div className="col-xs-6">
-                <p className="alert alert-warning mt-2">
+              <div className="col-xs-3 text-right" />
+              <div className="col-xs-9 text-left">
+                <p className="alert alert-warning mt-2 text-left">
                   <i className="icon-exclamation icon-fw">
-                  </i><b>FIXED</b>
-                  { t('security_setting.Fixed by env var', 'FORCE_WIKI_MODE') }<br></br>
+                  </i><b>FIXED</b><br />
+                  { <b dangerouslySetInnerHTML={helpForceWikiMode} /> }
                 </p>
               </div>
             </div>

+ 22 - 12
src/client/js/services/AdminGeneralSecurityContainer.js

@@ -17,8 +17,8 @@ export default class AdminGeneralSecurityContainer extends Container {
     this.appContainer = appContainer;
 
     this.state = {
-      // TODO GW-583 set value
       isWikiModeForced: false,
+      wikiMode: '',
       currentRestrictGuestMode: 'deny',
       currentPageCompleteDeletionAuthority: 'anyone',
       isHideRestrictedByOwner: true,
@@ -37,19 +37,20 @@ export default class AdminGeneralSecurityContainer extends Container {
       isTwitterOAuthEnabled: true,
     };
 
-    this.init();
-
-    this.switchIsLocalEnabled = this.switchIsLocalEnabled.bind(this);
-    this.changeRegistrationMode = this.changeRegistrationMode.bind(this);
-    this.changeRestrictGuestMode = this.changeRestrictGuestMode.bind(this);
-    this.changePageCompleteDeletionAuthority = this.changePageCompleteDeletionAuthority.bind(this);
-    this.switchIsHideRestrictedByGroup = this.switchIsHideRestrictedByGroup.bind(this);
-    this.switchIsHideRestrictedByOwner = this.switchIsHideRestrictedByOwner.bind(this);
-    this.changePageCompleteDeletionAuthority = this.changePageCompleteDeletionAuthority.bind(this);
+    this.onIsWikiModeForced = this.onIsWikiModeForced.bind(this);
   }
 
-  init() {
-    // TODO GW-583 fetch config value with api
+  async retrieveSecurityData() {
+    const response = await this.appContainer.apiv3.get('/security-setting/');
+    const { generalSetting } = response.data.securityParams;
+    this.onIsWikiModeForced(generalSetting.wikiMode);
+    this.setState({
+      currentRestrictGuestMode: generalSetting.restrictGuestMode || 'deny',
+      currentPageCompleteDeletionAuthority: generalSetting.pageCompleteDeletionAuthority || 'anyone',
+      isHideRestrictedByOwner: generalSetting.hideRestrictedByOwner || false,
+      isHideRestrictedByGroup: generalSetting.hideRestrictedByGroup || false,
+      wikiMode: generalSetting.wikiMode || '',
+    });
   }
 
 
@@ -88,6 +89,15 @@ export default class AdminGeneralSecurityContainer extends Container {
     this.setState({ isHideRestrictedByGroup:  !this.state.isHideRestrictedByGroup });
   }
 
+  onIsWikiModeForced(wikiModeSetting) {
+    if (wikiModeSetting === 'private') {
+      this.setState({ isWikiModeForced: true });
+    }
+    else {
+      this.setState({ isWikiModeForced: false });
+    }
+  }
+
 
   /**
    * Update restrictGuestMode

+ 21 - 11
src/server/routes/apiv3/security-setting.js

@@ -261,7 +261,7 @@ module.exports = (crowi) => {
   /**
    * @swagger
    *
-   *    /security-setting/:
+   *    /_api/v3/security-setting/:
    *      get:
    *        tags: [SecuritySetting]
    *        description: Get security paramators
@@ -279,6 +279,13 @@ module.exports = (crowi) => {
   router.get('/', loginRequiredStrictly, adminRequired, async(req, res) => {
 
     const securityParams = {
+      generalSetting: {
+        restrictGuestMode: await crowi.configManager.getConfig('crowi', 'security:restrictGuestMode'),
+        pageCompleteDeletionAuthority: await crowi.configManager.getConfig('crowi', 'security:pageCompleteDeletionAuthority'),
+        hideRestrictedByOwner: await crowi.configManager.getConfig('crowi', 'security:list-policy:hideRestrictedByOwner'),
+        hideRestrictedByGroup: await crowi.configManager.getConfig('crowi', 'security:list-policy:hideRestrictedByGroup'),
+        wikiMode: await crowi.configManager.getConfig('crowi', 'security:wikiMode'),
+      },
       generalAuth: {
         isLdapEnabled: await crowi.configManager.getConfig('crowi', 'security:passport-ldap:isEnabled'),
         isSamlEnabled: await crowi.configManager.getConfig('crowi', 'security:passport-saml:isEnabled'),
@@ -357,14 +364,13 @@ module.exports = (crowi) => {
         isSameUsernameTreatedAsIdenticalUser: await crowi.configManager.getConfig('crowi', 'security:passport-twitter:isSameUsernameTreatedAsIdenticalUser'),
       },
     };
-
     return res.apiv3({ securityParams });
   });
 
   /**
    * @swagger
    *
-   *    /security-setting/general-setting:
+   *    /_api/v3/security-setting/general-setting:
    *      put:
    *        tags: [SecuritySetting]
    *        description: Update GeneralSetting
@@ -389,7 +395,11 @@ module.exports = (crowi) => {
       'security:list-policy:hideRestrictedByOwner': req.body.hideRestrictedByOwner,
       'security:list-policy:hideRestrictedByGroup': req.body.hideRestrictedByGroup,
     };
-
+    const wikiMode = await crowi.configManager.getConfig('crowi', 'security:wikiMode');
+    if (wikiMode === 'private') {
+      logger.debug('security:restrictGuestMode will not be changed because wiki mode is forced to set');
+      delete requestParams['security:restrictGuestMode'];
+    }
     try {
       await crowi.configManager.updateConfigsInTheSameNamespace('crowi', requestParams);
       const securitySettingParams = {
@@ -410,7 +420,7 @@ module.exports = (crowi) => {
   /**
    * @swagger
    *
-   *    /security-setting/ldap:
+   *    /_api/v3/security-setting/ldap:
    *      put:
    *        tags: [SecuritySetting]
    *        description: Update LDAP setting
@@ -472,7 +482,7 @@ module.exports = (crowi) => {
   /**
    * @swagger
    *
-   *    /security-setting/saml:
+   *    /_api/v3/security-setting/saml:
    *      put:
    *        tags: [SecuritySetting]
    *        description: Update SAML setting
@@ -531,7 +541,7 @@ module.exports = (crowi) => {
   /**
    * @swagger
    *
-   *    /security-setting/oidc:
+   *    /_api/v3/security-setting/oidc:
    *      put:
    *        tags: [SecuritySetting]
    *        description: Update OpenID Connect setting
@@ -589,7 +599,7 @@ module.exports = (crowi) => {
   /**
    * @swagger
    *
-   *    /security-setting/basic:
+   *    /_api/v3/security-setting/basic:
    *      put:
    *        tags: [SecuritySetting]
    *        description: Update basic
@@ -629,7 +639,7 @@ module.exports = (crowi) => {
   /**
    * @swagger
    *
-   *    /security-setting/google-oauth:
+   *    /_api/v3/security-setting/google-oauth:
    *      put:
    *        tags: [SecuritySetting]
    *        description: Update google OAuth
@@ -682,7 +692,7 @@ module.exports = (crowi) => {
   /**
    * @swagger
    *
-   *    /security-setting/github-oauth:
+   *    /_api/v3/security-setting/github-oauth:
    *      put:
    *        tags: [SecuritySetting]
    *        description: Update github OAuth
@@ -735,7 +745,7 @@ module.exports = (crowi) => {
   /**
    * @swagger
    *
-   *    /security-setting/twitter-oauth:
+   *    /_api/v3/security-setting/twitter-oauth:
    *      put:
    *        tags: [SecuritySetting]
    *        description: Update twitter OAuth