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

+ 1 - 1
resource/locales/en-US/translation.json

@@ -125,7 +125,7 @@
   "Sign out": "Logout",
   "Sign out": "Logout",
   "form_validation": {
   "form_validation": {
     "required": "<code>%s</code> is required",
     "required": "<code>%s</code> is required",
-    "invalid_syntax": "The syntax of <code>%s</code> is invalid."
+    "invalid_syntax": "The syntax of <code>{{target}}</code> is invalid."
   },
   },
   "installer": {
   "installer": {
     "setup": "Setup",
     "setup": "Setup",

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

@@ -124,7 +124,7 @@
   "Sign out": "ログアウト",
   "Sign out": "ログアウト",
   "form_validation": {
   "form_validation": {
     "required": "<code>%s</code> に値を入力してください",
     "required": "<code>%s</code> に値を入力してください",
-    "invalid_syntax": "<code>%s</code> の構文が不正です"
+    "invalid_syntax": "<code>{{target}}</code> の構文が不正です"
   },
   },
   "installer": {
   "installer": {
     "setup": "セットアップ",
     "setup": "セットアップ",

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

@@ -642,6 +642,14 @@ module.exports = (crowi) => {
    *                  $ref: '#/components/schemas/SamlAuthSetting'
    *                  $ref: '#/components/schemas/SamlAuthSetting'
    */
    */
   router.put('/saml', loginRequiredStrictly, adminRequired, csrf, validator.samlAuth, ApiV3FormValidator, async(req, res) => {
   router.put('/saml', loginRequiredStrictly, adminRequired, csrf, validator.samlAuth, ApiV3FormValidator, async(req, res) => {
+
+    const rule = req.body.samlABLCRule;
+    // Empty string disables attribute-based login control.
+    // So, when rule is empty string, validation is passed.
+    if (rule !== '' && (rule == null || crowi.passportService.parseABLCRule(rule) == null)) {
+      return res.apiv3Err(req.t('form_validation.invalid_syntax', { target: req.t('security_setting.form_item_name.ABLCRule') }), 400);
+    }
+
     const requestParams = {
     const requestParams = {
       'security:passport-saml:entryPoint': req.body.samlEntryPoint,
       'security:passport-saml:entryPoint': req.body.samlEntryPoint,
       'security:passport-saml:issuer': req.body.samlIssuer,
       'security:passport-saml:issuer': req.body.samlIssuer,