oauth 0.5.8 → 1.1.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +136 -115
- data/CODE_OF_CONDUCT.md +0 -0
- data/CONTRIBUTING.md +19 -2
- data/LICENSE +2 -1
- data/README.md +267 -67
- data/SECURITY.md +18 -8
- data/TODO +0 -0
- data/lib/oauth/client/action_controller_request.rb +17 -15
- data/lib/oauth/client/em_http.rb +30 -30
- data/lib/oauth/client/helper.rb +76 -75
- data/lib/oauth/client/net_http.rb +109 -102
- data/lib/oauth/client.rb +2 -0
- data/lib/oauth/consumer.rb +113 -110
- data/lib/oauth/errors/error.rb +2 -0
- data/lib/oauth/errors/problem.rb +3 -0
- data/lib/oauth/errors/unauthorized.rb +4 -0
- data/lib/oauth/errors.rb +2 -0
- data/lib/oauth/helper.rb +16 -12
- data/lib/oauth/oauth.rb +6 -4
- data/lib/oauth/oauth_test_helper.rb +2 -0
- data/lib/oauth/request_proxy/action_controller_request.rb +3 -24
- data/lib/oauth/request_proxy/action_dispatch_request.rb +0 -0
- data/lib/oauth/request_proxy/base.rb +2 -2
- data/lib/oauth/request_proxy/curb_request.rb +0 -0
- data/lib/oauth/request_proxy/em_http_request.rb +0 -0
- data/lib/oauth/request_proxy/jabber_request.rb +0 -0
- data/lib/oauth/request_proxy/mock_request.rb +1 -1
- data/lib/oauth/request_proxy/net_http.rb +5 -7
- data/lib/oauth/request_proxy/rack_request.rb +0 -0
- data/lib/oauth/request_proxy/rest_client_request.rb +2 -1
- data/lib/oauth/request_proxy/typhoeus_request.rb +0 -0
- data/lib/oauth/request_proxy.rb +7 -4
- data/lib/oauth/server.rb +12 -10
- data/lib/oauth/signature/base.rb +71 -66
- data/lib/oauth/signature/hmac/sha1.rb +15 -9
- data/lib/oauth/signature/hmac/sha256.rb +15 -9
- data/lib/oauth/signature/plaintext.rb +18 -20
- data/lib/oauth/signature/rsa/sha1.rb +46 -38
- data/lib/oauth/signature.rb +8 -5
- data/lib/oauth/token.rb +2 -0
- data/lib/oauth/tokens/access_token.rb +2 -0
- data/lib/oauth/tokens/consumer_token.rb +4 -2
- data/lib/oauth/tokens/request_token.rb +12 -10
- data/lib/oauth/tokens/server_token.rb +2 -1
- data/lib/oauth/tokens/token.rb +2 -0
- data/lib/oauth/version.rb +5 -1
- data/lib/oauth.rb +9 -2
- metadata +87 -35
- data/bin/oauth +0 -11
- data/lib/oauth/cli/authorize_command.rb +0 -71
- data/lib/oauth/cli/base_command.rb +0 -208
- data/lib/oauth/cli/help_command.rb +0 -22
- data/lib/oauth/cli/query_command.rb +0 -25
- data/lib/oauth/cli/sign_command.rb +0 -81
- data/lib/oauth/cli/version_command.rb +0 -7
- data/lib/oauth/cli.rb +0 -56
data/lib/oauth.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# third party gems
|
4
|
+
require "snaky_hash"
|
5
|
+
require "version_gem"
|
3
6
|
|
4
7
|
require "oauth/version"
|
5
8
|
|
@@ -11,3 +14,7 @@ require "oauth/signature/hmac/sha1"
|
|
11
14
|
require "oauth/signature/hmac/sha256"
|
12
15
|
require "oauth/signature/rsa/sha1"
|
13
16
|
require "oauth/request_proxy/mock_request"
|
17
|
+
|
18
|
+
OAuth::Version.class_eval do
|
19
|
+
extend VersionGem::Basic
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oauth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pelle Braendgaard
|
@@ -16,36 +16,56 @@ authors:
|
|
16
16
|
autorequire:
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
|
-
date:
|
19
|
+
date: 2022-08-29 00:00:00.000000000 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: oauth-tty
|
23
23
|
requirement: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '1.0'
|
25
28
|
- - ">="
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
28
|
-
type: :
|
30
|
+
version: 1.0.1
|
31
|
+
type: :runtime
|
29
32
|
prerelease: false
|
30
33
|
version_requirements: !ruby/object:Gem::Requirement
|
31
34
|
requirements:
|
35
|
+
- - "~>"
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '1.0'
|
32
38
|
- - ">="
|
33
39
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
40
|
+
version: 1.0.1
|
35
41
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
42
|
+
name: snaky_hash
|
37
43
|
requirement: !ruby/object:Gem::Requirement
|
38
44
|
requirements:
|
39
|
-
- - "
|
45
|
+
- - "~>"
|
40
46
|
- !ruby/object:Gem::Version
|
41
|
-
version: '0'
|
42
|
-
type: :
|
47
|
+
version: '2.0'
|
48
|
+
type: :runtime
|
43
49
|
prerelease: false
|
44
50
|
version_requirements: !ruby/object:Gem::Requirement
|
45
51
|
requirements:
|
46
|
-
- - "
|
52
|
+
- - "~>"
|
47
53
|
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
54
|
+
version: '2.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: version_gem
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.1'
|
49
69
|
- !ruby/object:Gem::Dependency
|
50
70
|
name: em-http-request
|
51
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,16 +98,16 @@ dependencies:
|
|
78
98
|
name: minitest
|
79
99
|
requirement: !ruby/object:Gem::Requirement
|
80
100
|
requirements:
|
81
|
-
- - "
|
101
|
+
- - "~>"
|
82
102
|
- !ruby/object:Gem::Version
|
83
|
-
version:
|
103
|
+
version: 5.15.0
|
84
104
|
type: :development
|
85
105
|
prerelease: false
|
86
106
|
version_requirements: !ruby/object:Gem::Requirement
|
87
107
|
requirements:
|
88
|
-
- - "
|
108
|
+
- - "~>"
|
89
109
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
110
|
+
version: 5.15.0
|
91
111
|
- !ruby/object:Gem::Dependency
|
92
112
|
name: mocha
|
93
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,6 +178,20 @@ dependencies:
|
|
158
178
|
- - ">="
|
159
179
|
- !ruby/object:Gem::Version
|
160
180
|
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: rubocop-lts
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '18.0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '18.0'
|
161
195
|
- !ruby/object:Gem::Dependency
|
162
196
|
name: typhoeus
|
163
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,18 +212,17 @@ dependencies:
|
|
178
212
|
requirements:
|
179
213
|
- - "<="
|
180
214
|
- !ruby/object:Gem::Version
|
181
|
-
version: 3.
|
215
|
+
version: 3.19.0
|
182
216
|
type: :development
|
183
217
|
prerelease: false
|
184
218
|
version_requirements: !ruby/object:Gem::Requirement
|
185
219
|
requirements:
|
186
220
|
- - "<="
|
187
221
|
- !ruby/object:Gem::Version
|
188
|
-
version: 3.
|
222
|
+
version: 3.19.0
|
189
223
|
description:
|
190
224
|
email: oauth-ruby@googlegroups.com
|
191
|
-
executables:
|
192
|
-
- oauth
|
225
|
+
executables: []
|
193
226
|
extensions: []
|
194
227
|
extra_rdoc_files:
|
195
228
|
- TODO
|
@@ -201,15 +234,7 @@ files:
|
|
201
234
|
- README.md
|
202
235
|
- SECURITY.md
|
203
236
|
- TODO
|
204
|
-
- bin/oauth
|
205
237
|
- lib/oauth.rb
|
206
|
-
- lib/oauth/cli.rb
|
207
|
-
- lib/oauth/cli/authorize_command.rb
|
208
|
-
- lib/oauth/cli/base_command.rb
|
209
|
-
- lib/oauth/cli/help_command.rb
|
210
|
-
- lib/oauth/cli/query_command.rb
|
211
|
-
- lib/oauth/cli/sign_command.rb
|
212
|
-
- lib/oauth/cli/version_command.rb
|
213
238
|
- lib/oauth/client.rb
|
214
239
|
- lib/oauth/client/action_controller_request.rb
|
215
240
|
- lib/oauth/client/em_http.rb
|
@@ -253,12 +278,39 @@ homepage: https://github.com/oauth-xx/oauth-ruby
|
|
253
278
|
licenses:
|
254
279
|
- MIT
|
255
280
|
metadata:
|
256
|
-
bug_tracker_uri: https://github.com/oauth-xx/oauth-ruby/issues
|
257
|
-
changelog_uri: https://github.com/oauth-xx/oauth-ruby/blob/master/CHANGELOG.md
|
258
|
-
documentation_uri: https://rubydoc.info/github/oauth-xx/oauth-ruby/master
|
259
281
|
homepage_uri: https://github.com/oauth-xx/oauth-ruby
|
260
|
-
source_code_uri: https://github.com/oauth-xx/oauth-ruby
|
261
|
-
|
282
|
+
source_code_uri: https://github.com/oauth-xx/oauth-ruby/tree/v1.1.0
|
283
|
+
changelog_uri: https://github.com/oauth-xx/oauth-ruby/blob/v1.1.0/CHANGELOG.md
|
284
|
+
bug_tracker_uri: https://github.com/oauth-xx/oauth-ruby/issues
|
285
|
+
documentation_uri: https://www.rubydoc.info/gems/oauth/1.1.0
|
286
|
+
wiki_uri: https://github.com/oauth-xx/oauth-ruby/wiki
|
287
|
+
rubygems_mfa_required: 'true'
|
288
|
+
post_install_message: |2
|
289
|
+
|
290
|
+
You have installed oauth version 1.1.0, congratulations!
|
291
|
+
|
292
|
+
Non-commercial support for the 1.x series will end by April, 2025. Please make a plan to upgrade to the next version prior to that date.
|
293
|
+
The only breaking change will be dropped support for Ruby 2.7 and any other versions which will also have reached EOL by then.
|
294
|
+
|
295
|
+
Please see:
|
296
|
+
• https://github.com/oauth-xx/oauth-ruby/blob/main/SECURITY.md
|
297
|
+
|
298
|
+
Note also that I am, and this project is, in the process of leaving Github.
|
299
|
+
I wrote about some of the reasons here:
|
300
|
+
• https://dev.to/galtzo/im-leaving-github-50ba
|
301
|
+
|
302
|
+
If you are a human, please consider a donation as I move toward supporting myself with Open Source work:
|
303
|
+
• https://liberapay.com/pboling
|
304
|
+
• https://ko-fi.com/pboling
|
305
|
+
• https://patreon.com/galtzo
|
306
|
+
|
307
|
+
If you are a corporation, please consider supporting this project, and open source work generally, with a TideLift subscription.
|
308
|
+
• https://tidelift.com/funding/github/rubygems/oauth
|
309
|
+
• Or hire me. I am looking for a job!
|
310
|
+
|
311
|
+
Please report issues, and support the project!
|
312
|
+
|
313
|
+
Thanks, |7eter l-|. l3oling
|
262
314
|
rdoc_options: []
|
263
315
|
require_paths:
|
264
316
|
- lib
|
@@ -266,14 +318,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
266
318
|
requirements:
|
267
319
|
- - ">="
|
268
320
|
- !ruby/object:Gem::Version
|
269
|
-
version: '2.
|
321
|
+
version: '2.7'
|
270
322
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
271
323
|
requirements:
|
272
324
|
- - ">="
|
273
325
|
- !ruby/object:Gem::Version
|
274
326
|
version: '0'
|
275
327
|
requirements: []
|
276
|
-
rubygems_version: 3.
|
328
|
+
rubygems_version: 3.3.21
|
277
329
|
signing_key:
|
278
330
|
specification_version: 4
|
279
331
|
summary: OAuth Core Ruby implementation
|
data/bin/oauth
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require_relative "../lib/oauth"
|
4
|
-
require "oauth/cli"
|
5
|
-
|
6
|
-
Signal.trap("INT") { puts; exit(1) } # don't dump a backtrace on a ^C
|
7
|
-
|
8
|
-
ARGV << "help" if ARGV.empty?
|
9
|
-
command = ARGV.shift
|
10
|
-
|
11
|
-
OAuth::CLI.new(STDOUT, STDIN, STDERR, command, ARGV).run
|
@@ -1,71 +0,0 @@
|
|
1
|
-
class OAuth::CLI
|
2
|
-
class AuthorizeCommand < BaseCommand
|
3
|
-
|
4
|
-
def required_options
|
5
|
-
[:uri]
|
6
|
-
end
|
7
|
-
|
8
|
-
def _run
|
9
|
-
request_token = get_request_token
|
10
|
-
|
11
|
-
if request_token.callback_confirmed?
|
12
|
-
puts "Server appears to support OAuth 1.0a; enabling support."
|
13
|
-
options[:version] = "1.0a"
|
14
|
-
end
|
15
|
-
|
16
|
-
puts "Please visit this url to authorize:"
|
17
|
-
puts request_token.authorize_url
|
18
|
-
|
19
|
-
# parameters for OAuth 1.0a
|
20
|
-
oauth_verifier = ask_user_for_verifier
|
21
|
-
|
22
|
-
verbosely_get_access_token(request_token, oauth_verifier)
|
23
|
-
end
|
24
|
-
|
25
|
-
def get_request_token
|
26
|
-
consumer = get_consumer
|
27
|
-
scope_options = options[:scope] ? { "scope" => options[:scope] } : {}
|
28
|
-
consumer.get_request_token({ :oauth_callback => options[:oauth_callback] }, scope_options)
|
29
|
-
rescue OAuth::Unauthorized => e
|
30
|
-
alert "A problem occurred while attempting to authorize:"
|
31
|
-
alert e
|
32
|
-
alert e.request.body
|
33
|
-
end
|
34
|
-
|
35
|
-
def get_consumer
|
36
|
-
OAuth::Consumer.new \
|
37
|
-
options[:oauth_consumer_key],
|
38
|
-
options[:oauth_consumer_secret],
|
39
|
-
:access_token_url => options[:access_token_url],
|
40
|
-
:authorize_url => options[:authorize_url],
|
41
|
-
:request_token_url => options[:request_token_url],
|
42
|
-
:scheme => options[:scheme],
|
43
|
-
:http_method => options[:method].to_s.downcase.to_sym
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
def ask_user_for_verifier
|
48
|
-
if options[:version] == "1.0a"
|
49
|
-
puts "Please enter the verification code provided by the SP (oauth_verifier):"
|
50
|
-
@stdin.gets.chomp
|
51
|
-
else
|
52
|
-
puts "Press return to continue..."
|
53
|
-
@stdin.gets
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def verbosely_get_access_token(request_token, oauth_verifier)
|
59
|
-
access_token = request_token.get_access_token(:oauth_verifier => oauth_verifier)
|
60
|
-
|
61
|
-
puts "Response:"
|
62
|
-
access_token.params.each do |k,v|
|
63
|
-
puts " #{k}: #{v}" unless k.is_a?(Symbol)
|
64
|
-
end
|
65
|
-
rescue OAuth::Unauthorized => e
|
66
|
-
alert "A problem occurred while attempting to obtain an access token:"
|
67
|
-
alert e
|
68
|
-
alert e.request.body
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,208 +0,0 @@
|
|
1
|
-
class OAuth::CLI
|
2
|
-
class BaseCommand
|
3
|
-
def initialize(stdout, stdin, stderr, arguments)
|
4
|
-
@stdout, @stdin, @stderr = stdout, stdin, stderr
|
5
|
-
|
6
|
-
@options = {}
|
7
|
-
option_parser.parse!(arguments)
|
8
|
-
end
|
9
|
-
|
10
|
-
def run
|
11
|
-
missing = required_options - options.keys
|
12
|
-
if missing.empty?
|
13
|
-
_run
|
14
|
-
else
|
15
|
-
show_missing(missing)
|
16
|
-
puts option_parser.help
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def required_options
|
21
|
-
[]
|
22
|
-
end
|
23
|
-
|
24
|
-
protected
|
25
|
-
|
26
|
-
attr_reader :options
|
27
|
-
|
28
|
-
def show_missing(array)
|
29
|
-
array = array.map { |s| "--#{s}" }.join(" ")
|
30
|
-
OAuth::CLI.puts_red "Options missing to OAuth CLI: #{array}"
|
31
|
-
end
|
32
|
-
|
33
|
-
def xmpp?
|
34
|
-
options[:xmpp]
|
35
|
-
end
|
36
|
-
|
37
|
-
def verbose?
|
38
|
-
options[:verbose]
|
39
|
-
end
|
40
|
-
|
41
|
-
def puts(string=nil)
|
42
|
-
@stdout.puts(string)
|
43
|
-
end
|
44
|
-
|
45
|
-
def alert(string=nil)
|
46
|
-
@stderr.puts(string)
|
47
|
-
end
|
48
|
-
|
49
|
-
def parameters
|
50
|
-
@parameters ||= begin
|
51
|
-
escaped_pairs = options[:params].collect do |pair|
|
52
|
-
if pair =~ /:/
|
53
|
-
Hash[*pair.split(":", 2)].collect do |k,v|
|
54
|
-
[CGI.escape(k.strip), CGI.escape(v.strip)] * "="
|
55
|
-
end
|
56
|
-
else
|
57
|
-
pair
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
querystring = escaped_pairs * "&"
|
62
|
-
cli_params = CGI.parse(querystring)
|
63
|
-
|
64
|
-
{
|
65
|
-
"oauth_consumer_key" => options[:oauth_consumer_key],
|
66
|
-
"oauth_nonce" => options[:oauth_nonce],
|
67
|
-
"oauth_timestamp" => options[:oauth_timestamp],
|
68
|
-
"oauth_token" => options[:oauth_token],
|
69
|
-
"oauth_signature_method" => options[:oauth_signature_method],
|
70
|
-
"oauth_version" => options[:oauth_version]
|
71
|
-
}.reject { |_k,v| v.nil? || v == "" }.merge(cli_params)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def option_parser
|
76
|
-
@option_parser ||= OptionParser.new do |opts|
|
77
|
-
opts.banner = "Usage: oauth <command> [ARGS]"
|
78
|
-
|
79
|
-
_option_parser_defaults
|
80
|
-
_option_parser_common(opts)
|
81
|
-
_option_parser_sign_and_query(opts)
|
82
|
-
_option_parser_authorization(opts)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def _option_parser_defaults
|
87
|
-
options[:oauth_nonce] = OAuth::Helper.generate_key
|
88
|
-
options[:oauth_signature_method] = "HMAC-SHA1"
|
89
|
-
options[:oauth_timestamp] = OAuth::Helper.generate_timestamp
|
90
|
-
options[:oauth_version] = "1.0"
|
91
|
-
options[:method] = :post
|
92
|
-
options[:params] = []
|
93
|
-
options[:scheme] = :header
|
94
|
-
options[:version] = "1.0"
|
95
|
-
end
|
96
|
-
|
97
|
-
def _option_parser_common(opts)
|
98
|
-
## Common Options
|
99
|
-
|
100
|
-
opts.on("-B", "--body", "Use the request body for OAuth parameters.") do
|
101
|
-
options[:scheme] = :body
|
102
|
-
end
|
103
|
-
|
104
|
-
opts.on("--consumer-key KEY", "Specifies the consumer key to use.") do |v|
|
105
|
-
options[:oauth_consumer_key] = v
|
106
|
-
end
|
107
|
-
|
108
|
-
opts.on("--consumer-secret SECRET", "Specifies the consumer secret to use.") do |v|
|
109
|
-
options[:oauth_consumer_secret] = v
|
110
|
-
end
|
111
|
-
|
112
|
-
opts.on("-H", "--header", "Use the 'Authorization' header for OAuth parameters (default).") do
|
113
|
-
options[:scheme] = :header
|
114
|
-
end
|
115
|
-
|
116
|
-
opts.on("-Q", "--query-string", "Use the query string for OAuth parameters.") do
|
117
|
-
options[:scheme] = :query_string
|
118
|
-
end
|
119
|
-
|
120
|
-
opts.on("-O", "--options FILE", "Read options from a file") do |v|
|
121
|
-
arguments = open(v).readlines.map { |l| l.chomp.split(" ") }.flatten
|
122
|
-
options2 = parse_options(arguments)
|
123
|
-
options.merge!(options2)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
def _option_parser_sign_and_query(opts)
|
128
|
-
opts.separator("\n options for signing and querying")
|
129
|
-
|
130
|
-
opts.on("--method METHOD", "Specifies the method (e.g. GET) to use when signing.") do |v|
|
131
|
-
options[:method] = v
|
132
|
-
end
|
133
|
-
|
134
|
-
opts.on("--nonce NONCE", "Specifies the nonce to use.") do |v|
|
135
|
-
options[:oauth_nonce] = v
|
136
|
-
end
|
137
|
-
|
138
|
-
opts.on("--parameters PARAMS", "Specifies the parameters to use when signing.") do |v|
|
139
|
-
options[:params] << v
|
140
|
-
end
|
141
|
-
|
142
|
-
opts.on("--signature-method METHOD", "Specifies the signature method to use; defaults to HMAC-SHA1.") do |v|
|
143
|
-
options[:oauth_signature_method] = v
|
144
|
-
end
|
145
|
-
|
146
|
-
opts.on("--token TOKEN", "Specifies the token to use.") do |v|
|
147
|
-
options[:oauth_token] = v
|
148
|
-
end
|
149
|
-
|
150
|
-
opts.on("--secret SECRET", "Specifies the token secret to use.") do |v|
|
151
|
-
options[:oauth_token_secret] = v
|
152
|
-
end
|
153
|
-
|
154
|
-
opts.on("--timestamp TIMESTAMP", "Specifies the timestamp to use.") do |v|
|
155
|
-
options[:oauth_timestamp] = v
|
156
|
-
end
|
157
|
-
|
158
|
-
opts.on("--realm REALM", "Specifies the realm to use.") do |v|
|
159
|
-
options[:realm] = v
|
160
|
-
end
|
161
|
-
|
162
|
-
opts.on("--uri URI", "Specifies the URI to use when signing.") do |v|
|
163
|
-
options[:uri] = v
|
164
|
-
end
|
165
|
-
|
166
|
-
opts.on("--version [VERSION]", "Specifies the OAuth version to use.") do |v|
|
167
|
-
options[:oauth_version] = v
|
168
|
-
end
|
169
|
-
|
170
|
-
opts.on("--no-version", "Omit oauth_version.") do
|
171
|
-
options[:oauth_version] = nil
|
172
|
-
end
|
173
|
-
|
174
|
-
opts.on("--xmpp", "Generate XMPP stanzas.") do
|
175
|
-
options[:xmpp] = true
|
176
|
-
options[:method] ||= "iq"
|
177
|
-
end
|
178
|
-
|
179
|
-
opts.on("-v", "--verbose", "Be verbose.") do
|
180
|
-
options[:verbose] = true
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
def _option_parser_authorization(opts)
|
185
|
-
opts.separator("\n options for authorization")
|
186
|
-
|
187
|
-
opts.on("--access-token-url URL", "Specifies the access token URL.") do |v|
|
188
|
-
options[:access_token_url] = v
|
189
|
-
end
|
190
|
-
|
191
|
-
opts.on("--authorize-url URL", "Specifies the authorization URL.") do |v|
|
192
|
-
options[:authorize_url] = v
|
193
|
-
end
|
194
|
-
|
195
|
-
opts.on("--callback-url URL", "Specifies a callback URL.") do |v|
|
196
|
-
options[:oauth_callback] = v
|
197
|
-
end
|
198
|
-
|
199
|
-
opts.on("--request-token-url URL", "Specifies the request token URL.") do |v|
|
200
|
-
options[:request_token_url] = v
|
201
|
-
end
|
202
|
-
|
203
|
-
opts.on("--scope SCOPE", "Specifies the scope (Google-specific).") do |v|
|
204
|
-
options[:scope] = v
|
205
|
-
end
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
class OAuth::CLI
|
2
|
-
class HelpCommand < BaseCommand
|
3
|
-
def run
|
4
|
-
puts <<-EOT
|
5
|
-
Usage: oauth COMMAND [ARGS]
|
6
|
-
|
7
|
-
Available oauth commands are:
|
8
|
-
a, authorize Obtain an access token and secret for a user
|
9
|
-
q, query Query a protected resource
|
10
|
-
s, sign Generate an OAuth signature
|
11
|
-
|
12
|
-
In addition to those, there are:
|
13
|
-
v, version Displays the current version of the library (or --version, -v)
|
14
|
-
h, help Displays this help (or --help, -h)
|
15
|
-
|
16
|
-
Tip: All commands can be run without args for specific help.
|
17
|
-
|
18
|
-
|
19
|
-
EOT
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
class OAuth::CLI
|
2
|
-
class QueryCommand < BaseCommand
|
3
|
-
extend OAuth::Helper
|
4
|
-
|
5
|
-
def required_options
|
6
|
-
[:oauth_consumer_key, :oauth_consumer_secret, :oauth_token, :oauth_token_secret]
|
7
|
-
end
|
8
|
-
|
9
|
-
def _run
|
10
|
-
consumer = OAuth::Consumer.new(options[:oauth_consumer_key], options[:oauth_consumer_secret], scheme: options[:scheme])
|
11
|
-
|
12
|
-
access_token = OAuth::AccessToken.new(consumer, options[:oauth_token], options[:oauth_token_secret])
|
13
|
-
|
14
|
-
# append params to the URL
|
15
|
-
uri = URI.parse(options[:uri])
|
16
|
-
params = parameters.map { |k,v| Array(v).map { |v2| "#{OAuth::Helper.escape(k)}=#{OAuth::Helper.escape(v2)}" } * "&" }
|
17
|
-
uri.query = [uri.query, *params].reject { |x| x.nil? } * "&"
|
18
|
-
puts uri.to_s
|
19
|
-
|
20
|
-
response = access_token.request(options[:method].to_s.downcase.to_sym, uri.to_s)
|
21
|
-
puts "#{response.code} #{response.message}"
|
22
|
-
puts response.body
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
class OAuth::CLI
|
2
|
-
class SignCommand < BaseCommand
|
3
|
-
|
4
|
-
def required_options
|
5
|
-
[:oauth_consumer_key, :oauth_consumer_secret, :oauth_token, :oauth_token_secret]
|
6
|
-
end
|
7
|
-
|
8
|
-
def _run
|
9
|
-
request = OAuth::RequestProxy.proxy \
|
10
|
-
"method" => options[:method],
|
11
|
-
"uri" => options[:uri],
|
12
|
-
"parameters" => parameters
|
13
|
-
|
14
|
-
if verbose?
|
15
|
-
puts_verbose_parameters(request)
|
16
|
-
end
|
17
|
-
|
18
|
-
request.sign! \
|
19
|
-
:consumer_secret => options[:oauth_consumer_secret],
|
20
|
-
:token_secret => options[:oauth_token_secret]
|
21
|
-
|
22
|
-
if verbose?
|
23
|
-
puts_verbose_request(request)
|
24
|
-
else
|
25
|
-
puts request.oauth_signature
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def puts_verbose_parameters(request)
|
30
|
-
puts "OAuth parameters:"
|
31
|
-
request.oauth_parameters.each do |k,v|
|
32
|
-
puts " " + [k, v] * ": "
|
33
|
-
end
|
34
|
-
puts
|
35
|
-
|
36
|
-
if request.non_oauth_parameters.any?
|
37
|
-
puts "Parameters:"
|
38
|
-
request.non_oauth_parameters.each do |k,v|
|
39
|
-
puts " " + [k, v] * ": "
|
40
|
-
end
|
41
|
-
puts
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def puts_verbose_request(request)
|
46
|
-
puts "Method: #{request.method}"
|
47
|
-
puts "URI: #{request.uri}"
|
48
|
-
puts "Normalized params: #{request.normalized_parameters}" unless options[:xmpp]
|
49
|
-
puts "Signature base string: #{request.signature_base_string}"
|
50
|
-
|
51
|
-
if xmpp?
|
52
|
-
puts
|
53
|
-
puts "XMPP Stanza:"
|
54
|
-
puts xmpp_output(request)
|
55
|
-
puts
|
56
|
-
puts "Note: You may want to use bare JIDs in your URI."
|
57
|
-
puts
|
58
|
-
else
|
59
|
-
puts "OAuth Request URI: #{request.signed_uri}"
|
60
|
-
puts "Request URI: #{request.signed_uri(false)}"
|
61
|
-
puts "Authorization header: #{request.oauth_header(:realm => options[:realm])}"
|
62
|
-
end
|
63
|
-
puts "Signature: #{request.oauth_signature}"
|
64
|
-
puts "Escaped signature: #{OAuth::Helper.escape(request.oauth_signature)}"
|
65
|
-
end
|
66
|
-
|
67
|
-
def xmpp_output(request)
|
68
|
-
<<-EOS
|
69
|
-
<oauth xmlns='urn:xmpp:oauth:0'>
|
70
|
-
<oauth_consumer_key>#{request.oauth_consumer_key}</oauth_consumer_key>
|
71
|
-
<oauth_token>#{request.oauth_token}</oauth_token>
|
72
|
-
<oauth_signature_method>#{request.oauth_signature_method}</oauth_signature_method>
|
73
|
-
<oauth_signature>#{request.oauth_signature}</oauth_signature>
|
74
|
-
<oauth_timestamp>#{request.oauth_timestamp}</oauth_timestamp>
|
75
|
-
<oauth_nonce>#{request.oauth_nonce}</oauth_nonce>
|
76
|
-
<oauth_version>#{request.oauth_version}</oauth_version>
|
77
|
-
</oauth>
|
78
|
-
EOS
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|