itizawa 5 лет назад
Родитель
Сommit
25e5736954

+ 1 - 1
src/client/js/components/Admin/App/SesSetting.jsx

@@ -22,7 +22,7 @@ function SmtpSetting(props) {
     const { t } = props;
 
     try {
-      console.log('huge');
+      await adminAppContainer.updateSesSettingHandler();
       toastSuccess(t('toaster.update_successed', { target: t('admin:app_setting.mail_settings') }));
     }
     catch (err) {

+ 14 - 1
src/client/js/services/AdminAppContainer.js

@@ -260,7 +260,6 @@ export default class AdminAppContainer extends Container {
    */
   async updateMailSettingHandler() {
     const response = await this.appContainer.apiv3.put('/app-settings/mail-setting', {
-      fromAddress: this.state.fromAddress,
       smtpHost: this.state.smtpHost,
       smtpPort: this.state.smtpPort,
       smtpUser: this.state.smtpUser,
@@ -270,6 +269,20 @@ export default class AdminAppContainer extends Container {
     return mailSettingParams;
   }
 
+  /**
+   * Update ses setting
+   * @memberOf AdminAppContainer
+   * @return {Array} Appearance
+   */
+  async updateSesSettingHandler() {
+    const response = await this.appContainer.apiv3.put('/app-settings/ses-setting', {
+      sesAccessKeyId: this.state.sesAccessKeyId,
+      sesSecretAccessKey: this.state.sesSecretAccessKey,
+    });
+    const { mailSettingParams } = response.data;
+    return mailSettingParams;
+  }
+
   /**
    * Initialize mail setting
    * @memberOf AdminAppContainer

+ 57 - 0
src/server/routes/apiv3/app-settings.js

@@ -73,6 +73,16 @@ const ErrorV3 = require('../../models/vo/error-apiv3');
  *          smtpPassword:
  *            type: string
  *            description: password of client's smtp server
+ *      sesSettingParams:
+ *        description: SesSettingParams
+ *        type: object
+ *        properties:
+ *          accessKeyId:
+ *            type: string
+ *            description: accesskey id for authentification of AWS
+ *          secretAccessKey:
+ *            type: string
+ *            description: secret key for authentification of AWS
  *      AwsSettingParams:
  *        description: AwsSettingParams
  *        type: object
@@ -128,6 +138,10 @@ module.exports = (crowi) => {
       body('smtpUser').trim(),
       body('smtpPassword').trim(),
     ],
+    sesSetting: [
+      body('sesAccessKeyId').trim(),
+      body('sesSecretAccessKey').trim(),
+    ],
     awsSetting: [
       body('region').trim().matches(/^[a-z]+-[a-z]+-\d+$/).withMessage((value, { req }) => req.t('validation.aws_region')),
       body('customEndpoint').trim().matches(/^(https?:\/\/[^/]+|)$/).withMessage((value, { req }) => req.t('validation.aws_custom_endpoint')),
@@ -173,6 +187,8 @@ module.exports = (crowi) => {
       smtpPort: crowi.configManager.getConfig('crowi', 'mail:smtpPort'),
       smtpUser: crowi.configManager.getConfig('crowi', 'mail:smtpUser'),
       smtpPassword: crowi.configManager.getConfig('crowi', 'mail:smtpPassword'),
+      sesAccessKeyId: crowi.configManager.getConfig('crowi', 'mail:sesAccessKeyId'),
+      sesSecretAccessKey: crowi.configManager.getConfig('crowi', 'mail:sesSecretAccessKey'),
       region: crowi.configManager.getConfig('crowi', 'aws:region'),
       customEndpoint: crowi.configManager.getConfig('crowi', 'aws:customEndpoint'),
       bucket: crowi.configManager.getConfig('crowi', 'aws:bucket'),
@@ -442,6 +458,47 @@ module.exports = (crowi) => {
     }
   });
 
+  /**
+   * @swagger
+   *
+   *    /app-settings/ses-setting:
+   *      put:
+   *        tags: [AppSettings]
+   *        operationId: updateAppSettingSesSetting
+   *        summary: /app-settings/ses-setting
+   *        description: Update ses setting
+   *        requestBody:
+   *          required: true
+   *          content:
+   *            application/json:
+   *              schema:
+   *                $ref: '#/components/schemas/SesSettingParams'
+   *        responses:
+   *          200:
+   *            description: Succeeded to update ses setting
+   *            content:
+   *              application/json:
+   *                schema:
+   *                  $ref: '#/components/schemas/SesSettingParams'
+   */
+  router.put('/ses-setting', loginRequiredStrictly, adminRequired, csrf, validator.sesSetting, apiV3FormValidator, async(req, res) => {
+
+    const requestSesSettingParams = {
+      'mail:sesAccessKeyId': req.body.sesAccessKeyId,
+      'mail:sesSecretAccessKey': req.body.sesSecretAccessKey,
+    };
+
+    try {
+      const mailSettingParams = await updateMailSettinConfig(requestSesSettingParams);
+      return res.apiv3({ mailSettingParams });
+    }
+    catch (err) {
+      const msg = 'Error occurred in updating ses setting';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'update-ses-setting-failed'));
+    }
+  });
+
   /**
    * @swagger
    *