oauth 0.3.6 → 0.3.7.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of oauth might be problematic. Click here for more details.

Files changed (43) hide show
  1. data/.gitignore +1 -0
  2. data/History.txt +16 -0
  3. data/Manifest.txt +2 -0
  4. data/README.rdoc +13 -0
  5. data/Rakefile +27 -27
  6. data/TODO +1 -0
  7. data/lib/digest/hmac.rb +104 -0
  8. data/lib/oauth.rb +5 -1
  9. data/lib/oauth/client/action_controller_request.rb +1 -1
  10. data/lib/oauth/client/em_http.rb +94 -0
  11. data/lib/oauth/client/helper.rb +7 -4
  12. data/lib/oauth/client/net_http.rb +9 -6
  13. data/lib/oauth/consumer.rb +45 -25
  14. data/lib/oauth/core_ext.rb +31 -0
  15. data/lib/oauth/helper.rb +11 -1
  16. data/lib/oauth/request_proxy/base.rb +4 -3
  17. data/lib/oauth/request_proxy/curb_request.rb +55 -0
  18. data/lib/oauth/request_proxy/em_http_request.rb +67 -0
  19. data/lib/oauth/request_proxy/net_http.rb +9 -6
  20. data/lib/oauth/request_proxy/typhoeus_request.rb +53 -0
  21. data/lib/oauth/signature.rb +4 -1
  22. data/lib/oauth/signature/base.rb +9 -3
  23. data/lib/oauth/signature/hmac/base.rb +5 -2
  24. data/lib/oauth/signature/hmac/md5.rb +1 -2
  25. data/lib/oauth/signature/hmac/rmd160.rb +1 -2
  26. data/lib/oauth/signature/hmac/sha1.rb +2 -3
  27. data/lib/oauth/signature/hmac/sha2.rb +1 -2
  28. data/lib/oauth/signature/plaintext.rb +2 -2
  29. data/lib/oauth/version.rb +1 -1
  30. data/oauth.gemspec +157 -27
  31. data/test/integration/consumer_test.rb +304 -0
  32. data/test/test_action_controller_request_proxy.rb +4 -1
  33. data/test/test_consumer.rb +51 -254
  34. data/test/test_curb_request_proxy.rb +69 -0
  35. data/test/test_em_http_client.rb +74 -0
  36. data/test/test_em_http_request_proxy.rb +107 -0
  37. data/test/test_helper.rb +15 -9
  38. data/test/test_net_http_client.rb +59 -5
  39. data/test/test_net_http_request_proxy.rb +1 -1
  40. data/test/test_signature.rb +6 -3
  41. data/test/test_typhoeus_request_proxy.rb +73 -0
  42. data/website/index.html +2 -2
  43. metadata +43 -25
data/oauth.gemspec CHANGED
@@ -1,49 +1,179 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
1
4
  # -*- encoding: utf-8 -*-
2
5
 
3
6
  Gem::Specification.new do |s|
4
7
  s.name = %q{oauth}
5
- s.version = "0.3.6"
8
+ s.version = "0.3.7.pre1"
6
9
 
7
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Pelle Braendgaard", "Blaine Cook", "Larry Halff", "Jesse Clark", "Jon Crosby", "Seth Fitzsimmons", "Matt Sanford"]
9
- s.date = %q{2009-09-14}
10
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Pelle Braendgaard", "Blaine Cook", "Larry Halff", "Jesse Clark", "Jon Crosby", "Seth Fitzsimmons", "Matt Sanford", "Aaron Quint"]
12
+ s.date = %q{2010-02-15}
10
13
  s.default_executable = %q{oauth}
11
14
  s.description = %q{OAuth Core Ruby implementation}
12
15
  s.email = %q{oauth-ruby@googlegroups.com}
13
16
  s.executables = ["oauth"]
14
- s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "README.rdoc", "website/index.txt"]
15
- s.files = ["History.txt", "License.txt", "Manifest.txt", "README.rdoc", "Rakefile", "TODO", "bin/oauth", "examples/yql.rb", "lib/oauth.rb", "lib/oauth/oauth.rb", "lib/oauth/cli.rb", "lib/oauth/client.rb", "lib/oauth/client/action_controller_request.rb", "lib/oauth/client/helper.rb", "lib/oauth/client/net_http.rb", "lib/oauth/consumer.rb", "lib/oauth/errors.rb", "lib/oauth/errors/error.rb", "lib/oauth/errors/problem.rb", "lib/oauth/errors/unauthorized.rb", "lib/oauth/helper.rb", "lib/oauth/oauth_test_helper.rb", "lib/oauth/request_proxy.rb", "lib/oauth/request_proxy/action_controller_request.rb", "lib/oauth/request_proxy/base.rb", "lib/oauth/request_proxy/jabber_request.rb", "lib/oauth/request_proxy/mock_request.rb", "lib/oauth/request_proxy/net_http.rb", "lib/oauth/request_proxy/rack_request.rb", "lib/oauth/server.rb", "lib/oauth/signature.rb", "lib/oauth/signature/base.rb", "lib/oauth/signature/hmac/base.rb", "lib/oauth/signature/hmac/md5.rb", "lib/oauth/signature/hmac/rmd160.rb", "lib/oauth/signature/hmac/sha1.rb", "lib/oauth/signature/hmac/sha2.rb", "lib/oauth/signature/md5.rb", "lib/oauth/signature/plaintext.rb", "lib/oauth/signature/rsa/sha1.rb", "lib/oauth/signature/sha1.rb", "lib/oauth/token.rb", "lib/oauth/tokens/access_token.rb", "lib/oauth/tokens/consumer_token.rb", "lib/oauth/tokens/request_token.rb", "lib/oauth/tokens/server_token.rb", "lib/oauth/tokens/token.rb", "lib/oauth/version.rb", "oauth.gemspec", "script/destroy", "script/generate", "script/txt2html", "setup.rb", "tasks/deployment.rake", "tasks/environment.rake", "tasks/website.rake", "test/cases/oauth_case.rb", "test/cases/spec/1_0-final/test_construct_request_url.rb", "test/cases/spec/1_0-final/test_normalize_request_parameters.rb", "test/cases/spec/1_0-final/test_parameter_encodings.rb", "test/cases/spec/1_0-final/test_signature_base_strings.rb", "test/keys/rsa.cert", "test/keys/rsa.pem", "test/test_access_token.rb", "test/test_action_controller_request_proxy.rb", "test/test_consumer.rb", "test/test_helper.rb", "test/test_hmac_sha1.rb", "test/test_net_http_client.rb", "test/test_net_http_request_proxy.rb", "test/test_oauth_helper.rb", "test/test_rack_request_proxy.rb", "test/test_request_token.rb", "test/test_rsa_sha1.rb", "test/test_server.rb", "test/test_signature.rb", "test/test_signature_base.rb", "test/test_signature_plain_text.rb", "test/test_token.rb", "website/index.html", "website/index.txt", "website/javascripts/rounded_corners_lite.inc.js", "website/stylesheets/screen.css", "website/template.rhtml"]
16
- s.has_rdoc = true
17
- s.homepage = %q{http://oauth.rubyforge.org}
18
- s.rdoc_options = ["--main", "README.rdoc"]
17
+ s.extra_rdoc_files = [
18
+ "README.rdoc",
19
+ "TODO"
20
+ ]
21
+ s.files = [
22
+ ".gitignore",
23
+ "History.txt",
24
+ "License.txt",
25
+ "Manifest.txt",
26
+ "README.rdoc",
27
+ "Rakefile",
28
+ "TODO",
29
+ "bin/oauth",
30
+ "examples/yql.rb",
31
+ "lib/digest/hmac.rb",
32
+ "lib/oauth.rb",
33
+ "lib/oauth/cli.rb",
34
+ "lib/oauth/client.rb",
35
+ "lib/oauth/client/action_controller_request.rb",
36
+ "lib/oauth/client/em_http.rb",
37
+ "lib/oauth/client/helper.rb",
38
+ "lib/oauth/client/net_http.rb",
39
+ "lib/oauth/consumer.rb",
40
+ "lib/oauth/core_ext.rb",
41
+ "lib/oauth/errors.rb",
42
+ "lib/oauth/errors/error.rb",
43
+ "lib/oauth/errors/problem.rb",
44
+ "lib/oauth/errors/unauthorized.rb",
45
+ "lib/oauth/helper.rb",
46
+ "lib/oauth/oauth.rb",
47
+ "lib/oauth/oauth_test_helper.rb",
48
+ "lib/oauth/request_proxy.rb",
49
+ "lib/oauth/request_proxy/action_controller_request.rb",
50
+ "lib/oauth/request_proxy/base.rb",
51
+ "lib/oauth/request_proxy/curb_request.rb",
52
+ "lib/oauth/request_proxy/em_http_request.rb",
53
+ "lib/oauth/request_proxy/jabber_request.rb",
54
+ "lib/oauth/request_proxy/mock_request.rb",
55
+ "lib/oauth/request_proxy/net_http.rb",
56
+ "lib/oauth/request_proxy/rack_request.rb",
57
+ "lib/oauth/request_proxy/typhoeus_request.rb",
58
+ "lib/oauth/server.rb",
59
+ "lib/oauth/signature.rb",
60
+ "lib/oauth/signature/base.rb",
61
+ "lib/oauth/signature/hmac/base.rb",
62
+ "lib/oauth/signature/hmac/md5.rb",
63
+ "lib/oauth/signature/hmac/rmd160.rb",
64
+ "lib/oauth/signature/hmac/sha1.rb",
65
+ "lib/oauth/signature/hmac/sha2.rb",
66
+ "lib/oauth/signature/md5.rb",
67
+ "lib/oauth/signature/plaintext.rb",
68
+ "lib/oauth/signature/rsa/sha1.rb",
69
+ "lib/oauth/signature/sha1.rb",
70
+ "lib/oauth/token.rb",
71
+ "lib/oauth/tokens/access_token.rb",
72
+ "lib/oauth/tokens/consumer_token.rb",
73
+ "lib/oauth/tokens/request_token.rb",
74
+ "lib/oauth/tokens/server_token.rb",
75
+ "lib/oauth/tokens/token.rb",
76
+ "lib/oauth/version.rb",
77
+ "oauth.gemspec",
78
+ "script/destroy",
79
+ "script/generate",
80
+ "script/txt2html",
81
+ "setup.rb",
82
+ "tasks/deployment.rake",
83
+ "tasks/environment.rake",
84
+ "tasks/website.rake",
85
+ "test/cases/oauth_case.rb",
86
+ "test/cases/spec/1_0-final/test_construct_request_url.rb",
87
+ "test/cases/spec/1_0-final/test_normalize_request_parameters.rb",
88
+ "test/cases/spec/1_0-final/test_parameter_encodings.rb",
89
+ "test/cases/spec/1_0-final/test_signature_base_strings.rb",
90
+ "test/integration/consumer_test.rb",
91
+ "test/keys/rsa.cert",
92
+ "test/keys/rsa.pem",
93
+ "test/test_access_token.rb",
94
+ "test/test_action_controller_request_proxy.rb",
95
+ "test/test_consumer.rb",
96
+ "test/test_curb_request_proxy.rb",
97
+ "test/test_em_http_client.rb",
98
+ "test/test_em_http_request_proxy.rb",
99
+ "test/test_helper.rb",
100
+ "test/test_hmac_sha1.rb",
101
+ "test/test_net_http_client.rb",
102
+ "test/test_net_http_request_proxy.rb",
103
+ "test/test_oauth_helper.rb",
104
+ "test/test_rack_request_proxy.rb",
105
+ "test/test_request_token.rb",
106
+ "test/test_rsa_sha1.rb",
107
+ "test/test_server.rb",
108
+ "test/test_signature.rb",
109
+ "test/test_signature_base.rb",
110
+ "test/test_signature_plain_text.rb",
111
+ "test/test_token.rb",
112
+ "test/test_typhoeus_request_proxy.rb",
113
+ "website/index.html",
114
+ "website/index.txt",
115
+ "website/javascripts/rounded_corners_lite.inc.js",
116
+ "website/stylesheets/screen.css",
117
+ "website/template.rhtml"
118
+ ]
119
+ s.rdoc_options = ["--charset=UTF-8"]
19
120
  s.require_paths = ["lib"]
20
121
  s.rubyforge_project = %q{oauth}
21
- s.rubygems_version = %q{1.3.1}
122
+ s.rubygems_version = %q{1.3.5}
22
123
  s.summary = %q{OAuth Core Ruby implementation}
23
- s.test_files = ["test/cases/spec/1_0-final/test_construct_request_url.rb", "test/cases/spec/1_0-final/test_normalize_request_parameters.rb", "test/cases/spec/1_0-final/test_parameter_encodings.rb", "test/cases/spec/1_0-final/test_signature_base_strings.rb", "test/test_access_token.rb", "test/test_action_controller_request_proxy.rb", "test/test_consumer.rb", "test/test_helper.rb", "test/test_hmac_sha1.rb", "test/test_net_http_client.rb", "test/test_net_http_request_proxy.rb", "test/test_oauth_helper.rb", "test/test_rack_request_proxy.rb", "test/test_request_token.rb", "test/test_rsa_sha1.rb", "test/test_server.rb", "test/test_signature.rb", "test/test_signature_base.rb", "test/test_signature_plain_text.rb", "test/test_token.rb"]
124
+ s.test_files = [
125
+ "test/cases/oauth_case.rb",
126
+ "test/cases/spec/1_0-final/test_construct_request_url.rb",
127
+ "test/cases/spec/1_0-final/test_normalize_request_parameters.rb",
128
+ "test/cases/spec/1_0-final/test_parameter_encodings.rb",
129
+ "test/cases/spec/1_0-final/test_signature_base_strings.rb",
130
+ "test/integration/consumer_test.rb",
131
+ "test/test_access_token.rb",
132
+ "test/test_action_controller_request_proxy.rb",
133
+ "test/test_consumer.rb",
134
+ "test/test_curb_request_proxy.rb",
135
+ "test/test_em_http_client.rb",
136
+ "test/test_em_http_request_proxy.rb",
137
+ "test/test_helper.rb",
138
+ "test/test_hmac_sha1.rb",
139
+ "test/test_net_http_client.rb",
140
+ "test/test_net_http_request_proxy.rb",
141
+ "test/test_oauth_helper.rb",
142
+ "test/test_rack_request_proxy.rb",
143
+ "test/test_request_token.rb",
144
+ "test/test_rsa_sha1.rb",
145
+ "test/test_server.rb",
146
+ "test/test_signature.rb",
147
+ "test/test_signature_base.rb",
148
+ "test/test_signature_plain_text.rb",
149
+ "test/test_token.rb",
150
+ "test/test_typhoeus_request_proxy.rb",
151
+ "examples/yql.rb"
152
+ ]
24
153
 
25
154
  if s.respond_to? :specification_version then
26
155
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
27
- s.specification_version = 2
156
+ s.specification_version = 3
28
157
 
29
158
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
30
- s.add_runtime_dependency(%q<ruby-hmac>, [">= 0.3.1"])
31
- s.add_development_dependency(%q<newgem>, [">= 1.2.3"])
32
- s.add_development_dependency(%q<actionpack>, [">= 0"])
33
- s.add_development_dependency(%q<rack>, [">= 0"])
34
- s.add_development_dependency(%q<hoe>, [">= 1.8.0"])
159
+ s.add_development_dependency(%q<actionpack>, [">= 2.2.0"])
160
+ s.add_development_dependency(%q<rack>, [">= 1.0.0"])
161
+ s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
162
+ s.add_development_dependency(%q<typhoeus>, [">= 0.1.13"])
163
+ s.add_development_dependency(%q<em-http-request>, [">= 0"])
35
164
  else
36
- s.add_dependency(%q<ruby-hmac>, [">= 0.3.1"])
37
- s.add_dependency(%q<newgem>, [">= 1.2.3"])
38
- s.add_dependency(%q<actionpack>, [">= 0"])
39
- s.add_dependency(%q<rack>, [">= 0"])
40
- s.add_dependency(%q<hoe>, [">= 1.8.0"])
165
+ s.add_dependency(%q<actionpack>, [">= 2.2.0"])
166
+ s.add_dependency(%q<rack>, [">= 1.0.0"])
167
+ s.add_dependency(%q<mocha>, [">= 0.9.8"])
168
+ s.add_dependency(%q<typhoeus>, [">= 0.1.13"])
169
+ s.add_dependency(%q<em-http-request>, [">= 0"])
41
170
  end
42
171
  else
43
- s.add_dependency(%q<ruby-hmac>, [">= 0.3.1"])
44
- s.add_dependency(%q<newgem>, [">= 1.2.3"])
45
- s.add_dependency(%q<actionpack>, [">= 0"])
46
- s.add_dependency(%q<rack>, [">= 0"])
47
- s.add_dependency(%q<hoe>, [">= 1.8.0"])
172
+ s.add_dependency(%q<actionpack>, [">= 2.2.0"])
173
+ s.add_dependency(%q<rack>, [">= 1.0.0"])
174
+ s.add_dependency(%q<mocha>, [">= 0.9.8"])
175
+ s.add_dependency(%q<typhoeus>, [">= 0.1.13"])
176
+ s.add_dependency(%q<em-http-request>, [">= 0"])
48
177
  end
49
178
  end
179
+
@@ -0,0 +1,304 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ module Integration
4
+ class ConsumerTest < Test::Unit::TestCase
5
+ def setup
6
+ @consumer=OAuth::Consumer.new(
7
+ 'consumer_key_86cad9', '5888bf0345e5d237',
8
+ {
9
+ :site=>"http://blabla.bla",
10
+ :proxy=>"http://user:password@proxy.bla:8080",
11
+ :request_token_path=>"/oauth/example/request_token.php",
12
+ :access_token_path=>"/oauth/example/access_token.php",
13
+ :authorize_path=>"/oauth/example/authorize.php",
14
+ :scheme=>:header,
15
+ :http_method=>:get
16
+ })
17
+ @token = OAuth::ConsumerToken.new(@consumer,'token_411a7f', '3196ffd991c8ebdb')
18
+ @request_uri = URI.parse('http://example.com/test?key=value')
19
+ @request_parameters = { 'key' => 'value' }
20
+ @nonce = 225579211881198842005988698334675835446
21
+ @timestamp = "1199645624"
22
+ @consumer.http=Net::HTTP.new(@request_uri.host, @request_uri.port)
23
+ end
24
+
25
+ def test_that_signing_auth_headers_on_get_requests_works
26
+ request = Net::HTTP::Get.new(@request_uri.path + "?" + request_parameters_to_s)
27
+ @token.sign!(request, {:nonce => @nonce, :timestamp => @timestamp})
28
+
29
+ assert_equal 'GET', request.method
30
+ assert_equal '/test?key=value', request.path
31
+ assert_equal "OAuth oauth_nonce=\"225579211881198842005988698334675835446\", oauth_signature_method=\"HMAC-SHA1\", oauth_token=\"token_411a7f\", oauth_timestamp=\"1199645624\", oauth_consumer_key=\"consumer_key_86cad9\", oauth_signature=\"1oO2izFav1GP4kEH2EskwXkCRFg%3D\", oauth_version=\"1.0\"".split(', ').sort, request['authorization'].split(', ').sort
32
+ end
33
+
34
+ def test_that_setting_signature_method_on_consumer_effects_signing
35
+ require 'oauth/signature/plaintext'
36
+ request = Net::HTTP::Get.new(@request_uri.path)
37
+ consumer = @consumer.dup
38
+ consumer.options[:signature_method] = 'PLAINTEXT'
39
+ token = OAuth::ConsumerToken.new(consumer, 'token_411a7f', '3196ffd991c8ebdb')
40
+ token.sign!(request, {:nonce => @nonce, :timestamp => @timestamp})
41
+
42
+ assert_no_match( /oauth_signature_method="HMAC-SHA1"/, request['authorization'])
43
+ assert_match( /oauth_signature_method="PLAINTEXT"/, request['authorization'])
44
+ end
45
+
46
+ def test_that_setting_signature_method_on_consumer_effects_signature_base_string
47
+ require 'oauth/signature/plaintext'
48
+ request = Net::HTTP::Get.new(@request_uri.path)
49
+ consumer = @consumer.dup
50
+ consumer.options[:signature_method] = 'PLAINTEXT'
51
+
52
+ request = Net::HTTP::Get.new('/')
53
+ signature_base_string = consumer.signature_base_string(request)
54
+
55
+ assert_no_match( /HMAC-SHA1/, signature_base_string)
56
+ assert_equal( "#{consumer.secret}&", signature_base_string)
57
+ end
58
+
59
+ def test_that_plaintext_signature_works
60
+ # Invalid test because server expects double-escaped signature
61
+ require 'oauth/signature/plaintext'
62
+ # consumer = OAuth::Consumer.new("key", "secret",
63
+ # :site => "http://term.ie", :signature_method => 'PLAINTEXT')
64
+ # access_token = OAuth::AccessToken.new(consumer, 'accesskey', 'accesssecret')
65
+ # response = access_token.get("/oauth/example/echo_api.php?echo=hello")
66
+
67
+ # assert_equal 'echo=hello', response.body
68
+ end
69
+
70
+ def test_that_signing_auth_headers_on_post_requests_works
71
+ request = Net::HTTP::Post.new(@request_uri.path)
72
+ request.set_form_data( @request_parameters )
73
+ @token.sign!(request, {:nonce => @nonce, :timestamp => @timestamp})
74
+ # assert_equal "",request.oauth_helper.signature_base_string
75
+
76
+ assert_equal 'POST', request.method
77
+ assert_equal '/test', request.path
78
+ assert_equal 'key=value', request.body
79
+ assert_equal "OAuth oauth_nonce=\"225579211881198842005988698334675835446\", oauth_signature_method=\"HMAC-SHA1\", oauth_token=\"token_411a7f\", oauth_timestamp=\"1199645624\", oauth_consumer_key=\"consumer_key_86cad9\", oauth_signature=\"26g7wHTtNO6ZWJaLltcueppHYiI%3D\", oauth_version=\"1.0\"".split(', ').sort, request['authorization'].split(', ').sort
80
+ end
81
+
82
+ def test_that_signing_post_params_works
83
+ request = Net::HTTP::Post.new(@request_uri.path)
84
+ request.set_form_data( @request_parameters )
85
+ @token.sign!(request, {:scheme => 'body', :nonce => @nonce, :timestamp => @timestamp})
86
+
87
+ assert_equal 'POST', request.method
88
+ assert_equal '/test', request.path
89
+ assert_equal "key=value&oauth_consumer_key=consumer_key_86cad9&oauth_nonce=225579211881198842005988698334675835446&oauth_signature=26g7wHTtNO6ZWJaLltcueppHYiI%3d&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1199645624&oauth_token=token_411a7f&oauth_version=1.0", request.body.split("&").sort.join("&")
90
+ assert_equal nil, request['authorization']
91
+ end
92
+
93
+ def test_that_using_auth_headers_on_get_on_create_signed_requests_works
94
+ request=@consumer.create_signed_request(:get,@request_uri.path+ "?" + request_parameters_to_s,@token,{:nonce => @nonce, :timestamp => @timestamp},@request_parameters)
95
+
96
+ assert_equal 'GET', request.method
97
+ assert_equal '/test?key=value', request.path
98
+ assert_equal "OAuth oauth_nonce=\"225579211881198842005988698334675835446\", oauth_signature_method=\"HMAC-SHA1\", oauth_token=\"token_411a7f\", oauth_timestamp=\"1199645624\", oauth_consumer_key=\"consumer_key_86cad9\", oauth_signature=\"1oO2izFav1GP4kEH2EskwXkCRFg%3D\", oauth_version=\"1.0\"".split(', ').sort, request['authorization'].split(', ').sort
99
+ end
100
+
101
+ def test_that_using_auth_headers_on_post_on_create_signed_requests_works
102
+ request=@consumer.create_signed_request(:post,@request_uri.path,@token,{:nonce => @nonce, :timestamp => @timestamp},@request_parameters,{})
103
+ assert_equal 'POST', request.method
104
+ assert_equal '/test', request.path
105
+ assert_equal 'key=value', request.body
106
+ assert_equal "OAuth oauth_nonce=\"225579211881198842005988698334675835446\", oauth_signature_method=\"HMAC-SHA1\", oauth_token=\"token_411a7f\", oauth_timestamp=\"1199645624\", oauth_consumer_key=\"consumer_key_86cad9\", oauth_signature=\"26g7wHTtNO6ZWJaLltcueppHYiI%3D\", oauth_version=\"1.0\"".split(', ').sort, request['authorization'].split(', ').sort
107
+ end
108
+
109
+ def test_that_signing_post_params_works_2
110
+ request=@consumer.create_signed_request(:post,@request_uri.path,@token,{:scheme => 'body', :nonce => @nonce, :timestamp => @timestamp},@request_parameters,{})
111
+
112
+ assert_equal 'POST', request.method
113
+ assert_equal '/test', request.path
114
+ assert_equal "key=value&oauth_consumer_key=consumer_key_86cad9&oauth_nonce=225579211881198842005988698334675835446&oauth_signature=26g7wHTtNO6ZWJaLltcueppHYiI%3d&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1199645624&oauth_token=token_411a7f&oauth_version=1.0", request.body.split("&").sort.join("&")
115
+ assert_equal nil, request['authorization']
116
+ end
117
+
118
+ def test_step_by_step_token_request
119
+ @consumer=OAuth::Consumer.new(
120
+ "key",
121
+ "secret",
122
+ {
123
+ :site=>"http://term.ie",
124
+ :request_token_path=>"/oauth/example/request_token.php",
125
+ :access_token_path=>"/oauth/example/access_token.php",
126
+ :authorize_path=>"/oauth/example/authorize.php",
127
+ :scheme=>:header
128
+ })
129
+ options={:nonce=>'nonce',:timestamp=>Time.now.to_i.to_s}
130
+
131
+ request = Net::HTTP::Get.new("/oauth/example/request_token.php")
132
+ signature_base_string=@consumer.signature_base_string(request,nil,options)
133
+ assert_equal "GET&http%3A%2F%2Fterm.ie%2Foauth%2Fexample%2Frequest_token.php&oauth_consumer_key%3Dkey%26oauth_nonce%3D#{options[:nonce]}%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D#{options[:timestamp]}%26oauth_version%3D1.0",signature_base_string
134
+ @consumer.sign!(request, nil,options)
135
+
136
+ assert_equal 'GET', request.method
137
+ assert_equal nil, request.body
138
+ response=@consumer.http.request(request)
139
+ assert_equal "200",response.code
140
+ assert_equal "oauth_token=requestkey&oauth_token_secret=requestsecret",response.body
141
+ end
142
+
143
+ def test_get_token_sequence
144
+ @consumer=OAuth::Consumer.new(
145
+ "key",
146
+ "secret",
147
+ {
148
+ :site=>"http://term.ie",
149
+ :request_token_path=>"/oauth/example/request_token.php",
150
+ :access_token_path=>"/oauth/example/access_token.php",
151
+ :authorize_path=>"/oauth/example/authorize.php"
152
+ })
153
+ assert_equal "http://term.ie/oauth/example/request_token.php",@consumer.request_token_url
154
+ assert_equal "http://term.ie/oauth/example/access_token.php",@consumer.access_token_url
155
+
156
+ assert !@consumer.request_token_url?, "Should not use fully qualified request token url"
157
+ assert !@consumer.access_token_url?, "Should not use fully qualified access token url"
158
+ assert !@consumer.authorize_url?, "Should not use fully qualified url"
159
+
160
+ @request_token=@consumer.get_request_token
161
+ assert_not_nil @request_token
162
+ assert_equal "requestkey",@request_token.token
163
+ assert_equal "requestsecret",@request_token.secret
164
+ assert_equal "http://term.ie/oauth/example/authorize.php?oauth_token=requestkey",@request_token.authorize_url
165
+
166
+ @access_token=@request_token.get_access_token
167
+ assert_not_nil @access_token
168
+ assert_equal "accesskey",@access_token.token
169
+ assert_equal "accesssecret",@access_token.secret
170
+
171
+ @response=@access_token.get("/oauth/example/echo_api.php?ok=hello&test=this")
172
+ assert_not_nil @response
173
+ assert_equal "200",@response.code
174
+ assert_equal( "ok=hello&test=this",@response.body)
175
+
176
+ @response=@access_token.post("/oauth/example/echo_api.php",{'ok'=>'hello','test'=>'this'})
177
+ assert_not_nil @response
178
+ assert_equal "200",@response.code
179
+ assert_equal( "ok=hello&test=this",@response.body)
180
+ end
181
+
182
+ def test_get_token_sequence_using_fqdn
183
+ @consumer=OAuth::Consumer.new(
184
+ "key",
185
+ "secret",
186
+ {
187
+ :site=>"http://term.ie",
188
+ :request_token_url=>"http://term.ie/oauth/example/request_token.php",
189
+ :access_token_url=>"http://term.ie/oauth/example/access_token.php",
190
+ :authorize_url=>"http://term.ie/oauth/example/authorize.php"
191
+ })
192
+ assert_equal "http://term.ie/oauth/example/request_token.php",@consumer.request_token_url
193
+ assert_equal "http://term.ie/oauth/example/access_token.php",@consumer.access_token_url
194
+
195
+ assert @consumer.request_token_url?, "Should use fully qualified request token url"
196
+ assert @consumer.access_token_url?, "Should use fully qualified access token url"
197
+ assert @consumer.authorize_url?, "Should use fully qualified url"
198
+
199
+ @request_token=@consumer.get_request_token
200
+ assert_not_nil @request_token
201
+ assert_equal "requestkey",@request_token.token
202
+ assert_equal "requestsecret",@request_token.secret
203
+ assert_equal "http://term.ie/oauth/example/authorize.php?oauth_token=requestkey",@request_token.authorize_url
204
+
205
+ @access_token=@request_token.get_access_token
206
+ assert_not_nil @access_token
207
+ assert_equal "accesskey",@access_token.token
208
+ assert_equal "accesssecret",@access_token.secret
209
+
210
+ @response=@access_token.get("/oauth/example/echo_api.php?ok=hello&test=this")
211
+ assert_not_nil @response
212
+ assert_equal "200",@response.code
213
+ assert_equal( "ok=hello&test=this",@response.body)
214
+
215
+ @response=@access_token.post("/oauth/example/echo_api.php",{'ok'=>'hello','test'=>'this'})
216
+ assert_not_nil @response
217
+ assert_equal "200",@response.code
218
+ assert_equal( "ok=hello&test=this",@response.body)
219
+ end
220
+
221
+
222
+ # This test does an actual https request (the result doesn't matter)
223
+ # to initialize the same way as get_request_token does. Can be any
224
+ # site that supports https.
225
+ #
226
+ # It also generates "warning: using default DH parameters." which I
227
+ # don't know how to get rid of
228
+ # def test_serialization_with_https
229
+ # consumer = OAuth::Consumer.new('token', 'secret', :site => 'https://plazes.net')
230
+ # consumer.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
231
+ # consumer.http.get('/')
232
+ #
233
+ # assert_nothing_raised do
234
+ # # Specifically this should not raise TypeError: no marshal_dump
235
+ # # is defined for class OpenSSL::SSL::SSLContext
236
+ # Marshal.dump(consumer)
237
+ # end
238
+ # end
239
+ #
240
+ def test_get_request_token_with_custom_arguments
241
+ @consumer=OAuth::Consumer.new(
242
+ "key",
243
+ "secret",
244
+ {
245
+ :site=>"http://term.ie",
246
+ :request_token_path=>"/oauth/example/request_token.php",
247
+ :access_token_path=>"/oauth/example/access_token.php",
248
+ :authorize_path=>"/oauth/example/authorize.php"
249
+ })
250
+
251
+
252
+ debug = ""
253
+ @consumer.http.set_debug_output(debug)
254
+
255
+ # get_request_token should receive our custom request_options and *arguments parameters from get_request_token.
256
+ @consumer.get_request_token({}, {:scope => "http://www.google.com/calendar/feeds http://picasaweb.google.com/data"})
257
+
258
+ # Because this is a POST request, create_http_request should take the first element of *arguments
259
+ # and turn it into URL-encoded data in the body of the POST.
260
+ assert_match( /^<- "scope=http%3a%2f%2fwww.google.com%2fcalendar%2ffeeds%20http%3a%2f%2fpicasaweb.google.com%2fdata"/,
261
+ debug)
262
+ end
263
+
264
+ def test_post_with_body_stream
265
+ @consumer=OAuth::Consumer.new(
266
+ "key",
267
+ "secret",
268
+ {
269
+ :site=>"http://term.ie",
270
+ :request_token_path=>"/oauth/example/request_token.php",
271
+ :access_token_path=>"/oauth/example/access_token.php",
272
+ :authorize_path=>"/oauth/example/authorize.php"
273
+ })
274
+
275
+
276
+ @request_token=@consumer.get_request_token
277
+ @access_token=@request_token.get_access_token
278
+
279
+ request_body_string = "Hello, hello, hello"
280
+ request_body_stream = StringIO.new( request_body_string )
281
+
282
+ @response=@access_token.post("/oauth/example/echo_api.php",request_body_stream)
283
+ assert_not_nil @response
284
+ assert_equal "200",@response.code
285
+
286
+ request_body_file = File.open(__FILE__)
287
+
288
+ @response=@access_token.post("/oauth/example/echo_api.php",request_body_file)
289
+ assert_not_nil @response
290
+ assert_equal "200",@response.code
291
+
292
+ # unfortunately I don't know of a way to test that the body data was received correctly since the test server at http://term.ie
293
+ # echos back any non-oauth parameters but not the body. However, this does test that the request is still correctly signed
294
+ # (including the Content-Length header) and that the server received Content-Length bytes of body since it won't process the
295
+ # request & respond until the full body length is received.
296
+ end
297
+
298
+ private
299
+
300
+ def request_parameters_to_s
301
+ @request_parameters.map { |k,v| "#{k}=#{v}" }.join("&")
302
+ end
303
+ end
304
+ end