diff --git a/api/package.json b/api/package.json index 1b17a01c3afc8aeba2839e3d0a6e396d39480a00..5dbfdbc5d41e5c2bad6217133efdb6f8fec1c4e1 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "gateway", - "version": "1.0.1", + "version": "1.0.2", "description": "", "author": "", "private": true, diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts index 5733366f9125337a555ff7f7df7faad52dae6627..990d51ce99a55f518e47cdd1713671670e869231 100644 --- a/api/src/engine/connectors/exareme/main.connector.ts +++ b/api/src/engine/connectors/exareme/main.connector.ts @@ -8,6 +8,7 @@ import { } from '@nestjs/common'; import { REQUEST } from '@nestjs/core'; import { Request } from 'express'; +import { IncomingMessage } from 'http'; import { firstValueFrom, map, Observable } from 'rxjs'; import { ENGINE_MODULE_OPTIONS } from 'src/engine/engine.constants'; import { IEngineOptions, IEngineService } from 'src/engine/engine.interfaces'; @@ -37,16 +38,23 @@ import { Pathology } from './interfaces/pathology.interface'; @Injectable() export default class ExaremeService implements IEngineService { + headers = {}; constructor( @Inject(ENGINE_MODULE_OPTIONS) private readonly options: IEngineOptions, private readonly httpService: HttpService, - @Inject(REQUEST) private readonly req: Request, - ) {} + @Inject(REQUEST) private readonly req: Request, //TODO: remove inject, set request from manually take care of graphql request + ) { + const gqlRequest = req['req']; // graphql headers exception + this.headers = + gqlRequest && gqlRequest instanceof IncomingMessage + ? gqlRequest.headers + : req.headers; + } async logout() { const path = `${this.options.baseurl}logout`; - await firstValueFrom(this.httpService.get(path)); + await firstValueFrom(this.httpService.get(path, { headers: this.headers })); } async createExperiment( @@ -59,7 +67,9 @@ export default class ExaremeService implements IEngineService { this.options.baseurl + `experiments${isTransient ? '/transient' : ''}`; const resultAPI = await firstValueFrom( - this.httpService.post<ExperimentData>(path, form), + this.httpService.post<ExperimentData>(path, form, { + headers: this.headers, + }), ); return dataToExperiment(resultAPI.data); @@ -69,7 +79,10 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + 'experiments'; const resultAPI = await firstValueFrom( - this.httpService.get<ExperimentsData>(path, { params: { page, name } }), + this.httpService.get<ExperimentsData>(path, { + params: { page, name }, + headers: this.headers, + }), ); return { @@ -81,7 +94,11 @@ export default class ExaremeService implements IEngineService { async getAlgorithms(): Promise<Algorithm[]> { const path = this.options.baseurl + 'algorithms'; - const resultAPI = await firstValueFrom(this.httpService.get<string>(path)); + const resultAPI = await firstValueFrom( + this.httpService.get<string>(path, { + headers: this.headers, + }), + ); return dataToAlgorithms(resultAPI.data); } @@ -90,7 +107,9 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + `experiments/${id}`; const resultAPI = await firstValueFrom( - this.httpService.get<ExperimentData>(path), + this.httpService.get<ExperimentData>(path, { + headers: this.headers, + }), ); return dataToExperiment(resultAPI.data); @@ -103,7 +122,9 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + `experiments/${id}`; const resultAPI = await firstValueFrom( - this.httpService.patch<ExperimentData>(path, expriment), + this.httpService.patch<ExperimentData>(path, expriment, { + headers: this.headers, + }), ); return dataToExperiment(resultAPI.data); @@ -113,7 +134,11 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + `experiments/${id}`; try { - await firstValueFrom(this.httpService.delete(path)); + await firstValueFrom( + this.httpService.delete(path, { + headers: this.headers, + }), + ); return { id: id, }; @@ -127,7 +152,9 @@ export default class ExaremeService implements IEngineService { try { const data = await firstValueFrom( - this.httpService.get<Pathology[]>(path), + this.httpService.get<Pathology[]>(path, { + headers: this.headers, + }), ); return ( @@ -160,7 +187,9 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + 'activeUser'; return this.httpService - .get<string>(path) + .get<string>(path, { + headers: this.req.headers, + }) .pipe(map((response) => response.data)); } @@ -168,7 +197,9 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + 'activeUser/agreeNDA'; return this.httpService - .post<string>(path, this.req.body) + .post<string>(path, this.req.body, { + headers: this.req.headers, + }) .pipe(map((response) => response.data)); } @@ -176,21 +207,29 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + `experiments/${id}`; return this.httpService - .get<string>(path) + .get<string>(path, { + headers: this.req.headers, + }) .pipe(map((response) => response.data)); } deleteExperiment(id: string): Observable<string> { const path = this.options.baseurl + `experiments/${id}`; - return this.httpService.delete(path).pipe(map((response) => response.data)); + return this.httpService + .delete(path, { + headers: this.req.headers, + }) + .pipe(map((response) => response.data)); } editExperimentREST(id: string): Observable<string> { const path = this.options.baseurl + `experiments/${id}`; return this.httpService - .patch(path, this.req.body) + .patch(path, this.req.body, { + headers: this.req.headers, + }) .pipe(map((response) => response.data)); } @@ -198,7 +237,9 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + 'experiments/transient'; return this.httpService - .post(path, this.req.body) + .post(path, this.req.body, { + headers: this.req.headers, + }) .pipe(map((response) => response.data)); } @@ -206,7 +247,9 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + 'experiments'; return this.httpService - .post(path, this.req.body) + .post(path, this.req.body, { + headers: this.req.headers, + }) .pipe(map((response) => response.data)); } @@ -214,7 +257,7 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + 'experiments'; return this.httpService - .get<string>(path, { params: this.req.query }) + .get<string>(path, { params: this.req.query, headers: this.headers }) .pipe(map((response) => response.data)); } @@ -222,7 +265,15 @@ export default class ExaremeService implements IEngineService { const path = this.options.baseurl + 'algorithms'; return this.httpService - .get<string>(path, { params: this.req.query }) + .get<string>(path, { params: this.req.query, headers: this.headers }) + .pipe(map((response) => response.data)); + } + + getPassthrough(suffix: string): string | Observable<string> { + const path = this.options.baseurl + suffix; + + return this.httpService + .get<string>(path, { params: this.req.query, headers: this.headers }) .pipe(map((response) => response.data)); } diff --git a/api/src/engine/engine.controller.ts b/api/src/engine/engine.controller.ts index a750538507388330a0407e4ef7f91700dc0b575b..4cb7c149e11fe6e4718fb63a5bf401658f0a9fa1 100644 --- a/api/src/engine/engine.controller.ts +++ b/api/src/engine/engine.controller.ts @@ -6,14 +6,11 @@ import { Param, Patch, Post, - UseInterceptors, } from '@nestjs/common'; import { Observable } from 'rxjs'; import { ENGINE_SERVICE } from './engine.constants'; import { IEngineService } from './engine.interfaces'; -import { HeadersInterceptor } from './interceptors/headers.interceptor'; -@UseInterceptors(HeadersInterceptor) @Controller() export class EngineController { constructor( diff --git a/api/src/engine/engine.resolver.ts b/api/src/engine/engine.resolver.ts index ffed50e6467832491d03cf51cab35d6cc2292173..3e6a410e4c66543f5c29e1f84eae4264179381c0 100644 --- a/api/src/engine/engine.resolver.ts +++ b/api/src/engine/engine.resolver.ts @@ -1,8 +1,7 @@ -import { Inject, UseInterceptors } from '@nestjs/common'; +import { Inject } from '@nestjs/common'; import { Args, Mutation, Query, Resolver } from '@nestjs/graphql'; import { ENGINE_SERVICE } from './engine.constants'; import { IEngineService } from './engine.interfaces'; -import { HeadersInterceptor } from './interceptors/headers.interceptor'; import { Domain } from './models/domain.model'; import { Algorithm } from './models/experiment/algorithm.model'; import { @@ -13,7 +12,6 @@ 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(HeadersInterceptor) @Resolver() export class EngineResolver { constructor(