Explorar el Código

implement middlewares

itizawa hace 4 años
padre
commit
0d2214a94d

+ 4 - 9
packages/slackbot-proxy/src/controllers/slack.ts

@@ -17,6 +17,7 @@ import { RelationRepository } from '~/repositories/relation';
 import { OrderRepository } from '~/repositories/order';
 import { AddSigningSecretToReq } from '~/middlewares/slack-to-growi/add-signing-secret-to-req';
 import { AuthorizeCommandMiddleware, AuthorizeInteractionMiddleware } from '~/middlewares/slack-to-growi/authorizer';
+import { ExtractGrowiUriFromReq } from '~/middlewares/slack-to-growi/extract-growi-uri-from-req';
 import { InstallerService } from '~/services/InstallerService';
 import { RegisterService } from '~/services/RegisterService';
 import { UnregisterService } from '~/services/UnregisterService';
@@ -164,7 +165,7 @@ export class SlackCtrl {
   }
 
   @Post('/interactions')
-  @UseBefore(AuthorizeInteractionMiddleware)
+  @UseBefore(AuthorizeInteractionMiddleware, ExtractGrowiUriFromReq)
   async handleInteraction(@Req() req: SlackOauthReq, @Res() res: Res): Promise<void|string|Res|WebAPICallResult> {
     logger.info('receive interaction', req.body);
     logger.info('receive interaction', req.authorizeResult);
@@ -213,15 +214,9 @@ export class SlackCtrl {
     /*
     * forward to GROWI server
     */
-
-    let growiUri;
-    // For Modal, Send request to only one GROWI
-    if (payload.view != null) {
-      growiUri = JSON.parse(payload.view.private_metadata).growiUri;
-    }
     console.log(payload.actions);
 
-    const relation = await this.relationRepository.findOne({ installation, growiUri });
+    const relation = await this.relationRepository.findOne({ installation, growiUri: req.growiUri });
 
     if (relation == null) {
       logger.error('*No relation found.*');
@@ -230,7 +225,7 @@ export class SlackCtrl {
 
     try {
       // generate API URL
-      const url = new URL('/_api/v3/slack-integration/proxied/interactions', growiUri);
+      const url = new URL('/_api/v3/slack-integration/proxied/interactions', req.growiUri);
       await axios.post(url.toString(), {
         ...body,
       }, {

+ 1 - 0
packages/slackbot-proxy/src/interfaces/slack-to-growi/slack-oauth-req.ts

@@ -3,4 +3,5 @@ import { Req } from '@tsed/common';
 
 export type SlackOauthReq = Req & {
   authorizeResult: AuthorizeResult,
+  growiUri?: string,
 };

+ 21 - 0
packages/slackbot-proxy/src/middlewares/slack-to-growi/extract-growi-uri-from-req.ts

@@ -0,0 +1,21 @@
+import {
+  IMiddleware, Middleware, Next, Req, Res,
+} from '@tsed/common';
+import { SlackOauthReq } from '~/interfaces/slack-to-growi/slack-oauth-req';
+
+@Middleware()
+export class ExtractGrowiUriFromReq implements IMiddleware {
+
+  use(@Req() req: Req & SlackOauthReq, @Res() res: Res, @Next() next: Next): void {
+    console.log('hoge');
+    const payload = JSON.parse(req.body.payload);
+
+    // For Modal, Send request to only one GROWI
+    if (payload.view != null) {
+      req.growiUri = JSON.parse(payload.view.private_metadata).growiUri;
+    }
+
+    next();
+  }
+
+}