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

+ 9 - 16
src/client/js/services/AdminSamlSecurityContainer.js

@@ -156,23 +156,16 @@ export default class AdminSamlSecurityContainer extends Container {
    */
   async updateSamlSetting() {
 
+    // If the value in the database is empty, the value of the environment variable is used
     const response = await this.appContainer.apiv3.put('/security-setting/saml', {
-      samlDbEntryPoint: this.state.samlDbEntryPoint,
-      samlEnvVarEntryPoint: this.state.samlEnvVarEntryPoint,
-      samlDbIssuer: this.state.samlDbIssuer,
-      samlEnvVarIssuer: this.state.samlEnvVarIssuer,
-      samlDbCert: this.state.samlDbCert,
-      samlEnvVarCert: this.state.samlEnvVarCert,
-      samlDbAttrMapId: this.state.samlDbAttrMapId,
-      samlEnvVarAttrMapId: this.state.samlEnvVarAttrMapId,
-      samlDbAttrMapUserName: this.state.samlDbAttrMapUserName,
-      samlEnvVarAttrMapUserName: this.state.samlEnvVarAttrMapUserName,
-      samlDbAttrMapMail: this.state.samlDbAttrMapMail,
-      samlEnvVarAttrMapMail: this.state.samlEnvVarAttrMapMail,
-      samlDbAttrMapFirstName: this.state.samlDbAttrMapFirstName,
-      samlEnvVarAttrMapFirstName: this.state.samlEnvVarAttrMapFirstName,
-      samlDbAttrMapLastName: this.state.samlDbAttrMapLastName,
-      samlEnvVarAttrMapLastName: this.state.samlEnvVarAttrMapLastName,
+      samlEntryPoint: (this.state.samlDbEntryPoint === '') ? this.state.samlEnvVarEntryPoint : this.state.samlDbEntryPoint,
+      samlIssuer: (this.state.samlDbIssuer === '') ? this.state.samlEnvVarIssuer : this.state.samlDbIssuer,
+      samlCert: (this.state.samlDbCert === '') ? this.state.samlEnvVarCert : this.state.samlDbCert,
+      samlAttrMapId: (this.state.samlDbAttrMapId === '') ? this.state.samlEnvVarAttrMapId : this.state.samlDbAttrMapId,
+      samlAttrMapUserName: (this.state.samlDbAttrMapUserName === '') ? this.state.samlEnvVarAttrMapUserName : this.state.samlDbAttrMapUserName,
+      samlAttrMapMail: (this.state.samlDbAttrMapMail === '') ? this.state.samlEnvVarAttrMapMail : this.state.samlDbAttrMapMail,
+      samlAttrMapFirstName: (this.state.samlDbAttrMapFirstName === '') ? this.state.samlEnvVarAttrMapFirstName : this.state.samlDbAttrMapFirstName,
+      samlAttrMapLastName: (this.state.samlDbAttrMapLastName === '') ? this.state.samlEnvVarAttrMapLastName : this.state.samlDbAttrMapLastName,
       isSameUsernameTreatedAsIdenticalUser: this.state.isSameUsernameTreatedAsIdenticalUser || false,
       isSameEmailTreatedAsIdenticalUser: this.state.isSameEmailTreatedAsIdenticalUser || false,
     });

+ 69 - 2
src/server/routes/apiv3/security-setting.js

@@ -236,8 +236,8 @@ module.exports = (crowi) => {
         samlEnvVarAttrMapId: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:attrMapId'),
         samlDbAttrMapUserName: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:attrMapUsername'),
         samlEnvVarAttrMapUserName: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:attrMapUsername'),
-        samlDbAttrMapMail: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:entryPoint'),
-        samlEnvVarAttrMapMail: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:entryPoint'),
+        samlDbAttrMapMail: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:attrMapMail'),
+        samlEnvVarAttrMapMail: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:attrMapMail'),
         samlDbAttrMapFirstName: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:attrMapFirstName'),
         samlEnvVarAttrMapFirstName: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:attrMapFirstName'),
         samlDbAttrMapLastName: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:attrMapLastName'),
@@ -341,6 +341,73 @@ module.exports = (crowi) => {
     }
   });
 
+  /**
+   * @swagger
+   *
+   *    /security-setting/saml:
+   *      put:
+   *        tags: [SecuritySetting]
+   *        description: Update SAML setting
+   *        requestBody:
+   *          required: true
+   *          content:
+   *            application/json:
+   *              schema:
+   *                $ref: '#/components/schemas/SecurityParams/SamlAuthSetting'
+   *        responses:
+   *          200:
+   *            description: Succeeded to update SAML setting
+   *            content:
+   *              application/json:
+   *                schema:
+   *                  $ref: '#/components/schemas/SecurityParams/SamlAuthSetting'
+   */
+  // TODO validator
+  router.put('/saml', loginRequiredStrictly, adminRequired, csrf, ApiV3FormValidator, async(req, res) => {
+    const requestParams = {
+      'security:passport-saml:entryPoint': req.body.samlEntryPoint,
+      'security:passport-saml:issuer': req.body.samlIssuer,
+      'security:passport-saml:cert': req.body.samlCert,
+      'security:passport-saml:attrMapId': req.body.samlAttrMapId,
+      'security:passport-saml:attrMapUsername': req.body.samlAttrMapUserName,
+      'security:passport-saml:attrMapMail': req.body.samlAttrMapMail,
+      'security:passport-saml:attrMapFirstName': req.body.samlAttrMapFirstName,
+      'security:passport-saml:attrMapLastName': req.body.samlAttrMapLastName,
+      'security:passport-saml:isSameUsernameTreatedAsIdenticalUser': req.body.isSameUsernameTreatedAsIdenticalUser,
+      'security:passport-saml:isSameEmailTreatedAsIdenticalUser': req.body.isSameEmailTreatedAsIdenticalUser,
+    };
+
+    try {
+      await crowi.configManager.updateConfigsInTheSameNamespace('crowi', requestParams);
+      const securitySettingParams = {
+        samlDbEntryPoint: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:entryPoint'),
+        samlEnvVarEntryPoint: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:entryPoint'),
+        samlDbIssuer: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:issuer'),
+        samlEnvVarIssuer: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:issuer'),
+        samlDbCert: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:cert'),
+        samlEnvVarCert: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:cert'),
+        samlDbAttrMapId: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:attrMapId'),
+        samlEnvVarAttrMapId: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:attrMapId'),
+        samlDbAttrMapUserName: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:attrMapUsername'),
+        samlEnvVarAttrMapUserName: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:attrMapUsername'),
+        samlDbAttrMapMail: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:entryPoint'),
+        samlEnvVarAttrMapMail: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:entryPoint'),
+        samlDbAttrMapFirstName: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:attrMapFirstName'),
+        samlEnvVarAttrMapFirstName: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:attrMapFirstName'),
+        samlDbAttrMapLastName: await crowi.configManager.getConfigFromDB('crowi', 'security:passport-saml:attrMapLastName'),
+        samlEnvVarAttrMapLastName: await crowi.configManager.getConfigFromEnvVars('crowi', 'security:passport-saml:attrMapLastName'),
+        isSameUsernameTreatedAsIdenticalUser: await crowi.configManager.getConfig('crowi', 'security:passport-saml:isSameUsernameTreatedAsIdenticalUser'),
+        isSameEmailTreatedAsIdenticalUser: await crowi.configManager.getConfig('crowi', 'security:passport-saml:isSameEmailTreatedAsIdenticalUser'),
+      };
+      return res.apiv3({ securitySettingParams });
+    }
+    catch (err) {
+      const msg = 'Error occurred in updating SAML setting';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'update-SAML-failed'));
+    }
+  });
+
   /**
    * @swagger
    *