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

add method to initialize mail settings

yusuketk 5 лет назад
Родитель
Сommit
9929c2a9a7

+ 26 - 2
src/client/js/components/Admin/App/MailSetting.jsx

@@ -8,7 +8,6 @@ import { toastSuccess, toastError } from '../../../util/apiNotification';
 
 
 import AppContainer from '../../../services/AppContainer';
 import AppContainer from '../../../services/AppContainer';
 import AdminAppContainer from '../../../services/AdminAppContainer';
 import AdminAppContainer from '../../../services/AdminAppContainer';
-import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow';
 
 
 const logger = loggerFactory('growi:appSettings');
 const logger = loggerFactory('growi:appSettings');
 
 
@@ -18,6 +17,7 @@ class MailSetting extends React.Component {
     super(props);
     super(props);
 
 
     this.submitHandler = this.submitHandler.bind(this);
     this.submitHandler = this.submitHandler.bind(this);
+    this.initialize = this.initialize.bind(this);
   }
   }
 
 
   async submitHandler() {
   async submitHandler() {
@@ -33,6 +33,19 @@ class MailSetting extends React.Component {
     }
     }
   }
   }
 
 
+  async initialize() {
+    const { t, adminAppContainer } = this.props;
+
+    try {
+      await adminAppContainer.initializeMailSettingHandler();
+      toastSuccess(t('toaster.update_successed', { target: t('admin:app_setting.mail_settings') }));
+    }
+    catch (err) {
+      toastError(err);
+      logger.error(err);
+    }
+  }
+
   render() {
   render() {
     const { t, adminAppContainer } = this.props;
     const { t, adminAppContainer } = this.props;
 
 
@@ -94,7 +107,18 @@ class MailSetting extends React.Component {
           </div>
           </div>
         </div>
         </div>
 
 
-        <AdminUpdateButtonRow onClick={this.submitHandler} disabled={adminAppContainer.state.retrieveError != null} />
+        <div className="row my-3">
+          <div className="offset-5">
+            <button type="button" className="btn btn-primary" onClick={this.submitHandler} disabled={adminAppContainer.state.retrieveError != null}>
+              { t('Update') }
+            </button>
+          </div>
+          <div className="offset-1">
+            <button type="button" className="btn btn-secondary" onClick={this.initialize} disabled={adminAppContainer.state.retrieveError != null}>
+              {t('admin:app_setting.initialize_mail_settings')}
+            </button>
+          </div>
+        </div>
       </React.Fragment>
       </React.Fragment>
     );
     );
   }
   }

+ 13 - 0
src/client/js/services/AdminAppContainer.js

@@ -265,6 +265,19 @@ export default class AdminAppContainer extends Container {
     return mailSettingParams;
     return mailSettingParams;
   }
   }
 
 
+  /**
+   * Initialize mail setting
+   * @memberOf AdminAppContainer
+   * @return {Array} Appearance
+   */
+  async initializeMailSettingHandler() {
+    const response = await this.appContainer.apiv3.delete('/app-settings/mail-setting', {});
+    const {
+      mailSettingParams,
+    } = response.data;
+    return mailSettingParams;
+  }
+
   /**
   /**
    * Update AWS setting
    * Update AWS setting
    * @memberOf AdminAppContainer
    * @memberOf AdminAppContainer

+ 65 - 1
src/server/routes/apiv3/app-settings.js

@@ -327,7 +327,7 @@ module.exports = (crowi) => {
    *      put:
    *      put:
    *        tags: [AppSettings]
    *        tags: [AppSettings]
    *        operationId: updateAppSettingMailSetting
    *        operationId: updateAppSettingMailSetting
-   *        summary: /app-settings/site-url-setting
+   *        summary: /app-settings/mail-setting
    *        description: Update mail setting
    *        description: Update mail setting
    *        requestBody:
    *        requestBody:
    *          required: true
    *          required: true
@@ -388,6 +388,70 @@ module.exports = (crowi) => {
     }
     }
   });
   });
 
 
+  /**
+   * @swagger
+   *
+   *    /app-settings/mail-setting:
+   *      delete:
+   *        tags: [AppSettings]
+   *        operationId: deleteAppSettingMailSetting
+   *        summary: /app-settings/mail-setting
+   *        description: delete mail setting
+   *        requestBody:
+   *          required: true
+   *          content:
+   *            application/json:
+   *              schema:
+   *                $ref: '#/components/schemas/MailSettingParams'
+   *        responses:
+   *          200:
+   *            description: Succeeded to delete mail setting
+   *            content:
+   *              application/json:
+   *                schema:
+   *                  $ref: '#/components/schemas/MailSettingParams'
+   */
+  router.delete('/mail-setting', loginRequiredStrictly, adminRequired, csrf, async(req, res) => {
+    const requestMailSettingParams = {
+      'mail:from': '',
+      'mail:smtpHost': '',
+      'mail:smtpPort': '',
+      'mail:smtpUser': '',
+      'mail:smtpPassword': '',
+    };
+
+    try {
+      const {
+        configManager,
+        mailService,
+      } = crowi;
+
+      // update config without publishing ConfigPubsubMessage
+      await configManager.updateConfigsInTheSameNamespace('crowi', requestMailSettingParams, true);
+
+      await mailService.initialize();
+      mailService.publishUpdatedMessage();
+
+      const mailSettingParams = {
+        fromAddress: configManager.getConfig('crowi', 'mail:from'),
+        smtpHost: configManager.getConfig('crowi', 'mail:smtpHost'),
+        smtpPort: configManager.getConfig('crowi', 'mail:smtpPort'),
+        smtpUser: configManager.getConfig('crowi', 'mail:smtpUser'),
+        smtpPassword: 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'));
+    }
+  });
+
+  // setMailSettings
+
   /**
   /**
    * @swagger
    * @swagger
    *
    *