diff --git a/services/web/app/coffee/infrastructure/RedirectManager.coffee b/services/web/app/coffee/infrastructure/RedirectManager.coffee index 2f9ffd1397..fe64f31c05 100644 --- a/services/web/app/coffee/infrastructure/RedirectManager.coffee +++ b/services/web/app/coffee/infrastructure/RedirectManager.coffee @@ -23,4 +23,11 @@ module.exports = RedirectManager = url = target.url if target.baseUrl? url = "#{target.baseUrl}#{url}" - res.redirect code, url + res.redirect code, url + getQueryString(req) + +# Naively get the query params string. Stringifying the req.query object may +# have differences between Express and Rails, so safer to just pass the raw +# string +getQueryString = (req) -> + qs = req.url.match(/\?.*$/) + if qs? then qs[0] else "" diff --git a/services/web/test/acceptance/coffee/RedirectUrlsTests.coffee b/services/web/test/acceptance/coffee/RedirectUrlsTests.coffee index f1c0f4e8dd..7cd9ecfd22 100644 --- a/services/web/test/acceptance/coffee/RedirectUrlsTests.coffee +++ b/services/web/test/acceptance/coffee/RedirectUrlsTests.coffee @@ -29,3 +29,6 @@ describe "RedirectUrls", -> it 'proxy URLs with multiple support methods', (done) -> assertRedirect 'get', '/redirect/get_and_post', 302, '/destination/get_and_post', done + + it 'redirects with query params', (done) -> + assertRedirect 'get', '/redirect/qs?foo=bar&baz[]=qux1&baz[]=qux2', 302, '/destination/qs?foo=bar&baz[]=qux1&baz[]=qux2', done \ No newline at end of file diff --git a/services/web/test/acceptance/config/settings.test.coffee b/services/web/test/acceptance/config/settings.test.coffee index 521b44cbb6..a5ce5791de 100644 --- a/services/web/test/acceptance/config/settings.test.coffee +++ b/services/web/test/acceptance/config/settings.test.coffee @@ -125,4 +125,5 @@ module.exports = }, '/redirect/params/:id': { url: (params) -> "/destination/#{params.id}/params" - } + }, + '/redirect/qs': '/destination/qs'