Yuki Takei 4 лет назад
Родитель
Сommit
501938ef7f

+ 1 - 1
packages/slackbot-proxy/src/controllers/growi-to-slack.ts

@@ -175,7 +175,7 @@ export class GrowiToSlackCtrl {
 
     // TODO: iterate with decorator
     const vipd = new ViewInteractionPayloadDelegator();
-    if (vipd.shouldHandleToInject(req.body)) {
+    if (vipd.shouldHandleToInject(req)) {
       vipd.inject(req.body, growiUri);
     }
     else if (req.body.blocks != null) {

+ 4 - 2
packages/slackbot-proxy/src/interfaces/growi-to-slack/growi-uri-injector.ts

@@ -1,3 +1,5 @@
+import { Req } from '@tsed/common';
+import { SlackOauthReq } from '../slack-to-growi/slack-oauth-req';
 
 export type GrowiUriWithOriginalData = {
   growiUri: string,
@@ -16,10 +18,10 @@ export const isGrowiUriWithOriginalData = (data: any): data is GrowiUriWithOrigi
 
 export interface GrowiUriInjector<IB, EP> {
 
-  shouldHandleToInject(body: any): boolean;
+  shouldHandleToInject(req: Req): boolean;
   inject(body: IB, growiUri:string): void;
 
-  shouldHandleToExtract(body: any): boolean;
+  shouldHandleToExtract(req: Req & SlackOauthReq): boolean;
   extract(payload: EP): GrowiUriWithOriginalData;
 
 }

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

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

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

@@ -15,12 +15,13 @@ export class ExtractGrowiUriFromReq implements IMiddleware {
       return next();
     }
 
-    const payload = JSON.parse(req.body.payload);
+    const parsedPayload = JSON.parse(req.body.payload);
+    req.parsedPayload = parsedPayload;
 
     // TODO: iterate with decorator
     const vipd = new ViewInteractionPayloadDelegator();
-    if (vipd.shouldHandleToExtract(payload)) {
-      const data = vipd.extract(payload);
+    if (vipd.shouldHandleToExtract(req)) {
+      const data = vipd.extract(req.parsedPayload);
       req.growiUri = data.growiUri;
     }
     // else {
@@ -37,8 +38,6 @@ export class ExtractGrowiUriFromReq implements IMiddleware {
     //   }
     // }
 
-    req.body.payload = JSON.stringify(payload);
-
     return next();
   }
 

+ 7 - 4
packages/slackbot-proxy/src/services/growi-uri-injector/ViewInteractionPayloadDelegator.ts

@@ -1,10 +1,13 @@
+import { Req } from '@tsed/common';
+
 import { GrowiUriInjector, GrowiUriWithOriginalData, isGrowiUriWithOriginalData } from '~/interfaces/growi-to-slack/growi-uri-injector';
+import { SlackOauthReq } from '~/interfaces/slack-to-growi/slack-oauth-req';
 
 export class ViewInteractionPayloadDelegator implements GrowiUriInjector<{view: string}, {view: {'private_metadata': string}}> {
 
   // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
-  shouldHandleToInject(body: any): boolean {
-    return body.view != null;
+  shouldHandleToInject(req: Req): boolean {
+    return req.body.view != null;
   }
 
   inject(body: {view: string}, growiUri:string): void {
@@ -18,8 +21,8 @@ export class ViewInteractionPayloadDelegator implements GrowiUriInjector<{view:
   }
 
   // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
-  shouldHandleToExtract(payload: {type: string, view?: any}): boolean {
-    const { type, view } = payload;
+  shouldHandleToExtract(req: Req & SlackOauthReq): boolean {
+    const { type, view } = req.parsedPayload;
     if (type !== 'view_submission') {
       return false;
     }