metavida-oauth 0.3.2

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.
Files changed (84) hide show
  1. data/History.txt +66 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +83 -0
  4. data/README.rdoc +71 -0
  5. data/Rakefile +36 -0
  6. data/TODO +32 -0
  7. data/bin/oauth +5 -0
  8. data/examples/yql.rb +44 -0
  9. data/lib/oauth/cli.rb +300 -0
  10. data/lib/oauth/client/action_controller_request.rb +53 -0
  11. data/lib/oauth/client/helper.rb +71 -0
  12. data/lib/oauth/client/net_http.rb +78 -0
  13. data/lib/oauth/client.rb +4 -0
  14. data/lib/oauth/consumer.rb +296 -0
  15. data/lib/oauth/errors/error.rb +4 -0
  16. data/lib/oauth/errors/problem.rb +14 -0
  17. data/lib/oauth/errors/unauthorized.rb +12 -0
  18. data/lib/oauth/errors.rb +3 -0
  19. data/lib/oauth/helper.rb +55 -0
  20. data/lib/oauth/oauth.rb +7 -0
  21. data/lib/oauth/oauth_test_helper.rb +25 -0
  22. data/lib/oauth/request_proxy/action_controller_request.rb +68 -0
  23. data/lib/oauth/request_proxy/base.rb +157 -0
  24. data/lib/oauth/request_proxy/jabber_request.rb +41 -0
  25. data/lib/oauth/request_proxy/mock_request.rb +44 -0
  26. data/lib/oauth/request_proxy/net_http.rb +65 -0
  27. data/lib/oauth/request_proxy/rack_request.rb +40 -0
  28. data/lib/oauth/request_proxy.rb +24 -0
  29. data/lib/oauth/server.rb +66 -0
  30. data/lib/oauth/signature/base.rb +91 -0
  31. data/lib/oauth/signature/hmac/base.rb +12 -0
  32. data/lib/oauth/signature/hmac/md5.rb +9 -0
  33. data/lib/oauth/signature/hmac/rmd160.rb +9 -0
  34. data/lib/oauth/signature/hmac/sha1.rb +9 -0
  35. data/lib/oauth/signature/hmac/sha2.rb +9 -0
  36. data/lib/oauth/signature/md5.rb +13 -0
  37. data/lib/oauth/signature/plaintext.rb +23 -0
  38. data/lib/oauth/signature/rsa/sha1.rb +45 -0
  39. data/lib/oauth/signature/sha1.rb +13 -0
  40. data/lib/oauth/signature.rb +28 -0
  41. data/lib/oauth/token.rb +7 -0
  42. data/lib/oauth/tokens/access_token.rb +68 -0
  43. data/lib/oauth/tokens/consumer_token.rb +32 -0
  44. data/lib/oauth/tokens/request_token.rb +28 -0
  45. data/lib/oauth/tokens/server_token.rb +9 -0
  46. data/lib/oauth/tokens/token.rb +17 -0
  47. data/lib/oauth/version.rb +3 -0
  48. data/lib/oauth.rb +4 -0
  49. data/oauth.gemspec +49 -0
  50. data/script/destroy +14 -0
  51. data/script/generate +14 -0
  52. data/script/txt2html +74 -0
  53. data/setup.rb +1585 -0
  54. data/tasks/deployment.rake +34 -0
  55. data/tasks/environment.rake +7 -0
  56. data/tasks/website.rake +17 -0
  57. data/test/cases/oauth_case.rb +19 -0
  58. data/test/cases/spec/1_0-final/test_construct_request_url.rb +62 -0
  59. data/test/cases/spec/1_0-final/test_normalize_request_parameters.rb +88 -0
  60. data/test/cases/spec/1_0-final/test_parameter_encodings.rb +86 -0
  61. data/test/cases/spec/1_0-final/test_signature_base_strings.rb +77 -0
  62. data/test/keys/rsa.cert +11 -0
  63. data/test/keys/rsa.pem +16 -0
  64. data/test/test_access_token.rb +28 -0
  65. data/test/test_action_controller_request_proxy.rb +45 -0
  66. data/test/test_consumer.rb +327 -0
  67. data/test/test_helper.rb +11 -0
  68. data/test/test_hmac_sha1.rb +21 -0
  69. data/test/test_net_http_client.rb +169 -0
  70. data/test/test_net_http_request_proxy.rb +38 -0
  71. data/test/test_rack_request_proxy.rb +40 -0
  72. data/test/test_request_token.rb +53 -0
  73. data/test/test_rsa_sha1.rb +59 -0
  74. data/test/test_server.rb +40 -0
  75. data/test/test_signature.rb +11 -0
  76. data/test/test_signature_base.rb +32 -0
  77. data/test/test_signature_plain_text.rb +31 -0
  78. data/test/test_token.rb +14 -0
  79. data/website/index.html +87 -0
  80. data/website/index.txt +73 -0
  81. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  82. data/website/stylesheets/screen.css +138 -0
  83. data/website/template.rhtml +48 -0
  84. metadata +212 -0
@@ -0,0 +1,327 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+ require 'oauth/consumer'
3
+ require 'oauth/signature/rsa/sha1'
4
+
5
+
6
+ # This performs testing against Andy Smith's test server http://term.ie/oauth/example/
7
+ # Thanks Andy.
8
+ # This also means you have to be online to be able to run these.
9
+ class ConsumerTest < Test::Unit::TestCase
10
+ def setup
11
+ @consumer=OAuth::Consumer.new(
12
+ 'consumer_key_86cad9', '5888bf0345e5d237',
13
+ {
14
+ :site=>"http://blabla.bla",
15
+ :request_token_path=>"/oauth/example/request_token.php",
16
+ :access_token_path=>"/oauth/example/access_token.php",
17
+ :authorize_path=>"/oauth/example/authorize.php",
18
+ :scheme=>:header,
19
+ :http_method=>:get
20
+ })
21
+ @token = OAuth::ConsumerToken.new(@consumer,'token_411a7f', '3196ffd991c8ebdb')
22
+ @request_uri = URI.parse('http://example.com/test?key=value')
23
+ @request_parameters = { 'key' => 'value' }
24
+ @nonce = 225579211881198842005988698334675835446
25
+ @timestamp = "1199645624"
26
+ @consumer.http=Net::HTTP.new(@request_uri.host, @request_uri.port)
27
+ end
28
+
29
+ def test_initializer
30
+ assert_equal "consumer_key_86cad9",@consumer.key
31
+ assert_equal "5888bf0345e5d237",@consumer.secret
32
+ assert_equal "http://blabla.bla",@consumer.site
33
+ assert_equal "/oauth/example/request_token.php",@consumer.request_token_path
34
+ assert_equal "/oauth/example/access_token.php",@consumer.access_token_path
35
+ assert_equal "http://blabla.bla/oauth/example/request_token.php",@consumer.request_token_url
36
+ assert_equal "http://blabla.bla/oauth/example/access_token.php",@consumer.access_token_url
37
+ assert_equal "http://blabla.bla/oauth/example/authorize.php",@consumer.authorize_url
38
+ assert_equal :header,@consumer.scheme
39
+ assert_equal :get,@consumer.http_method
40
+ end
41
+
42
+ def test_defaults
43
+ @consumer=OAuth::Consumer.new(
44
+ "key",
45
+ "secret",
46
+ {
47
+ :site=>"http://twitter.com"
48
+ })
49
+ assert_equal "key",@consumer.key
50
+ assert_equal "secret",@consumer.secret
51
+ assert_equal "http://twitter.com",@consumer.site
52
+ assert_equal "/oauth/request_token",@consumer.request_token_path
53
+ assert_equal "/oauth/access_token",@consumer.access_token_path
54
+ assert_equal "http://twitter.com/oauth/request_token",@consumer.request_token_url
55
+ assert_equal "http://twitter.com/oauth/access_token",@consumer.access_token_url
56
+ assert_equal "http://twitter.com/oauth/authorize",@consumer.authorize_url
57
+ assert_equal :header,@consumer.scheme
58
+ assert_equal :post,@consumer.http_method
59
+ end
60
+
61
+ def test_override_paths
62
+ @consumer=OAuth::Consumer.new(
63
+ "key",
64
+ "secret",
65
+ {
66
+ :site=>"http://twitter.com",
67
+ :request_token_url=>"http://oauth.twitter.com/request_token",
68
+ :access_token_url=>"http://oauth.twitter.com/access_token",
69
+ :authorize_url=>"http://site.twitter.com/authorize"
70
+ })
71
+ assert_equal "key",@consumer.key
72
+ assert_equal "secret",@consumer.secret
73
+ assert_equal "http://twitter.com",@consumer.site
74
+ assert_equal "/oauth/request_token",@consumer.request_token_path
75
+ assert_equal "/oauth/access_token",@consumer.access_token_path
76
+ assert_equal "http://oauth.twitter.com/request_token",@consumer.request_token_url
77
+ assert_equal "http://oauth.twitter.com/access_token",@consumer.access_token_url
78
+ assert_equal "http://site.twitter.com/authorize",@consumer.authorize_url
79
+ assert_equal :header,@consumer.scheme
80
+ assert_equal :post,@consumer.http_method
81
+ end
82
+
83
+ def test_that_signing_auth_headers_on_get_requests_works
84
+ request = Net::HTTP::Get.new(@request_uri.path + "?" + request_parameters_to_s)
85
+ @token.sign!(request, {:nonce => @nonce, :timestamp => @timestamp})
86
+
87
+ assert_equal 'GET', request.method
88
+ assert_equal '/test?key=value', request.path
89
+ 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
90
+ end
91
+
92
+ def test_that_setting_signature_method_on_consumer_effects_signing
93
+ require 'oauth/signature/plaintext'
94
+ request = Net::HTTP::Get.new(@request_uri.path)
95
+ consumer = @consumer.dup
96
+ consumer.options[:signature_method] = 'PLAINTEXT'
97
+ token = OAuth::ConsumerToken.new(consumer, 'token_411a7f', '3196ffd991c8ebdb')
98
+ token.sign!(request, {:nonce => @nonce, :timestamp => @timestamp})
99
+
100
+ assert_no_match( /oauth_signature_method="HMAC-SHA1"/, request['authorization'])
101
+ assert_match( /oauth_signature_method="PLAINTEXT"/, request['authorization'])
102
+ end
103
+
104
+ def test_that_setting_signature_method_on_consumer_effects_signature_base_string
105
+ require 'oauth/signature/plaintext'
106
+ request = Net::HTTP::Get.new(@request_uri.path)
107
+ consumer = @consumer.dup
108
+ consumer.options[:signature_method] = 'PLAINTEXT'
109
+
110
+ request = Net::HTTP::Get.new('/')
111
+ signature_base_string = consumer.signature_base_string(request)
112
+
113
+ assert_no_match( /HMAC-SHA1/, signature_base_string)
114
+ assert_equal( "#{consumer.secret}%26", signature_base_string)
115
+ end
116
+
117
+ def test_that_plaintext_signature_works
118
+ require 'oauth/signature/plaintext'
119
+ consumer = OAuth::Consumer.new("key", "secret",
120
+ :site => "http://term.ie", :signature_method => 'PLAINTEXT')
121
+ access_token = OAuth::AccessToken.new(consumer, 'accesskey', 'accesssecret')
122
+ response = access_token.get("/oauth/example/echo_api.php?echo=hello")
123
+
124
+ assert_equal 'echo=hello', response.body
125
+ end
126
+
127
+ def test_that_signing_auth_headers_on_post_requests_works
128
+ request = Net::HTTP::Post.new(@request_uri.path)
129
+ request.set_form_data( @request_parameters )
130
+ @token.sign!(request, {:nonce => @nonce, :timestamp => @timestamp})
131
+ # assert_equal "",request.oauth_helper.signature_base_string
132
+
133
+ assert_equal 'POST', request.method
134
+ assert_equal '/test', request.path
135
+ assert_equal 'key=value', request.body
136
+ 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
137
+ end
138
+
139
+ def test_that_signing_post_params_works
140
+ request = Net::HTTP::Post.new(@request_uri.path)
141
+ request.set_form_data( @request_parameters )
142
+ @token.sign!(request, {:scheme => 'body', :nonce => @nonce, :timestamp => @timestamp})
143
+
144
+ assert_equal 'POST', request.method
145
+ assert_equal '/test', request.path
146
+ 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("&")
147
+ assert_equal nil, request['authorization']
148
+ end
149
+
150
+ def test_that_using_auth_headers_on_get_on_create_signed_requests_works
151
+ request=@consumer.create_signed_request(:get,@request_uri.path+ "?" + request_parameters_to_s,@token,{:nonce => @nonce, :timestamp => @timestamp},@request_parameters)
152
+
153
+ assert_equal 'GET', request.method
154
+ assert_equal '/test?key=value', request.path
155
+ 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
156
+ end
157
+
158
+ def test_that_using_auth_headers_on_post_on_create_signed_requests_works
159
+ request=@consumer.create_signed_request(:post,@request_uri.path,@token,{:nonce => @nonce, :timestamp => @timestamp},@request_parameters,{})
160
+ assert_equal 'POST', request.method
161
+ assert_equal '/test', request.path
162
+ assert_equal 'key=value', request.body
163
+ 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
164
+ end
165
+
166
+ def test_that_signing_post_params_works_2
167
+ request=@consumer.create_signed_request(:post,@request_uri.path,@token,{:scheme => 'body', :nonce => @nonce, :timestamp => @timestamp},@request_parameters,{})
168
+
169
+ assert_equal 'POST', request.method
170
+ assert_equal '/test', request.path
171
+ 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("&")
172
+ assert_equal nil, request['authorization']
173
+ end
174
+
175
+ def test_step_by_step_token_request
176
+ @consumer=OAuth::Consumer.new(
177
+ "key",
178
+ "secret",
179
+ {
180
+ :site=>"http://term.ie",
181
+ :request_token_path=>"/oauth/example/request_token.php",
182
+ :access_token_path=>"/oauth/example/access_token.php",
183
+ :authorize_path=>"/oauth/example/authorize.php",
184
+ :scheme=>:header
185
+ })
186
+ options={:nonce=>'nonce',:timestamp=>Time.now.to_i.to_s}
187
+
188
+ request = Net::HTTP::Get.new("/oauth/example/request_token.php")
189
+ signature_base_string=@consumer.signature_base_string(request,nil,options)
190
+ 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
191
+ @consumer.sign!(request, nil,options)
192
+
193
+ assert_equal 'GET', request.method
194
+ assert_equal nil, request.body
195
+ response=@consumer.http.request(request)
196
+ assert_equal "200",response.code
197
+ assert_equal "oauth_token=requestkey&oauth_token_secret=requestsecret",response.body
198
+ end
199
+
200
+ def test_get_token_sequence
201
+ @consumer=OAuth::Consumer.new(
202
+ "key",
203
+ "secret",
204
+ {
205
+ :site=>"http://term.ie",
206
+ :request_token_path=>"/oauth/example/request_token.php",
207
+ :access_token_path=>"/oauth/example/access_token.php",
208
+ :authorize_path=>"/oauth/example/authorize.php"
209
+ })
210
+ assert_equal "http://term.ie/oauth/example/request_token.php",@consumer.request_token_url
211
+ assert_equal "http://term.ie/oauth/example/access_token.php",@consumer.access_token_url
212
+
213
+ assert !@consumer.request_token_url?, "Should not use fully qualified request token url"
214
+ assert !@consumer.access_token_url?, "Should not use fully qualified access token url"
215
+ assert !@consumer.authorize_url?, "Should not use fully qualified url"
216
+
217
+ @request_token=@consumer.get_request_token
218
+ assert_not_nil @request_token
219
+ assert_equal "requestkey",@request_token.token
220
+ assert_equal "requestsecret",@request_token.secret
221
+ assert_equal "http://term.ie/oauth/example/authorize.php?oauth_token=requestkey",@request_token.authorize_url
222
+
223
+ @access_token=@request_token.get_access_token
224
+ assert_not_nil @access_token
225
+ assert_equal "accesskey",@access_token.token
226
+ assert_equal "accesssecret",@access_token.secret
227
+
228
+ @response=@access_token.get("/oauth/example/echo_api.php?ok=hello&test=this")
229
+ assert_not_nil @response
230
+ assert_equal "200",@response.code
231
+ assert_equal( "ok=hello&test=this",@response.body)
232
+
233
+ @response=@access_token.post("/oauth/example/echo_api.php",{'ok'=>'hello','test'=>'this'})
234
+ assert_not_nil @response
235
+ assert_equal "200",@response.code
236
+ assert_equal( "ok=hello&test=this",@response.body)
237
+ end
238
+
239
+ def test_get_token_sequence_using_fqdn
240
+ @consumer=OAuth::Consumer.new(
241
+ "key",
242
+ "secret",
243
+ {
244
+ :site=>"http://term.ie",
245
+ :request_token_url=>"http://term.ie/oauth/example/request_token.php",
246
+ :access_token_url=>"http://term.ie/oauth/example/access_token.php",
247
+ :authorize_url=>"http://term.ie/oauth/example/authorize.php"
248
+ })
249
+ assert_equal "http://term.ie/oauth/example/request_token.php",@consumer.request_token_url
250
+ assert_equal "http://term.ie/oauth/example/access_token.php",@consumer.access_token_url
251
+
252
+ assert @consumer.request_token_url?, "Should use fully qualified request token url"
253
+ assert @consumer.access_token_url?, "Should use fully qualified access token url"
254
+ assert @consumer.authorize_url?, "Should use fully qualified url"
255
+
256
+ @request_token=@consumer.get_request_token
257
+ assert_not_nil @request_token
258
+ assert_equal "requestkey",@request_token.token
259
+ assert_equal "requestsecret",@request_token.secret
260
+ assert_equal "http://term.ie/oauth/example/authorize.php?oauth_token=requestkey",@request_token.authorize_url
261
+
262
+ @access_token=@request_token.get_access_token
263
+ assert_not_nil @access_token
264
+ assert_equal "accesskey",@access_token.token
265
+ assert_equal "accesssecret",@access_token.secret
266
+
267
+ @response=@access_token.get("/oauth/example/echo_api.php?ok=hello&test=this")
268
+ assert_not_nil @response
269
+ assert_equal "200",@response.code
270
+ assert_equal( "ok=hello&test=this",@response.body)
271
+
272
+ @response=@access_token.post("/oauth/example/echo_api.php",{'ok'=>'hello','test'=>'this'})
273
+ assert_not_nil @response
274
+ assert_equal "200",@response.code
275
+ assert_equal( "ok=hello&test=this",@response.body)
276
+ end
277
+
278
+
279
+ # This test does an actual https request (the result doesn't matter)
280
+ # to initialize the same way as get_request_token does. Can be any
281
+ # site that supports https.
282
+ #
283
+ # It also generates "warning: using default DH parameters." which I
284
+ # don't know how to get rid of
285
+ # def test_serialization_with_https
286
+ # consumer = OAuth::Consumer.new('token', 'secret', :site => 'https://plazes.net')
287
+ # consumer.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
288
+ # consumer.http.get('/')
289
+ #
290
+ # assert_nothing_raised do
291
+ # # Specifically this should not raise TypeError: no marshal_dump
292
+ # # is defined for class OpenSSL::SSL::SSLContext
293
+ # Marshal.dump(consumer)
294
+ # end
295
+ # end
296
+ #
297
+ def test_get_request_token_with_custom_arguments
298
+ @consumer=OAuth::Consumer.new(
299
+ "key",
300
+ "secret",
301
+ {
302
+ :site=>"http://term.ie",
303
+ :request_token_path=>"/oauth/example/request_token.php",
304
+ :access_token_path=>"/oauth/example/access_token.php",
305
+ :authorize_path=>"/oauth/example/authorize.php"
306
+ })
307
+
308
+
309
+ debug = ""
310
+ @consumer.http.set_debug_output(debug)
311
+
312
+ # get_request_token should receive our custom request_options and *arguments parameters from get_request_token.
313
+ @consumer.get_request_token({}, {:scope => "http://www.google.com/calendar/feeds http://picasaweb.google.com/data"})
314
+
315
+ # Because this is a POST request, create_http_request should take the first element of *arguments
316
+ # and turn it into URL-encoded data in the body of the POST.
317
+ assert_match( /^<- "scope=http%3a%2f%2fwww.google.com%2fcalendar%2ffeeds%20http%3a%2f%2fpicasaweb.google.com%2fdata"/,
318
+ debug)
319
+ end
320
+
321
+ protected
322
+
323
+ def request_parameters_to_s
324
+ @request_parameters.map { |k,v| "#{k}=#{v}" }.join("&")
325
+ end
326
+
327
+ end
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/oauth'
4
+
5
+ begin
6
+ # load redgreen unless running from within TextMate (in which case ANSI
7
+ # color codes mess with the output)
8
+ require 'redgreen' unless ENV['TM_CURRENT_LINE']
9
+ rescue LoadError
10
+ nil
11
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'oauth/signature/hmac/sha1'
3
+
4
+ class TestSignatureHmacSha1 < Test::Unit::TestCase
5
+ def test_that_hmac_sha1_implements_hmac_sha1
6
+ assert OAuth::Signature.available_methods.include?('hmac-sha1')
7
+ end
8
+
9
+ def test_that_get_request_from_oauth_test_cases_produces_matching_signature
10
+ request = Net::HTTP::Get.new('/photos?file=vacation.jpg&size=original&oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_token=nnch734d00sl2jdk&oauth_timestamp=1191242096&oauth_nonce=kllo9940pd9333jh&oauth_signature_method=HMAC-SHA1')
11
+
12
+ consumer = OAuth::Consumer.new('dpf43f3p2l4k3l03', 'kd94hf93k423kf44')
13
+ token = OAuth::Token.new('nnch734d00sl2jdk', 'pfkkdhi9sl3r4s00')
14
+
15
+ signature = OAuth::Signature.sign(request, { :consumer => consumer,
16
+ :token => token,
17
+ :uri => 'http://photos.example.net/photos' } )
18
+
19
+ assert_equal 'tR3+Ty81lMeYAr/Fid0kMTYa/WM=', signature
20
+ end
21
+ end
@@ -0,0 +1,169 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'oauth/client/net_http'
3
+
4
+ class NetHTTPClientTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @consumer = OAuth::Consumer.new('consumer_key_86cad9', '5888bf0345e5d237')
8
+ @token = OAuth::Token.new('token_411a7f', '3196ffd991c8ebdb')
9
+ @request_uri = URI.parse('http://example.com/test?key=value')
10
+ @request_parameters = { 'key' => 'value' }
11
+ @nonce = 225579211881198842005988698334675835446
12
+ @timestamp = "1199645624"
13
+ @http = Net::HTTP.new(@request_uri.host, @request_uri.port)
14
+ end
15
+
16
+ def test_that_using_auth_headers_on_get_requests_works
17
+ request = Net::HTTP::Get.new(@request_uri.path + "?" + request_parameters_to_s)
18
+ request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp})
19
+
20
+ assert_equal 'GET', request.method
21
+ assert_equal '/test?key=value', request.path
22
+ 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
23
+ end
24
+
25
+ def test_that_using_auth_headers_on_post_requests_works
26
+ request = Net::HTTP::Post.new(@request_uri.path)
27
+ request.set_form_data( @request_parameters )
28
+ request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp})
29
+
30
+ assert_equal 'POST', request.method
31
+ assert_equal '/test', request.path
32
+ assert_equal 'key=value', request.body
33
+ 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
34
+ end
35
+
36
+ def test_that_using_post_params_works
37
+ request = Net::HTTP::Post.new(@request_uri.path)
38
+ request.set_form_data( @request_parameters )
39
+ request.oauth!(@http, @consumer, @token, {:scheme => 'body', :nonce => @nonce, :timestamp => @timestamp})
40
+
41
+ assert_equal 'POST', request.method
42
+ assert_equal '/test', request.path
43
+ 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("&")
44
+ assert_equal nil, request['authorization']
45
+ end
46
+
47
+ def test_that_using_get_params_works
48
+ request = Net::HTTP::Get.new(@request_uri.path + "?" + request_parameters_to_s)
49
+ request.oauth!(@http, @consumer, @token, {:scheme => 'query_string', :nonce => @nonce, :timestamp => @timestamp})
50
+
51
+ assert_equal 'GET', request.method
52
+ uri = URI.parse(request.path)
53
+ assert_equal '/test', uri.path
54
+ assert_equal nil, uri.fragment
55
+ assert_equal "key=value&oauth_consumer_key=consumer_key_86cad9&oauth_nonce=225579211881198842005988698334675835446&oauth_signature=1oO2izFav1GP4kEH2EskwXkCRFg%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1199645624&oauth_token=token_411a7f&oauth_version=1.0", uri.query.split("&").sort.join("&")
56
+ assert_equal nil, request['authorization']
57
+ end
58
+
59
+ def test_that_using_get_params_works_with_post_requests
60
+ request = Net::HTTP::Post.new(@request_uri.path + "?" + request_parameters_to_s)
61
+ request.oauth!(@http, @consumer, @token, {:scheme => 'query_string', :nonce => @nonce, :timestamp => @timestamp})
62
+
63
+ assert_equal 'POST', request.method
64
+ uri = URI.parse(request.path)
65
+ assert_equal '/test', uri.path
66
+ assert_equal nil, uri.fragment
67
+ 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", uri.query.split("&").sort.join('&')
68
+ assert_equal nil, request.body
69
+ assert_equal nil, request['authorization']
70
+ end
71
+
72
+ def test_that_using_get_params_works_with_post_requests_that_have_post_bodies
73
+ request = Net::HTTP::Post.new(@request_uri.path + "?" + request_parameters_to_s)
74
+ request.set_form_data( { 'key2' => 'value2' } )
75
+ request.oauth!(@http, @consumer, @token, {:scheme => :query_string, :nonce => @nonce, :timestamp => @timestamp})
76
+
77
+ assert_equal 'POST', request.method
78
+ uri = URI.parse(request.path)
79
+ assert_equal '/test', uri.path
80
+ assert_equal nil, uri.fragment
81
+ assert_equal "key=value&oauth_consumer_key=consumer_key_86cad9&oauth_nonce=225579211881198842005988698334675835446&oauth_signature=4kSU8Zd1blWo3W6qJH7eaRTMkg0%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1199645624&oauth_token=token_411a7f&oauth_version=1.0", uri.query.split("&").sort.join('&')
82
+ assert_equal "key2=value2", request.body
83
+ assert_equal nil, request['authorization']
84
+ end
85
+
86
+
87
+ def test_example_from_specs
88
+ consumer=OAuth::Consumer.new("dpf43f3p2l4k3l03","kd94hf93k423kf44")
89
+ token = OAuth::Token.new('nnch734d00sl2jdk', 'pfkkdhi9sl3r4s00')
90
+ request_uri = URI.parse('http://photos.example.net/photos?file=vacation.jpg&size=original')
91
+ nonce = 'kllo9940pd9333jh'
92
+ timestamp = "1191242096"
93
+ http = Net::HTTP.new(request_uri.host, request_uri.port)
94
+
95
+ request = Net::HTTP::Get.new(request_uri.path + "?" + request_uri.query)
96
+ signature_base_string=request.signature_base_string(http, consumer, token, {:nonce => nonce, :timestamp => timestamp})
97
+ assert_equal 'GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal',signature_base_string
98
+
99
+ # request = Net::HTTP::Get.new(request_uri.path + "?" + request_uri.query)
100
+ request.oauth!(http, consumer, token, {:nonce => nonce, :timestamp => timestamp,:realm=>"http://photos.example.net/"})
101
+
102
+ assert_equal 'GET', request.method
103
+ assert_equal 'OAuth realm="http://photos.example.net/", oauth_nonce="kllo9940pd9333jh", oauth_signature_method="HMAC-SHA1", oauth_token="nnch734d00sl2jdk", oauth_timestamp="1191242096", oauth_consumer_key="dpf43f3p2l4k3l03", oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D", oauth_version="1.0"'.split(', ').sort, request['authorization'].split(', ').sort
104
+
105
+ end
106
+
107
+ def test_step_by_step_token_request
108
+ consumer=OAuth::Consumer.new(
109
+ "key",
110
+ "secret")
111
+ request_uri = URI.parse('http://term.ie/oauth/example/request_token.php')
112
+ nonce = rand(2**128).to_s
113
+ timestamp = Time.now.to_i.to_s
114
+ http = Net::HTTP.new(request_uri.host, request_uri.port)
115
+
116
+ request = Net::HTTP::Get.new(request_uri.path)
117
+ signature_base_string=request.signature_base_string(http, consumer, nil, {:scheme=>:query_string,:nonce => nonce, :timestamp => timestamp})
118
+ assert_equal "GET&http%3A%2F%2Fterm.ie%2Foauth%2Fexample%2Frequest_token.php&oauth_consumer_key%3Dkey%26oauth_nonce%3D#{nonce}%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D#{timestamp}%26oauth_version%3D1.0",signature_base_string
119
+
120
+ # request = Net::HTTP::Get.new(request_uri.path)
121
+ request.oauth!(http, consumer, nil, {:scheme=>:query_string,:nonce => nonce, :timestamp => timestamp})
122
+ assert_equal 'GET', request.method
123
+ assert_nil request.body
124
+ assert_nil request['authorization']
125
+ # assert_equal 'OAuth oauth_nonce="kllo9940pd9333jh", oauth_signature_method="HMAC-SHA1", oauth_token="", oauth_timestamp="'+timestamp+'", oauth_consumer_key="key", oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D", oauth_version="1.0"', request['authorization']
126
+
127
+ response=http.request(request)
128
+ assert_equal "200",response.code
129
+ # assert_equal request['authorization'],response.body
130
+ assert_equal "oauth_token=requestkey&oauth_token_secret=requestsecret",response.body
131
+ end
132
+
133
+ def test_that_put_bodies_not_signed
134
+ request = Net::HTTP::Put.new(@request_uri.path)
135
+ request.body = "<?xml version=\"1.0\"?><foo><bar>baz</bar></foo>"
136
+ request["Content-Type"] = "application/xml"
137
+ signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp })
138
+ assert_equal "PUT&http%3A%2F%2Fexample.com%2Ftest&oauth_consumer_key%3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0", signature_base_string
139
+ end
140
+
141
+ def test_that_put_bodies_not_signed_even_if_form_urlencoded
142
+ request = Net::HTTP::Put.new(@request_uri.path)
143
+ request.set_form_data( { 'key2' => 'value2' } )
144
+ signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp })
145
+ assert_equal "PUT&http%3A%2F%2Fexample.com%2Ftest&oauth_consumer_key%3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0", signature_base_string
146
+ end
147
+
148
+ def test_that_post_bodies_signed_if_form_urlencoded
149
+ request = Net::HTTP::Post.new(@request_uri.path)
150
+ request.set_form_data( { 'key2' => 'value2' } )
151
+ signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp })
152
+ assert_equal "POST&http%3A%2F%2Fexample.com%2Ftest&key2%3Dvalue2%26oauth_consumer_key%3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0", signature_base_string
153
+ end
154
+
155
+ def test_that_post_bodies_not_signed_if_other_content_type
156
+ request = Net::HTTP::Post.new(@request_uri.path)
157
+ request.body = "<?xml version=\"1.0\"?><foo><bar>baz</bar></foo>"
158
+ request["Content-Type"] = "application/xml"
159
+ signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp })
160
+ assert_equal "POST&http%3A%2F%2Fexample.com%2Ftest&oauth_consumer_key%3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0", signature_base_string
161
+ end
162
+
163
+ protected
164
+
165
+ def request_parameters_to_s
166
+ @request_parameters.map { |k,v| "#{k}=#{v}" }.join("&")
167
+ end
168
+
169
+ end
@@ -0,0 +1,38 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'oauth/request_proxy/net_http'
3
+
4
+ class NetHTTPRequestProxyTest < Test::Unit::TestCase
5
+
6
+ def test_that_proxy_simple_get_request_works
7
+ request = Net::HTTP::Get.new('/test?key=value')
8
+ request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value'})
9
+
10
+ expected_parameters = {'key' => ['value']}
11
+ assert_equal expected_parameters, request_proxy.parameters
12
+ assert_equal 'http://example.com/test', request_proxy.normalized_uri
13
+ assert_equal 'GET', request_proxy.method
14
+ end
15
+
16
+ def test_that_proxy_simple_post_request_works
17
+ request = Net::HTTP::Post.new('/test')
18
+ params = {'key' => 'value'}
19
+ request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test', :parameters => params})
20
+
21
+ expected_parameters = {'key' => ['value']}
22
+ assert_equal expected_parameters, request_proxy.parameters
23
+ assert_equal 'http://example.com/test', request_proxy.normalized_uri
24
+ assert_equal 'POST', request_proxy.method
25
+ end
26
+
27
+ def test_that_proxy_post_and_get_request_works
28
+ request = Net::HTTP::Post.new('/test?key=value')
29
+ params = {'key2' => 'value2'}
30
+ request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value', :parameters => params})
31
+
32
+ expected_parameters = {'key' => ['value'], 'key2' => ['value2']}
33
+ assert_equal expected_parameters, request_proxy.parameters
34
+ assert_equal 'http://example.com/test', request_proxy.normalized_uri
35
+ assert_equal 'POST', request_proxy.method
36
+ end
37
+
38
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'oauth/request_proxy/rack_request'
3
+ require 'rack/request'
4
+ require 'rack/mock'
5
+
6
+ class RackRequestProxyTest < Test::Unit::TestCase
7
+
8
+ def test_that_proxy_simple_get_request_works
9
+ request = Rack::Request.new(Rack::MockRequest.env_for('http://example.com/test?key=value'))
10
+ request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value'})
11
+
12
+ expected_parameters = {'key' => 'value'}
13
+ assert_equal expected_parameters, request_proxy.parameters
14
+ assert_equal 'http://example.com/test', request_proxy.normalized_uri
15
+ assert_equal 'GET', request_proxy.method
16
+ end
17
+
18
+ def test_that_proxy_simple_post_request_works
19
+ request = Rack::Request.new(Rack::MockRequest.env_for('http://example.com/test', :method => 'POST'))
20
+ params = {'key' => 'value'}
21
+ request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test', :parameters => params})
22
+
23
+ expected_parameters = {'key' => 'value'}
24
+ assert_equal expected_parameters, request_proxy.parameters
25
+ assert_equal 'http://example.com/test', request_proxy.normalized_uri
26
+ assert_equal 'POST', request_proxy.method
27
+ end
28
+
29
+ def test_that_proxy_post_and_get_request_works
30
+ request = Rack::Request.new(Rack::MockRequest.env_for('http://example.com/test?key=value', :method => 'POST', :input => 'key2=value2'))
31
+ params = {'key2' => 'value2'}
32
+ request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value', :parameters => params})
33
+
34
+ expected_parameters = {'key' => 'value', 'key2' => 'value2'}
35
+ assert_equal expected_parameters, request_proxy.parameters
36
+ assert_equal 'http://example.com/test', request_proxy.normalized_uri
37
+ assert_equal 'POST', request_proxy.method
38
+ end
39
+
40
+ end