Sotaro KARASAWA 11 лет назад
Родитель
Сommit
74dec00710
7 измененных файлов с 32 добавлено и 7 удалено
  1. 5 2
      form/admin/sec.js
  2. 19 0
      lib/formUtil.js
  3. 2 0
      models/config.js
  4. 2 2
      models/user.js
  5. 2 1
      routes/admin.js
  6. 1 1
      routes/login.js
  7. 1 1
      views/admin/app.html

+ 5 - 2
form/admin/sec.js

@@ -1,12 +1,15 @@
 'use strict';
 
 var form = require('express-form')
-  , field = form.field;
+  , field = form.field
+  , stringToArray = require('../../lib/formUtil').stringToArrayFilter
+  , normalizeCRLF = require('../../lib/formUtil').normalizeCRLFFilter
+  ;
 
 module.exports = form(
   field('settingForm[security:basicName]'),
   field('settingForm[security:basicSecret]'),
   field('settingForm[security:registrationMode]').required(),
-  field('settingForm[security:registrationWhiteList]')
+  field('settingForm[security:registrationWhiteList]').custom(normalizeCRLF).custom(stringToArray)
 );
 

+ 19 - 0
lib/formUtil.js

@@ -0,0 +1,19 @@
+'use strict';
+
+module.exports = {
+  normalizeCRLFFilter: function(value) {
+    return value
+      .replace(/\r\n/g, '\n')
+      .replace(/\r/g, '\n')
+      ;
+  },
+  stringToArrayFilter: function(value) {
+    if (!value || value === '') {
+      return [];
+    }
+
+    console.log("stringToArrayFilter value split!", value.split('\n'));
+    return value.split('\n');
+  },
+};
+

+ 2 - 0
models/config.js

@@ -76,6 +76,7 @@ module.exports = function(app) {
       if (config[ns][key]) {
         defaultConfig[key] = config[ns][key];
       }
+
     });
     return defaultConfig;
   };
@@ -137,6 +138,7 @@ module.exports = function(app) {
           config[el.ns][el.key] = JSON.parse(el.value);
         });
 
+        debug('Config loaded', config);
         return callback(null, config);
       });
   };

+ 2 - 2
models/user.js

@@ -198,8 +198,8 @@ module.exports = function(app, models) {
   };
 
   userSchema.statics.isEmailValid = function(email, callback) {
-    if (Array.isArray(config.crowi['security.registrationWhiteList'])) {
-      return config.crowi['security.registrationWhiteList'].some(function(allowedEmail) {
+    if (Array.isArray(config.crowi['security:registrationWhiteList'])) {
+      return config.crowi['security:registrationWhiteList'].some(function(allowedEmail) {
         var re = new RegExp(allowedEmail + '$');
         return re.test(email);
       });

+ 2 - 1
routes/admin.js

@@ -157,9 +157,10 @@ module.exports = function(app) {
 
   actions.api = {};
   actions.api.appSetting = function(req, res) {
-    var form = req.body.settingForm;
+    var form = req.form.settingForm;
 
     if (req.form.isValid) {
+      debug('form content', form);
       Config.updateNamespaceByArray('crowi', form, function(err, config) {
         Config.updateConfigCache('crowi', config)
         return res.json({status: true});

+ 1 - 1
routes/login.js

@@ -112,7 +112,7 @@ module.exports = function(app) {
   };
 
   actions.register = function(req, res) {
-    var registerForm = req.body.registerForm || {};
+    var registerForm = req.form.registerForm || {};
     var googleAuth = require('../lib/googleAuth')(app);
 
     // ログイン済みならさようなら

+ 1 - 1
views/admin/app.html

@@ -100,7 +100,7 @@
         <div class="form-group">
           <label for="settingForm[security:registrationWhiteList]" class="col-xs-3 control-label">登録許可メールアドレスの<br>ホワイトリスト</label>
           <div class="col-xs-8">
-            <textarea class="form-control" type="textarea" name="settingForm[security:registrationWhiteList]" placeholder="例: @crowi.wiki">{{ settingForm['security:registrationWhiteList']|join('\n') }}</textarea>
+            <textarea class="form-control" type="textarea" name="settingForm[security:registrationWhiteList]" placeholder="例: @crowi.wiki">{{ settingForm['security:registrationWhiteList']|join('&#13')|raw }}</textarea>
             <p class="help-block">登録可能なメールアドレスを制限することができます。例えば、会社で使う場合、<code>@crowi.wiki</code> などと記載すると、その会社のメールアドレスを持っている人のみ登録可能になります。<br>
             1行に1メールアドレス入力してください。</p>
           </div>