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

move process of server on mailer setting

yusuketk 6 лет назад
Родитель
Сommit
4b2bfff42f
3 измененных файлов с 64 добавлено и 91 удалено
  1. 3 64
      src/server/routes/admin.js
  2. 61 24
      src/server/routes/apiv3/app-settings.js
  3. 0 3
      src/server/routes/index.js

+ 3 - 64
src/server/routes/admin.js

@@ -573,46 +573,12 @@ module.exports = function(crowi, app) {
     if (req.form.isValid) {
       debug('form content', form);
 
-      // mail setting ならここで validation
-      if (form['mail:from']) {
-        validateMailSetting(req, form, async(err, data) => {
-          debug('Error validate mail setting: ', err, data);
-          if (err) {
-            req.form.errors.push('SMTPを利用したテストメール送信に失敗しました。設定をみなおしてください。');
-            return res.json({ status: false, message: req.form.errors.join('\n') });
-          }
-
-          await configManager.updateConfigsInTheSameNamespace('crowi', form);
-          return res.json({ status: true });
-        });
-      }
-      else {
-        await configManager.updateConfigsInTheSameNamespace('crowi', form);
-        return res.json({ status: true });
-      }
-    }
-    else {
-      return res.json({ status: false, message: req.form.errors.join('\n') });
-    }
-  };
-
-  actions.api.asyncAppSetting = async(req, res) => {
-    const form = req.form.settingForm;
-
-    if (!req.form.isValid) {
-      return res.json({ status: false, message: req.form.errors.join('\n') });
-    }
-
-    debug('form content', form);
-
-    try {
       await configManager.updateConfigsInTheSameNamespace('crowi', form);
       return res.json({ status: true });
     }
-    catch (err) {
-      logger.error(err);
-      return res.json({ status: false });
-    }
+
+    return res.json({ status: false, message: req.form.errors.join('\n') });
+
   };
 
   actions.api.securitySetting = async function(req, res) {
@@ -1077,33 +1043,6 @@ module.exports = function(crowi, app) {
     return res.json(ApiResponse.success());
   };
 
-  function validateMailSetting(req, form, callback) {
-    const mailer = crowi.mailer;
-    const option = {
-      host: form['mail:smtpHost'],
-      port: form['mail:smtpPort'],
-    };
-    if (form['mail:smtpUser'] && form['mail:smtpPassword']) {
-      option.auth = {
-        user: form['mail:smtpUser'],
-        pass: form['mail:smtpPassword'],
-      };
-    }
-    if (option.port === 465) {
-      option.secure = true;
-    }
-
-    const smtpClient = mailer.createSMTPClient(option);
-    debug('mailer setup for validate SMTP setting', smtpClient);
-
-    smtpClient.sendMail({
-      from: form['mail:from'],
-      to: req.user.email,
-      subject: 'Wiki管理設定のアップデートによるメール通知',
-      text: 'このメールは、WikiのSMTP設定のアップデートにより送信されています。',
-    }, callback);
-  }
-
   /**
    * validate setting form values for SAML
    *

+ 61 - 24
src/server/routes/apiv3/app-settings.js

@@ -2,6 +2,8 @@ const loggerFactory = require('@alias/logger');
 
 const logger = loggerFactory('growi:routes:apiv3:app-settings');
 
+const debug = require('debug')('growi:routes:admin');
+
 const express = require('express');
 
 const router = express.Router();
@@ -223,6 +225,36 @@ module.exports = (crowi) => {
 
   });
 
+  function validateMailSetting(req, callback) {
+    const mailer = crowi.mailer;
+    const option = {
+      host: req.body.smtpHost,
+      port: req.body.smtpPort,
+    };
+    if (req.body.smtpUser && req.body.smtpPassword) {
+      option.auth = {
+        user: req.body.smtpUser,
+        pass: req.body.smtpPassword,
+      };
+    }
+    if (option.port === 465) {
+      option.secure = true;
+    }
+
+    const smtpClient = mailer.createSMTPClient(option);
+    debug('mailer setup for validate SMTP setting', smtpClient);
+
+    smtpClient.sendMail(
+      {
+        from: req.body.fromAddress,
+        to: req.user.email,
+        subject: 'Wiki管理設定のアップデートによるメール通知',
+        text: 'このメールは、WikiのSMTP設定のアップデートにより送信されています。',
+      },
+      callback,
+    );
+  }
+
   /**
    * @swagger
    *
@@ -249,34 +281,39 @@ module.exports = (crowi) => {
    *                      $ref: '#/components/schemas/appSettingParams/MailSettingParams'
    */
   router.put('/mail-setting', loginRequiredStrictly, adminRequired, csrf, validator.mailSetting, ApiV3FormValidator, async(req, res) => {
+    validateMailSetting(req, async(err, data) => {
+      debug('Error validate mail setting: ', err, data);
+      if (err) {
+        req.form.errors.push('SMTPを利用したテストメール送信に失敗しました。設定をみなおしてください。');
+        return res.json({ status: false, message: req.form.errors.join('\n') });
+      }
 
-    const requestMailSettingParams = {
-      'mail:from': req.body.fromAddress,
-      'mail:smtpHost': req.body.smtpHost,
-      'mail:smtpPort': req.body.smtpPort,
-      'mail:smtpUser': req.body.smtpUser,
-      'mail:smtpPassword': req.body.smtpPassword,
-    };
-
-    try {
-      await crowi.configManager.updateConfigsInTheSameNamespace('crowi', requestMailSettingParams);
-      const mailSettingParams = {
-        fromAddress: crowi.configManager.getConfig('crowi', 'mail:from'),
-        smtpHost: crowi.configManager.getConfig('crowi', 'mail:smtpHost'),
-        smtpPort: crowi.configManager.getConfig('crowi', 'mail:smtpPort'),
-        smtpUser: crowi.configManager.getConfig('crowi', 'mail:smtpUser'),
-        smtpPassword: crowi.configManager.getConfig('crowi', 'mail:smtpPassword'),
+      const requestMailSettingParams = {
+        'mail:from': req.body.fromAddress,
+        'mail:smtpHost': req.body.smtpHost,
+        'mail:smtpPort': req.body.smtpPort,
+        'mail:smtpUser': req.body.smtpUser,
+        'mail:smtpPassword': req.body.smtpPassword,
       };
-      return res.apiv3({ mailSettingParams });
-    }
-    catch (err) {
-      const msg = 'Error occurred in updating mail setting';
-      logger.error('Error', err);
-      return res.apiv3Err(new ErrorV3(msg, 'update-mailSetting-failed'));
-    }
 
+      try {
+        await crowi.configManager.updateConfigsInTheSameNamespace('crowi', requestMailSettingParams);
+        const mailSettingParams = {
+          fromAddress: crowi.configManager.getConfig('crowi', 'mail:from'),
+          smtpHost: crowi.configManager.getConfig('crowi', 'mail:smtpHost'),
+          smtpPort: crowi.configManager.getConfig('crowi', 'mail:smtpPort'),
+          smtpUser: crowi.configManager.getConfig('crowi', 'mail:smtpUser'),
+          smtpPassword: crowi.configManager.getConfig('crowi', 'mail:smtpPassword'),
+        };
+        return res.apiv3({ mailSettingParams });
+      }
+      catch (err) {
+        const msg = 'Error occurred in updating mail setting';
+        logger.error('Error', err);
+        return res.apiv3Err(new ErrorV3(msg, 'update-mailSetting-failed'));
+      }
+    });
   });
 
-
   return router;
 };

+ 0 - 3
src/server/routes/index.js

@@ -59,9 +59,6 @@ module.exports = function(crowi, app) {
 
   app.get('/admin'                          , loginRequiredStrictly , adminRequired , admin.index);
   app.get('/admin/app'                      , loginRequiredStrictly , adminRequired , admin.app.index);
-  app.post('/_api/admin/settings/app'       , loginRequiredStrictly , adminRequired , csrf, form.admin.app, admin.api.appSetting);
-  app.post('/_api/admin/settings/siteUrl'   , loginRequiredStrictly , adminRequired , csrf, form.admin.siteUrl, admin.api.asyncAppSetting);
-  app.post('/_api/admin/settings/mail'      , loginRequiredStrictly , adminRequired , csrf, form.admin.mail, admin.api.appSetting);
   app.post('/_api/admin/settings/aws'       , loginRequiredStrictly , adminRequired , csrf, form.admin.aws, admin.api.appSetting);
   app.post('/_api/admin/settings/plugin'    , loginRequiredStrictly , adminRequired , csrf, form.admin.plugin, admin.api.appSetting);