kaori 4 лет назад
Родитель
Сommit
03787e2ef8

+ 14 - 4
src/server/models/slack-app-integration.js

@@ -15,10 +15,20 @@ class SlackAppIntegration {
     return [tokenGtoP.digest('base64'), tokenPtoG.digest('base64')];
   }
 
-  static generateUniqueAccessTokens() {
-    const generateTokens = this.generateAccessTokens();
-    const tokenGtoP = generateTokens[0];
-    const tokenPtoG = generateTokens[1];
+  static async generateUniqueAccessTokens() {
+    let duplicateTokens;
+    let tokenGtoP;
+    let tokenPtoG;
+    let generateTokens;
+
+    do {
+      generateTokens = this.generateAccessTokens();
+      tokenGtoP = generateTokens[0];
+      tokenPtoG = generateTokens[1];
+      // eslint-disable-next-line no-await-in-loop
+      duplicateTokens = await this.findOne({ $or: [{ tokenGtoP }, { tokenPtoG }] });
+    } while (duplicateTokens != null);
+
 
     return { tokenGtoP, tokenPtoG };
   }

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

@@ -383,14 +383,14 @@ module.exports = (crowi) => {
       return res.apiv3Err(new ErrorV3(msg, 'create-slackAppIntegeration-failed'), 500);
     }
 
-    const { tokenGtoP, tokenPtoG } = SlackAppIntegration.generateUniqueAccessTokens();
+    const { tokenGtoP, tokenPtoG } = await SlackAppIntegration.generateUniqueAccessTokens();
 
     try {
       const slackAppTokens = await SlackAppIntegration.create({ tokenGtoP, tokenPtoG });
       return res.apiv3(slackAppTokens, 200);
     }
     catch (error) {
-      const msg = 'Error occured in updating access token for slack app tokens';
+      const msg = 'Error occured in creating slack app integration';
       logger.error('Error', error);
       return res.apiv3Err(new ErrorV3(msg, 'update-slackAppTokens-failed'), 500);
     }