diff --git a/core/base-service/redirector.js b/core/base-service/redirector.js index c7334955891184d26c33089c137b6ca4b1fa64b1..1028f033a12413934563a1b98bc67f1c10671809 100644 --- a/core/base-service/redirector.js +++ b/core/base-service/redirector.js @@ -82,7 +82,7 @@ module.exports = function redirector(attrs) { trace.logTrace('inbound', emojic.ticket, 'Named params', namedParams) trace.logTrace('inbound', emojic.crayon, 'Query params', queryParams) - const targetPath = transformPath(namedParams) + const targetPath = encodeURI(transformPath(namedParams)) trace.logTrace('validate', emojic.dart, 'Target', targetPath) let urlSuffix = ask.uri.search || '' diff --git a/core/base-service/redirector.spec.js b/core/base-service/redirector.spec.js index 57402e623251e946accf483fd5a026291d07da4e..ef051723cbece897bb835c787898aa10adf9ca76 100644 --- a/core/base-service/redirector.spec.js +++ b/core/base-service/redirector.spec.js @@ -121,6 +121,20 @@ describe('Redirector', function () { ) }) + it('should correctly encode the redirect URL', async function () { + const { statusCode, headers } = await got( + `${baseUrl}/very/old/service/hello%0Dworld.svg?foobar=a%0Db`, + { + followRedirect: false, + } + ) + + expect(statusCode).to.equal(301) + expect(headers.location).to.equal( + '/new/service/hello%0Dworld.svg?foobar=a%0Db' + ) + }) + describe('transformQueryParams', function () { const route = { base: 'another/old/service',