diff --git a/src/defaults/default.js b/src/defaults/default.js index a7eeb7eb1..bcad1fc43 100644 --- a/src/defaults/default.js +++ b/src/defaults/default.js @@ -10,6 +10,7 @@ * governing permissions and limitations under the License. */ const winston = require('winston'); +const querystring = require('querystring'); const Pipeline = require('../pipeline.js'); /** @@ -44,8 +45,17 @@ const pre = cont => cont; * @returns {Object} The original req object that is equivalent to an Express request object, * including a headers, method, and params field */ -function adaptOWRequest(payload, { logger, request: { params: { req = '{}' } = {} } = {} }) { +function adaptOWRequest(payload, { logger, request: { headers, method, params: { req = '{}', params = '' } = {} } = {} }) { try { + if (params !== '') { + return { + request: { + params: querystring.parse(params), + headers, + method, + }, + }; + } return { request: JSON.parse(req), }; diff --git a/test/testDefault.js b/test/testDefault.js index f348d5268..dc823aad3 100644 --- a/test/testDefault.js +++ b/test/testDefault.js @@ -44,6 +44,21 @@ describe('Testing Default Pipeline', () => { }); }); + it('adaptOWRequest needs to parse params parameter', () => { + const testObject = { + foo: 'foo', + bar: 'bar', + }; + const out = adaptOWRequest({}, { request: { params: { params: 'foo=foo&bar=bar' } } }); + assert.ok(out.request, 'missing request object'); + assert.deepEqual(testObject, out.request.params, 'request object does not match incoming req'); + }); + + it('adaptOWRequest acts reasonably on wrong params parameter', () => { + const out = adaptOWRequest({}, { request: { params: { params: 'this is not url encoded' } } }); + assert.ok(out.request, 'missing request object'); + }); + it('adaptOWRequest needs to parse req parameter', () => { const testObject = { url: 'url',