mojodna-oauth 0.3.2.1 → 0.3.2.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.
data/History.txt CHANGED
@@ -1,6 +1,10 @@
1
1
  == 0.3.3 / 0.4.0
2
2
 
3
3
  * Corrected OAuth XMPP namespace (Seth)
4
+ * Improved error handling for invalid Authorization headers (Matt Sanford)
5
+ * Fixed signatures for non-ASCII under $KCODE other than 'u' (Matt Sanford)
6
+ * Fixed edge cases in ActionControllerRequestProxy where params were being
7
+ incorrectly signed (Marcos Wright Kuhns)
4
8
 
5
9
  == 0.3.2 2009-03-23
6
10
 
data/Manifest.txt CHANGED
@@ -68,6 +68,7 @@ test/test_helper.rb
68
68
  test/test_hmac_sha1.rb
69
69
  test/test_net_http_client.rb
70
70
  test/test_net_http_request_proxy.rb
71
+ test/test_oauth_helper.rb
71
72
  test/test_rack_request_proxy.rb
72
73
  test/test_request_token.rb
73
74
  test/test_rsa_sha1.rb
@@ -1,5 +1,6 @@
1
1
  require 'net/http'
2
2
  require 'net/https'
3
+ require 'oauth/oauth'
3
4
  require 'oauth/client/net_http'
4
5
  require 'oauth/errors'
5
6
 
data/lib/oauth/helper.rb CHANGED
@@ -38,6 +38,9 @@ module OAuth
38
38
  # decompose
39
39
  params = header[6,header.length].split(/[,=]/)
40
40
 
41
+ # odd number of arguments - must be a malformed header.
42
+ raise OAuth::Problem.new("Invalid authorization header") if params.size % 2 != 0
43
+
41
44
  # strip and unescape
42
45
  params.map! { |v| unescape(v.strip) }
43
46
 
data/lib/oauth/oauth.rb CHANGED
@@ -3,5 +3,5 @@ module OAuth
3
3
  PARAMETERS = %w(oauth_consumer_key oauth_token oauth_signature_method oauth_timestamp oauth_nonce oauth_version oauth_signature)
4
4
 
5
5
  # reserved character regexp, per section 5.1
6
- RESERVED_CHARACTERS = /[^\w\d\-\.\_\~]/
6
+ RESERVED_CHARACTERS = /[^a-zA-Z0-9\-\.\_\~]/
7
7
  end
@@ -35,7 +35,7 @@ module OAuth::RequestProxy
35
35
  unless options[:clobber_request]
36
36
  params << header_params.to_query
37
37
  params << request.query_string unless request.query_string.blank?
38
- if request.content_type == Mime::Type.lookup("application/x-www-form-urlencoded")
38
+ if request.post? && request.content_type == Mime::Type.lookup("application/x-www-form-urlencoded")
39
39
  params << request.raw_post
40
40
  end
41
41
  end
data/lib/oauth/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OAuth #:nodoc:
2
- VERSION = '0.3.2.1'
2
+ VERSION = '0.3.2.2'
3
3
  end
data/oauth.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{oauth}
5
- s.version = "0.3.2.1"
5
+ s.version = "0.3.2.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Pelle Braendgaard", "Blaine Cook", "Larry Halff", "Jesse Clark", "Jon Crosby", "Seth Fitzsimmons"]
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.email = %q{oauth-ruby@googlegroups.com}
13
13
  s.executables = ["oauth"]
14
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_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"]
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
16
  s.has_rdoc = true
17
17
  s.homepage = %q{http://oauth.rubyforge.org}
18
18
  s.rdoc_options = ["--main", "README.rdoc"]
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.rubyforge_project = %q{oauth}
21
21
  s.rubygems_version = %q{1.3.1}
22
22
  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_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"]
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"]
24
24
 
25
25
  if s.respond_to? :specification_version then
26
26
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
@@ -5,34 +5,116 @@ require 'action_controller/test_process'
5
5
 
6
6
  class ActionControllerRequestProxyTest < Test::Unit::TestCase
7
7
 
8
- def request_proxy(parameters={})
9
- request = ActionController::TestRequest.new({}, parameters)
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
10
19
  request.env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'
20
+
11
21
  yield request if block_given?
12
- OAuth::RequestProxy.proxy(request)
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
13
71
  end
14
-
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
+
15
97
  def test_parameter_keys_should_preserve_brackets_from_hash
16
98
  assert_equal(
17
99
  [["message[body]", "This is a test"]],
18
- request_proxy({ :message => { :body => 'This is a test' }}).parameters_for_signature
100
+ request_proxy(:post, { :message => { :body => 'This is a test' }}).parameters_for_signature
19
101
  )
20
102
  end
21
-
103
+
22
104
  def test_parameter_values_with_amps_should_not_break_parameter_parsing
23
105
  assert_equal(
24
106
  [['message[body]', 'http://foo.com/?a=b&c=d']],
25
- request_proxy({ :message => { :body => 'http://foo.com/?a=b&c=d'}}).parameters_for_signature
107
+ request_proxy(:post, { :message => { :body => 'http://foo.com/?a=b&c=d'}}).parameters_for_signature
26
108
  )
27
109
  end
28
110
 
29
111
  def test_parameter_keys_should_preserve_brackets_from_array
30
112
  assert_equal(
31
113
  [["foo[]", "123"], ["foo[]", "456"]],
32
- request_proxy({ :foo => [123, 456] }).parameters_for_signature.sort
114
+ request_proxy(:post, { :foo => [123, 456] }).parameters_for_signature.sort
33
115
  )
34
116
  end
35
-
117
+
36
118
  def test_query_string_parameter_values_should_be_cgi_unescaped
37
119
  request = request_proxy do |r|
38
120
  r.env['QUERY_STRING'] = 'url=http%3A%2F%2Ffoo.com%2F%3Fa%3Db%26c%3Dd'
@@ -16,7 +16,7 @@ class NetHTTPClientTest < Test::Unit::TestCase
16
16
  def test_that_using_auth_headers_on_get_requests_works
17
17
  request = Net::HTTP::Get.new(@request_uri.path + "?" + request_parameters_to_s)
18
18
  request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp})
19
-
19
+
20
20
  assert_equal 'GET', request.method
21
21
  assert_equal '/test?key=value', request.path
22
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
@@ -32,17 +32,6 @@ class NetHTTPClientTest < Test::Unit::TestCase
32
32
  assert_equal 'key=value', request.body
33
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
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
35
 
47
36
  def test_that_using_get_params_works
48
37
  request = Net::HTTP::Get.new(@request_uri.path + "?" + request_parameters_to_s)
@@ -56,7 +45,18 @@ class NetHTTPClientTest < Test::Unit::TestCase
56
45
  assert_equal nil, request['authorization']
57
46
  end
58
47
 
59
- def test_that_using_get_params_works_with_post_requests
48
+ def test_that_using_post_params_works
49
+ request = Net::HTTP::Post.new(@request_uri.path)
50
+ request.set_form_data( @request_parameters )
51
+ request.oauth!(@http, @consumer, @token, {:scheme => 'body', :nonce => @nonce, :timestamp => @timestamp})
52
+
53
+ assert_equal 'POST', request.method
54
+ assert_equal '/test', request.path
55
+ 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("&")
56
+ assert_equal nil, request['authorization']
57
+ end
58
+
59
+ def test_that_using_post_with_uri_params_works
60
60
  request = Net::HTTP::Post.new(@request_uri.path + "?" + request_parameters_to_s)
61
61
  request.oauth!(@http, @consumer, @token, {:scheme => 'query_string', :nonce => @nonce, :timestamp => @timestamp})
62
62
 
@@ -69,7 +69,7 @@ class NetHTTPClientTest < Test::Unit::TestCase
69
69
  assert_equal nil, request['authorization']
70
70
  end
71
71
 
72
- def test_that_using_get_params_works_with_post_requests_that_have_post_bodies
72
+ def test_that_using_post_with_uri_and_form_params_works
73
73
  request = Net::HTTP::Post.new(@request_uri.path + "?" + request_parameters_to_s)
74
74
  request.set_form_data( { 'key2' => 'value2' } )
75
75
  request.oauth!(@http, @consumer, @token, {:scheme => :query_string, :nonce => @nonce, :timestamp => @timestamp})
@@ -82,8 +82,8 @@ class NetHTTPClientTest < Test::Unit::TestCase
82
82
  assert_equal "key2=value2", request.body
83
83
  assert_equal nil, request['authorization']
84
84
  end
85
-
86
-
85
+
86
+
87
87
  def test_example_from_specs
88
88
  consumer=OAuth::Consumer.new("dpf43f3p2l4k3l03","kd94hf93k423kf44")
89
89
  token = OAuth::Token.new('nnch734d00sl2jdk', 'pfkkdhi9sl3r4s00')
@@ -101,22 +101,22 @@ class NetHTTPClientTest < Test::Unit::TestCase
101
101
 
102
102
  assert_equal 'GET', request.method
103
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
-
104
+
105
105
  end
106
-
106
+
107
107
  def test_step_by_step_token_request
108
- consumer=OAuth::Consumer.new(
108
+ consumer=OAuth::Consumer.new(
109
109
  "key",
110
110
  "secret")
111
111
  request_uri = URI.parse('http://term.ie/oauth/example/request_token.php')
112
112
  nonce = rand(2**128).to_s
113
113
  timestamp = Time.now.to_i.to_s
114
114
  http = Net::HTTP.new(request_uri.host, request_uri.port)
115
-
115
+
116
116
  request = Net::HTTP::Get.new(request_uri.path)
117
117
  signature_base_string=request.signature_base_string(http, consumer, nil, {:scheme=>:query_string,:nonce => nonce, :timestamp => timestamp})
118
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
-
119
+
120
120
  # request = Net::HTTP::Get.new(request_uri.path)
121
121
  request.oauth!(http, consumer, nil, {:scheme=>:query_string,:nonce => nonce, :timestamp => timestamp})
122
122
  assert_equal 'GET', request.method
@@ -129,7 +129,7 @@ class NetHTTPClientTest < Test::Unit::TestCase
129
129
  # assert_equal request['authorization'],response.body
130
130
  assert_equal "oauth_token=requestkey&oauth_token_secret=requestsecret",response.body
131
131
  end
132
-
132
+
133
133
  def test_that_put_bodies_not_signed
134
134
  request = Net::HTTP::Put.new(@request_uri.path)
135
135
  request.body = "<?xml version=\"1.0\"?><foo><bar>baz</bar></foo>"
@@ -144,14 +144,14 @@ class NetHTTPClientTest < Test::Unit::TestCase
144
144
  signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp })
145
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
146
  end
147
-
147
+
148
148
  def test_that_post_bodies_signed_if_form_urlencoded
149
149
  request = Net::HTTP::Post.new(@request_uri.path)
150
150
  request.set_form_data( { 'key2' => 'value2' } )
151
151
  signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp })
152
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
153
  end
154
-
154
+
155
155
  def test_that_post_bodies_not_signed_if_other_content_type
156
156
  request = Net::HTTP::Post.new(@request_uri.path)
157
157
  request.body = "<?xml version=\"1.0\"?><foo><bar>baz</bar></foo>"
@@ -8,29 +8,64 @@ class NetHTTPRequestProxyTest < Test::Unit::TestCase
8
8
  request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value'})
9
9
 
10
10
  expected_parameters = {'key' => ['value']}
11
- assert_equal expected_parameters, request_proxy.parameters
11
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
12
12
  assert_equal 'http://example.com/test', request_proxy.normalized_uri
13
13
  assert_equal 'GET', request_proxy.method
14
14
  end
15
15
 
16
- def test_that_proxy_simple_post_request_works
16
+ def test_that_proxy_simple_post_request_works_with_arguments
17
17
  request = Net::HTTP::Post.new('/test')
18
18
  params = {'key' => 'value'}
19
19
  request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test', :parameters => params})
20
20
 
21
21
  expected_parameters = {'key' => ['value']}
22
- assert_equal expected_parameters, request_proxy.parameters
22
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
23
23
  assert_equal 'http://example.com/test', request_proxy.normalized_uri
24
24
  assert_equal 'POST', request_proxy.method
25
25
  end
26
26
 
27
- def test_that_proxy_post_and_get_request_works
27
+ def test_that_proxy_simple_post_request_works_with_form_data
28
+ request = Net::HTTP::Post.new('/test')
29
+ params = {'key' => 'value'}
30
+ request.set_form_data(params)
31
+ request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test'})
32
+
33
+ expected_parameters = {'key' => ['value']}
34
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
35
+ assert_equal 'http://example.com/test', request_proxy.normalized_uri
36
+ assert_equal 'POST', request_proxy.method
37
+ end
38
+
39
+ def test_that_proxy_simple_put_request_works_with_argugments
40
+ request = Net::HTTP::Put.new('/test')
41
+ params = {'key' => 'value'}
42
+ request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test', :parameters => params})
43
+
44
+ expected_parameters = {'key' => ['value']}
45
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
46
+ assert_equal 'http://example.com/test', request_proxy.normalized_uri
47
+ assert_equal 'PUT', request_proxy.method
48
+ end
49
+
50
+ def test_that_proxy_simple_put_request_works_with_form_data
51
+ request = Net::HTTP::Put.new('/test')
52
+ params = {'key' => 'value'}
53
+ request.set_form_data(params)
54
+ request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test'})
55
+
56
+ expected_parameters = {}
57
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
58
+ assert_equal 'http://example.com/test', request_proxy.normalized_uri
59
+ assert_equal 'PUT', request_proxy.method
60
+ end
61
+
62
+ def test_that_proxy_post_request_works_with_mixed_parameter_sources
28
63
  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})
64
+ request.set_form_data({'key2' => 'value2'})
65
+ request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value', :parameters => {'key3' => 'value3'}})
31
66
 
32
- expected_parameters = {'key' => ['value'], 'key2' => ['value2']}
33
- assert_equal expected_parameters, request_proxy.parameters
67
+ expected_parameters = {'key' => ['value'], 'key2' => ['value2'], 'key3' => ['value3']}
68
+ assert_equal expected_parameters, request_proxy.parameters_for_signature
34
69
  assert_equal 'http://example.com/test', request_proxy.normalized_uri
35
70
  assert_equal 'POST', request_proxy.method
36
71
  end
@@ -0,0 +1,43 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'oauth/helper'
3
+
4
+ class TestOAuthHelper < Test::Unit::TestCase
5
+
6
+ def test_parse_valid_header
7
+ header = 'OAuth ' \
8
+ 'realm="http://example.com/method", ' \
9
+ 'oauth_consumer_key="vince_clortho", ' \
10
+ 'oauth_token="token_value", ' \
11
+ 'oauth_signature_method="HMAC-SHA1", ' \
12
+ 'oauth_signature="signature_here", ' \
13
+ 'oauth_timestamp="1240004133", oauth_nonce="nonce", ' \
14
+ 'oauth_version="1.0" '
15
+
16
+ params = OAuth::Helper.parse_header(header)
17
+
18
+ assert_equal "http://example.com/method", params['realm']
19
+ end
20
+
21
+ def test_parse_header_ill_formed
22
+ header = "OAuth garbage"
23
+
24
+ assert_raise OAuth::Problem do
25
+ OAuth::Helper.parse_header(header)
26
+ end
27
+ end
28
+
29
+ def test_parse_header_contains_equals
30
+ header = 'OAuth ' \
31
+ 'realm="http://example.com/method", ' \
32
+ 'oauth_consumer_key="vince_clortho", ' \
33
+ 'oauth_token="token_value", ' \
34
+ 'oauth_signature_method="HMAC-SHA1", ' \
35
+ 'oauth_signature="signature_here_with_=", ' \
36
+ 'oauth_timestamp="1240004133", oauth_nonce="nonce", ' \
37
+ 'oauth_version="1.0" '
38
+
39
+ assert_raise OAuth::Problem do
40
+ OAuth::Helper.parse_header(header)
41
+ end
42
+ end
43
+ end
@@ -1,11 +1,19 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestOauth < Test::Unit::TestCase
4
-
5
- def setup
6
- end
7
-
8
- def test_truth
9
- assert true
10
- end
11
- end
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestOauth < Test::Unit::TestCase
4
+
5
+ def test_parameter_escaping_kcode_invariant
6
+ old = $KCODE
7
+ begin
8
+ %w(n N e E s S u U).each do |kcode|
9
+ $KCODE = kcode
10
+ assert_equal '%E3%81%82', OAuth::Helper.escape('あ'),
11
+ "Failed to correctly escape Japanese under $KCODE = #{kcode}"
12
+ assert_equal '%C3%A9', OAuth::Helper.escape('é'),
13
+ "Failed to correctly escape e+acute under $KCODE = #{kcode}"
14
+ end
15
+ ensure
16
+ $KCODE = old
17
+ end
18
+ end
19
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mojodna-oauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2.1
4
+ version: 0.3.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pelle Braendgaard
@@ -150,6 +150,7 @@ files:
150
150
  - test/test_hmac_sha1.rb
151
151
  - test/test_net_http_client.rb
152
152
  - test/test_net_http_request_proxy.rb
153
+ - test/test_oauth_helper.rb
153
154
  - test/test_rack_request_proxy.rb
154
155
  - test/test_request_token.rb
155
156
  - test/test_rsa_sha1.rb
@@ -202,6 +203,7 @@ test_files:
202
203
  - test/test_hmac_sha1.rb
203
204
  - test/test_net_http_client.rb
204
205
  - test/test_net_http_request_proxy.rb
206
+ - test/test_oauth_helper.rb
205
207
  - test/test_rack_request_proxy.rb
206
208
  - test/test_request_token.rb
207
209
  - test/test_rsa_sha1.rb