Skip to content

Commit

Permalink
Merge pull request #4916 from rmm5t/fix_force_ssl_redirect_with_params
Browse files Browse the repository at this point in the history
Fixed force_ssl redirects to include original query params
  • Loading branch information
José Valim committed Feb 7, 2012
2 parents 8c7378a + 0e482b3 commit f3595b5
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 0 deletions.
1 change: 1 addition & 0 deletions actionpack/lib/action_controller/metal/force_ssl.rb
Expand Up @@ -29,6 +29,7 @@ def force_ssl(options = {})
if !request.ssl? && !Rails.env.development?
redirect_options = {:protocol => 'https://', :status => :moved_permanently}
redirect_options.merge!(:host => host) if host
redirect_options.merge!(:params => request.query_parameters)
redirect_to redirect_options
end
end
Expand Down
1 change: 1 addition & 0 deletions actionpack/lib/action_dispatch/routing/route_set.rb
Expand Up @@ -575,6 +575,7 @@ def url_for(options)

path_addition, params = generate(path_options, path_segments || {})
path << path_addition
params.merge!(options[:params] || {})

ActionDispatch::Http::URL.url_for(options.merge!({
:path => path,
Expand Down
16 changes: 16 additions & 0 deletions actionpack/test/controller/base_test.rb
Expand Up @@ -257,6 +257,22 @@ def test_url_for_params_priority
assert_equal '/special', rs.url_for(url_params)
end

def test_url_for_query_params_included
rs = ActionDispatch::Routing::RouteSet.new
rs.draw do
match 'home' => 'pages#home'
end

options = {
:action => "home",
:controller => "pages",
:only_path => true,
:params => { "token" => "secret" }
}

assert_equal '/home?token=secret', rs.url_for(options)
end

def test_url_options_override
with_routing do |set|
set.draw do
Expand Down
6 changes: 6 additions & 0 deletions actionpack/test/controller/force_ssl_test.rb
Expand Up @@ -35,6 +35,12 @@ def test_banana_redirects_to_https
assert_equal "https://test.host/force_ssl_controller_level/banana", redirect_to_url
end

def test_banana_redirects_to_https_with_extra_params
get :banana, :token => "secret"
assert_response 301
assert_equal "https://test.host/force_ssl_controller_level/banana?token=secret", redirect_to_url
end

def test_cheeseburger_redirects_to_https
get :cheeseburger
assert_response 301
Expand Down

0 comments on commit f3595b5

Please sign in to comment.