zahmis 4 лет назад
Родитель
Сommit
54fbd8acff
1 измененных файлов с 44 добавлено и 23 удалено
  1. 44 23
      packages/slackbot-proxy/src/middlewares/slack-to-growi/checkCommandPermission.ts

+ 44 - 23
packages/slackbot-proxy/src/middlewares/slack-to-growi/checkCommandPermission.ts

@@ -36,15 +36,30 @@ export class checkCommandPermissionMiddleware implements IMiddleware {
     const { body, authorizeResult } = req;
     const { body, authorizeResult } = req;
 
 
     let payload:any;
     let payload:any;
+    if (body.payload != null) {
+      payload = JSON.parse(req.body.payload);
+    }
+    // if (req.body.text == null && !payload) { // when /relation-test
+    //   return next();
+    // }
+
+
     let command:string;
     let command:string;
-    let actionId:string;
-    let callbackId:string;
-    let growiCommand:GrowiCommand;
+    if (body.payload == null) { // when request is to /commands
+      command = body.text.split(' ')[0];
+      console.log(command);
+    }
+    else if (payload.actions != null) { // when request is to /interactions && block_actions
+      console.log(58);
 
 
-    if (body.payload) {
+      const actionId = payload.actions[0].action_id;
+      command = actionId.split(':')[0];
+    }
+    else { // when request is to /interactions && view_submission
       payload = JSON.parse(req.body.payload);
       payload = JSON.parse(req.body.payload);
 
 
       console.log(49, payload);
       console.log(49, payload);
+
       const privateMeta = JSON.parse(payload.view.private_metadata);
       const privateMeta = JSON.parse(payload.view.private_metadata);
 
 
       // first payload
       // first payload
@@ -58,23 +73,12 @@ export class checkCommandPermissionMiddleware implements IMiddleware {
         command = payload.view.callback_id!.split(':')[0];
         command = payload.view.callback_id!.split(':')[0];
       }
       }
       console.log(37, command);
       console.log(37, command);
-
-
-    }
-    else if (body.payload == null) {
-      command = body.text.split(' ')[0];
-      console.log(command);
-
-    }
-    else {
-      callbackId = payload.view.callback_id;
-
     }
     }
 
 
     const passCommandArray = ['status', 'register', 'unregister', 'help'];
     const passCommandArray = ['status', 'register', 'unregister', 'help'];
-    console.log(command!);
+    console.log(command);
 
 
-    if (passCommandArray.includes(command!)) {
+    if (passCommandArray.includes(command)) {
       console.log(22);
       console.log(22);
       return next();
       return next();
     }
     }
@@ -122,36 +126,53 @@ export class checkCommandPermissionMiddleware implements IMiddleware {
     const relationMock = await this.relationMockRepository.findOne({ where: { installation } });
     const relationMock = await this.relationMockRepository.findOne({ where: { installation } });
     const channelsObject = relationMock?.permittedChannelsForEachCommand.channelsObject;
     const channelsObject = relationMock?.permittedChannelsForEachCommand.channelsObject;
 
 
+
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     const permittedCommandsForChannel = Object.keys(channelsObject!); // eg. [ 'create', 'search', 'togetter', ... ]
     const permittedCommandsForChannel = Object.keys(channelsObject!); // eg. [ 'create', 'search', 'togetter', ... ]
     console.log(112, permittedCommandsForChannel);
     console.log(112, permittedCommandsForChannel);
 
 
 
 
     const targetCommand = permittedCommandsForChannel.find(e => e === command);
     const targetCommand = permittedCommandsForChannel.find(e => e === command);
-    console.log(command!);
+    console.log(command);
 
 
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     console.log(118, targetCommand);
     console.log(118, targetCommand);
 
 
-
     const permittedChannels = channelsObject![targetCommand!];
     const permittedChannels = channelsObject![targetCommand!];
     console.log(permittedChannels);
     console.log(permittedChannels);
 
 
     let fromChannel:string;
     let fromChannel:string;
-    if (body.channel_name != null) {
+    if (body.channel_name != null) { // commands
       fromChannel = body.channel_name;
       fromChannel = body.channel_name;
     }
     }
+    else if (payload.channel.name != null) { // interactions
+      fromChannel = payload.channel.name;
+    }
     else {
     else {
+      console.log(payload, 154);
+
       const privateMeta = JSON.parse(payload.view.private_metadata);
       const privateMeta = JSON.parse(payload.view.private_metadata);
       fromChannel = privateMeta.channelName;
       fromChannel = privateMeta.channelName;
 
 
     }
     }
     const isPermittedChannel = permittedChannels.includes(fromChannel);
     const isPermittedChannel = permittedChannels.includes(fromChannel);
-
+    console.log(151, isPermittedChannel);
     if (isPermittedChannel) {
     if (isPermittedChannel) {
       return next();
       return next();
     }
     }
 
 
+
+    console.log(payload);
+    console.log(req);
+
+
+    if (payload != null) {
+      const isPermittedChannel = permittedChannels.includes(fromChannel);
+      if (isPermittedChannel) {
+        return next();
+      }
+    }
+
     // send postEphemral message for not permitted
     // send postEphemral message for not permitted
     const botToken = relations[0].installation?.data.bot?.token;
     const botToken = relations[0].installation?.data.bot?.token;
 
 
@@ -164,10 +185,10 @@ export class checkCommandPermissionMiddleware implements IMiddleware {
       channel: body.channel_id,
       channel: body.channel_id,
       user: body.user_id,
       user: body.user_id,
       blocks: [
       blocks: [
-        markdownSectionBlock(`It is not allowed to run *'${command!}'* command to this GROWI.`),
+        markdownSectionBlock(`It is not allowed to run *'${command}'* command to this GROWI.`),
       ],
       ],
     });
     });
-
+    return;
   }
   }
 
 
 }
 }