From 9476fc76c9ec5dc246b875856222d153078b8600 Mon Sep 17 00:00:00 2001 From: ctuckz Date: Sat, 16 Sep 2017 19:32:53 -0400 Subject: [PATCH 1/2] Support media types which use the +json suffix --- lib/execute/api.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/execute/api.js b/lib/execute/api.js index 883612b..8b228a6 100644 --- a/lib/execute/api.js +++ b/lib/execute/api.js @@ -297,7 +297,7 @@ var getApiRuntimeInfo = function (swaggerSpec, urlObj, options, update, callback swaggerSpec.paths[apiPath][pathMethod]["responses"] = {}; swaggerSpec.paths[apiPath][pathMethod]["responses"][response.statusCode] = {}; swaggerSpec.paths[apiPath][pathMethod]["responses"][response.statusCode].description = HTTPStatus[response.statusCode]; - if (response.headers['content-type'].indexOf('application/json') > -1 && body != '') { + if ((response.headers['content-type'].indexOf('application/json') > -1 || response.headers['content-type'].indexOf('+json') > -1) && body != '') { var schemaObj = jsonSchemaGenerator(JSON.parse(body)); delete schemaObj.$schema; // bug with json scheme generator - work around @@ -404,9 +404,19 @@ var getBodyInfo = function (swaggerSpec, urlObj, options, callback) { var headerKeyValues = {}; for (var i = 0; i < options.headers.length; i++) { var split = options.headers[i].split(':'); - headerKeyValues[split[0].trim()] = split[1].trim(); + headerKeyValues[split[0].trim().toLowerCase()] = split[1].trim(); } - if (headerKeyValues['Content-Type'].indexOf('application/json') > -1 || headerKeyValues['content-type'].indexOf('application/json') > -1) { + if (!headerKeyValues['content-type']) { + // Swagger assumes a content-type of application/json if none is supplied. + headerKeyValues['content-type'] = 'application/json'; + } + if (swaggerSpec.paths[apiPath][pathMethod]['consumes'] == null) { + swaggerSpec.paths[apiPath][pathMethod]['consumes'] = new Array(); + } + if (swaggerSpec.paths[apiPath][pathMethod]['consumes'].indexOf(headerKeyValues['content-type']) == -1) { + swaggerSpec.paths[apiPath][pathMethod]['consumes'].push(headerKeyValues['content-type']); + } + if (headerKeyValues['content-type'].indexOf('application/json') > -1 || headerKeyValues['content-type'].indexOf('+json') > -1) { // Found JSON var schemaObj = jsonSchemaGenerator(JSON.parse(options.data)); delete schemaObj.$schema; @@ -419,7 +429,7 @@ var getBodyInfo = function (swaggerSpec, urlObj, options, callback) { callback(null, true); }); } - else if (headerKeyValues['Content-Type'] == 'application/x-www-form-urlencoded') { + else if (headerKeyValues['content-type'] == 'application/x-www-form-urlencoded') { if (options.data.split("&").length > 0) { var formParams = options.data.split("&"); async.eachSeries(formParams, function iterator(formParam, qcallback) { From 4fcf74e6f3fc28aa38bf9e6503b7ca711ed1323b Mon Sep 17 00:00:00 2001 From: ctuckz Date: Sat, 16 Sep 2017 20:11:53 -0400 Subject: [PATCH 2/2] Don't try to assume the content-type in request bodies --- lib/execute/api.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/execute/api.js b/lib/execute/api.js index 8b228a6..4f29b49 100644 --- a/lib/execute/api.js +++ b/lib/execute/api.js @@ -406,10 +406,6 @@ var getBodyInfo = function (swaggerSpec, urlObj, options, callback) { var split = options.headers[i].split(':'); headerKeyValues[split[0].trim().toLowerCase()] = split[1].trim(); } - if (!headerKeyValues['content-type']) { - // Swagger assumes a content-type of application/json if none is supplied. - headerKeyValues['content-type'] = 'application/json'; - } if (swaggerSpec.paths[apiPath][pathMethod]['consumes'] == null) { swaggerSpec.paths[apiPath][pathMethod]['consumes'] = new Array(); }