Browse Source

delegater util and clean unuse code

zahmis 4 năm trước cách đây
mục cha
commit
9a5838a6d1
1 tập tin đã thay đổi với 4 bổ sung38 xóa
  1. 4 38
      packages/app/src/server/routes/apiv3/slack-integration.js

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

@@ -10,6 +10,7 @@ const logger = loggerFactory('growi:routes:apiv3:slack-integration');
 const router = express.Router();
 const SlackAppIntegration = mongoose.model('SlackAppIntegration');
 const { respondIfSlackbotError } = require('../../service/slack-command-handler/respond-if-slackbot-error');
+const { checkPermission } = require('../../util/slack-integration');
 
 module.exports = (crowi) => {
   this.app = crowi.express;
@@ -44,32 +45,6 @@ module.exports = (crowi) => {
     next();
   }
 
-  const checkPermission = (commandPermission, commandOrActionOrCallback, fromChannel) => {
-    let isPermitted = false;
-
-    Object.entries(commandPermission).forEach((entry) => {
-      const [command, value] = entry;
-      const permission = value;
-      const commandRegExp = new RegExp(`(^${command}$)|(^${command}:\\w+)`);
-
-      if (!commandRegExp.test(commandOrActionOrCallback)) {
-        return;
-      }
-
-      // permission check
-      if (permission === true) {
-        isPermitted = true;
-        return;
-      }
-      if (Array.isArray(permission) && permission.includes(fromChannel)) {
-        isPermitted = true;
-        return;
-      }
-    });
-
-    return isPermitted;
-  };
-
   async function extractPermissionsCommands(tokenPtoG) {
     const slackAppIntegration = await SlackAppIntegration.findOne({ tokenPtoG });
     const permissionsForBroadcastUseCommands = slackAppIntegration.permissionsForBroadcastUseCommands;
@@ -78,21 +53,13 @@ module.exports = (crowi) => {
     return { permissionsForBroadcastUseCommands, permissionsForSingleUseCommands };
   }
 
-  const convertObjectToObject = (permissionsForBroadcastUseCommands, permissionsForSingleUseCommands) => {
-    const commandPermissionArray = [...permissionsForBroadcastUseCommands, ...permissionsForSingleUseCommands];
-    const commandPermission = {};
-    commandPermissionArray.forEach((elem) => { commandPermission[elem[0]] = elem[1] });
-    return commandPermission;
-  };
 
   async function checkCommandsPermission(req, res, next) {
     if (req.body.text == null) return next(); // when /relation-test
 
     const tokenPtoG = req.headers['x-growi-ptog-tokens'];
     const { permissionsForBroadcastUseCommands, permissionsForSingleUseCommands } = await extractPermissionsCommands(tokenPtoG);
-
-    // Return type is object. This is for use in checkPermision arg
-    const commandPermission = convertObjectToObject(permissionsForBroadcastUseCommands, permissionsForSingleUseCommands);
+    const commandPermission = Object.fromEntries([...permissionsForBroadcastUseCommands, ...permissionsForSingleUseCommands]);
 
     const command = parseSlashCommand(req.body).growiCommandType;
     const fromChannel = req.body.channel_name;
@@ -121,10 +88,9 @@ module.exports = (crowi) => {
 
     const tokenPtoG = req.headers['x-growi-ptog-tokens'];
     const { permissionsForBroadcastUseCommands, permissionsForSingleUseCommands } = await extractPermissionsCommands(tokenPtoG);
-
-    // Return type is object. This is for use in checkPermision arg
-    const commandPermission = convertObjectToObject(permissionsForBroadcastUseCommands, permissionsForSingleUseCommands);
+    const commandPermission = Object.fromEntries([...permissionsForBroadcastUseCommands, ...permissionsForSingleUseCommands]);
     const callbacIdkOrActionId = callbackId || actionId;
+
     const isPermitted = checkPermission(commandPermission, callbacIdkOrActionId, fromChannel);
     if (isPermitted) return next();