gregwebs-oauth 0.3.6.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.
- data/History.txt +102 -0
- data/License.txt +20 -0
- data/Manifest.txt +84 -0
- data/README.rdoc +71 -0
- data/Rakefile +36 -0
- data/TODO +31 -0
- data/bin/oauth +5 -0
- data/examples/yql.rb +44 -0
- data/lib/oauth.rb +4 -0
- data/lib/oauth/cli.rb +378 -0
- data/lib/oauth/client.rb +4 -0
- data/lib/oauth/client/action_controller_request.rb +54 -0
- data/lib/oauth/client/helper.rb +85 -0
- data/lib/oauth/client/net_http.rb +103 -0
- data/lib/oauth/consumer.rb +354 -0
- data/lib/oauth/errors.rb +3 -0
- data/lib/oauth/errors/error.rb +4 -0
- data/lib/oauth/errors/problem.rb +14 -0
- data/lib/oauth/errors/unauthorized.rb +12 -0
- data/lib/oauth/helper.rb +78 -0
- data/lib/oauth/oauth.rb +11 -0
- data/lib/oauth/oauth_test_helper.rb +25 -0
- data/lib/oauth/request_proxy.rb +24 -0
- data/lib/oauth/request_proxy/action_controller_request.rb +61 -0
- data/lib/oauth/request_proxy/base.rb +166 -0
- data/lib/oauth/request_proxy/jabber_request.rb +41 -0
- data/lib/oauth/request_proxy/mock_request.rb +44 -0
- data/lib/oauth/request_proxy/net_http.rb +68 -0
- data/lib/oauth/request_proxy/rack_request.rb +40 -0
- data/lib/oauth/server.rb +66 -0
- data/lib/oauth/signature.rb +40 -0
- data/lib/oauth/signature/base.rb +91 -0
- data/lib/oauth/signature/hmac/base.rb +12 -0
- data/lib/oauth/signature/hmac/md5.rb +9 -0
- data/lib/oauth/signature/hmac/rmd160.rb +9 -0
- data/lib/oauth/signature/hmac/sha1.rb +9 -0
- data/lib/oauth/signature/hmac/sha2.rb +9 -0
- data/lib/oauth/signature/md5.rb +13 -0
- data/lib/oauth/signature/plaintext.rb +23 -0
- data/lib/oauth/signature/rsa/sha1.rb +45 -0
- data/lib/oauth/signature/sha1.rb +13 -0
- data/lib/oauth/token.rb +7 -0
- data/lib/oauth/tokens/access_token.rb +68 -0
- data/lib/oauth/tokens/consumer_token.rb +33 -0
- data/lib/oauth/tokens/request_token.rb +32 -0
- data/lib/oauth/tokens/server_token.rb +9 -0
- data/lib/oauth/tokens/token.rb +17 -0
- data/lib/oauth/version.rb +3 -0
- data/oauth.gemspec +49 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +17 -0
- data/test/cases/oauth_case.rb +19 -0
- data/test/cases/spec/1_0-final/test_construct_request_url.rb +62 -0
- data/test/cases/spec/1_0-final/test_normalize_request_parameters.rb +88 -0
- data/test/cases/spec/1_0-final/test_parameter_encodings.rb +86 -0
- data/test/cases/spec/1_0-final/test_signature_base_strings.rb +77 -0
- data/test/keys/rsa.cert +11 -0
- data/test/keys/rsa.pem +16 -0
- data/test/test_access_token.rb +26 -0
- data/test/test_action_controller_request_proxy.rb +129 -0
- data/test/test_consumer.rb +362 -0
- data/test/test_helper.rb +14 -0
- data/test/test_hmac_sha1.rb +20 -0
- data/test/test_net_http_client.rb +185 -0
- data/test/test_net_http_request_proxy.rb +72 -0
- data/test/test_oauth_helper.rb +49 -0
- data/test/test_rack_request_proxy.rb +40 -0
- data/test/test_request_token.rb +51 -0
- data/test/test_rsa_sha1.rb +59 -0
- data/test/test_server.rb +40 -0
- data/test/test_signature.rb +19 -0
- data/test/test_signature_base.rb +32 -0
- data/test/test_signature_plain_text.rb +31 -0
- data/test/test_token.rb +14 -0
- data/website/index.html +87 -0
- data/website/index.txt +73 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.rhtml +48 -0
- metadata +217 -0
data/test/test_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
$LOAD_PATH << File.dirname(__FILE__) + '/../lib/'
|
4
|
+
require 'oauth'
|
5
|
+
|
6
|
+
# require File.dirname(__FILE__) + '/../lib/oauth'
|
7
|
+
|
8
|
+
begin
|
9
|
+
# load redgreen unless running from within TextMate (in which case ANSI
|
10
|
+
# color codes mess with the output)
|
11
|
+
require 'redgreen' unless ENV['TM_CURRENT_LINE']
|
12
|
+
rescue LoadError
|
13
|
+
nil
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestSignatureHmacSha1 < Test::Unit::TestCase
|
4
|
+
def test_that_hmac_sha1_implements_hmac_sha1
|
5
|
+
assert OAuth::Signature.available_methods.include?('hmac-sha1')
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_that_get_request_from_oauth_test_cases_produces_matching_signature
|
9
|
+
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')
|
10
|
+
|
11
|
+
consumer = OAuth::Consumer.new('dpf43f3p2l4k3l03', 'kd94hf93k423kf44')
|
12
|
+
token = OAuth::Token.new('nnch734d00sl2jdk', 'pfkkdhi9sl3r4s00')
|
13
|
+
|
14
|
+
signature = OAuth::Signature.sign(request, { :consumer => consumer,
|
15
|
+
:token => token,
|
16
|
+
:uri => 'http://photos.example.net/photos' } )
|
17
|
+
|
18
|
+
assert_equal 'tR3+Ty81lMeYAr/Fid0kMTYa/WM=', signature
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class NetHTTPClientTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@consumer = OAuth::Consumer.new('consumer_key_86cad9', '5888bf0345e5d237')
|
7
|
+
@token = OAuth::Token.new('token_411a7f', '3196ffd991c8ebdb')
|
8
|
+
@request_uri = URI.parse('http://example.com/test?key=value')
|
9
|
+
@request_parameters = { 'key' => 'value' }
|
10
|
+
@nonce = 225579211881198842005988698334675835446
|
11
|
+
@timestamp = "1199645624"
|
12
|
+
@http = Net::HTTP.new(@request_uri.host, @request_uri.port)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_that_using_auth_headers_on_get_requests_works
|
16
|
+
request = Net::HTTP::Get.new(@request_uri.path + "?" + request_parameters_to_s)
|
17
|
+
request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp})
|
18
|
+
|
19
|
+
assert_equal 'GET', request.method
|
20
|
+
assert_equal '/test?key=value', request.path
|
21
|
+
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
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_that_using_auth_headers_on_post_requests_works
|
25
|
+
request = Net::HTTP::Post.new(@request_uri.path)
|
26
|
+
request.set_form_data( @request_parameters )
|
27
|
+
request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp})
|
28
|
+
|
29
|
+
assert_equal 'POST', request.method
|
30
|
+
assert_equal '/test', request.path
|
31
|
+
assert_equal 'key=value', request.body
|
32
|
+
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
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_that_version_is_added_to_existing_user_agent
|
36
|
+
request = Net::HTTP::Post.new(@request_uri.path)
|
37
|
+
request['User-Agent'] = "MyApp"
|
38
|
+
request.set_form_data( @request_parameters )
|
39
|
+
request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp})
|
40
|
+
|
41
|
+
assert_equal "MyApp (OAuth gem v#{OAuth::VERSION})", request['User-Agent']
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_that_version_is_set_when_no_user_agent
|
45
|
+
request = Net::HTTP::Post.new(@request_uri.path)
|
46
|
+
request.set_form_data( @request_parameters )
|
47
|
+
request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp})
|
48
|
+
|
49
|
+
assert_equal "OAuth gem v#{OAuth::VERSION}", request['User-Agent']
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_that_using_get_params_works
|
53
|
+
request = Net::HTTP::Get.new(@request_uri.path + "?" + request_parameters_to_s)
|
54
|
+
request.oauth!(@http, @consumer, @token, {:scheme => 'query_string', :nonce => @nonce, :timestamp => @timestamp})
|
55
|
+
|
56
|
+
assert_equal 'GET', request.method
|
57
|
+
uri = URI.parse(request.path)
|
58
|
+
assert_equal '/test', uri.path
|
59
|
+
assert_equal nil, uri.fragment
|
60
|
+
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("&")
|
61
|
+
assert_equal nil, request['authorization']
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_that_using_post_params_works
|
65
|
+
request = Net::HTTP::Post.new(@request_uri.path)
|
66
|
+
request.set_form_data( @request_parameters )
|
67
|
+
request.oauth!(@http, @consumer, @token, {:scheme => 'body', :nonce => @nonce, :timestamp => @timestamp})
|
68
|
+
|
69
|
+
assert_equal 'POST', request.method
|
70
|
+
assert_equal '/test', request.path
|
71
|
+
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("&")
|
72
|
+
assert_equal nil, request['authorization']
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_that_using_post_with_uri_params_works
|
76
|
+
request = Net::HTTP::Post.new(@request_uri.path + "?" + request_parameters_to_s)
|
77
|
+
request.oauth!(@http, @consumer, @token, {:scheme => 'query_string', :nonce => @nonce, :timestamp => @timestamp})
|
78
|
+
|
79
|
+
assert_equal 'POST', request.method
|
80
|
+
uri = URI.parse(request.path)
|
81
|
+
assert_equal '/test', uri.path
|
82
|
+
assert_equal nil, uri.fragment
|
83
|
+
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('&')
|
84
|
+
assert_equal nil, request.body
|
85
|
+
assert_equal nil, request['authorization']
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_that_using_post_with_uri_and_form_params_works
|
89
|
+
request = Net::HTTP::Post.new(@request_uri.path + "?" + request_parameters_to_s)
|
90
|
+
request.set_form_data( { 'key2' => 'value2' } )
|
91
|
+
request.oauth!(@http, @consumer, @token, {:scheme => :query_string, :nonce => @nonce, :timestamp => @timestamp})
|
92
|
+
|
93
|
+
assert_equal 'POST', request.method
|
94
|
+
uri = URI.parse(request.path)
|
95
|
+
assert_equal '/test', uri.path
|
96
|
+
assert_equal nil, uri.fragment
|
97
|
+
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('&')
|
98
|
+
assert_equal "key2=value2", request.body
|
99
|
+
assert_equal nil, request['authorization']
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
def test_example_from_specs
|
104
|
+
consumer=OAuth::Consumer.new("dpf43f3p2l4k3l03","kd94hf93k423kf44")
|
105
|
+
token = OAuth::Token.new('nnch734d00sl2jdk', 'pfkkdhi9sl3r4s00')
|
106
|
+
request_uri = URI.parse('http://photos.example.net/photos?file=vacation.jpg&size=original')
|
107
|
+
nonce = 'kllo9940pd9333jh'
|
108
|
+
timestamp = "1191242096"
|
109
|
+
http = Net::HTTP.new(request_uri.host, request_uri.port)
|
110
|
+
|
111
|
+
request = Net::HTTP::Get.new(request_uri.path + "?" + request_uri.query)
|
112
|
+
signature_base_string=request.signature_base_string(http, consumer, token, {:nonce => nonce, :timestamp => timestamp})
|
113
|
+
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
|
114
|
+
|
115
|
+
# request = Net::HTTP::Get.new(request_uri.path + "?" + request_uri.query)
|
116
|
+
request.oauth!(http, consumer, token, {:nonce => nonce, :timestamp => timestamp,:realm=>"http://photos.example.net/"})
|
117
|
+
|
118
|
+
assert_equal 'GET', request.method
|
119
|
+
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
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_step_by_step_token_request
|
124
|
+
consumer=OAuth::Consumer.new(
|
125
|
+
"key",
|
126
|
+
"secret")
|
127
|
+
request_uri = URI.parse('http://term.ie/oauth/example/request_token.php')
|
128
|
+
nonce = rand(2**128).to_s
|
129
|
+
timestamp = Time.now.to_i.to_s
|
130
|
+
http = Net::HTTP.new(request_uri.host, request_uri.port)
|
131
|
+
|
132
|
+
request = Net::HTTP::Get.new(request_uri.path)
|
133
|
+
signature_base_string=request.signature_base_string(http, consumer, nil, {:scheme=>:query_string,:nonce => nonce, :timestamp => timestamp})
|
134
|
+
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
|
135
|
+
|
136
|
+
# request = Net::HTTP::Get.new(request_uri.path)
|
137
|
+
request.oauth!(http, consumer, nil, {:scheme=>:query_string,:nonce => nonce, :timestamp => timestamp})
|
138
|
+
assert_equal 'GET', request.method
|
139
|
+
assert_nil request.body
|
140
|
+
assert_nil request['authorization']
|
141
|
+
# 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']
|
142
|
+
|
143
|
+
response=http.request(request)
|
144
|
+
assert_equal "200",response.code
|
145
|
+
# assert_equal request['authorization'],response.body
|
146
|
+
assert_equal "oauth_token=requestkey&oauth_token_secret=requestsecret",response.body
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_that_put_bodies_not_signed
|
150
|
+
request = Net::HTTP::Put.new(@request_uri.path)
|
151
|
+
request.body = "<?xml version=\"1.0\"?><foo><bar>baz</bar></foo>"
|
152
|
+
request["Content-Type"] = "application/xml"
|
153
|
+
signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp })
|
154
|
+
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
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_that_put_bodies_not_signed_even_if_form_urlencoded
|
158
|
+
request = Net::HTTP::Put.new(@request_uri.path)
|
159
|
+
request.set_form_data( { 'key2' => 'value2' } )
|
160
|
+
signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp })
|
161
|
+
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
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_that_post_bodies_signed_if_form_urlencoded
|
165
|
+
request = Net::HTTP::Post.new(@request_uri.path)
|
166
|
+
request.set_form_data( { 'key2' => 'value2' } )
|
167
|
+
signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp })
|
168
|
+
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
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_that_post_bodies_not_signed_if_other_content_type
|
172
|
+
request = Net::HTTP::Post.new(@request_uri.path)
|
173
|
+
request.body = "<?xml version=\"1.0\"?><foo><bar>baz</bar></foo>"
|
174
|
+
request["Content-Type"] = "application/xml"
|
175
|
+
signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp })
|
176
|
+
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
|
177
|
+
end
|
178
|
+
|
179
|
+
protected
|
180
|
+
|
181
|
+
def request_parameters_to_s
|
182
|
+
@request_parameters.map { |k,v| "#{k}=#{v}" }.join("&")
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class NetHTTPRequestProxyTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_that_proxy_simple_get_request_works
|
6
|
+
request = Net::HTTP::Get.new('/test?key=value')
|
7
|
+
request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value'})
|
8
|
+
|
9
|
+
expected_parameters = {'key' => ['value']}
|
10
|
+
assert_equal expected_parameters, request_proxy.parameters_for_signature
|
11
|
+
assert_equal 'http://example.com/test', request_proxy.normalized_uri
|
12
|
+
assert_equal 'GET', request_proxy.method
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_that_proxy_simple_post_request_works_with_arguments
|
16
|
+
request = Net::HTTP::Post.new('/test')
|
17
|
+
params = {'key' => 'value'}
|
18
|
+
request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test', :parameters => params})
|
19
|
+
|
20
|
+
expected_parameters = {'key' => ['value']}
|
21
|
+
assert_equal expected_parameters, request_proxy.parameters_for_signature
|
22
|
+
assert_equal 'http://example.com/test', request_proxy.normalized_uri
|
23
|
+
assert_equal 'POST', request_proxy.method
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_that_proxy_simple_post_request_works_with_form_data
|
27
|
+
request = Net::HTTP::Post.new('/test')
|
28
|
+
params = {'key' => 'value'}
|
29
|
+
request.set_form_data(params)
|
30
|
+
request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test'})
|
31
|
+
|
32
|
+
expected_parameters = {'key' => ['value']}
|
33
|
+
assert_equal expected_parameters, request_proxy.parameters_for_signature
|
34
|
+
assert_equal 'http://example.com/test', request_proxy.normalized_uri
|
35
|
+
assert_equal 'POST', request_proxy.method
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_that_proxy_simple_put_request_works_with_argugments
|
39
|
+
request = Net::HTTP::Put.new('/test')
|
40
|
+
params = {'key' => 'value'}
|
41
|
+
request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test', :parameters => params})
|
42
|
+
|
43
|
+
expected_parameters = {'key' => ['value']}
|
44
|
+
assert_equal expected_parameters, request_proxy.parameters_for_signature
|
45
|
+
assert_equal 'http://example.com/test', request_proxy.normalized_uri
|
46
|
+
assert_equal 'PUT', request_proxy.method
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_that_proxy_simple_put_request_works_with_form_data
|
50
|
+
request = Net::HTTP::Put.new('/test')
|
51
|
+
params = {'key' => 'value'}
|
52
|
+
request.set_form_data(params)
|
53
|
+
request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test'})
|
54
|
+
|
55
|
+
expected_parameters = {}
|
56
|
+
assert_equal expected_parameters, request_proxy.parameters_for_signature
|
57
|
+
assert_equal 'http://example.com/test', request_proxy.normalized_uri
|
58
|
+
assert_equal 'PUT', request_proxy.method
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_that_proxy_post_request_uses_post_parameters
|
62
|
+
request = Net::HTTP::Post.new('/test?key=value')
|
63
|
+
request.set_form_data({'key2' => 'value2'})
|
64
|
+
request_proxy = OAuth::RequestProxy.proxy(request, {:uri => 'http://example.com/test?key=value', :parameters => {'key3' => 'value3'}})
|
65
|
+
|
66
|
+
expected_parameters = {'key2' => ['value2'], 'key3' => ['value3']}
|
67
|
+
assert_equal expected_parameters, request_proxy.parameters_for_signature
|
68
|
+
assert_equal 'http://example.com/test', request_proxy.normalized_uri
|
69
|
+
assert_equal 'POST', request_proxy.method
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestOAuthHelper < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_parse_valid_header
|
6
|
+
header = 'OAuth ' \
|
7
|
+
'realm="http://example.com/method", ' \
|
8
|
+
'oauth_consumer_key="vince_clortho", ' \
|
9
|
+
'oauth_token="token_value", ' \
|
10
|
+
'oauth_signature_method="HMAC-SHA1", ' \
|
11
|
+
'oauth_signature="signature_here", ' \
|
12
|
+
'oauth_timestamp="1240004133", oauth_nonce="nonce", ' \
|
13
|
+
'oauth_version="1.0" '
|
14
|
+
|
15
|
+
params = OAuth::Helper.parse_header(header)
|
16
|
+
|
17
|
+
assert_equal "http://example.com/method", params['realm']
|
18
|
+
assert_equal "vince_clortho", params['oauth_consumer_key']
|
19
|
+
assert_equal "token_value", params['oauth_token']
|
20
|
+
assert_equal "HMAC-SHA1", params['oauth_signature_method']
|
21
|
+
assert_equal "signature_here", params['oauth_signature']
|
22
|
+
assert_equal "1240004133", params['oauth_timestamp']
|
23
|
+
assert_equal "nonce", params['oauth_nonce']
|
24
|
+
assert_equal "1.0", params['oauth_version']
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_parse_header_ill_formed
|
28
|
+
header = "OAuth garbage"
|
29
|
+
|
30
|
+
assert_raise OAuth::Problem do
|
31
|
+
OAuth::Helper.parse_header(header)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_parse_header_contains_equals
|
36
|
+
header = 'OAuth ' \
|
37
|
+
'realm="http://example.com/method", ' \
|
38
|
+
'oauth_consumer_key="vince_clortho", ' \
|
39
|
+
'oauth_token="token_value", ' \
|
40
|
+
'oauth_signature_method="HMAC-SHA1", ' \
|
41
|
+
'oauth_signature="signature_here_with_=", ' \
|
42
|
+
'oauth_timestamp="1240004133", oauth_nonce="nonce", ' \
|
43
|
+
'oauth_version="1.0" '
|
44
|
+
|
45
|
+
assert_raise OAuth::Problem do
|
46
|
+
OAuth::Helper.parse_header(header)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
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
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class StubbedToken < OAuth::RequestToken
|
4
|
+
define_method :build_authorize_url_promoted do |root_domain, params|
|
5
|
+
build_authorize_url root_domain, params
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class TestRequestToken < Test::Unit::TestCase
|
10
|
+
def setup
|
11
|
+
# setup a fake req. token. mocking Consumer would be more appropriate...
|
12
|
+
@request_token = OAuth::RequestToken.new(
|
13
|
+
OAuth::Consumer.new("key", "secret", {}),
|
14
|
+
"key",
|
15
|
+
"secret"
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_request_token_builds_authorize_url_connectly_with_additional_params
|
20
|
+
auth_url = @request_token.authorize_url({:oauth_callback => "github.com"})
|
21
|
+
assert_not_nil auth_url
|
22
|
+
assert_match(/oauth_token/, auth_url)
|
23
|
+
assert_match(/oauth_callback/, auth_url)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_request_token_builds_authorize_url_connectly_with_no_or_nil_params
|
27
|
+
# we should only have 1 key in the url returned if we didn't pass anything.
|
28
|
+
# this is the only required param to authenticate the client.
|
29
|
+
auth_url = @request_token.authorize_url(nil)
|
30
|
+
assert_not_nil auth_url
|
31
|
+
assert_match(/\?oauth_token=/, auth_url)
|
32
|
+
|
33
|
+
auth_url = @request_token.authorize_url
|
34
|
+
assert_not_nil auth_url
|
35
|
+
assert_match(/\?oauth_token=/, auth_url)
|
36
|
+
end
|
37
|
+
|
38
|
+
#TODO: mock out the Consumer to test the Consumer/AccessToken interaction.
|
39
|
+
def test_get_access_token
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_build_authorize_url
|
43
|
+
@stubbed_token = StubbedToken.new(nil, nil, nil)
|
44
|
+
assert_respond_to @stubbed_token, :build_authorize_url_promoted
|
45
|
+
url = @stubbed_token.build_authorize_url_promoted(
|
46
|
+
"http://github.com/oauth/authorize",
|
47
|
+
{:foo => "bar bar"})
|
48
|
+
assert url
|
49
|
+
assert_equal "http://github.com/oauth/authorize?foo=bar+bar", url
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
require 'oauth/consumer'
|
3
|
+
require 'oauth/signature/rsa/sha1'
|
4
|
+
|
5
|
+
class TestSignatureRsaSha1 < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@request = Net::HTTP::Get.new('/photos?file=vacaction.jpg&size=original&oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_timestamp=1196666512&oauth_nonce=13917289812797014437&oauth_signature_method=RSA-SHA1')
|
9
|
+
|
10
|
+
@consumer = OAuth::Consumer.new('dpf43f3p2l4k3l03', OpenSSL::PKey::RSA.new(IO.read(File.dirname(__FILE__) + "/keys/rsa.pem")))
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_that_rsa_sha1_implements_rsa_sha1
|
15
|
+
assert OAuth::Signature.available_methods.include?('rsa-sha1')
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_that_get_request_from_oauth_test_cases_produces_matching_signature_base_string
|
19
|
+
sbs = OAuth::Signature.signature_base_string(@request, { :consumer => @consumer,
|
20
|
+
:uri => 'http://photos.example.net/photos' } )
|
21
|
+
|
22
|
+
assert_equal 'GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacaction.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3D13917289812797014437%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D1196666512%26oauth_version%3D1.0%26size%3Doriginal', sbs
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_that_get_request_from_oauth_test_cases_produces_matching_signature
|
26
|
+
signature = OAuth::Signature.sign(@request, { :consumer => @consumer,
|
27
|
+
:uri => 'http://photos.example.net/photos' } )
|
28
|
+
|
29
|
+
assert_equal 'jvTp/wX1TYtByB1m+Pbyo0lnCOLIsyGCH7wke8AUs3BpnwZJtAuEJkvQL2/9n4s5wUmUl4aCI4BwpraNx4RtEXMe5qg5T1LVTGliMRpKasKsW//e+RinhejgCuzoH26dyF8iY2ZZ/5D1ilgeijhV/vBka5twt399mXwaYdCwFYE=', signature
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_that_get_request_from_oauth_test_cases_produces_matching_signature_using_private_key_file
|
34
|
+
@consumer = OAuth::Consumer.new('dpf43f3p2l4k3l03',nil)
|
35
|
+
|
36
|
+
signature = OAuth::Signature.sign(@request, { :consumer => @consumer,
|
37
|
+
:private_key_file=>File.dirname(__FILE__) + "/keys/rsa.pem",
|
38
|
+
:uri => 'http://photos.example.net/photos' } )
|
39
|
+
|
40
|
+
assert_equal 'jvTp/wX1TYtByB1m+Pbyo0lnCOLIsyGCH7wke8AUs3BpnwZJtAuEJkvQL2/9n4s5wUmUl4aCI4BwpraNx4RtEXMe5qg5T1LVTGliMRpKasKsW//e+RinhejgCuzoH26dyF8iY2ZZ/5D1ilgeijhV/vBka5twt399mXwaYdCwFYE=', signature
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_that_get_request_from_oauth_test_cases_verifies_signature
|
44
|
+
@request = Net::HTTP::Get.new('/photos?oauth_signature_method=RSA-SHA1&oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_timestamp=1196666512&oauth_nonce=13917289812797014437&file=vacaction.jpg&size=original&oauth_signature=jvTp%2FwX1TYtByB1m%2BPbyo0lnCOLIsyGCH7wke8AUs3BpnwZJtAuEJkvQL2%2F9n4s5wUmUl4aCI4BwpraNx4RtEXMe5qg5T1LVTGliMRpKasKsW%2F%2Fe%2BRinhejgCuzoH26dyF8iY2ZZ%2F5D1ilgeijhV%2FvBka5twt399mXwaYdCwFYE%3D')
|
45
|
+
@consumer = OAuth::Consumer.new('dpf43f3p2l4k3l03',OpenSSL::X509::Certificate.new(IO.read(File.dirname(__FILE__) + "/keys/rsa.cert")))
|
46
|
+
|
47
|
+
assert OAuth::Signature.verify(@request, { :consumer => @consumer,
|
48
|
+
:uri => 'http://photos.example.net/photos' } )
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_that_get_request_from_oauth_test_cases_verifies_signature_with_pem
|
53
|
+
@request = Net::HTTP::Get.new('/photos?oauth_signature_method=RSA-SHA1&oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_timestamp=1196666512&oauth_nonce=13917289812797014437&file=vacaction.jpg&size=original&oauth_signature=jvTp%2FwX1TYtByB1m%2BPbyo0lnCOLIsyGCH7wke8AUs3BpnwZJtAuEJkvQL2%2F9n4s5wUmUl4aCI4BwpraNx4RtEXMe5qg5T1LVTGliMRpKasKsW%2F%2Fe%2BRinhejgCuzoH26dyF8iY2ZZ%2F5D1ilgeijhV%2FvBka5twt399mXwaYdCwFYE%3D')
|
54
|
+
assert OAuth::Signature.verify(@request, { :consumer => @consumer,
|
55
|
+
:uri => 'http://photos.example.net/photos' } )
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|