Răsfoiți Sursa

Merge branch 'feat/growi-bot' into imprv/numbering-each-accordion-and-display-words-at-error

zahmis 4 ani în urmă
părinte
comite
ab63dc2912

+ 3 - 1
.github/workflows/release-slackbot-proxy.yml

@@ -35,9 +35,10 @@ jobs:
 
     - name: Build and push
       uses: docker/build-push-action@v2
+      working-directory: ./packages/slackbot-proxy
       with:
         context: .
-        file: ./packages/slackbot-proxy/docker/Dockerfile
+        file: ./docker/Dockerfile
         platforms: linux/amd64
         push: true
         tags: |
@@ -48,6 +49,7 @@ jobs:
 
     - name: Update Docker Hub Description
       uses: peter-evans/dockerhub-description@v2
+      working-directory: ./packages/slackbot-proxy
       with:
         username: wsmoogle
         password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}

+ 1 - 0
resource/locales/en_US/admin/admin.json

@@ -279,6 +279,7 @@
       "impossible": "Impossible"
     },
     "bot_reset_successful": "Bot settings have been reset.",
+    "adding_slack_ws_integration_settings_successful": "Slack workspace integration settings have been added",
     "bot_all_reset_successful": "All Bot settings have been reset.",
     "copied_to_clipboard": "Copied to clipboard",
     "set_scope": "Please set up Bot Token Scopes from Slack settings",

+ 1 - 0
resource/locales/ja_JP/admin/admin.json

@@ -277,6 +277,7 @@
       "impossible": "不可"
     },
     "bot_reset_successful": "Botの設定を消去しました。",
+    "adding_slack_ws_integration_settings_successful": "Slack ワークスペースとの連携設定を追加しました。",
     "bot_all_reset_successful": "全ての Bot の設定を消去しました。",
     "copied_to_clipboard": "クリップボードにコピーされました。",
     "set_scope": "Slackの設定画面からBot Token Scopeを設定してください",

+ 1 - 0
resource/locales/zh_CN/admin/admin.json

@@ -287,6 +287,7 @@
       "impossible": "不可能"
     },
     "bot_reset_successful": "删除了BOT设置。",
+    "adding_slack_ws_integration_settings_successful": "添加了用于与 Slack 工作空间链接的设置。",
     "bot_all_reset_successful": "所有的 Bot 设置都被清除了。",
     "copied_to_clipboard": "它已复制到剪贴板。",
     "set_scope": "在Slack设置页面中配置Bot Token Scope。",

+ 6 - 4
src/client/js/components/Admin/SlackIntegration/CustomBotWithProxySettings.jsx

@@ -13,7 +13,7 @@ const logger = loggerFactory('growi:SlackBotSettings');
 
 const CustomBotWithProxySettings = (props) => {
   const {
-    appContainer, slackAppIntegrations, proxyServerUri, connectionStatuses,
+    appContainer, slackAppIntegrations, proxyServerUri, onClickAddSlackWorkspaceBtn, connectionStatuses,
   } = props;
   const [newProxyServerUri, setNewProxyServerUri] = useState();
   const [integrationIdToDelete, setIntegrationIdToDelete] = useState(null);
@@ -37,7 +37,9 @@ const CustomBotWithProxySettings = (props) => {
   };
 
   const addSlackAppIntegrationHandler = async() => {
-    // TODO GW-6067 implement
+    if (onClickAddSlackWorkspaceBtn != null) {
+      onClickAddSlackWorkspaceBtn();
+    }
   };
 
   const deleteSlackAppIntegrationHandler = async() => {
@@ -55,8 +57,7 @@ const CustomBotWithProxySettings = (props) => {
 
   const generateAccessTokens = async() => {
     try {
-      // GW-6068 set new value after this
-      await appContainer.apiv3.put('/slack-integration-settings/access-tokens');
+      //  TODO: imprement regenerating tokens by GW-6068
     }
     catch (err) {
       toastError(err);
@@ -172,6 +173,7 @@ CustomBotWithProxySettings.propTypes = {
   appContainer: PropTypes.instanceOf(AppContainer).isRequired,
   slackAppIntegrations: PropTypes.array,
   proxyServerUri: PropTypes.string,
+  onClickAddSlackWorkspaceBtn: PropTypes.func,
   fetchSlackIntegrationData: PropTypes.func,
   connectionStatuses: PropTypes.object,
 };

+ 9 - 5
src/client/js/components/Admin/SlackIntegration/OfficialBotSettings.jsx

@@ -12,7 +12,9 @@ import DeleteSlackBotSettingsModal from './DeleteSlackBotSettingsModal';
 const logger = loggerFactory('growi:SlackBotSettings');
 
 const OfficialBotSettings = (props) => {
-  const { appContainer, slackAppIntegrations, proxyServerUri } = props;
+  const {
+    appContainer, slackAppIntegrations, proxyServerUri, onClickAddSlackWorkspaceBtn,
+  } = props;
   const [isDeleteConfirmModalShown, setIsDeleteConfirmModalShown] = useState(false);
   const { t } = useTranslation();
 
@@ -22,10 +24,12 @@ const OfficialBotSettings = (props) => {
     if (proxyServerUri != null) {
       setNewProxyServerUri(proxyServerUri);
     }
-  }, [proxyServerUri]);
+  }, [proxyServerUri, slackAppIntegrations]);
 
   const addSlackAppIntegrationHandler = async() => {
-    // TODO GW-6067 implement
+    if (onClickAddSlackWorkspaceBtn != null) {
+      onClickAddSlackWorkspaceBtn();
+    }
   };
 
   const discardTokenHandler = async(tokenGtoP, tokenPtoG) => {
@@ -41,8 +45,7 @@ const OfficialBotSettings = (props) => {
 
   const generateTokenHandler = async() => {
     try {
-      // GW-6068 set new value after this
-      await appContainer.apiv3.put('/slack-integration-settings/access-tokens');
+      //  TODO: imprement regenerating tokens by GW-6068
     }
     catch (err) {
       toastError(err);
@@ -170,6 +173,7 @@ OfficialBotSettings.propTypes = {
 
   slackAppIntegrations: PropTypes.array,
   proxyServerUri: PropTypes.string,
+  onClickAddSlackWorkspaceBtn: PropTypes.func,
 };
 
 export default OfficialBotSettingsWrapper;

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

@@ -81,6 +81,17 @@ const SlackIntegration = (props) => {
     }
   };
 
+  const createSlackIntegrationData = async() => {
+    try {
+      await appContainer.apiv3.put('/slack-integration-settings/slack-app-integrations');
+      fetchSlackIntegrationData();
+      toastSuccess(t('admin:slack_integration.adding_slack_ws_integration_settings_successful'));
+    }
+    catch (error) {
+      toastError(error);
+    }
+  };
+
   useEffect(() => {
     fetchSlackIntegrationData();
   }, [fetchSlackIntegrationData]);
@@ -125,7 +136,13 @@ const SlackIntegration = (props) => {
 
   switch (currentBotType) {
     case 'officialBot':
-      settingsComponent = <OfficialBotSettings slackAppIntegrations={slackAppIntegrations} proxyServerUri={proxyServerUri} />;
+      settingsComponent = (
+        <OfficialBotSettings
+          slackAppIntegrations={slackAppIntegrations}
+          proxyServerUri={proxyServerUri}
+          onClickAddSlackWorkspaceBtn={createSlackIntegrationData}
+        />
+      );
       break;
     case 'customBotWithoutProxy':
       settingsComponent = (
@@ -148,6 +165,7 @@ const SlackIntegration = (props) => {
         <CustomBotWithProxySettings
           slackAppIntegrations={slackAppIntegrations}
           proxyServerUri={proxyServerUri}
+          onClickAddSlackWorkspaceBtn={createSlackIntegrationData}
           fetchSlackIntegrationData={fetchSlackIntegrationData}
           connectionStatuses={connectionStatuses}
         />

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

@@ -356,17 +356,17 @@ module.exports = (crowi) => {
   /**
    * @swagger
    *
-   *    /slack-integration-settings/access-tokens:
+   *    /slack-integration-settings/slack-app-integrations:
    *      put:
    *        tags: [SlackIntegration]
-   *        operationId: putAccessTokens
+   *        operationId: putSlackAppIntegrations
    *        summary: /slack-integration
-   *        description: Generate accessTokens
+   *        description: Generate SlackAppIntegrations
    *        responses:
    *          200:
-   *            description: Succeeded to update access tokens for slack
+   *            description: Succeeded to create slack app integration
    */
-  router.put('/access-tokens', loginRequiredStrictly, adminRequired, csrf, async(req, res) => {
+  router.put('/slack-app-integrations', loginRequiredStrictly, adminRequired, csrf, async(req, res) => {
     let checkTokens;
     let tokenGtoP;
     let tokenPtoG;