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

Revert "delete feature to delete smtp setting"

This reverts commit e643fab3ba16d298e78c57cd78b27f2b9ba51782.
yusuketk 5 лет назад
Родитель
Сommit
c228ed8506

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

@@ -1,9 +1,12 @@
 
-import React, { useRef } from 'react';
+import React, { useState, useRef } from 'react';
 import PropTypes from 'prop-types';
 import { withTranslation } from 'react-i18next';
 import loggerFactory from '@alias/logger';
 
+import {
+  Modal, ModalHeader, ModalBody,
+} from 'reactstrap';
 import { withUnstatedContainers } from '../../UnstatedUtils';
 import { toastSuccess, toastError } from '../../../util/apiNotification';
 import { withLoadingSppiner } from '../../SuspenseUtils';
@@ -23,6 +26,17 @@ function SmtpSetting(props) {
   const userInput = useRef();
   const passwordInput = useRef();
 
+  const [isInitializeValueModalOpen, setIsInitializeValueModalOpen] = useState(false);
+
+  function openInitializeValueModal() {
+    setIsInitializeValueModalOpen(true);
+
+  }
+
+  function closeInitializeValueModal() {
+    setIsInitializeValueModalOpen(false);
+  }
+
   async function submitHandler() {
     const { t, adminAppContainer } = props;
 
@@ -48,6 +62,27 @@ function SmtpSetting(props) {
     }
   }
 
+
+  async function initialize() {
+    const { t, adminAppContainer } = props;
+
+    try {
+      const mailSettingParams = await adminAppContainer.initializeSmtpSettingHandler();
+      toastSuccess(t('toaster.initialize_successed', { target: t('admin:app_setting.smtp_settings') }));
+      // convert values to '' if value is null for overwriting values of inputs with refs
+      hostInput.current.value = mailSettingParams.smtpHost || '';
+      portInput.current.value = mailSettingParams.smtpPort || '';
+      userInput.current.value = mailSettingParams.smtpUser || '';
+      passwordInput.current.value = mailSettingParams.smtpPassword || '';
+      closeInitializeValueModal();
+    }
+    catch (err) {
+      toastError(err);
+      logger.error(err);
+    }
+  }
+
+
   return (
     <React.Fragment>
       <div id="mail-smtp" className="tab-pane active mt-5">
@@ -104,10 +139,39 @@ function SmtpSetting(props) {
             </button>
           </div>
           <div className="offset-1">
+            <button
+              type="button"
+              className="btn btn-secondary"
+              onClick={openInitializeValueModal}
+              disabled={adminAppContainer.state.retrieveError != null}
+            >
+              {t('admin:app_setting.initialize_mail_settings')}
+            </button>
             <button type="button" className="btn btn-secondary" onClick={sendTestEmailhandler}>send test e-mail</button>
           </div>
         </div>
       </div>
+
+
+      <Modal isOpen={isInitializeValueModalOpen} toggle={closeInitializeValueModal} className="initialize-mail-settings">
+        <ModalHeader tag="h4" toggle={closeInitializeValueModal} className="bg-danger text-light">
+          {t('admin:app_setting.initialize_mail_modal_header')}
+        </ModalHeader>
+        <ModalBody>
+          <div className="text-center mb-4">
+            {t('admin:app_setting.confirm_to_initialize_mail_settings')}
+          </div>
+          <div className="text-center my-2">
+            <button type="button" className="btn btn-outline-secondary mr-4" onClick={closeInitializeValueModal}>
+              {t('Cancel')}
+            </button>
+            <button type="button" className="btn btn-danger" onClick={initialize}>
+              {t('Reset')}
+            </button>
+          </div>
+        </ModalBody>
+      </Modal>
+
     </React.Fragment>
   );
 }

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

@@ -286,6 +286,20 @@ export default class AdminAppContainer extends Container {
     await this.appContainer.apiv3.get('/app-settings/send-test-email');
   }
 
+  /**
+   * Initialize smtp setting
+   * @memberOf AdminAppContainer
+   * @return {Array} Appearance
+   */
+  async initializeSmtpSettingHandler() {
+    const response = await this.appContainer.apiv3.delete('/app-settings/smtp-setting', {});
+    const {
+      mailSettingParams,
+    } = response.data;
+    this.setState(mailSettingParams);
+    return mailSettingParams;
+  }
+
   /**
    * Update AWS setting
    * @memberOf AdminAppContainer

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

@@ -513,6 +513,37 @@ module.exports = (crowi) => {
     }
   });
 
+  /**
+   * @swagger
+   *
+   *    /app-settings/smtp-setting:
+   *      delete:
+   *        tags: [AppSettings]
+   *        operationId: deleteAppSettingSmtpSetting
+   *        summary: /app-settings/smtp-setting
+   *        description: delete smtp setting
+   *        responses:
+   *          200:
+   *            description: Succeeded to delete smtp setting
+   */
+  router.delete('/smtp-setting', loginRequiredStrictly, adminRequired, csrf, async(req, res) => {
+    const requestMailSettingParams = {
+      'mail:smtpHost': null,
+      'mail:smtpPort': null,
+      'mail:smtpUser': null,
+      'mail:smtpPassword': null,
+    };
+    try {
+      const mailSettingParams = await updateMailSettinConfig(requestMailSettingParams);
+      return res.apiv3({ mailSettingParams });
+    }
+    catch (err) {
+      const msg = 'Error occurred in initializing stmp setting';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'initialize-smtpSetting-failed'));
+    }
+  });
+
   /**
    * @swagger
    *