zahmis 4 лет назад
Родитель
Сommit
09cbfd36cf

+ 4 - 3
packages/app/src/server/routes/apiv3/slack-integration-settings.js

@@ -49,6 +49,7 @@ module.exports = (crowi) => {
   const apiV3FormValidator = require('../../middlewares/apiv3-form-validator')(crowi);
 
   const SlackAppIntegration = mongoose.model('SlackAppIntegration');
+  const SlackAppIntegrationMock = mongoose.model('SlackAppIntegrationMock');
 
   const validator = {
     BotType: [
@@ -590,7 +591,7 @@ module.exports = (crowi) => {
     const { slackAppIntegrationId } = req.body;
     let slackBotToken;
     try {
-      const slackAppIntegration = await SlackAppIntegration.findOne({ _id: slackAppIntegrationId });
+      const slackAppIntegration = await SlackAppIntegrationMock.findOne({ _id: slackAppIntegrationId });
       if (slackAppIntegration == null) {
         const msg = 'Could not find SlackAppIntegration by id';
         return res.apiv3Err(new ErrorV3(msg, 'find-slackAppIntegration-failed'), 400);
@@ -601,8 +602,8 @@ module.exports = (crowi) => {
         'post',
         '/g2s/relation-test',
         {
-          supportedCommandsForBroadcastUse: slackAppIntegration.supportedCommandsForBroadcastUse,
-          supportedCommandsForSingleUse: slackAppIntegration.supportedCommandsForSingleUse,
+          permissionsForBroadcastUseCommands: slackAppIntegration.permissionsForBroadcastUseCommands,
+          permissionsForSingleUseCommands: slackAppIntegration.permissionsForSingleUseCommands,
         },
       );
 

+ 1 - 1
packages/slackbot-proxy/src/controllers/growi-to-slack.ts

@@ -207,7 +207,7 @@ export class GrowiToSlackCtrl {
       // https://github.com/typeorm/typeorm/issues/1090#issuecomment-634391487
       .orUpdate({
         conflict_target: ['installation', 'growiUri'],
-        overwrite: ['tokenGtoP', 'tokenPtoG', 'supportedCommandsForBroadcastUse', 'supportedCommandsForSingleUse'],
+        overwrite: ['tokenGtoP', 'tokenPtoG', 'permissionsForBroadcastUseCommands', 'permissionsForSingleUseCommands'],
       })
       .execute();
 

+ 2 - 2
packages/slackbot-proxy/src/controllers/slack.ts

@@ -170,7 +170,7 @@ export class SlackCtrl {
 
     const relationsForSingleUse:RelationMock[] = [];
     await Promise.all(relations.map(async(relation) => {
-      const isSupported = await this.relationsService.checkPermissionForCommands(relation, growiCommand.growiCommandType, body.channel_name, baseDate);
+      const isSupported = await this.relationsService.isPermissionsForSingleUseCommands(relation, growiCommand.growiCommandType, body.channel_name, baseDate);
       if (isSupported) {
         return relationsForSingleUse.push(relation);
       }
@@ -183,7 +183,7 @@ export class SlackCtrl {
 
     const relationsForBroadcastUse:RelationMock[] = [];
     await Promise.all(relations.map(async(relation) => {
-      const isSupported = await this.relationsService.checkPermissionForCommands(relation, growiCommand.growiCommandType, body.channel_name, baseDate);
+      const isSupported = await this.relationsService.isPermissionsUseBroadcastCommands(relation, growiCommand.growiCommandType, body.channel_name, baseDate);
 
       if (isSupported) {
         return relationsForBroadcastUse.push(relation);

+ 19 - 7
packages/slackbot-proxy/src/services/RelationsService.ts

@@ -67,26 +67,38 @@ export class RelationsService {
     return relation;
   }
 
-  async checkPermissionForCommands(relation:RelationMock, growiCommandType:string, channelName:string, baseDate:Date):Promise<boolean> {
+  async isPermissionsForSingleUseCommands(relation:RelationMock, growiCommandType:string, channelName:string, baseDate:Date):Promise<boolean> {
     const syncedRelation = await this.syncRelation(relation, baseDate);
+
     if (syncedRelation == null) {
       return false;
     }
 
-    // case: singleUse
-    let permission = relation.permissionsForSingleUseCommands[growiCommandType];
+    const permission = relation.permissionsForSingleUseCommands[growiCommandType];
 
-    // case: broadCastUse
     if (permission == null) {
-      permission = relation.permissionsForBroadcastUseCommands[growiCommandType];
+      return false;
+    }
+
+    if (Array.isArray(permission)) {
+      return permission.includes(channelName);
     }
 
-    // both case: null
+    return permission;
+  }
+
+  async isPermissionsUseBroadcastCommands(relation:RelationMock, growiCommandType:string, channelName:string, baseDate:Date):Promise<boolean> {
+    const syncedRelation = await this.syncRelation(relation, baseDate);
+    if (syncedRelation == null) {
+      return false;
+    }
+
+    const permission = relation.permissionsForBroadcastUseCommands[growiCommandType];
+
     if (permission == null) {
       return false;
     }
 
-    // check permission at channel level
     if (Array.isArray(permission)) {
       return permission.includes(channelName);
     }