diff --git a/Rakefile b/Rakefile index da4fcde..5c25536 100644 --- a/Rakefile +++ b/Rakefile @@ -9,7 +9,8 @@ Hoe.plugin :gemspec Hoe.spec 'rets' do developer 'Estately, Inc. Open Source', 'opensource@estately.com' - extra_deps << [ "httpclient", "~> 2.4.0" ] + extra_deps << [ "httpclient", "~> 2.6.0" ] + extra_deps << [ "http-cookie", "~> 1.0.0" ] extra_deps << [ "nokogiri", "~> 1.5" ] extra_dev_deps << [ "mocha", "~> 0.11" ] diff --git a/lib/rets/client.rb b/lib/rets/client.rb index ad6c83d..83c1daf 100644 --- a/lib/rets/client.rb +++ b/lib/rets/client.rb @@ -1,3 +1,4 @@ +require 'http-cookie' require 'httpclient' require 'logger' diff --git a/lib/rets/http_client.rb b/lib/rets/http_client.rb index 8da026f..62d7925 100644 --- a/lib/rets/http_client.rb +++ b/lib/rets/http_client.rb @@ -82,9 +82,12 @@ def rets_extra_headers end def http_cookie(name) - http.cookies.each do |c| - return c.value if c.name.downcase == name.downcase && c.match?(URI.parse(login_url)) + @http.cookie_manager.cookies(login_url).each do |c| + if c.name.downcase == name.downcase + return c.value + end end + nil end end diff --git a/rets.gemspec b/rets.gemspec index fcbc725..bb5991b 100644 --- a/rets.gemspec +++ b/rets.gemspec @@ -24,7 +24,8 @@ Gem::Specification.new do |s| s.specification_version = 4 if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_runtime_dependency(%q, ["~> 2.4.0"]) + s.add_runtime_dependency(%q, ["~> 2.6.0"]) + s.add_runtime_dependency(%q, ["~> 1.0.0"]) s.add_runtime_dependency(%q, ["~> 1.5"]) s.add_development_dependency(%q, ["~> 4.0"]) s.add_development_dependency(%q, ["~> 0.11"]) @@ -32,7 +33,8 @@ Gem::Specification.new do |s| s.add_development_dependency(%q, ["~> 1.8"]) s.add_development_dependency(%q, ["~> 3.13"]) else - s.add_dependency(%q, ["~> 2.4.0"]) + s.add_dependency(%q, ["~> 2.6.0"]) + s.add_dependency(%q, ["~> 1.0.0"]) s.add_dependency(%q, ["~> 1.5"]) s.add_dependency(%q, ["~> 4.0"]) s.add_dependency(%q, ["~> 0.11"]) @@ -41,7 +43,8 @@ Gem::Specification.new do |s| s.add_dependency(%q, ["~> 3.13"]) end else - s.add_dependency(%q, ["~> 2.4.0"]) + s.add_dependency(%q, ["~> 2.6.0"]) + s.add_dependency(%q, ["~> 1.0.0"]) s.add_dependency(%q, ["~> 1.5"]) s.add_dependency(%q, ["~> 4.0"]) s.add_dependency(%q, ["~> 0.11"]) diff --git a/test/test_http_client.rb b/test/test_http_client.rb index abe14d8..3b4eadf 100644 --- a/test/test_http_client.rb +++ b/test/test_http_client.rb @@ -5,7 +5,6 @@ def setup @cm = WebAgent::CookieManager.new @http = HTTPClient.new - @http.cookie_manager = @cm @logger = Rets::Client::FakeLogger.new @logger.stubs(:debug?).returns(false) @@ -13,20 +12,6 @@ def setup @http_client = Rets::HttpClient.new(@http, {}, @logger, "http://rets.rets.com/somestate/login.aspx") end - def test_http_cookie_with_webagent_cookie - cookie1 = "RETS-Session-ID=879392834723043209; path=/; domain=rets.rets.com; expires=Wednesday, 31-Dec-2037 12:00:00 GMT" - @cm.parse(cookie1, URI.parse("http://www.rets.rets.com")) - - cookie2 = "Foo=Bar; path=/; domain=rets.rets.com; expires=Wednesday, 31-Dec-2037 12:00:00 GMT" - @cm.parse(cookie2, URI.parse("http://www.rets.rets.com")) - - assert_equal "879392834723043209", @http_client.http_cookie('RETS-Session-ID') - end - - def test_http_cookie_without_webagent_cookie - assert_equal nil, @http_client.http_cookie('RETS-Session-ID') - end - def test_http_get_delegates_to_client url = 'foo@example.com' response = stub(:response) @@ -46,4 +31,42 @@ def test_http_post_delegates_to_client assert_equal @http_client.http_post(url, {}), response end + + class CookieManagement < MiniTest::Test + def setup + @cm = WebAgent::CookieManager.new + http = HTTPClient.new + http.cookie_manager = @cm + @client = Rets::HttpClient.new(http, {}, nil, "http://rets.rets.com/somestate/login.aspx") + end + + def teardown + # Empty cookie jar + @cm.cookies = [] + end + + def test_http_cookie_with_one_cookie_from_one_domain + set_cookie = "RETS-Session-ID=879392834723043209; path=/; domain=rets.rets.com; expires=Wednesday, 31-Dec-2037 12:00:00 GMT" + @cm.parse(set_cookie, URI.parse("http://www.rets.rets.com")) + assert_equal "879392834723043209", @client.http_cookie('RETS-Session-ID') + end + + def test_http_cookie_with_multiple_cookies_from_one_domain + # NOTE: Cookies are ordered alphabetically by name when retrieving + set_cookie_1 = "RETS-Session-ID=879392834723043209; path=/; domain=rets.rets.com; expires=Wednesday, 31-Dec-2037 12:00:00 GMT" + @cm.parse(set_cookie_1, URI.parse("http://www.rets.rets.com")) + + set_cookie_2 = "Zoo=Bar; path=/; domain=rets.rets.com; expires=Wednesday, 31-Dec-2037 12:00:00 GMT" + @cm.parse(set_cookie_2, URI.parse("http://www.rets.rets.com")) + + set_cookie_3 = "Foo=Bar; path=/; domain=rets.rets.com; expires=Wednesday, 31-Dec-2037 12:00:00 GMT" + @cm.parse(set_cookie_3, URI.parse("http://www.rets.rets.com")) + + assert_equal "879392834723043209", @client.http_cookie('RETS-Session-ID') + end + + def test_http_cookie_with_no_cookies_from_domain + assert_equal nil, @client.http_cookie('RETS-Session-ID') + end + end end