af-oauth 0.3.4.1

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 (85) hide show
  1. data/History.txt +83 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +84 -0
  4. data/README.rdoc +71 -0
  5. data/Rakefile +36 -0
  6. data/TODO +31 -0
  7. data/bin/oauth +5 -0
  8. data/examples/yql.rb +44 -0
  9. data/lib/oauth.rb +4 -0
  10. data/lib/oauth/cli.rb +300 -0
  11. data/lib/oauth/client.rb +4 -0
  12. data/lib/oauth/client/action_controller_request.rb +54 -0
  13. data/lib/oauth/client/helper.rb +81 -0
  14. data/lib/oauth/client/net_http.rb +94 -0
  15. data/lib/oauth/consumer.rb +297 -0
  16. data/lib/oauth/errors.rb +3 -0
  17. data/lib/oauth/errors/error.rb +4 -0
  18. data/lib/oauth/errors/problem.rb +14 -0
  19. data/lib/oauth/errors/unauthorized.rb +12 -0
  20. data/lib/oauth/helper.rb +77 -0
  21. data/lib/oauth/oauth.rb +7 -0
  22. data/lib/oauth/oauth_test_helper.rb +25 -0
  23. data/lib/oauth/request_proxy.rb +24 -0
  24. data/lib/oauth/request_proxy/action_controller_request.rb +63 -0
  25. data/lib/oauth/request_proxy/base.rb +159 -0
  26. data/lib/oauth/request_proxy/jabber_request.rb +41 -0
  27. data/lib/oauth/request_proxy/mock_request.rb +44 -0
  28. data/lib/oauth/request_proxy/net_http.rb +65 -0
  29. data/lib/oauth/request_proxy/rack_request.rb +40 -0
  30. data/lib/oauth/server.rb +66 -0
  31. data/lib/oauth/signature.rb +37 -0
  32. data/lib/oauth/signature/base.rb +99 -0
  33. data/lib/oauth/signature/hmac/base.rb +12 -0
  34. data/lib/oauth/signature/hmac/md5.rb +9 -0
  35. data/lib/oauth/signature/hmac/rmd160.rb +9 -0
  36. data/lib/oauth/signature/hmac/sha1.rb +9 -0
  37. data/lib/oauth/signature/hmac/sha2.rb +9 -0
  38. data/lib/oauth/signature/md5.rb +13 -0
  39. data/lib/oauth/signature/plaintext.rb +23 -0
  40. data/lib/oauth/signature/rsa/sha1.rb +45 -0
  41. data/lib/oauth/signature/sha1.rb +13 -0
  42. data/lib/oauth/token.rb +7 -0
  43. data/lib/oauth/tokens/access_token.rb +68 -0
  44. data/lib/oauth/tokens/consumer_token.rb +32 -0
  45. data/lib/oauth/tokens/request_token.rb +28 -0
  46. data/lib/oauth/tokens/server_token.rb +9 -0
  47. data/lib/oauth/tokens/token.rb +17 -0
  48. data/lib/oauth/version.rb +3 -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 +127 -0
  66. data/test/test_consumer.rb +327 -0
  67. data/test/test_helper.rb +10 -0
  68. data/test/test_hmac_sha1.rb +21 -0
  69. data/test/test_net_http_client.rb +187 -0
  70. data/test/test_net_http_request_proxy.rb +73 -0
  71. data/test/test_oauth_helper.rb +50 -0
  72. data/test/test_rack_request_proxy.rb +40 -0
  73. data/test/test_request_token.rb +53 -0
  74. data/test/test_rsa_sha1.rb +59 -0
  75. data/test/test_server.rb +40 -0
  76. data/test/test_signature.rb +19 -0
  77. data/test/test_signature_base.rb +32 -0
  78. data/test/test_signature_plain_text.rb +31 -0
  79. data/test/test_token.rb +14 -0
  80. data/website/index.html +87 -0
  81. data/website/index.txt +73 -0
  82. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  83. data/website/stylesheets/screen.css +138 -0
  84. data/website/template.rhtml +48 -0
  85. metadata +241 -0
@@ -0,0 +1,127 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'oauth/request_proxy/action_controller_request.rb'
3
+ require 'action_controller'
4
+ require 'action_controller/test_process'
5
+
6
+ class ActionControllerRequestProxyTest < Test::Unit::TestCase
7
+
8
+ def request_proxy(request_method = :get, uri_params = {}, body_params = {})
9
+ request = ActionController::TestRequest.new
10
+
11
+ case request_method
12
+ when :post
13
+ request.env['REQUEST_METHOD'] = 'POST'
14
+ when :put
15
+ request.env['REQUEST_METHOD'] = 'PUT'
16
+ end
17
+
18
+ request.env['RAW_POST_DATA'] = body_params.to_query
19
+ request.env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'
20
+
21
+ yield request if block_given?
22
+ OAuth::RequestProxy.proxy(request, :parameters=>uri_params)
23
+ end
24
+
25
+ def test_that_proxy_simple_get_request_works_with_query_params
26
+ request_proxy = request_proxy(:get, {'key'=>'value'})
27
+
28
+ expected_parameters = [["key", "value"]]
29
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
30
+ assert_equal 'GET', request_proxy.method
31
+ end
32
+
33
+ def test_that_proxy_simple_post_request_works_with_query_params
34
+ request_proxy = request_proxy(:post, {'key'=>'value'})
35
+
36
+ expected_parameters = [["key", "value"]]
37
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
38
+ assert_equal 'POST', request_proxy.method
39
+ end
40
+
41
+ def test_that_proxy_simple_put_request_works_with_query_params
42
+ request_proxy = request_proxy(:put, {'key'=>'value'})
43
+
44
+ expected_parameters = [["key", "value"]]
45
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
46
+ assert_equal 'PUT', request_proxy.method
47
+ end
48
+
49
+ def test_that_proxy_simple_put_request_works_with_post_params
50
+ request_proxy = request_proxy(:get, {}, {'key'=>'value'})
51
+
52
+ expected_parameters = []
53
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
54
+ assert_equal 'GET', request_proxy.method
55
+ end
56
+
57
+ def test_that_proxy_simple_post_request_works_with_post_params
58
+ request_proxy = request_proxy(:post, {}, {'key'=>'value'})
59
+
60
+ expected_parameters = [["key", "value"]]
61
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
62
+ assert_equal 'POST', request_proxy.method
63
+ end
64
+
65
+ def test_that_proxy_simple_put_request_works_with_post_params
66
+ request_proxy = request_proxy(:put, {}, {'key'=>'value'})
67
+
68
+ expected_parameters = []
69
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
70
+ assert_equal 'PUT', request_proxy.method
71
+ end
72
+
73
+ def test_that_proxy_simple_put_request_works_with_mixed_params
74
+ request_proxy = request_proxy(:get, {'key'=>'value'}, {'key2'=>'value2'})
75
+
76
+ expected_parameters = [["key", "value"]]
77
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
78
+ assert_equal 'GET', request_proxy.method
79
+ end
80
+
81
+ def test_that_proxy_simple_post_request_works_with_mixed_params
82
+ request_proxy = request_proxy(:post, {'key'=>'value'}, {'key2'=>'value2'})
83
+
84
+ expected_parameters = [["key", "value"],["key2", "value2"]]
85
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
86
+ assert_equal 'POST', request_proxy.method
87
+ end
88
+
89
+ def test_that_proxy_simple_put_request_works_with_mixed_params
90
+ request_proxy = request_proxy(:put, {'key'=>'value'}, {'key2'=>'value2'})
91
+
92
+ expected_parameters = [["key", "value"]]
93
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
94
+ assert_equal 'PUT', request_proxy.method
95
+ end
96
+
97
+ def test_parameter_keys_should_preserve_brackets_from_hash
98
+ assert_equal(
99
+ [["message[body]", "This is a test"]],
100
+ request_proxy(:post, { :message => { :body => 'This is a test' }}).parameters_for_signature
101
+ )
102
+ end
103
+
104
+ def test_parameter_values_with_amps_should_not_break_parameter_parsing
105
+ assert_equal(
106
+ [['message[body]', 'http://foo.com/?a=b&c=d']],
107
+ request_proxy(:post, { :message => { :body => 'http://foo.com/?a=b&c=d'}}).parameters_for_signature
108
+ )
109
+ end
110
+
111
+ def test_parameter_keys_should_preserve_brackets_from_array
112
+ assert_equal(
113
+ [["foo[]", "123"], ["foo[]", "456"]],
114
+ request_proxy(:post, { :foo => [123, 456] }).parameters_for_signature.sort
115
+ )
116
+ end
117
+
118
+ def test_query_string_parameter_values_should_be_cgi_unescaped
119
+ request = request_proxy do |r|
120
+ r.env['QUERY_STRING'] = 'url=http%3A%2F%2Ffoo.com%2F%3Fa%3Db%26c%3Dd'
121
+ end
122
+ assert_equal(
123
+ [['url', 'http://foo.com/?a=b&c=d']],
124
+ request.parameters_for_signature.sort
125
+ )
126
+ end
127
+ end
@@ -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