From af0c08b6f92a0933e24414bea11344162cda6c43 Mon Sep 17 00:00:00 2001 From: mhasbini Date: Sun, 2 Apr 2017 18:54:19 +0300 Subject: Fix redirection after login when the referer have params --- app/controllers/sessions_controller.rb | 2 +- changelogs/unreleased/29669-redirect-referer-params.yml | 4 ++++ spec/controllers/sessions_controller_spec.rb | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/29669-redirect-referer-params.yml diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 7d81c96262f..d8561871098 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -79,7 +79,7 @@ class SessionsController < Devise::SessionsController if request.referer.present? && (params['redirect_to_referer'] == 'yes') referer_uri = URI(request.referer) if referer_uri.host == Gitlab.config.gitlab.host - referer_uri.path + referer_uri.request_uri else request.fullpath end diff --git a/changelogs/unreleased/29669-redirect-referer-params.yml b/changelogs/unreleased/29669-redirect-referer-params.yml new file mode 100644 index 00000000000..d8fc7f33049 --- /dev/null +++ b/changelogs/unreleased/29669-redirect-referer-params.yml @@ -0,0 +1,4 @@ +--- +title: Fix redirection after login when the referer have params +merge_request: +author: mhasbini diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb index a06c29dd91a..9c16a7bc08b 100644 --- a/spec/controllers/sessions_controller_spec.rb +++ b/spec/controllers/sessions_controller_spec.rb @@ -211,4 +211,20 @@ describe SessionsController do end end end + + describe '#new' do + before do + @request.env['devise.mapping'] = Devise.mappings[:user] + end + + it 'redirects correctly for referer on same host with params' do + search_path = '/search?search=seed_project' + allow(controller.request).to receive(:referer). + and_return('http://%{host}%{path}' % { host: Gitlab.config.gitlab.host, path: search_path }) + + get(:new, redirect_to_referer: :yes) + + expect(controller.stored_location_for(:redirect)).to eq(search_path) + end + end end -- cgit v1.2.1