Просмотр исходного кода

Merge pull request #3886 from weseek/fix/6285-6288-return-ok-in-web-client-response

Fix/6285 6288 return ok in web client response
Yuki Takei 4 лет назад
Родитель
Сommit
b3c685da94

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

@@ -9,6 +9,8 @@ import {
   verifyGrowiToSlackRequest, getConnectionStatuses, getConnectionStatus, generateWebClient,
   verifyGrowiToSlackRequest, getConnectionStatuses, getConnectionStatus, generateWebClient,
 } from '@growi/slack';
 } from '@growi/slack';
 
 
+import { WebclientRes, AddWebclientResponseToRes } from '~/middlewares/slack-to-growi/add-webclient-response-to-res';
+
 import { GrowiReq } from '~/interfaces/growi-to-slack/growi-req';
 import { GrowiReq } from '~/interfaces/growi-to-slack/growi-req';
 import { InstallationRepository } from '~/repositories/installation';
 import { InstallationRepository } from '~/repositories/installation';
 import { RelationRepository } from '~/repositories/relation';
 import { RelationRepository } from '~/repositories/relation';
@@ -162,12 +164,14 @@ export class GrowiToSlackCtrl {
   }
   }
 
 
   @Post('/:method')
   @Post('/:method')
-  @UseBefore(verifyGrowiToSlackRequest)
-  async postResult(@PathParams('method') method: string, @Req() req: GrowiReq, @Res() res: Res): Promise<void|string|Res|WebAPICallResult> {
+  @UseBefore(AddWebclientResponseToRes, verifyGrowiToSlackRequest)
+  async postResult(
+    @PathParams('method') method: string, @Req() req: GrowiReq, @Res() res: WebclientRes,
+  ): Promise<void|string|Res|WebAPICallResult> {
     const { tokenGtoPs } = req;
     const { tokenGtoPs } = req;
 
 
     if (tokenGtoPs.length !== 1) {
     if (tokenGtoPs.length !== 1) {
-      return res.status(400).send({ message: 'tokenGtoPs is invalid' });
+      return res.webClientErr('tokenGtoPs is invalid', 'invalid_tokenGtoP');
     }
     }
 
 
     const tokenGtoP = tokenGtoPs[0];
     const tokenGtoP = tokenGtoPs[0];
@@ -179,12 +183,12 @@ export class GrowiToSlackCtrl {
       .getOne();
       .getOne();
 
 
     if (relation == null) {
     if (relation == null) {
-      return res.status(400).send({ message: 'relation is invalid' });
+      return res.webClientErr('relation is invalid', 'invalid_relation');
     }
     }
 
 
     const token = relation.installation.data.bot?.token;
     const token = relation.installation.data.bot?.token;
     if (token == null) {
     if (token == null) {
-      return res.status(400).send({ message: 'installation is invalid' });
+      return res.webClientErr('installation is invalid', 'invalid_installation');
     }
     }
 
 
     const client = generateWebClient(token);
     const client = generateWebClient(token);
@@ -196,13 +200,13 @@ export class GrowiToSlackCtrl {
     }
     }
     catch (err) {
     catch (err) {
       logger.error(err);
       logger.error(err);
-      return res.status(400).send({ message: `failed to send to slack. err: ${err.message}` });
+      return res.webClientErr(`failed to send to slack. err: ${err.message}`, 'fail_api_call');
     }
     }
 
 
     logger.debug('send to slack is success');
     logger.debug('send to slack is success');
 
 
     // required to return ok for apiCall
     // required to return ok for apiCall
-    return res.send({ ok: true });
+    return res.webClient();
   }
   }
 
 
 }
 }

+ 28 - 0
packages/slackbot-proxy/src/middlewares/slack-to-growi/add-webclient-response-to-res.ts

@@ -0,0 +1,28 @@
+import {
+  IMiddleware, Middleware, Next, Req, Res,
+} from '@tsed/common';
+
+
+export type WebclientRes = Res & {
+  webClient: () => void,
+  webClientErr: (message?:string, errorCode?:string) => void
+};
+
+
+@Middleware()
+export class AddWebclientResponseToRes implements IMiddleware {
+
+  use(@Req() req: Req, @Res() res: WebclientRes, @Next() next: Next): void {
+
+    res.webClient = () => {
+      return res.send({ ok: true });
+    };
+
+    res.webClientErr = (error?:string, errorCode?:string) => {
+      return res.send({ ok: false, error, errorCode });
+    };
+
+    next();
+  }
+
+}