diff --git a/Common/Utils/API.ts b/Common/Utils/API.ts index 8e618c6911..e6a0f56ca1 100644 --- a/Common/Utils/API.ts +++ b/Common/Utils/API.ts @@ -243,11 +243,32 @@ export default class API { } try { + const finalHeaders: Dictionary = { + ...apiHeaders, + ...headers, + }; + + let finalBody: + | JSONObject + | JSONArray + | URLSearchParams + | undefined = data; + + // if content-type is form-url-encoded, then stringify the data + + if ( + finalHeaders['Content-Type'] === + 'application/x-www-form-urlencoded' && + data + ) { + finalBody = new URLSearchParams(data as Dictionary); + } + const result: AxiosResponse = await axios({ method: method, url: url.toString(), - headers: { ...apiHeaders, ...headers }, - data, + headers: finalHeaders, + data: finalBody, }); result.headers = await this.onResponseSuccessHeaders( diff --git a/TestServer/API/Main.ts b/TestServer/API/Main.ts index 80f344919e..e0e6510afc 100644 --- a/TestServer/API/Main.ts +++ b/TestServer/API/Main.ts @@ -20,49 +20,68 @@ router.get( res: ExpressResponse, next: NextFunction ): Promise => { - try { - logger.info('Request Headers: '); - logger.info(req.headers); - logger.info('Request Body: '); - logger.info(req.body); - - const responseCode: number | undefined = - LocalCache.getNumber('TestServer', 'responseCode') || 200; - const responseTime: number | undefined = - LocalCache.getNumber('TestServer', 'responseTime') || 0; - const responseBody: string | undefined = - LocalCache.getString('TestServer', 'responseBody') || ''; - let responseHeaders: JSONValue | undefined = - LocalCache.getJSON('TestServer', 'responseHeaders') || {}; - - logger.info('Response Code: ' + responseCode); - logger.info('Response Time: ' + responseTime); - logger.info('Response Body: '); - logger.info(responseBody); - logger.info('Response Headers: '); - logger.info(responseHeaders); - - if (responseHeaders && typeof responseHeaders === Typeof.String) { - responseHeaders = JSON.parse(responseHeaders.toString()); - } - - if (responseTime > 0) { - await Sleep.sleep(responseTime); - } - - // middleware marks the probe as alive. - // so we don't need to do anything here. - return Response.sendCustomResponse( - req, - res, - responseCode, - responseBody, - responseHeaders ? (responseHeaders as any) : {} - ); - } catch (err) { - return next(err); - } + await returnResponse(req, res, next); } ); +router.post( + '/', + async ( + req: ExpressRequest, + res: ExpressResponse, + next: NextFunction + ): Promise => { + await returnResponse(req, res, next); + } +); + +const returnResponse: Function = async ( + req: ExpressRequest, + res: ExpressResponse, + next: NextFunction +): Promise => { + try { + logger.info('Request Headers: '); + logger.info(req.headers); + logger.info('Request Body: '); + logger.info(req.body); + + const responseCode: number | undefined = + LocalCache.getNumber('TestServer', 'responseCode') || 200; + const responseTime: number | undefined = + LocalCache.getNumber('TestServer', 'responseTime') || 0; + const responseBody: string | undefined = + LocalCache.getString('TestServer', 'responseBody') || ''; + let responseHeaders: JSONValue | undefined = + LocalCache.getJSON('TestServer', 'responseHeaders') || {}; + + logger.info('Response Code: ' + responseCode); + logger.info('Response Time: ' + responseTime); + logger.info('Response Body: '); + logger.info(responseBody); + logger.info('Response Headers: '); + logger.info(responseHeaders); + + if (responseHeaders && typeof responseHeaders === Typeof.String) { + responseHeaders = JSON.parse(responseHeaders.toString()); + } + + if (responseTime > 0) { + await Sleep.sleep(responseTime); + } + + // middleware marks the probe as alive. + // so we don't need to do anything here. + return Response.sendCustomResponse( + req, + res, + responseCode, + responseBody, + responseHeaders ? (responseHeaders as any) : {} + ); + } catch (err) { + return next(err); + } +}; + export default router;