zahmis 4 лет назад
Родитель
Сommit
5a66a2695e

+ 0 - 1
packages/app/src/server/routes/apiv3/slack-integration.js

@@ -253,7 +253,6 @@ module.exports = (crowi) => {
   });
   });
 
 
   router.post('/proxied/interactions', verifyAccessTokenFromProxy, /* checkCommandPermission, */ async(req, res) => {
   router.post('/proxied/interactions', verifyAccessTokenFromProxy, /* checkCommandPermission, */ async(req, res) => {
-    console.log(256);
     return handleInteractions(req, res);
     return handleInteractions(req, res);
   });
   });
 
 

+ 15 - 13
packages/slackbot-proxy/src/controllers/slack.ts

@@ -171,11 +171,15 @@ export class SlackCtrl {
     const baseDate = new Date();
     const baseDate = new Date();
 
 
     const relationsForSingleUse:RelationMock[] = [];
     const relationsForSingleUse:RelationMock[] = [];
-    // console.log(body);
 
 
     await Promise.all(relations.map(async(relation) => {
     await Promise.all(relations.map(async(relation) => {
+      console.log(176);
+
       const isSupported = await this.relationsService.isSupportedGrowiCommandForSingleUse(relation, growiCommand.growiCommandType, body.channel_name, baseDate);
       const isSupported = await this.relationsService.isSupportedGrowiCommandForSingleUse(relation, growiCommand.growiCommandType, body.channel_name, baseDate);
+
       if (isSupported) {
       if (isSupported) {
+        console.log(179);
+
         return relationsForSingleUse.push(relation);
         return relationsForSingleUse.push(relation);
       }
       }
     }));
     }));
@@ -192,7 +196,9 @@ export class SlackCtrl {
       const isSupported = await this.relationsService.isSupportedGrowiCommandForBroadcastUse(
       const isSupported = await this.relationsService.isSupportedGrowiCommandForBroadcastUse(
         relation, growiCommand.growiCommandType, body.channel_name, baseDate,
         relation, growiCommand.growiCommandType, body.channel_name, baseDate,
       );
       );
+
       if (isSupported) {
       if (isSupported) {
+        console.log(196);
         relationsForBroadcastUse.push(relation);
         relationsForBroadcastUse.push(relation);
       }
       }
     }));
     }));
@@ -202,6 +208,8 @@ export class SlackCtrl {
      */
      */
     if (relationsForBroadcastUse.length > 0) {
     if (relationsForBroadcastUse.length > 0) {
       body.growiUrisForBroadcastUse = relationsForBroadcastUse.map(v => v.growiUri);
       body.growiUrisForBroadcastUse = relationsForBroadcastUse.map(v => v.growiUri);
+      console.log(body.growiUrisForBroadcastUse, 211);
+
       return this.sendCommand(growiCommand, relationsForBroadcastUse, body);
       return this.sendCommand(growiCommand, relationsForBroadcastUse, body);
     }
     }
 
 
@@ -242,8 +250,12 @@ export class SlackCtrl {
     const payload = JSON.parse(body.payload);
     const payload = JSON.parse(body.payload);
     const callbackId = payload?.view?.callback_id;
     const callbackId = payload?.view?.callback_id;
     const actionId = payload?.actions?.[0].action_id;
     const actionId = payload?.actions?.[0].action_id;
+    let privateMeta:any;
+
+    if (payload.view != null) {
+      privateMeta = JSON.parse(payload?.view?.private_metadata);
+    }
 
 
-    const privateMeta = JSON.parse(payload?.view?.private_metadata);
     const channelName = payload.channel?.name || privateMeta?.body?.channel_name || privateMeta?.channelName;
     const channelName = payload.channel?.name || privateMeta?.body?.channel_name || privateMeta?.channelName;
     const installationId = authorizeResult.enterpriseId || authorizeResult.teamId;
     const installationId = authorizeResult.enterpriseId || authorizeResult.teamId;
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
     // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -313,17 +325,12 @@ export class SlackCtrl {
 
 
         if (Array.isArray(permission)) {
         if (Array.isArray(permission)) {
           isPermitted = permission.includes(channelName);
           isPermitted = permission.includes(channelName);
-
         }
         }
 
 
         // ex. search OR search:handlerName
         // ex. search OR search:handlerName
         const commandRegExp = new RegExp(`(^${commandName}$)|(^${commandName}:\\w+)`);
         const commandRegExp = new RegExp(`(^${commandName}$)|(^${commandName}:\\w+)`);
-        console.log(commandRegExp);
-        console.log(actionId);
-        console.log(callbackId);
-
 
 
-        // skip this forEach loop if the requested command is not in permissionsForBroadcastUseCommands key
+        // skip this forEach loop if the requested command is not in permissionsForBroadcastUseCommands and permissionsForSingleUseCommandskey
         if (!commandRegExp.test(actionId) && !commandRegExp.test(callbackId)) {
         if (!commandRegExp.test(actionId) && !commandRegExp.test(callbackId)) {
           return;
           return;
         }
         }
@@ -350,9 +357,6 @@ export class SlackCtrl {
         /*
         /*
          * forward to GROWI server
          * forward to GROWI server
          */
          */
-        console.log(payload);
-        console.log('--------');
-
 
 
         try {
         try {
         // generate API URL
         // generate API URL
@@ -370,8 +374,6 @@ export class SlackCtrl {
         }
         }
 
 
       });
       });
-
-
     }));
     }));
 
 
   }
   }

+ 37 - 11
packages/slackbot-proxy/src/services/RelationsService.ts

@@ -71,22 +71,35 @@ export class RelationsService {
     if (syncedRelation == null) {
     if (syncedRelation == null) {
       return false;
       return false;
     }
     }
+    console.log(growiCommandType, 74);
 
 
-    const boolOrArrayString = relation.supportedCommandsForSingleUse[growiCommandType];
-    console.log(boolOrArrayString);
+    const commandRegExp = new RegExp(`(^${growiCommandType}$)|(^${growiCommandType}:\\w+)`);
+
+    // skip this forEach loop if the requested command is not in permissionsForBroadcastUseCommands
+    if (!commandRegExp.test(growiCommandType)) {
+      console.log(209);
+      return false;
+    }
+    console.log(relation.supportedCommandsForSingleUse, 83);
+    console.log(relation.supportedCommandsForSingleUse[growiCommandType], 84);
+
+    const permission = relation.supportedCommandsForSingleUse[growiCommandType];
+    console.log(permission, 76);
+
+    if (permission == null) {
+      console.log(88);
 
 
-    if (boolOrArrayString == null) {
       return false;
       return false;
     }
     }
     console.log(81, channelName);
     console.log(81, channelName);
 
 
-    if (Array.isArray(boolOrArrayString)) {
+    if (Array.isArray(permission)) {
 
 
-      return boolOrArrayString.includes(channelName);
+      return permission.includes(channelName);
     }
     }
     console.log(84);
     console.log(84);
 
 
-    return boolOrArrayString;
+    return permission;
   }
   }
 
 
   async isSupportedGrowiCommandForBroadcastUse(relation:RelationMock, growiCommandType:string, channelName:string, baseDate:Date):Promise<boolean> {
   async isSupportedGrowiCommandForBroadcastUse(relation:RelationMock, growiCommandType:string, channelName:string, baseDate:Date):Promise<boolean> {
@@ -94,17 +107,30 @@ export class RelationsService {
     if (syncedRelation == null) {
     if (syncedRelation == null) {
       return false;
       return false;
     }
     }
-    const boolOrArrayString = relation.supportedCommandsForBroadcastUse[growiCommandType];
 
 
-    if (boolOrArrayString == null) {
+    const commandRegExp = new RegExp(`(^${growiCommandType}$)|(^${growiCommandType}:\\w+)`);
+
+    // skip this forEach loop if the requested command is not in permissionsForSingleUseCommandskey
+    if (!commandRegExp.test(growiCommandType)) {
+      console.log(183);
+
+      return false;
+    }
+    console.log(119);
+
+    const permission = relation.supportedCommandsForBroadcastUse[growiCommandType];
+    console.log(permission);
+
+
+    if (permission == null) {
       return false;
       return false;
     }
     }
 
 
-    if (Array.isArray(boolOrArrayString)) {
-      return boolOrArrayString.includes(channelName);
+    if (Array.isArray(permission)) {
+      return permission.includes(channelName);
     }
     }
 
 
-    return boolOrArrayString;
+    return permission;
   }
   }
 
 
 }
 }