Created
December 9, 2010 16:19
-
-
Save brainopia/734913 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From cc6423ad5b0fbd50d729780042a1cb592fe4706c Mon Sep 17 00:00:00 2001 | |
From: brainopia <[email protected]> | |
Date: Thu, 9 Dec 2010 19:12:56 +0300 | |
Subject: Support list of possible domains for cookies | |
Eg, :domain => %w(example1.com example2.com .example3.com), | |
appropriate domain from this list will be set for current request | |
--- | |
.../lib/action_dispatch/middleware/cookies.rb | 3 + | |
actionpack/test/dispatch/cookies_test.rb | 45 ++++++++++++++++++++ | |
2 files changed, 48 insertions(+), 0 deletions(-) | |
diff --git a/actionpack/lib/action_dispatch/middleware/cookies.rb b/actionpack/lib/action_dispatch/middleware/cookies.rb | |
index f369d2d..33485cf 100644 | |
--- a/actionpack/lib/action_dispatch/middleware/cookies.rb | |
+++ b/actionpack/lib/action_dispatch/middleware/cookies.rb | |
@@ -136,6 +136,9 @@ module ActionDispatch | |
options[:domain] = if (@host !~ /^[\d.]+$/) && (@host =~ DOMAIN_REGEXP) | |
".#{$1}.#{$2}" | |
end | |
+ elsif options[:domain].is_a? Array | |
+ # if host matches one of the supplied domains without a dot in front of it | |
+ options[:domain] = options[:domain].find {|domain| @host.include? domain[/^\.?(.*)$/, 1] } | |
end | |
end | |
diff --git a/actionpack/test/dispatch/cookies_test.rb b/actionpack/test/dispatch/cookies_test.rb | |
index e204040..766dbe1 100644 | |
--- a/actionpack/test/dispatch/cookies_test.rb | |
+++ b/actionpack/test/dispatch/cookies_test.rb | |
@@ -95,6 +95,16 @@ class CookiesTest < ActionController::TestCase | |
head :ok | |
end | |
+ def set_cookie_with_domains | |
+ cookies[:user_name] = {:value => "rizwanreza", :domain => %w(example1.com example2.com .example3.com)} | |
+ head :ok | |
+ end | |
+ | |
+ def delete_cookie_with_domains | |
+ cookies.delete(:user_name, :domain => %w(example1.com example2.com .example3.com)) | |
+ head :ok | |
+ end | |
+ | |
def symbol_key | |
cookies[:user_name] = "david" | |
head :ok | |
@@ -322,6 +332,41 @@ class CookiesTest < ActionController::TestCase | |
assert_cookie_header "user_name=; domain=.nextangle.com; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT" | |
end | |
+ def test_cookie_with_several_preset_domains_using_one_of_these_domains | |
+ @request.host = "example1.com" | |
+ get :set_cookie_with_domains | |
+ assert_response :success | |
+ assert_cookie_header "user_name=rizwanreza; domain=example1.com; path=/" | |
+ end | |
+ | |
+ def test_cookie_with_several_preset_domains_using_other_domain | |
+ @request.host = "other-domain.com" | |
+ get :set_cookie_with_domains | |
+ assert_response :success | |
+ assert_cookie_header "user_name=rizwanreza; path=/" | |
+ end | |
+ | |
+ def test_cookie_with_several_preset_domains_using_shared_domain | |
+ @request.host = "example3.com" | |
+ get :set_cookie_with_domains | |
+ assert_response :success | |
+ assert_cookie_header "user_name=rizwanreza; domain=.example3.com; path=/" | |
+ end | |
+ | |
+ def test_deletings_cookie_with_several_preset_domains_using_one_of_these_domains | |
+ @request.host = "example2.com" | |
+ get :delete_cookie_with_domains | |
+ assert_response :success | |
+ assert_cookie_header "user_name=; domain=example2.com; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT" | |
+ end | |
+ | |
+ def test_deletings_cookie_with_several_preset_domains_using_other_domain | |
+ @request.host = "other-domain.com" | |
+ get :delete_cookie_with_domains | |
+ assert_response :success | |
+ assert_cookie_header "user_name=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT" | |
+ end | |
+ | |
def test_cookies_hash_is_indifferent_access | |
[:symbol_key, :string_key].each do |cookie_key| | |
get cookie_key | |
-- | |
1.7.2.1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment