From b394bf011f605715bf04e532f32d246cb0989081 Mon Sep 17 00:00:00 2001
From: stevereis <stevereis93@gmail.com>
Date: Thu, 17 Feb 2022 11:03:44 +0100
Subject: [PATCH] fix: Add errors catcher for external API calls

---
 api/src/engine/engine.controller.ts           |  4 ++-
 api/src/engine/engine.resolver.ts             |  4 ++-
 ...s.interceptor.ts => errors.interceptor.ts} | 35 ++-----------------
 3 files changed, 8 insertions(+), 35 deletions(-)
 rename api/src/engine/interceptors/{headers.interceptor.ts => errors.interceptor.ts} (52%)

diff --git a/api/src/engine/engine.controller.ts b/api/src/engine/engine.controller.ts
index 4cb7c14..70619c2 100644
--- a/api/src/engine/engine.controller.ts
+++ b/api/src/engine/engine.controller.ts
@@ -6,11 +6,13 @@ import {
   Param,
   Patch,
   Post,
+  UseInterceptors,
 } from '@nestjs/common';
 import { Observable } from 'rxjs';
 import { ENGINE_SERVICE } from './engine.constants';
 import { IEngineService } from './engine.interfaces';
-
+import { ErrorsInterceptor } from './interceptors/errors.interceptor';
+@UseInterceptors(ErrorsInterceptor)
 @Controller()
 export class EngineController {
   constructor(
diff --git a/api/src/engine/engine.resolver.ts b/api/src/engine/engine.resolver.ts
index 3e6a410..fc2a736 100644
--- a/api/src/engine/engine.resolver.ts
+++ b/api/src/engine/engine.resolver.ts
@@ -1,7 +1,8 @@
-import { Inject } from '@nestjs/common';
+import { Inject, UseInterceptors } from '@nestjs/common';
 import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
 import { ENGINE_SERVICE } from './engine.constants';
 import { IEngineService } from './engine.interfaces';
+import { ErrorsInterceptor } from './interceptors/errors.interceptor';
 import { Domain } from './models/domain.model';
 import { Algorithm } from './models/experiment/algorithm.model';
 import {
@@ -12,6 +13,7 @@ import { ExperimentCreateInput } from './models/experiment/input/experiment-crea
 import { ExperimentEditInput } from './models/experiment/input/experiment-edit.input';
 import { ListExperiments } from './models/experiment/list-experiments.model';
 
+@UseInterceptors(ErrorsInterceptor)
 @Resolver()
 export class EngineResolver {
   constructor(
diff --git a/api/src/engine/interceptors/headers.interceptor.ts b/api/src/engine/interceptors/errors.interceptor.ts
similarity index 52%
rename from api/src/engine/interceptors/headers.interceptor.ts
rename to api/src/engine/interceptors/errors.interceptor.ts
index 385d6e5..528e62a 100644
--- a/api/src/engine/interceptors/headers.interceptor.ts
+++ b/api/src/engine/interceptors/errors.interceptor.ts
@@ -8,13 +8,12 @@ import {
   NestInterceptor,
 } from '@nestjs/common';
 import { GqlExecutionContext } from '@nestjs/graphql';
-import { IncomingMessage } from 'http';
-import { catchError, Observable, tap } from 'rxjs';
+import { catchError, Observable } from 'rxjs';
 import { ENGINE_MODULE_OPTIONS } from '../engine.constants';
 import { IEngineOptions } from '../engine.interfaces';
 
 @Injectable()
-export class HeadersInterceptor implements NestInterceptor {
+export class ErrorsInterceptor implements NestInterceptor {
   private readonly logger: Logger;
 
   constructor(
@@ -27,33 +26,6 @@ export class HeadersInterceptor implements NestInterceptor {
   }
 
   intercept(context: GqlExecutionContext, next: CallHandler): Observable<any> {
-    // cleaner : add only the auth header (should find the name)
-
-    const keys = ['cookie', 'x-xsrf-token']; // should be a module parameter
-    let headers = {};
-
-    switch (context.getType()) {
-      case 'http': {
-        const ctx = context.switchToHttp();
-        const request = ctx.getRequest<Request>();
-        headers = request.headers;
-        break;
-      }
-      case 'graphql': {
-        const ctx = GqlExecutionContext.create(context);
-        const req: IncomingMessage = ctx.getContext().req;
-        headers = req.headers;
-        break;
-      }
-    }
-
-    Object.keys(headers) // copy needed keys
-      .filter((key) => keys.includes(key))
-      .map((key) => key.toLowerCase())
-      .forEach((key) => {
-        this.httpService.axiosRef.defaults.headers.common[key] = headers[key];
-      });
-
     return next.handle().pipe(
       catchError((e) => {
         if (!e.response || !e.response.data || !e.response.status) throw e;
@@ -64,9 +36,6 @@ export class HeadersInterceptor implements NestInterceptor {
         );
         throw new HttpException(e.response.data, e.response.status); // catch errors, maybe make it optional (module parameter)
       }),
-      tap(() => {
-        this.httpService.axiosRef.defaults.headers.common = {}; // cleaning request
-      }),
     );
   }
 }
-- 
GitLab