/*********************************************************************
 * Copyright (c) 2019 Red Hat, Inc.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 **********************************************************************/ import axios , { AxiosResponse , AxiosRequestConfig } from 'axios' ; import { TestConstants } from '../../TestConstants' ; import { TYPES } from '../../inversify.types' ; import { inject , injectable } from 'inversify' ; import { IAuthorizationHeaderHandler } from './headers/IAuthorizationHeaderHandler' ; @ injectable ( ) export class CheApiRequestHandler { /**
     * This method adds a request interceptor into axios request interceptors list and returns an ID of the interceptor
     */ public static enableRequestInteceptor ( ) { console . log ( `CheApiRequestHandler.enableRequestInterceptor` ) ; return axios . interceptors . request . use ( request => { try { let request_censored = JSON . parse ( JSON . stringify ( request ) ) ; request_censored . headers . Authorization = 'CENSORED' ; console . log ( `RequestHandler request:\n` , request_censored ) ; } catch ( err ) { console . log ( `RequestHandler request: Failed to deep clone AxiosRequestConfig:` , err ) ; } return request ; } ) ; } /**
     * This method adds a response interceptor into axios response interceptors list and returns an ID of the interceptor
     */ public static enableResponseInterceptor ( ) { console . log ( `CheApiRequestHandler.enableResponseRedirects` ) ; return axios . interceptors . response . use ( response => { try { let response_censored = JSON . parse ( JSON . stringify ( response , ( key , value ) => { switch ( key ) { case 'request' : return 'CENSORED' ; default : return value ; } } ) ) ; response_censored . config . headers . Authorization = 'CENSORED' ; if ( response_censored . data . access_token != null ) { response_censored . data . access_token = 'CENSORED' ; } if ( response_censored . data . refresh_token != null ) { response_censored . data . refresh_token = 'CENSORED' ; } console . log ( `RequestHandler response:\n` , response_censored ) ; } catch ( err ) { console . log ( `RequestHandler response: Failed to deep clone AxiosResponse:` , err ) ; } return response ; } ) ; } constructor ( @ inject ( TYPES . IAuthorizationHeaderHandler ) private readonly headerHandler ) { } async get ( relativeUrl ) { return await axios . get ( this . assembleUrl ( relativeUrl ) , await this . headerHandler . get ( ) ) ; } async post ( relativeUrl , data ? ) { return await axios . post ( this . assembleUrl ( relativeUrl ) , data , await this . headerHandler . get ( ) ) ; } async delete ( relativeUrl ) { return await axios . delete ( this . assembleUrl ( relativeUrl ) , await this . headerHandler . get ( ) ) ; } private assembleUrl ( relativeUrl ) { return `${ TestConstants . TS_SELENIUM_BASE_URL }/${ relativeUrl }` ; } }