Răsfoiți Sursa

Merge pull request #3795 from weseek/imprv/gw6068-updating-tokens

Imprv/gw6068 updating tokens
Kaori Tokashiki 4 ani în urmă
părinte
comite
e3530ffa1e

+ 0 - 11
src/client/js/components/Admin/SlackIntegration/CustomBotWithProxySettings.jsx

@@ -51,16 +51,6 @@ const CustomBotWithProxySettings = (props) => {
     }
     }
   };
   };
 
 
-  const generateAccessTokens = async() => {
-    try {
-      //  TODO: imprement regenerating tokens by GW-6068
-    }
-    catch (err) {
-      toastError(err);
-      logger.error(err);
-    }
-  };
-
   const updateProxyUri = async() => {
   const updateProxyUri = async() => {
     try {
     try {
       await appContainer.apiv3.put('/slack-integration-settings/proxy-uri', {
       await appContainer.apiv3.put('/slack-integration-settings/proxy-uri', {
@@ -124,7 +114,6 @@ const CustomBotWithProxySettings = (props) => {
               <WithProxyAccordions
               <WithProxyAccordions
                 botType="customBotWithProxy"
                 botType="customBotWithProxy"
                 slackAppIntegrationId={slackAppIntegration._id}
                 slackAppIntegrationId={slackAppIntegration._id}
-                onClickGenerateTokenBtn={generateAccessTokens}
                 tokenGtoP={tokenGtoP}
                 tokenGtoP={tokenGtoP}
                 tokenPtoG={tokenPtoG}
                 tokenPtoG={tokenPtoG}
               />
               />

+ 0 - 12
src/client/js/components/Admin/SlackIntegration/OfficialBotSettings.jsx

@@ -46,16 +46,6 @@ const OfficialBotSettings = (props) => {
   };
   };
   */
   */
 
 
-  const generateTokenHandler = async() => {
-    try {
-      //  TODO: imprement regenerating tokens by GW-6068
-    }
-    catch (err) {
-      toastError(err);
-      logger(err);
-    }
-  };
-
   const deleteSlackAppIntegrationHandler = async() => {
   const deleteSlackAppIntegrationHandler = async() => {
     try {
     try {
       // TODO GW-5923 delete SlackAppIntegration
       // TODO GW-5923 delete SlackAppIntegration
@@ -128,9 +118,7 @@ const OfficialBotSettings = (props) => {
               </div>
               </div>
               <WithProxyAccordions
               <WithProxyAccordions
                 botType="officialBot"
                 botType="officialBot"
-
                 slackAppIntegrationId={slackAppIntegration._id}
                 slackAppIntegrationId={slackAppIntegration._id}
-                onClickGenerateTokenBtn={generateTokenHandler}
                 tokenGtoP={tokenGtoP}
                 tokenGtoP={tokenGtoP}
                 tokenPtoG={tokenPtoG}
                 tokenPtoG={tokenPtoG}
               />
               />

+ 14 - 9
src/client/js/components/Admin/SlackIntegration/WithProxyAccordions.jsx

@@ -6,7 +6,7 @@ import { CopyToClipboard } from 'react-copy-to-clipboard';
 import loggerFactory from '@alias/logger';
 import loggerFactory from '@alias/logger';
 
 
 import { withUnstatedContainers } from '../../UnstatedUtils';
 import { withUnstatedContainers } from '../../UnstatedUtils';
-import { toastSuccess } from '../../../util/apiNotification';
+import { toastSuccess, toastError } from '../../../util/apiNotification';
 import AppContainer from '../../../services/AppContainer';
 import AppContainer from '../../../services/AppContainer';
 import Accordion from '../Common/Accordion';
 import Accordion from '../Common/Accordion';
 
 
@@ -76,10 +76,17 @@ const RegisteringProxyUrlProcess = () => {
 
 
 const GeneratingTokensAndRegisteringProxyServiceProcess = withUnstatedContainers((props) => {
 const GeneratingTokensAndRegisteringProxyServiceProcess = withUnstatedContainers((props) => {
   const { t } = useTranslation();
   const { t } = useTranslation();
+  const { appContainer, slackAppIntegrationId } = props;
 
 
-  const onClickGenerateTokenBtn = () => {
-    if (props.onClickGenerateTokenBtn != null) {
-      props.onClickGenerateTokenBtn();
+  const regenerateTokensHandler = async() => {
+    try {
+      await appContainer.apiv3.put('/slack-integration-settings/regenerate-tokens', { slackAppIntegrationId });
+      // TODO: fetch data by GW-6160
+      toastSuccess(t('toaster.update_successed', { target: 'Token' }));
+    }
+    catch (err) {
+      toastError(err);
+      logger.error(err);
     }
     }
   };
   };
 
 
@@ -117,7 +124,7 @@ const GeneratingTokensAndRegisteringProxyServiceProcess = withUnstatedContainers
         <button
         <button
           type="button"
           type="button"
           className="btn btn-primary mx-auto"
           className="btn btn-primary mx-auto"
-          onClick={onClickGenerateTokenBtn}
+          onClick={regenerateTokensHandler}
         >
         >
           { t('admin:slack_integration.access_token_settings.regenerate') }
           { t('admin:slack_integration.access_token_settings.regenerate') }
         </button>
         </button>
@@ -250,7 +257,7 @@ const WithProxyAccordions = (props) => {
       title: 'register_for_growi_official_bot_proxy_service',
       title: 'register_for_growi_official_bot_proxy_service',
       content: <GeneratingTokensAndRegisteringProxyServiceProcess
       content: <GeneratingTokensAndRegisteringProxyServiceProcess
         growiUrl={props.appContainer.config.crowi.url}
         growiUrl={props.appContainer.config.crowi.url}
-        onClickGenerateTokenBtn={props.onClickGenerateTokenBtn}
+        slackAppIntegrationId={props.slackAppIntegrationId}
         tokenPtoG={props.tokenPtoG}
         tokenPtoG={props.tokenPtoG}
         tokenGtoP={props.tokenGtoP}
         tokenGtoP={props.tokenGtoP}
       />,
       />,
@@ -278,7 +285,7 @@ const WithProxyAccordions = (props) => {
       title: 'register_for_growi_official_bot_proxy_service',
       title: 'register_for_growi_official_bot_proxy_service',
       content: <GeneratingTokensAndRegisteringProxyServiceProcess
       content: <GeneratingTokensAndRegisteringProxyServiceProcess
         growiUrl={props.appContainer.config.crowi.url}
         growiUrl={props.appContainer.config.crowi.url}
-        onClickGenerateTokenBtn={props.onClickGenerateTokenBtn}
+        slackAppIntegrationId={props.slackAppIntegrationId}
         tokenPtoG={props.tokenPtoG}
         tokenPtoG={props.tokenPtoG}
         tokenGtoP={props.tokenGtoP}
         tokenGtoP={props.tokenGtoP}
       />,
       />,
@@ -321,9 +328,7 @@ const WithProxyAccordionsWrapper = withUnstatedContainers(WithProxyAccordions, [
 WithProxyAccordions.propTypes = {
 WithProxyAccordions.propTypes = {
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
   botType: PropTypes.string.isRequired,
   botType: PropTypes.string.isRequired,
-
   slackAppIntegrationId: PropTypes.string.isRequired,
   slackAppIntegrationId: PropTypes.string.isRequired,
-  onClickGenerateTokenBtn: PropTypes.func,
   tokenPtoG: PropTypes.string,
   tokenPtoG: PropTypes.string,
   tokenGtoP: PropTypes.string,
   tokenGtoP: PropTypes.string,
 };
 };

+ 34 - 0
src/server/routes/apiv3/slack-integration-settings.js

@@ -387,6 +387,7 @@ module.exports = (crowi) => {
     let tokenGtoP;
     let tokenGtoP;
     let tokenPtoG;
     let tokenPtoG;
     let generateTokens;
     let generateTokens;
+    // TODO: refactering generateAccessTokens by GW-6100
     do {
     do {
       generateTokens = SlackAppIntegration.generateAccessToken();
       generateTokens = SlackAppIntegration.generateAccessToken();
       tokenGtoP = generateTokens[0];
       tokenGtoP = generateTokens[0];
@@ -405,6 +406,39 @@ module.exports = (crowi) => {
     }
     }
   });
   });
 
 
+  /**
+   * @swagger
+   *
+   *    /slack-integration-settings/regenerate-tokens:
+   *      put:
+   *        tags: [SlackIntegration]
+   *        operationId: putRegenerateTokens
+   *        summary: /slack-integration
+   *        description: Regenerate SlackAppTokens
+   *        responses:
+   *          200:
+   *            description: Succeeded to regenerate slack app tokens
+   */
+  // TODO: refactering generateAccessTokens by GW-6100
+  router.put('/regenerate-tokens', loginRequiredStrictly, adminRequired, csrf, async(req, res) => {
+
+    const { slackAppIntegrationId } = req.body;
+
+    try {
+      const generateTokens = SlackAppIntegration.generateAccessToken();
+      const newTokenGtoP = generateTokens[0];
+      const newTokenPtoG = generateTokens[1];
+      const slackAppTokens = await SlackAppIntegration.findOneAndUpdate({ _id: slackAppIntegrationId }, { tokenGtoP: newTokenGtoP, tokenPtoG: newTokenPtoG });
+
+      return res.apiv3(slackAppTokens, 200);
+    }
+    catch (error) {
+      const msg = 'Error occured in updating access token for slack app tokens';
+      logger.error('Error', error);
+      return res.apiv3Err(new ErrorV3(msg, 'update-slackAppTokens-failed'), 500);
+    }
+  });
+
   /**
   /**
    * @swagger
    * @swagger
    *
    *