mojodna-oauth 0.3.1.1 → 0.3.1.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/Manifest.txt +1 -1
- data/lib/oauth/cli.rb +69 -17
- data/lib/oauth/client/helper.rb +0 -4
- data/lib/oauth/consumer.rb +1 -1
- data/lib/oauth/helper.rb +22 -0
- data/lib/oauth/request_proxy/base.rb +51 -17
- data/lib/oauth/server.rb +3 -2
- data/lib/oauth/version.rb +1 -1
- data/lib/oauth.rb +1 -0
- data/oauth.gemspec +3 -3
- data/test/test_consumer.rb +1 -2
- data/test/test_server.rb +1 -1
- metadata +1 -3
data/Manifest.txt
CHANGED
@@ -6,6 +6,7 @@ Rakefile
|
|
6
6
|
TODO
|
7
7
|
bin/oauth
|
8
8
|
lib/oauth.rb
|
9
|
+
lib/oauth/oauth.rb
|
9
10
|
lib/oauth/cli.rb
|
10
11
|
lib/oauth/client.rb
|
11
12
|
lib/oauth/client/action_controller_request.rb
|
@@ -40,7 +41,6 @@ script/destroy
|
|
40
41
|
script/generate
|
41
42
|
script/txt2html
|
42
43
|
setup.rb
|
43
|
-
specs.txt
|
44
44
|
tasks/deployment.rake
|
45
45
|
tasks/environment.rake
|
46
46
|
tasks/website.rake
|
data/lib/oauth/cli.rb
CHANGED
@@ -24,29 +24,43 @@ module OAuth
|
|
24
24
|
if sufficient_options? && valid_command?
|
25
25
|
case command
|
26
26
|
when "sign"
|
27
|
+
parameters = prepare_parameters
|
28
|
+
|
27
29
|
request = OAuth::RequestProxy.proxy \
|
28
30
|
"method" => options[:method],
|
29
31
|
"uri" => options[:uri],
|
30
|
-
"parameters" =>
|
32
|
+
"parameters" => parameters
|
31
33
|
|
32
|
-
|
33
|
-
|
34
|
-
request,
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
if
|
40
|
-
stdout.puts "
|
41
|
-
|
42
|
-
|
43
|
-
|
34
|
+
if verbose?
|
35
|
+
stdout.puts "OAuth parameters:"
|
36
|
+
request.oauth_parameters.each do |k,v|
|
37
|
+
stdout.puts " " + [k, v] * ": "
|
38
|
+
end
|
39
|
+
stdout.puts
|
40
|
+
|
41
|
+
if request.non_oauth_parameters.any?
|
42
|
+
stdout.puts "Parameters:"
|
43
|
+
request.non_oauth_parameters.each do |k,v|
|
44
|
+
stdout.puts " " + [k, v] * ": "
|
45
|
+
end
|
46
|
+
stdout.puts
|
44
47
|
end
|
45
48
|
end
|
46
49
|
|
50
|
+
request.sign! \
|
51
|
+
:consumer_secret => options[:oauth_consumer_secret],
|
52
|
+
:token_secret => options[:oauth_token_secret]
|
53
|
+
|
47
54
|
if verbose?
|
48
|
-
stdout.puts "
|
49
|
-
stdout.puts "
|
55
|
+
stdout.puts "Method: #{request.method}"
|
56
|
+
stdout.puts "Base URI: #{request.uri}"
|
57
|
+
stdout.puts "Normalized params: #{request.normalized_parameters}"
|
58
|
+
stdout.puts "Signature base string: #{request.signature_base_string}"
|
59
|
+
stdout.puts "OAuth Request URI: #{request.signed_uri}"
|
60
|
+
stdout.puts "URI: #{request.signed_uri(false)}"
|
61
|
+
stdout.puts "Authorization header: #{request.oauth_header(:realm => options[:realm])}"
|
62
|
+
stdout.puts "Signature: #{request.signature}"
|
63
|
+
stdout.puts "Escaped signature: #{OAuth::Helper.escape(request.signature)}"
|
50
64
|
else
|
51
65
|
stdout.puts signature
|
52
66
|
end
|
@@ -68,7 +82,11 @@ module OAuth
|
|
68
82
|
opts.banner = "Usage: #{$0} [options] <command>"
|
69
83
|
|
70
84
|
# defaults
|
85
|
+
options[:oauth_nonce] = OAuth::Helper.generate_key
|
71
86
|
options[:oauth_signature_method] = "HMAC-SHA1"
|
87
|
+
options[:oauth_timestamp] = OAuth::Helper.generate_timestamp
|
88
|
+
options[:oauth_version] = "1.0"
|
89
|
+
options[:params] = ""
|
72
90
|
|
73
91
|
opts.on("--consumer-key KEY", "Specifies the consumer key to use.") do |v|
|
74
92
|
options[:oauth_consumer_key] = v
|
@@ -82,6 +100,10 @@ module OAuth
|
|
82
100
|
options[:method] = v
|
83
101
|
end
|
84
102
|
|
103
|
+
opts.on("--nonce NONCE", "Specifies the none to use.") do |v|
|
104
|
+
options[:oauth_nonce] = v
|
105
|
+
end
|
106
|
+
|
85
107
|
opts.on("--parameters PARAMS", "Specifies the parameters to use when signing.") do |v|
|
86
108
|
options[:params] = v
|
87
109
|
end
|
@@ -94,14 +116,30 @@ module OAuth
|
|
94
116
|
options[:oauth_token_secret] = v
|
95
117
|
end
|
96
118
|
|
119
|
+
opts.on("--timestamp TIMESTAMP", "Specifies the timestamp to use.") do |v|
|
120
|
+
options[:oauth_timestamp] = v
|
121
|
+
end
|
122
|
+
|
97
123
|
opts.on("--token TOKEN", "Specifies the token to use.") do |v|
|
98
124
|
options[:oauth_token] = v
|
99
125
|
end
|
100
126
|
|
127
|
+
opts.on("--realm REALM", "Specifies the realm to use.") do |v|
|
128
|
+
options[:realm] = v
|
129
|
+
end
|
130
|
+
|
101
131
|
opts.on("--uri URI", "Specifies the URI to use when signing.") do |v|
|
102
132
|
options[:uri] = v
|
103
133
|
end
|
104
134
|
|
135
|
+
opts.on("--version VERSION", "Specifies the OAuth version to use.") do |v|
|
136
|
+
options[:oauth_version] = v
|
137
|
+
end
|
138
|
+
|
139
|
+
opts.on("--no-version", "Omit oauth_version.") do
|
140
|
+
options[:oauth_version] = nil
|
141
|
+
end
|
142
|
+
|
105
143
|
opts.on("-v", "--verbose", "Be verbose.") do
|
106
144
|
options[:verbose] = true
|
107
145
|
end
|
@@ -113,11 +151,25 @@ module OAuth
|
|
113
151
|
end
|
114
152
|
|
115
153
|
def prepare_parameters
|
154
|
+
escaped_pairs = options[:params].split("&").collect do |pair|
|
155
|
+
Hash[*pair.split("=")].collect do |k,v|
|
156
|
+
puts "k: #{k}"
|
157
|
+
puts "v: #{v}"
|
158
|
+
[CGI.escape(k), CGI.escape(v)] * "="
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
querystring = escaped_pairs * "&"
|
163
|
+
cli_params = CGI.parse(querystring)
|
164
|
+
|
116
165
|
{
|
117
166
|
"oauth_consumer_key" => options[:oauth_consumer_key],
|
167
|
+
"oauth_nonce" => options[:oauth_nonce],
|
168
|
+
"oauth_timestamp" => options[:oauth_timestamp],
|
118
169
|
"oauth_token" => options[:oauth_token],
|
119
|
-
"oauth_signature_method" => options[:oauth_signature_method]
|
120
|
-
|
170
|
+
"oauth_signature_method" => options[:oauth_signature_method],
|
171
|
+
"oauth_version" => options[:oauth_version]
|
172
|
+
}.reject { |k,v| v.nil? || v == "" }.merge(cli_params)
|
121
173
|
end
|
122
174
|
|
123
175
|
def sufficient_options?
|
data/lib/oauth/client/helper.rb
CHANGED
data/lib/oauth/consumer.rb
CHANGED
@@ -102,7 +102,7 @@ module OAuth
|
|
102
102
|
# @consumer.request(:post, '/people', @token, {}, @person.to_xml, { 'Content-Type' => 'application/xml' })
|
103
103
|
#
|
104
104
|
def request(http_method, path, token = nil, request_options = {}, *arguments)
|
105
|
-
if path
|
105
|
+
if path =~ /^\//
|
106
106
|
_http = http
|
107
107
|
else
|
108
108
|
_http = create_http(path)
|
data/lib/oauth/helper.rb
CHANGED
@@ -13,5 +13,27 @@ module OAuth
|
|
13
13
|
def generate_key(size=32)
|
14
14
|
Base64.encode64(OpenSSL::Random.random_bytes(size)).gsub(/\W/, '')
|
15
15
|
end
|
16
|
+
|
17
|
+
def generate_timestamp
|
18
|
+
Time.now.to_i.to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
def normalize(params)
|
22
|
+
params.sort.map do |k, values|
|
23
|
+
|
24
|
+
if values.is_a?(Array)
|
25
|
+
# multiple values were provided for a single key
|
26
|
+
values.sort.collect do |v|
|
27
|
+
[escape(k),escape(v)] * "="
|
28
|
+
end
|
29
|
+
else
|
30
|
+
[escape(k),escape(values)] * "="
|
31
|
+
end
|
32
|
+
end * "&"
|
33
|
+
end
|
34
|
+
|
35
|
+
def unescape(value)
|
36
|
+
URI.unescape(value.gsub('+', '%2B'))
|
37
|
+
end
|
16
38
|
end
|
17
39
|
end
|
@@ -24,10 +24,20 @@ module OAuth::RequestProxy
|
|
24
24
|
parameters['oauth_consumer_key']
|
25
25
|
end
|
26
26
|
|
27
|
+
def parameters
|
28
|
+
raise NotImplementedError, "Must be implemented by subclasses"
|
29
|
+
end
|
30
|
+
|
27
31
|
def parameters_for_signature
|
28
|
-
|
29
|
-
|
30
|
-
|
32
|
+
parameters.reject { |k,v| k == "oauth_signature" }
|
33
|
+
end
|
34
|
+
|
35
|
+
def oauth_parameters
|
36
|
+
parameters.select { |k,v| OAuth::PARAMETERS.include?(k) }.reject { |k,v| v == "" }
|
37
|
+
end
|
38
|
+
|
39
|
+
def non_oauth_parameters
|
40
|
+
parameters.reject { |k,v| OAuth::PARAMETERS.include?(k) }
|
31
41
|
end
|
32
42
|
|
33
43
|
def nonce
|
@@ -59,17 +69,17 @@ module OAuth::RequestProxy
|
|
59
69
|
|
60
70
|
# See 9.1.1. in specs Normalize Request Parameters
|
61
71
|
def normalized_parameters
|
62
|
-
parameters_for_signature
|
72
|
+
normalize(parameters_for_signature)
|
73
|
+
end
|
63
74
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end * "&"
|
75
|
+
def sign(options = {})
|
76
|
+
OAuth::Signature.sign(self, options)
|
77
|
+
end
|
78
|
+
|
79
|
+
def sign!(options = {})
|
80
|
+
parameters["oauth_signature"] = sign(options)
|
81
|
+
@signed = true
|
82
|
+
signature
|
73
83
|
end
|
74
84
|
|
75
85
|
# See 9.1 in specs
|
@@ -78,6 +88,34 @@ module OAuth::RequestProxy
|
|
78
88
|
base.map { |v| escape(v) }.join("&")
|
79
89
|
end
|
80
90
|
|
91
|
+
# Has this request been signed yet?
|
92
|
+
def signed?
|
93
|
+
@signed
|
94
|
+
end
|
95
|
+
|
96
|
+
# URI, including OAuth parameters
|
97
|
+
def signed_uri(with_oauth = true)
|
98
|
+
if signed?
|
99
|
+
if with_oauth
|
100
|
+
params = parameters
|
101
|
+
else
|
102
|
+
params = non_oauth_parameters
|
103
|
+
end
|
104
|
+
|
105
|
+
[uri, normalize(params)] * "?"
|
106
|
+
else
|
107
|
+
STDERR.puts "This request has not yet been signed!"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Authorization header for OAuth
|
112
|
+
def oauth_header(options = {})
|
113
|
+
header_params_str = oauth_parameters.map { |k,v| "#{k}=\"#{escape(v)}\"" }.join(', ')
|
114
|
+
|
115
|
+
realm = "realm=\"#{options[:realm]}\", " if options[:realm]
|
116
|
+
"OAuth #{realm}#{header_params_str}"
|
117
|
+
end
|
118
|
+
|
81
119
|
protected
|
82
120
|
|
83
121
|
def header_params
|
@@ -98,9 +136,5 @@ module OAuth::RequestProxy
|
|
98
136
|
|
99
137
|
return {}
|
100
138
|
end
|
101
|
-
|
102
|
-
def unescape(value)
|
103
|
-
URI.unescape(value.gsub('+', '%2B'))
|
104
|
-
end
|
105
139
|
end
|
106
140
|
end
|
data/lib/oauth/server.rb
CHANGED
@@ -29,13 +29,14 @@ module OAuth
|
|
29
29
|
|
30
30
|
# mainly for testing purposes
|
31
31
|
def create_consumer
|
32
|
-
|
32
|
+
creds = generate_credentials
|
33
|
+
Consumer.new(creds[0], creds[1],
|
33
34
|
{
|
34
35
|
:site => base_url,
|
35
36
|
:request_token_path => request_token_path,
|
36
37
|
:authorize_path => authorize_path,
|
37
38
|
:access_token_path => access_token_path
|
38
|
-
|
39
|
+
})
|
39
40
|
end
|
40
41
|
|
41
42
|
def request_token_path
|
data/lib/oauth/version.rb
CHANGED
data/lib/oauth.rb
CHANGED
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.1.
|
5
|
+
s.version = "0.3.1.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"]
|
@@ -11,8 +11,8 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.description = %q{OAuth Core Ruby implementation}
|
12
12
|
s.email = %q{pelleb@gmail.com}
|
13
13
|
s.executables = ["oauth"]
|
14
|
-
s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "README.rdoc", "
|
15
|
-
s.files = ["History.txt", "License.txt", "Manifest.txt", "README.rdoc", "Rakefile", "TODO", "bin/oauth", "lib/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/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/version.rb", "oauth.gemspec", "script/destroy", "script/generate", "script/txt2html", "setup.rb", "
|
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", "lib/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/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/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_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_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"]
|
data/test/test_consumer.rb
CHANGED
data/test/test_server.rb
CHANGED
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.1.
|
4
|
+
version: 0.3.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pelle Braendgaard
|
@@ -55,7 +55,6 @@ extra_rdoc_files:
|
|
55
55
|
- License.txt
|
56
56
|
- Manifest.txt
|
57
57
|
- README.rdoc
|
58
|
-
- specs.txt
|
59
58
|
- website/index.txt
|
60
59
|
files:
|
61
60
|
- History.txt
|
@@ -100,7 +99,6 @@ files:
|
|
100
99
|
- script/generate
|
101
100
|
- script/txt2html
|
102
101
|
- setup.rb
|
103
|
-
- specs.txt
|
104
102
|
- tasks/deployment.rake
|
105
103
|
- tasks/environment.rake
|
106
104
|
- tasks/website.rake
|