oauth 0.5.5 → 0.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +415 -0
  3. data/CODE_OF_CONDUCT.md +84 -0
  4. data/CONTRIBUTING.md +23 -0
  5. data/LICENSE +18 -17
  6. data/README.md +372 -0
  7. data/SECURITY.md +16 -0
  8. data/bin/oauth +2 -2
  9. data/lib/oauth/cli/authorize_command.rb +8 -10
  10. data/lib/oauth/cli/base_command.rb +9 -7
  11. data/lib/oauth/cli/query_command.rb +3 -3
  12. data/lib/oauth/cli/sign_command.rb +12 -15
  13. data/lib/oauth/cli.rb +19 -19
  14. data/lib/oauth/client/action_controller_request.rb +20 -21
  15. data/lib/oauth/client/em_http.rb +99 -99
  16. data/lib/oauth/client/helper.rb +33 -36
  17. data/lib/oauth/client/net_http.rb +30 -30
  18. data/lib/oauth/consumer.rb +90 -89
  19. data/lib/oauth/errors/unauthorized.rb +3 -1
  20. data/lib/oauth/errors.rb +3 -3
  21. data/lib/oauth/helper.rb +17 -13
  22. data/lib/oauth/oauth.rb +4 -4
  23. data/lib/oauth/oauth_test_helper.rb +4 -4
  24. data/lib/oauth/request_proxy/action_controller_request.rb +56 -53
  25. data/lib/oauth/request_proxy/action_dispatch_request.rb +8 -4
  26. data/lib/oauth/request_proxy/base.rb +136 -132
  27. data/lib/oauth/request_proxy/curb_request.rb +49 -43
  28. data/lib/oauth/request_proxy/em_http_request.rb +59 -49
  29. data/lib/oauth/request_proxy/jabber_request.rb +12 -9
  30. data/lib/oauth/request_proxy/mock_request.rb +4 -2
  31. data/lib/oauth/request_proxy/net_http.rb +63 -54
  32. data/lib/oauth/request_proxy/rack_request.rb +35 -31
  33. data/lib/oauth/request_proxy/rest_client_request.rb +53 -50
  34. data/lib/oauth/request_proxy/typhoeus_request.rb +51 -45
  35. data/lib/oauth/request_proxy.rb +3 -3
  36. data/lib/oauth/server.rb +10 -12
  37. data/lib/oauth/signature/base.rb +10 -9
  38. data/lib/oauth/signature/hmac/sha1.rb +4 -4
  39. data/lib/oauth/signature/hmac/sha256.rb +17 -0
  40. data/lib/oauth/signature/plaintext.rb +2 -2
  41. data/lib/oauth/signature/rsa/sha1.rb +5 -5
  42. data/lib/oauth/signature.rb +5 -5
  43. data/lib/oauth/token.rb +5 -5
  44. data/lib/oauth/tokens/access_token.rb +3 -3
  45. data/lib/oauth/tokens/consumer_token.rb +2 -2
  46. data/lib/oauth/tokens/request_token.rb +7 -8
  47. data/lib/oauth/tokens/server_token.rb +0 -1
  48. data/lib/oauth/version.rb +1 -1
  49. data/lib/oauth.rb +8 -6
  50. metadata +47 -99
  51. data/README.rdoc +0 -88
@@ -1,23 +1,23 @@
1
- require 'net/http'
2
- require 'net/https'
3
- require 'oauth/oauth'
4
- require 'oauth/client/net_http'
5
- require 'oauth/errors'
6
- require 'cgi'
1
+ require "net/http"
2
+ require "net/https"
3
+ require "oauth/oauth"
4
+ require "oauth/client/net_http"
5
+ require "oauth/errors"
6
+ require "cgi"
7
7
 
8
8
  module OAuth
9
9
  class Consumer
10
10
  # determine the certificate authority path to verify SSL certs
11
- if ENV['SSL_CERT_FILE']
12
- if File.exist?(ENV['SSL_CERT_FILE'])
13
- CA_FILE = ENV['SSL_CERT_FILE']
11
+ if ENV["SSL_CERT_FILE"]
12
+ if File.exist?(ENV["SSL_CERT_FILE"])
13
+ CA_FILE = ENV["SSL_CERT_FILE"]
14
14
  else
15
15
  raise "The SSL CERT provided does not exist."
16
16
  end
17
17
  end
18
18
 
19
- if !defined?(CA_FILE)
20
- CA_FILES = %W(/etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt /usr/share/curl/curl-ca-bundle.crt)
19
+ unless defined?(CA_FILE)
20
+ CA_FILES = %w[/etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt /usr/share/curl/curl-ca-bundle.crt].freeze
21
21
  CA_FILES.each do |ca_file|
22
22
  if File.exist?(ca_file)
23
23
  CA_FILE = ca_file
@@ -29,27 +29,27 @@ module OAuth
29
29
 
30
30
  @@default_options = {
31
31
  # Signature method used by server. Defaults to HMAC-SHA1
32
- :signature_method => 'HMAC-SHA1',
32
+ signature_method: "HMAC-SHA1",
33
33
 
34
34
  # default paths on site. These are the same as the defaults set up by the generators
35
- :request_token_path => '/oauth/request_token',
36
- :authenticate_path => '/oauth/authenticate',
37
- :authorize_path => '/oauth/authorize',
38
- :access_token_path => '/oauth/access_token',
35
+ request_token_path: "/oauth/request_token",
36
+ authenticate_path: "/oauth/authenticate",
37
+ authorize_path: "/oauth/authorize",
38
+ access_token_path: "/oauth/access_token",
39
39
 
40
- :proxy => nil,
40
+ proxy: nil,
41
41
  # How do we send the oauth values to the server see
42
- # http://oauth.net/core/1.0/#consumer_req_param for more info
42
+ # https://oauth.net/core/1.0/#consumer_req_param for more info
43
43
  #
44
44
  # Possible values:
45
45
  #
46
46
  # :header - via the Authorize header (Default) ( option 1. in spec)
47
47
  # :body - url form encoded in body of POST request ( option 2. in spec)
48
48
  # :query_string - via the query part of the url ( option 3. in spec)
49
- :scheme => :header,
49
+ scheme: :header,
50
50
 
51
51
  # Default http method used for OAuth Token Requests (defaults to :post)
52
- :http_method => :post,
52
+ http_method: :post,
53
53
 
54
54
  # Add a custom ca_file for consumer
55
55
  # :ca_file => '/etc/certs.pem'
@@ -59,9 +59,9 @@ module OAuth
59
59
  # nil, false - no debug output
60
60
  # true - uses $stdout
61
61
  # some_value - uses some_value
62
- :debug_output => nil,
62
+ debug_output: nil,
63
63
 
64
- :oauth_version => "1.0"
64
+ oauth_version: "1.0"
65
65
  }
66
66
 
67
67
  attr_accessor :options, :key, :secret
@@ -94,9 +94,8 @@ module OAuth
94
94
  @secret = consumer_secret
95
95
 
96
96
  # ensure that keys are symbols
97
- @options = @@default_options.merge(options.inject({}) do |opts, (key, value)|
97
+ @options = @@default_options.merge(options.each_with_object({}) do |(key, value), opts|
98
98
  opts[key.to_sym] = value
99
- opts
100
99
  end)
101
100
  end
102
101
 
@@ -127,7 +126,7 @@ module OAuth
127
126
  if custom_uri
128
127
  @uri = custom_uri
129
128
  @http = create_http # yike, oh well. less intrusive this way
130
- else # if no custom passed, we use existing, which, if unset, is set to site uri
129
+ else # if no custom passed, we use existing, which, if unset, is set to site uri
131
130
  @uri ||= URI.parse(site)
132
131
  end
133
132
  end
@@ -156,15 +155,18 @@ module OAuth
156
155
  # will be exchanged out of band
157
156
  request_options[:oauth_callback] ||= OAuth::OUT_OF_BAND unless request_options[:exclude_callback]
158
157
 
159
- if block_given?
160
- response = token_request(http_method,
161
- (request_token_url? ? request_token_url : request_token_path),
162
- nil,
163
- request_options,
164
- *arguments, &block)
165
- else
166
- response = token_request(http_method, (request_token_url? ? request_token_url : request_token_path), nil, request_options, *arguments)
167
- end
158
+ response = if block_given?
159
+ token_request(
160
+ http_method,
161
+ (request_token_url? ? request_token_url : request_token_path),
162
+ nil,
163
+ request_options,
164
+ *arguments,
165
+ &block
166
+ )
167
+ else
168
+ token_request(http_method, (request_token_url? ? request_token_url : request_token_path), nil, request_options, *arguments)
169
+ end
168
170
  OAuth::RequestToken.from_hash(self, response)
169
171
  end
170
172
 
@@ -187,18 +189,18 @@ module OAuth
187
189
 
188
190
  # override the request with your own, this is useful for file uploads which Net::HTTP does not do
189
191
  req = create_signed_request(http_method, path, token, request_options, *arguments)
190
- return nil if block_given? and yield(req) == :done
192
+ return nil if block_given? && (yield(req) == :done)
191
193
  rsp = http.request(req)
192
194
  # check for an error reported by the Problem Reporting extension
193
- # (http://wiki.oauth.net/ProblemReporting)
195
+ # (https://wiki.oauth.net/ProblemReporting)
194
196
  # note: a 200 may actually be an error; check for an oauth_problem key to be sure
195
197
  if !(headers = rsp.to_hash["www-authenticate"]).nil? &&
196
- (h = headers.select { |hdr| hdr =~ /^OAuth / }).any? &&
197
- h.first =~ /oauth_problem/
198
+ (h = headers.select { |hdr| hdr =~ /^OAuth / }).any? &&
199
+ h.first =~ /oauth_problem/
198
200
 
199
201
  # puts "Header: #{h.first}"
200
202
 
201
- # TODO doesn't handle broken responses from api.login.yahoo.com
203
+ # TODO: doesn't handle broken responses from api.login.yahoo.com
202
204
  # remove debug code when done
203
205
  params = OAuth::Helper.parse_header(h.first)
204
206
 
@@ -232,24 +234,25 @@ module OAuth
232
234
  # symbolize keys
233
235
  # TODO this could be considered unexpected behavior; symbols or not?
234
236
  # TODO this also drops subsequent values from multi-valued keys
235
- CGI.parse(response.body).inject({}) do |h,(k,v)|
237
+ CGI.parse(response.body).each_with_object({}) do |(k, v), h|
236
238
  h[k.strip.to_sym] = v.first
237
239
  h[k.strip] = v.first
238
- h
239
240
  end
240
241
  end
241
242
  when (300..399)
242
- # this is a redirect
243
- uri = URI.parse(response['location'])
243
+ # Parse redirect to follow
244
+ uri = URI.parse(response["location"])
244
245
  our_uri = URI.parse(site)
245
246
 
247
+ # Guard against infinite redirects
248
+ response.error! if uri.path == path && our_uri.host == uri.host
249
+
246
250
  if uri.path == path && our_uri.host != uri.host
247
- options[:site] = "#{uri.scheme}://#{uri.host}"
248
- @http = create_http
251
+ options[:site] = "#{uri.scheme}://#{uri.host}"
252
+ @http = create_http
249
253
  end
250
254
 
251
- response.error! if uri.path == path && our_uri.host == uri.host # careful of those infinite redirects
252
- self.token_request(http_method, uri.path, token, request_options, arguments)
255
+ token_request(http_method, uri.path, token, request_options, arguments)
253
256
  when (400..499)
254
257
  raise OAuth::Unauthorized, response
255
258
  else
@@ -296,13 +299,13 @@ module OAuth
296
299
  @options[:access_token_path]
297
300
  end
298
301
 
299
- # TODO this is ugly, rewrite
302
+ # TODO: this is ugly, rewrite
300
303
  def request_token_url
301
304
  @options[:request_token_url] || site + request_token_path
302
305
  end
303
306
 
304
307
  def request_token_url?
305
- @options.has_key?(:request_token_url)
308
+ @options.key?(:request_token_url)
306
309
  end
307
310
 
308
311
  def authenticate_url
@@ -310,7 +313,7 @@ module OAuth
310
313
  end
311
314
 
312
315
  def authenticate_url?
313
- @options.has_key?(:authenticate_url)
316
+ @options.key?(:authenticate_url)
314
317
  end
315
318
 
316
319
  def authorize_url
@@ -318,7 +321,7 @@ module OAuth
318
321
  end
319
322
 
320
323
  def authorize_url?
321
- @options.has_key?(:authorize_url)
324
+ @options.key?(:authorize_url)
322
325
  end
323
326
 
324
327
  def access_token_url
@@ -326,7 +329,7 @@ module OAuth
326
329
  end
327
330
 
328
331
  def access_token_url?
329
- @options.has_key?(:access_token_url)
332
+ @options.key?(:access_token_url)
330
333
  end
331
334
 
332
335
  def proxy
@@ -337,19 +340,20 @@ module OAuth
337
340
 
338
341
  # Instantiates the http object
339
342
  def create_http(_url = nil)
340
-
341
-
342
- if !request_endpoint.nil?
343
- _url = request_endpoint
344
- end
345
-
346
-
347
- if _url.nil? || _url[0] =~ /^\//
348
- our_uri = URI.parse(site)
349
- else
350
- our_uri = URI.parse(_url)
351
- end
352
-
343
+ _url = request_endpoint unless request_endpoint.nil?
344
+
345
+ our_uri = if _url.nil? || _url[0] =~ /^\//
346
+ URI.parse(site)
347
+ else
348
+ your_uri = URI.parse(_url)
349
+ if your_uri.host.nil?
350
+ # If the _url is a path, missing the leading slash, then it won't have a host,
351
+ # and our_uri *must* have a host, so we parse site instead.
352
+ URI.parse(site)
353
+ else
354
+ your_uri
355
+ end
356
+ end
353
357
 
354
358
  if proxy.nil?
355
359
  http_object = Net::HTTP.new(our_uri.host, our_uri.port)
@@ -358,22 +362,22 @@ module OAuth
358
362
  http_object = Net::HTTP.new(our_uri.host, our_uri.port, proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password)
359
363
  end
360
364
 
361
- http_object.use_ssl = (our_uri.scheme == 'https')
365
+ http_object.use_ssl = (our_uri.scheme == "https")
362
366
 
363
367
  if @options[:no_verify]
364
368
  http_object.verify_mode = OpenSSL::SSL::VERIFY_NONE
365
369
  else
366
- ca_file = @options[:ca_file] || CA_FILE
367
- if ca_file
368
- http_object.ca_file = ca_file
369
- end
370
+ ca_file = @options[:ca_file] || CA_FILE
371
+ http_object.ca_file = ca_file if ca_file
370
372
  http_object.verify_mode = OpenSSL::SSL::VERIFY_PEER
371
373
  http_object.verify_depth = 5
372
374
  end
373
375
 
374
- http_object.read_timeout = http_object.open_timeout = @options[:timeout] || 30
376
+ http_object.read_timeout = http_object.open_timeout = @options[:timeout] || 60
375
377
  http_object.open_timeout = @options[:open_timeout] if @options[:open_timeout]
376
378
  http_object.ssl_version = @options[:ssl_version] if @options[:ssl_version]
379
+ http_object.cert = @options[:ssl_client_cert] if @options[:ssl_client_cert]
380
+ http_object.key = @options[:ssl_client_key] if @options[:ssl_client_key]
377
381
  http_object.set_debug_output(debug_output) if debug_output
378
382
 
379
383
  http_object
@@ -383,41 +387,39 @@ module OAuth
383
387
  def create_http_request(http_method, path, *arguments)
384
388
  http_method = http_method.to_sym
385
389
 
386
- if [:post, :put, :patch].include?(http_method)
387
- data = arguments.shift
388
- end
390
+ data = arguments.shift if %i[post put patch].include?(http_method)
389
391
 
390
392
  # if the base site contains a path, add it now
391
393
  # only add if the site host matches the current http object's host
392
394
  # (in case we've specified a full url for token requests)
393
395
  uri = URI.parse(site)
394
- path = uri.path + path if uri.path && uri.path != '/' && uri.host == http.address
396
+ path = uri.path + path if uri.path && uri.path != "/" && uri.host == http.address
395
397
 
396
398
  headers = arguments.first.is_a?(Hash) ? arguments.shift : {}
397
399
 
398
400
  case http_method
399
401
  when :post
400
- request = Net::HTTP::Post.new(path,headers)
401
- request["Content-Length"] = '0' # Default to 0
402
+ request = Net::HTTP::Post.new(path, headers)
403
+ request["Content-Length"] = "0" # Default to 0
402
404
  when :put
403
- request = Net::HTTP::Put.new(path,headers)
404
- request["Content-Length"] = '0' # Default to 0
405
+ request = Net::HTTP::Put.new(path, headers)
406
+ request["Content-Length"] = "0" # Default to 0
405
407
  when :patch
406
- request = Net::HTTP::Patch.new(path,headers)
407
- request["Content-Length"] = '0' # Default to 0
408
+ request = Net::HTTP::Patch.new(path, headers)
409
+ request["Content-Length"] = "0" # Default to 0
408
410
  when :get
409
- request = Net::HTTP::Get.new(path,headers)
411
+ request = Net::HTTP::Get.new(path, headers)
410
412
  when :delete
411
- request = Net::HTTP::Delete.new(path,headers)
413
+ request = Net::HTTP::Delete.new(path, headers)
412
414
  when :head
413
- request = Net::HTTP::Head.new(path,headers)
415
+ request = Net::HTTP::Head.new(path, headers)
414
416
  else
415
- raise ArgumentError, "Don't know how to handle http_method: :#{http_method.to_s}"
417
+ raise ArgumentError, "Don't know how to handle http_method: :#{http_method}"
416
418
  end
417
419
 
418
420
  if data.is_a?(Hash)
419
421
  request.body = OAuth::Helper.normalize(data)
420
- request.content_type = 'application/x-www-form-urlencoded'
422
+ request.content_type = "application/x-www-form-urlencoded"
421
423
  elsif data
422
424
  if data.respond_to?(:read)
423
425
  request.body_stream = data
@@ -437,13 +439,12 @@ module OAuth
437
439
  request
438
440
  end
439
441
 
440
- def marshal_dump(*args)
441
- {:key => @key, :secret => @secret, :options => @options}
442
+ def marshal_dump(*_args)
443
+ { key: @key, secret: @secret, options: @options }
442
444
  end
443
445
 
444
446
  def marshal_load(data)
445
447
  initialize(data[:key], data[:secret], data[:options])
446
448
  end
447
-
448
449
  end
449
450
  end
@@ -6,7 +6,9 @@ module OAuth
6
6
  end
7
7
 
8
8
  def to_s
9
- [request.code, request.message] * " "
9
+ return "401 Unauthorized" if request.nil?
10
+
11
+ "#{request.code} #{request.message}"
10
12
  end
11
13
  end
12
14
  end
data/lib/oauth/errors.rb CHANGED
@@ -1,3 +1,3 @@
1
- require 'oauth/errors/error'
2
- require 'oauth/errors/unauthorized'
3
- require 'oauth/errors/problem'
1
+ require "oauth/errors/error"
2
+ require "oauth/errors/unauthorized"
3
+ require "oauth/errors/problem"
data/lib/oauth/helper.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'openssl'
2
- require 'base64'
1
+ require "openssl"
2
+ require "base64"
3
3
 
4
4
  module OAuth
5
5
  module Helper
@@ -19,16 +19,16 @@ module OAuth
19
19
  end
20
20
 
21
21
  def unescape(value)
22
- URI::DEFAULT_PARSER.unescape(value.gsub('+', '%2B'))
22
+ URI::DEFAULT_PARSER.unescape(value.gsub("+", "%2B"))
23
23
  end
24
24
 
25
25
  # Generate a random key of up to +size+ bytes. The value returned is Base64 encoded with non-word
26
26
  # characters removed.
27
- def generate_key(size=32)
28
- Base64.encode64(OpenSSL::Random.random_bytes(size)).gsub(/\W/, '')
27
+ def generate_key(size = 32)
28
+ Base64.encode64(OpenSSL::Random.random_bytes(size)).gsub(/\W/, "")
29
29
  end
30
30
 
31
- alias_method :generate_nonce, :generate_key
31
+ alias generate_nonce generate_key
32
32
 
33
33
  def generate_timestamp #:nodoc:
34
34
  Time.now.to_i.to_s
@@ -47,18 +47,22 @@ module OAuth
47
47
  # make sure the array has an element so we don't lose the key
48
48
  values << nil if values.empty?
49
49
  # multiple values were provided for a single key
50
- values.sort.collect do |v|
51
- [escape(k),escape(v)] * "="
50
+ if values[0].is_a?(Hash)
51
+ normalize_nested_query(values, k)
52
+ else
53
+ values.sort.collect do |v|
54
+ [escape(k), escape(v)].join("=")
55
+ end
52
56
  end
53
57
  elsif values.is_a?(Hash)
54
58
  normalize_nested_query(values, k)
55
59
  else
56
- [escape(k),escape(values)] * "="
60
+ [escape(k), escape(values)].join("=")
57
61
  end
58
62
  end * "&"
59
63
  end
60
64
 
61
- #Returns a string representation of the Hash like in URL query string
65
+ # Returns a string representation of the Hash like in URL query string
62
66
  # build_nested_query({:level_1 => {:level_2 => ['value_1','value_2']}}, 'prefix'))
63
67
  # #=> ["prefix%5Blevel_1%5D%5Blevel_2%5D%5B%5D=value_1", "prefix%5Blevel_1%5D%5Blevel_2%5D%5B%5D=value_2"]
64
68
  def normalize_nested_query(value, prefix = nil)
@@ -72,7 +76,7 @@ module OAuth
72
76
  normalize_nested_query(v, prefix ? "#{prefix}[#{k}]" : k)
73
77
  end.flatten.sort
74
78
  else
75
- [escape(prefix), escape(value)] * "="
79
+ [escape(prefix), escape(value)].join("=")
76
80
  end
77
81
  end
78
82
 
@@ -86,10 +90,10 @@ module OAuth
86
90
  #
87
91
  def parse_header(header)
88
92
  # decompose
89
- params = header[6,header.length].split(/[,=&]/)
93
+ params = header[6, header.length].split(/[,=&]/)
90
94
 
91
95
  # odd number of arguments - must be a malformed header.
92
- raise OAuth::Problem.new("Invalid authorization header") if params.size % 2 != 0
96
+ raise OAuth::Problem, "Invalid authorization header" if params.size.odd?
93
97
 
94
98
  params.map! do |v|
95
99
  # strip and unescape
data/lib/oauth/oauth.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  module OAuth
2
2
  # request tokens are passed between the consumer and the provider out of
3
3
  # band (i.e. callbacks cannot be used), per section 6.1.1
4
- OUT_OF_BAND = "oob"
4
+ OUT_OF_BAND = "oob".freeze
5
5
 
6
6
  # required parameters, per sections 6.1.1, 6.3.1, and 7
7
- PARAMETERS = %w(oauth_callback oauth_consumer_key oauth_token
8
- oauth_signature_method oauth_timestamp oauth_nonce oauth_verifier
9
- oauth_version oauth_signature oauth_body_hash)
7
+ PARAMETERS = %w[oauth_callback oauth_consumer_key oauth_token
8
+ oauth_signature_method oauth_timestamp oauth_nonce oauth_verifier
9
+ oauth_version oauth_signature oauth_body_hash].freeze
10
10
 
11
11
  # reserved character regexp, per section 5.1
12
12
  RESERVED_CHARACTERS = /[^a-zA-Z0-9\-\.\_\~]/
@@ -1,5 +1,5 @@
1
- require 'action_controller'
2
- require 'action_controller/test_process'
1
+ require "action_controller"
2
+ require "action_controller/test_process"
3
3
 
4
4
  module OAuth
5
5
  module OAuthTestHelper
@@ -8,7 +8,7 @@ module OAuth
8
8
  incoming.request_uri = request.path
9
9
  incoming.host = request.uri.host
10
10
  incoming.env["SERVER_PORT"] = request.uri.port
11
- incoming.env['REQUEST_METHOD'] = request.http_method
11
+ incoming.env["REQUEST_METHOD"] = request.http_method
12
12
  incoming
13
13
  end
14
14
 
@@ -18,7 +18,7 @@ module OAuth
18
18
  incoming.host = request.uri.host
19
19
  incoming.env["HTTP_AUTHORIZATION"] = request.to_auth_string
20
20
  incoming.env["SERVER_PORT"] = request.uri.port
21
- incoming.env['REQUEST_METHOD'] = request.http_method
21
+ incoming.env["REQUEST_METHOD"] = request.http_method
22
22
  incoming
23
23
  end
24
24
  end
@@ -1,22 +1,22 @@
1
- require 'active_support'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support"
2
4
  require "active_support/version"
3
- require 'action_controller'
4
- require 'uri'
5
+ require "action_controller"
6
+ require "uri"
5
7
 
6
- if
7
- Gem::Version.new(ActiveSupport::VERSION::STRING) < Gem::Version.new("3")
8
- then # rails 2.x
9
- require 'action_controller/request'
8
+ if Gem::Version.new(ActiveSupport::VERSION::STRING) < Gem::Version.new("3")
9
+ # rails 2.x
10
+ require "action_controller/request"
10
11
  unless ActionController::Request::HTTP_METHODS.include?("patch")
11
12
  ActionController::Request::HTTP_METHODS << "patch"
12
13
  ActionController::Request::HTTP_METHOD_LOOKUP["PATCH"] = :patch
13
14
  ActionController::Request::HTTP_METHOD_LOOKUP["patch"] = :patch
14
15
  end
15
16
 
16
- elsif
17
- Gem::Version.new(ActiveSupport::VERSION::STRING) < Gem::Version.new("4")
18
- then # rails 3.x
19
- require 'action_dispatch/http/request'
17
+ elsif Gem::Version.new(ActiveSupport::VERSION::STRING) < Gem::Version.new("4")
18
+ # rails 3.x
19
+ require "action_dispatch/http/request"
20
20
  unless ActionDispatch::Request::HTTP_METHODS.include?("patch")
21
21
  ActionDispatch::Request::HTTP_METHODS << "patch"
22
22
  ActionDispatch::Request::HTTP_METHOD_LOOKUP["PATCH"] = :patch
@@ -24,63 +24,66 @@ then # rails 3.x
24
24
  end
25
25
 
26
26
  else # rails 4.x and later - already has patch
27
- require 'action_dispatch/http/request'
27
+ require "action_dispatch/http/request"
28
28
  end
29
29
 
30
- module OAuth::RequestProxy
31
- class ActionControllerRequest < OAuth::RequestProxy::Base
32
- proxies(defined?(ActionDispatch::AbstractRequest) ? ActionDispatch::AbstractRequest : ActionDispatch::Request)
30
+ module OAuth
31
+ module RequestProxy
32
+ class ActionControllerRequest < OAuth::RequestProxy::Base
33
+ proxies(defined?(::ActionDispatch::AbstractRequest) ? ::ActionDispatch::AbstractRequest : ::ActionDispatch::Request)
33
34
 
34
- def method
35
- request.method.to_s.upcase
36
- end
35
+ def method
36
+ request.method.to_s.upcase
37
+ end
37
38
 
38
- def uri
39
- request.url
40
- end
39
+ def uri
40
+ request.url
41
+ end
41
42
 
42
- def parameters
43
- if options[:clobber_request]
44
- options[:parameters] || {}
45
- else
46
- params = request_params.merge(query_params).merge(header_params)
47
- params.stringify_keys! if params.respond_to?(:stringify_keys!)
48
- params.merge(options[:parameters] || {})
43
+ def parameters
44
+ if options[:clobber_request]
45
+ options[:parameters] || {}
46
+ else
47
+ params = request_params.merge(query_params).merge(header_params)
48
+ params.stringify_keys! if params.respond_to?(:stringify_keys!)
49
+ params.merge(options[:parameters] || {})
50
+ end
49
51
  end
50
- end
51
52
 
52
- # Override from OAuth::RequestProxy::Base to avoid roundtrip
53
- # conversion to Hash or Array and thus preserve the original
54
- # parameter names
55
- def parameters_for_signature
56
- params = []
57
- params << options[:parameters].to_query if options[:parameters]
53
+ # Override from OAuth::RequestProxy::Base to avoid roundtrip
54
+ # conversion to Hash or Array and thus preserve the original
55
+ # parameter names
56
+ def parameters_for_signature
57
+ params = []
58
+ params << options[:parameters].to_query if options[:parameters]
58
59
 
59
- unless options[:clobber_request]
60
- params << header_params.to_query
61
- params << request.query_string unless query_string_blank?
60
+ unless options[:clobber_request]
61
+ params << header_params.to_query
62
+ params << request.query_string unless query_string_blank?
62
63
 
63
- if request.post? && request.content_type.to_s.downcase.start_with?("application/x-www-form-urlencoded")
64
- params << request.raw_post
64
+ params << request.raw_post if raw_post_signature?
65
65
  end
66
+
67
+ params.
68
+ join("&").split("&").
69
+ reject { |s| s.match(/\A\s*\z/) }.
70
+ map { |p| p.split("=").map { |esc| CGI.unescape(esc) } }.
71
+ reject { |kv| kv[0] == "oauth_signature" }
66
72
  end
67
73
 
68
- params.
69
- join('&').split('&').
70
- reject { |s| s.match(/\A\s*\z/) }.
71
- map { |p| p.split('=').map{|esc| CGI.unescape(esc)} }.
72
- reject { |kv| kv[0] == 'oauth_signature'}
73
- end
74
+ def raw_post_signature?
75
+ (request.post? || request.put?) && request.content_type.to_s.downcase.start_with?("application/x-www-form-urlencoded")
76
+ end
74
77
 
75
- protected
78
+ protected
76
79
 
77
- def query_params
78
- request.query_parameters
79
- end
80
+ def query_params
81
+ request.query_parameters
82
+ end
80
83
 
81
- def request_params
82
- request.request_parameters
84
+ def request_params
85
+ request.request_parameters
86
+ end
83
87
  end
84
-
85
88
  end
86
89
  end
@@ -1,7 +1,11 @@
1
- require 'oauth/request_proxy/rack_request'
1
+ # frozen_string_literal: true
2
2
 
3
- module OAuth::RequestProxy
4
- class ActionDispatchRequest < OAuth::RequestProxy::RackRequest
5
- proxies ActionDispatch::Request
3
+ require "oauth/request_proxy/rack_request"
4
+
5
+ module OAuth
6
+ module RequestProxy
7
+ class ActionDispatchRequest < OAuth::RequestProxy::RackRequest
8
+ proxies ::ActionDispatch::Request
9
+ end
6
10
  end
7
11
  end