Steven Fukase 5 лет назад
Родитель
Сommit
bcdcab27cd

+ 29 - 31
src/client/js/components/Admin/SlackIntegration/AccessTokenSettings.jsx

@@ -22,48 +22,46 @@ const AccessTokenSettings = (props) => {
   };
   };
 
 
   const discardTokenHandler = async() => {
   const discardTokenHandler = async() => {
-    // try {
-
-    // }
-    // catch (err) {
-    // }
-    // eslint-disable-next-line no-console
-    console.log('discard');
+    try {
+      const res = await appContainer.apiv3.put('slack-integration/access-token', { deleteAccessToken: true });
+      setAccessToken(res.data.accessToken);
+    }
+    catch (err) {
+      toastError(err);
+    }
   };
   };
 
 
   const textboxClickHandler = () => {
   const textboxClickHandler = () => {
-    const a = navigator.permissions.query({name: "clipboard-write"});
+    const a = navigator.permissions.query({ name: 'clipboard-write' });
     console.log(a);
     console.log(a);
-    
-
   };
   };
 
 
   return (
   return (
-    <>
-      <div className="form-group row my-5">
-        <label className="text-left text-md-right col-md-3 col-form-label">Access Token</label>
-        <div className="col-md-6">
-          <input
-            className="form-control"
-            type="text"
-            value={accessToken}
-            onClick={textboxClickHandler}
-            readOnly
-          />
+    <div className="row">
+      <div className="col-lg-12">
+
+        <h2 className="admin-setting-header">Access Token</h2>
+
+        <div className="form-group row my-5">
+          <label className="text-left text-md-right col-md-3 col-form-label">Access Token</label>
+          <div className="col-md-6">
+            <input className="form-control" type="text" value={accessToken} onClick={textboxClickHandler} readOnly />
+          </div>
         </div>
         </div>
-      </div>
 
 
-      <div className="row">
-        <div className="mx-auto">
-          <button type="button" className="btn btn-outline-secondary text-nowrap mx-1" onClick={discardTokenHandler}>
-            {t('slack_integration.access_token_settings.discard')}
-          </button>
-          <button type="button" className="btn btn-primary text-nowrap mx-1" onClick={generateTokenHandler}>
-            {t('slack_integration.access_token_settings.generate')}
-          </button>
+        <div className="row">
+          <div className="mx-auto">
+            <button type="button" className="btn btn-outline-secondary text-nowrap mx-1" onClick={discardTokenHandler}>
+              {t('slack_integration.access_token_settings.discard')}
+            </button>
+            <button type="button" className="btn btn-primary text-nowrap mx-1" onClick={generateTokenHandler}>
+              {t('slack_integration.access_token_settings.generate')}
+            </button>
+          </div>
         </div>
         </div>
+
       </div>
       </div>
-    </>
+    </div>
   );
   );
 };
 };
 
 

+ 1 - 7
src/client/js/components/Admin/SlackIntegration/SlackIntegration.jsx

@@ -73,13 +73,7 @@ const SlackIntegration = (props) => {
         />
         />
       </div>
       </div>
 
 
-      <div className="row">
-        <div className="col-lg-12">
-          <h2 className="admin-setting-header">Access Token</h2>
-          <AccessTokenSettings />
-        </div>
-      </div>
-
+      <AccessTokenSettings />
 
 
       <div className="row my-5">
       <div className="row my-5">
         <div className="card-deck mx-auto">
         <div className="card-deck mx-auto">

+ 6 - 1
src/server/routes/apiv3/slack-integration.js

@@ -78,6 +78,7 @@ module.exports = (crowi) => {
   router.get('/', accessTokenParser, loginRequiredStrictly, adminRequired, async(req, res) => {
   router.get('/', accessTokenParser, loginRequiredStrictly, adminRequired, async(req, res) => {
 
 
     const slackBotSettingParams = {
     const slackBotSettingParams = {
+      accessToken: crowi.configManager.getConfig('crowi', 'slackbot:accessToken'),
       slackBotType: crowi.configManager.getConfig('crowi', 'slackbot:type'),
       slackBotType: crowi.configManager.getConfig('crowi', 'slackbot:type'),
       // TODO impl when creating official bot
       // TODO impl when creating official bot
       officialBotSettings: {
       officialBotSettings: {
@@ -168,7 +169,11 @@ module.exports = (crowi) => {
   router.put('/access-token', loginRequiredStrictly, adminRequired, async(req, res) => {
   router.put('/access-token', loginRequiredStrictly, adminRequired, async(req, res) => {
 
 
     try {
     try {
-      const accessToken = generateAccessToken(req.user);
+      let accessToken = '';
+
+      if (req.body.deleteAccessToken !== true) {
+        accessToken = generateAccessToken(req.user);
+      }
       await updateSlackBotSettings({ 'slackbot:access-token': accessToken });
       await updateSlackBotSettings({ 'slackbot:access-token': accessToken });
 
 
       return res.apiv3({ accessToken });
       return res.apiv3({ accessToken });

+ 6 - 0
src/server/service/config-loader.js

@@ -410,6 +410,12 @@ const ENV_VAR_NAME_TO_CONFIG_INFO = {
     type:    TYPES.STRING,
     type:    TYPES.STRING,
     default: null,
     default: null,
   },
   },
+  SLACK_BOT_ACCESS_TOKEN: {
+    ns:      'crowi',
+    key:     'slackbot:accessToken',
+    type:    TYPES.STRING,
+    default: null,
+  },
   SLACK_BOT_TYPE: {
   SLACK_BOT_TYPE: {
     ns:      'crowi',
     ns:      'crowi',
     key:     'slackbot:type', // eg. official || custom-without-proxy || custom-with-proxy
     key:     'slackbot:type', // eg. official || custom-without-proxy || custom-with-proxy