diff --git a/api/src/engine/interceptors/headers.interceptor.ts b/api/src/engine/interceptors/headers.interceptor.ts index c51b5caabda1c87b2fbdfee0f384d44cdd17f04e..9b28e4953456de5d9bc66a390c9cf452cf45306f 100644 --- a/api/src/engine/interceptors/headers.interceptor.ts +++ b/api/src/engine/interceptors/headers.interceptor.ts @@ -1,13 +1,8 @@ import { HttpService } from '@nestjs/axios'; -import { - Injectable, - NestInterceptor, - ExecutionContext, - CallHandler, -} from '@nestjs/common'; +import { Injectable, NestInterceptor, CallHandler } from '@nestjs/common'; import { GqlExecutionContext } from '@nestjs/graphql'; import { IncomingMessage } from 'http'; -import { Observable } from 'rxjs'; +import { Observable, tap } from 'rxjs'; @Injectable() export class HeadersInterceptor implements NestInterceptor { @@ -16,21 +11,35 @@ 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']; + let headers = {}; + switch (context.getType()) { case 'http': { const ctx = context.switchToHttp(); const request = ctx.getRequest<Request>(); - this.httpService.axiosRef.defaults.headers = request.headers; + headers = request.headers; break; } case 'graphql': { const ctx = GqlExecutionContext.create(context); const req: IncomingMessage = ctx.getContext().req; - this.httpService.axiosRef.defaults.headers = req.headers; + headers = req.headers; break; } } - return next.handle(); + Object.keys(headers) + .filter((key) => keys.includes(key)) + .map((key) => key.toLowerCase()) + .forEach((key) => { + this.httpService.axiosRef.defaults.headers.common[key] = headers[key]; + }); + + return next.handle().pipe( + tap(() => { + this.httpService.axiosRef.defaults.headers.common = {}; //cleaning request + }), + ); } }