Commit cfac63da247a50480416991245ffc5cbcaa5027a
1 parent
91226c8b
Exists in
master
and in
29 other branches
ActionItem1165: fixing SSL support
* removing logic inversion in ssl support
* using environment's default hostname instead of the request hostname
for SSL links
Showing
8 changed files
with
42 additions
and
29 deletions
Show diff stats
app/controllers/application.rb
| ... | ... | @@ -50,18 +50,24 @@ class ApplicationController < ActionController::Base |
| 50 | 50 | redirect_to_ssl |
| 51 | 51 | end |
| 52 | 52 | def redirect_to_ssl |
| 53 | - return false if environment.disable_ssl | |
| 54 | - redirect_to(params.merge(:protocol => 'https://')) | |
| 55 | - true | |
| 53 | + if environment.enable_ssl | |
| 54 | + redirect_to(params.merge(:protocol => 'https://')) | |
| 55 | + true | |
| 56 | + else | |
| 57 | + false | |
| 58 | + end | |
| 56 | 59 | end |
| 57 | 60 | |
| 58 | 61 | def self.refuse_ssl(*options) |
| 59 | 62 | before_filter :avoid_ssl, *options |
| 60 | 63 | end |
| 61 | 64 | def avoid_ssl |
| 62 | - return true if (!request.ssl? || ENV['RAILS_ENV'] == 'development') | |
| 63 | - redirect_to(params.merge(:protocol => 'http://')) | |
| 64 | - false | |
| 65 | + if (!request.ssl? || ENV['RAILS_ENV'] == 'development') | |
| 66 | + true | |
| 67 | + else | |
| 68 | + redirect_to(params.merge(:protocol => 'http://')) | |
| 69 | + false | |
| 70 | + end | |
| 65 | 71 | end |
| 66 | 72 | |
| 67 | 73 | before_init_gettext :maybe_save_locale | ... | ... |
app/helpers/application_helper.rb
| ... | ... | @@ -792,12 +792,16 @@ module ApplicationHelper |
| 792 | 792 | |
| 793 | 793 | def login_url |
| 794 | 794 | options = Noosfero.url_options.merge({ :controller => 'account', :action => 'login' }) |
| 795 | - if !environment.disable_ssl && (ENV['RAILS_ENV'] != 'development') | |
| 796 | - options.merge!(:protocol => 'https://', :host => request.host) | |
| 795 | + if environment.enable_ssl && (ENV['RAILS_ENV'] != 'development') | |
| 796 | + options.merge!(:protocol => 'https://', :host => ssl_hostname) | |
| 797 | 797 | end |
| 798 | 798 | url_for(options) |
| 799 | 799 | end |
| 800 | 800 | |
| 801 | + def ssl_hostname | |
| 802 | + environment.default_hostname | |
| 803 | + end | |
| 804 | + | |
| 801 | 805 | def base_url |
| 802 | 806 | environment.top_url(request.ssl?) |
| 803 | 807 | end | ... | ... |
app/models/environment.rb
| ... | ... | @@ -513,12 +513,12 @@ class Environment < ActiveRecord::Base |
| 513 | 513 | result |
| 514 | 514 | end |
| 515 | 515 | |
| 516 | - def disable_ssl | |
| 517 | - settings[:disable_ssl] | |
| 516 | + def enable_ssl | |
| 517 | + settings[:enable_ssl] | |
| 518 | 518 | end |
| 519 | 519 | |
| 520 | - def disable_ssl=(value) | |
| 521 | - settings[:disable_ssl] = value | |
| 520 | + def enable_ssl=(value) | |
| 521 | + settings[:enable_ssl] = value | |
| 522 | 522 | end |
| 523 | 523 | |
| 524 | 524 | def to_s | ... | ... |
app/views/layouts/application.rhtml
| ... | ... | @@ -87,7 +87,7 @@ |
| 87 | 87 | :id=>"menu_link_to_envhome", |
| 88 | 88 | :title=>@environment.name %> |
| 89 | 89 | <% unless environment.enabled?(:disable_categories) %> |
| 90 | - <% cache(environment.name.id.to_s + '_categories_menu') do %> | |
| 90 | + <% cache(environment.id.to_s + '_categories_menu') do %> | |
| 91 | 91 | <%= render :file => 'shared/categories_menu' %> |
| 92 | 92 | <% end %> |
| 93 | 93 | <% end %> | ... | ... |
test/functional/application_controller_test.rb
| ... | ... | @@ -267,6 +267,7 @@ class ApplicationControllerTest < Test::Unit::TestCase |
| 267 | 267 | end |
| 268 | 268 | |
| 269 | 269 | should 'require ssl when told to' do |
| 270 | + Environment.default.update_attribute(:enable_ssl, true) | |
| 270 | 271 | @request.expects(:ssl?).returns(false).at_least_once |
| 271 | 272 | get :sslonly |
| 272 | 273 | assert_redirected_to :protocol => 'https://' |
| ... | ... | @@ -292,6 +293,7 @@ class ApplicationControllerTest < Test::Unit::TestCase |
| 292 | 293 | end |
| 293 | 294 | |
| 294 | 295 | should 'keep arguments when redirecting to ssl' do |
| 296 | + Environment.default.update_attribute(:enable_ssl, true) | |
| 295 | 297 | @request.expects(:ssl?).returns(false).at_least_once |
| 296 | 298 | get :sslonly, :x => '1', :y => '2' |
| 297 | 299 | assert_redirected_to :protocol => 'https://', :x => '1', :y => '2' |
| ... | ... | @@ -327,13 +329,14 @@ class ApplicationControllerTest < Test::Unit::TestCase |
| 327 | 329 | end |
| 328 | 330 | |
| 329 | 331 | should 'add https protocols on redirect_to_ssl' do |
| 332 | + Environment.default.update_attribute(:enable_ssl, true) | |
| 330 | 333 | get :sslonly, :x => '1', :y => '1' |
| 331 | 334 | assert_redirected_to :x => '1', :y => '1', :protocol => 'https://' |
| 332 | 335 | end |
| 333 | 336 | |
| 334 | 337 | should 'return true in redirect_to_ssl' do |
| 335 | 338 | env = mock |
| 336 | - env.expects(:disable_ssl).returns(false) | |
| 339 | + env.expects(:enable_ssl).returns(true) | |
| 337 | 340 | @controller.expects(:environment).returns(env) |
| 338 | 341 | @controller.expects(:params).returns({}) |
| 339 | 342 | @controller.expects(:redirect_to).with({:protocol => 'https://'}) |
| ... | ... | @@ -341,14 +344,14 @@ class ApplicationControllerTest < Test::Unit::TestCase |
| 341 | 344 | end |
| 342 | 345 | should 'return false in redirect_to_ssl when ssl is disabled' do |
| 343 | 346 | env = mock |
| 344 | - env.expects(:disable_ssl).returns(true) | |
| 347 | + env.expects(:enable_ssl).returns(false) | |
| 345 | 348 | @controller.expects(:environment).returns(env) |
| 346 | 349 | assert_equal false, @controller.redirect_to_ssl |
| 347 | 350 | end |
| 348 | 351 | |
| 349 | 352 | should 'not force ssl when ssl is disabled' do |
| 350 | 353 | env = Environment.default |
| 351 | - env.expects(:disable_ssl).returns(true) | |
| 354 | + env.expects(:enable_ssl).returns(false) | |
| 352 | 355 | @controller.stubs(:environment).returns(env) |
| 353 | 356 | @request.expects(:ssl?).returns(false).at_least_once |
| 354 | 357 | get :sslonly | ... | ... |
test/integration/login_to_the_application_test.rb
| ... | ... | @@ -20,7 +20,7 @@ class LoginToTheApplicationTest < ActionController::IntegrationTest |
| 20 | 20 | end |
| 21 | 21 | |
| 22 | 22 | def test_unauthenticated_user_tries_to_access_his_control_panel |
| 23 | - Environment.any_instance.stubs(:disable_ssl).returns(true) # ignore SSL for this test | |
| 23 | + Environment.any_instance.stubs(:enable_ssl).returns(false) # ignore SSL for this test | |
| 24 | 24 | |
| 25 | 25 | get '/myprofile/ze' |
| 26 | 26 | assert_redirected_to '/account/login' | ... | ... |
test/unit/application_helper_test.rb
| ... | ... | @@ -195,19 +195,19 @@ class ApplicationHelperTest < Test::Unit::TestCase |
| 195 | 195 | end |
| 196 | 196 | |
| 197 | 197 | should 'use https:// for login_url' do |
| 198 | - environment = mock | |
| 199 | - environment.expects(:disable_ssl).returns(false) | |
| 198 | + environment = Environment.default | |
| 199 | + environment.update_attribute(:enable_ssl, true) | |
| 200 | + environment.domains << Domain.new(:name => "test.domain.net", :is_default => true) | |
| 200 | 201 | stubs(:environment).returns(environment) |
| 201 | - request = mock | |
| 202 | - request.stubs(:host).returns('myhost.net') | |
| 203 | - stubs(:request).returns(request) | |
| 204 | - stubs(:url_for).with(has_entries(:protocol => 'https://', :host => 'myhost.net')).returns('LALALA') | |
| 202 | + | |
| 203 | + stubs(:url_for).with(has_entries(:protocol => 'https://', :host => 'test.domain.net')).returns('LALALA') | |
| 204 | + | |
| 205 | 205 | assert_equal 'LALALA', login_url |
| 206 | 206 | end |
| 207 | 207 | |
| 208 | 208 | should 'not force ssl in login_url when environment has ssl disabled' do |
| 209 | 209 | environment = mock |
| 210 | - environment.expects(:disable_ssl).returns(true).at_least_once | |
| 210 | + environment.expects(:enable_ssl).returns(false).at_least_once | |
| 211 | 211 | stubs(:environment).returns(environment) |
| 212 | 212 | request = mock |
| 213 | 213 | request.stubs(:host).returns('localhost') | ... | ... |
test/unit/environment_test.rb
| ... | ... | @@ -487,14 +487,14 @@ class EnvironmentTest < Test::Unit::TestCase |
| 487 | 487 | assert_equal template, e.enterprise_template |
| 488 | 488 | end |
| 489 | 489 | |
| 490 | - should 'not disable ssl by default' do | |
| 490 | + should 'not enable ssl by default' do | |
| 491 | 491 | e = Environment.new |
| 492 | - assert !e.disable_ssl | |
| 492 | + assert !e.enable_ssl | |
| 493 | 493 | end |
| 494 | 494 | |
| 495 | - should 'be able to disable ssl' do | |
| 496 | - e = Environment.new(:disable_ssl => true) | |
| 497 | - assert_equal true, e.disable_ssl | |
| 495 | + should 'be able to enable ssl' do | |
| 496 | + e = Environment.new(:enable_ssl => true) | |
| 497 | + assert_equal true, e.enable_ssl | |
| 498 | 498 | end |
| 499 | 499 | |
| 500 | 500 | should 'have a layout template' do | ... | ... |