oauth 0.5.6 → 1.1.5

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 (71) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +4 -0
  3. data/CHANGELOG.md +848 -0
  4. data/CITATION.cff +20 -0
  5. data/CODE_OF_CONDUCT.md +134 -0
  6. data/CONTRIBUTING.md +218 -0
  7. data/FUNDING.md +77 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +662 -0
  10. data/REEK +2 -0
  11. data/RUBOCOP.md +71 -0
  12. data/SECURITY.md +24 -0
  13. data/lib/oauth/auth_sanitizer.rb +36 -0
  14. data/lib/oauth/client/action_controller_request.rb +33 -22
  15. data/lib/oauth/client/em_http.rb +110 -103
  16. data/lib/oauth/client/helper.rb +87 -82
  17. data/lib/oauth/client/net_http.rb +140 -107
  18. data/lib/oauth/client.rb +2 -0
  19. data/lib/oauth/consumer.rb +222 -141
  20. data/lib/oauth/errors/error.rb +2 -0
  21. data/lib/oauth/errors/problem.rb +4 -1
  22. data/lib/oauth/errors/unauthorized.rb +7 -1
  23. data/lib/oauth/errors.rb +5 -3
  24. data/lib/oauth/helper.rb +48 -18
  25. data/lib/oauth/oauth.rb +31 -7
  26. data/lib/oauth/oauth_test_helper.rb +6 -4
  27. data/lib/oauth/optional.rb +20 -0
  28. data/lib/oauth/request_proxy/action_controller_request.rb +53 -71
  29. data/lib/oauth/request_proxy/action_dispatch_request.rb +42 -4
  30. data/lib/oauth/request_proxy/base.rb +146 -131
  31. data/lib/oauth/request_proxy/curb_request.rb +49 -43
  32. data/lib/oauth/request_proxy/em_http_request.rb +60 -49
  33. data/lib/oauth/request_proxy/jabber_request.rb +19 -9
  34. data/lib/oauth/request_proxy/mock_request.rb +5 -3
  35. data/lib/oauth/request_proxy/net_http.rb +61 -54
  36. data/lib/oauth/request_proxy/rack_request.rb +31 -31
  37. data/lib/oauth/request_proxy/rest_client_request.rb +55 -50
  38. data/lib/oauth/request_proxy/typhoeus_request.rb +51 -45
  39. data/lib/oauth/request_proxy.rb +21 -14
  40. data/lib/oauth/server.rb +18 -12
  41. data/lib/oauth/signature/base.rb +88 -71
  42. data/lib/oauth/signature/hmac/sha1.rb +16 -10
  43. data/lib/oauth/signature/hmac/sha256.rb +16 -10
  44. data/lib/oauth/signature/plaintext.rb +18 -20
  45. data/lib/oauth/signature/rsa/sha1.rb +53 -38
  46. data/lib/oauth/signature.rb +41 -34
  47. data/lib/oauth/token.rb +7 -5
  48. data/lib/oauth/tokens/access_token.rb +6 -4
  49. data/lib/oauth/tokens/consumer_token.rb +11 -7
  50. data/lib/oauth/tokens/request_token.rb +17 -10
  51. data/lib/oauth/tokens/server_token.rb +2 -1
  52. data/lib/oauth/tokens/token.rb +15 -1
  53. data/lib/oauth/version.rb +6 -1
  54. data/lib/oauth.rb +18 -9
  55. data/sig/oauth/consumer.rbs +9 -0
  56. data/sig/oauth/signature/base.rbs +12 -0
  57. data/sig/oauth/tokens/token.rbs +8 -0
  58. data.tar.gz.sig +3 -0
  59. metadata +301 -82
  60. metadata.gz.sig +2 -0
  61. data/LICENSE +0 -20
  62. data/README.rdoc +0 -88
  63. data/TODO +0 -32
  64. data/bin/oauth +0 -11
  65. data/lib/oauth/cli/authorize_command.rb +0 -71
  66. data/lib/oauth/cli/base_command.rb +0 -208
  67. data/lib/oauth/cli/help_command.rb +0 -22
  68. data/lib/oauth/cli/query_command.rb +0 -25
  69. data/lib/oauth/cli/sign_command.rb +0 -81
  70. data/lib/oauth/cli/version_command.rb +0 -7
  71. data/lib/oauth/cli.rb +0 -56
@@ -1,72 +1,79 @@
1
- require 'oauth/request_proxy/base'
2
- require 'net/http'
3
- require 'uri'
4
- require 'cgi'
1
+ # frozen_string_literal: true
5
2
 
6
- module OAuth::RequestProxy::Net
7
- module HTTP
8
- class HTTPRequest < OAuth::RequestProxy::Base
9
- proxies ::Net::HTTPGenericRequest
3
+ require "oauth/request_proxy/base"
4
+ require "net/http"
5
+ require "uri"
6
+ require "cgi"
10
7
 
11
- def method
12
- request.method
13
- end
8
+ module OAuth
9
+ module RequestProxy
10
+ module Net
11
+ module HTTP
12
+ class HTTPRequest < OAuth::RequestProxy::Base
13
+ proxies ::Net::HTTPGenericRequest
14
14
 
15
- def uri
16
- options[:uri].to_s
17
- end
15
+ def method
16
+ request.method
17
+ end
18
18
 
19
- def parameters
20
- if options[:clobber_request]
21
- options[:parameters]
22
- else
23
- all_parameters
24
- end
25
- end
19
+ def uri
20
+ options[:uri].to_s
21
+ end
26
22
 
27
- def body
28
- request.body
29
- end
23
+ def parameters
24
+ if options[:clobber_request]
25
+ options[:parameters]
26
+ else
27
+ all_parameters
28
+ end
29
+ end
30
30
 
31
- private
31
+ def body
32
+ request.body
33
+ end
32
34
 
33
- def all_parameters
34
- request_params = CGI.parse(query_string)
35
- # request_params.each{|k,v| request_params[k] = [nil] if v == []}
35
+ private
36
36
 
37
- if options[:parameters]
38
- options[:parameters].each do |k,v|
39
- if request_params.has_key?(k) && v
40
- request_params[k] << v
41
- else
42
- request_params[k] = [v]
37
+ def all_parameters
38
+ request_params = CGI.parse(query_string)
39
+ # request_params.each{|k,v| request_params[k] = [nil] if v == []}
40
+
41
+ options[:parameters]&.each do |k, v|
42
+ if request_params.key?(k) && v
43
+ request_params[k] << v
44
+ else
45
+ request_params[k] = [v]
46
+ end
43
47
  end
48
+ request_params
44
49
  end
45
- end
46
- request_params
47
- end
48
50
 
49
- def query_string
50
- params = [ query_params, auth_header_params ]
51
- params << post_params if (method.to_s.upcase == 'POST' || method.to_s.upcase == 'PUT') && form_url_encoded?
52
- params.compact.join('&')
53
- end
51
+ def query_string
52
+ params = [query_params, auth_header_params]
53
+ if (method.to_s.casecmp("POST").zero? || method.to_s.casecmp("PUT").zero?) && form_url_encoded?
54
+ params << post_params
55
+ end
56
+ params.compact.join("&")
57
+ end
54
58
 
55
- def form_url_encoded?
56
- request['Content-Type'] != nil && request['Content-Type'].to_s.downcase.start_with?('application/x-www-form-urlencoded')
57
- end
59
+ def form_url_encoded?
60
+ !request["Content-Type"].nil? && request["Content-Type"].to_s.downcase.start_with?("application/x-www-form-urlencoded")
61
+ end
58
62
 
59
- def query_params
60
- URI.parse(request.path).query
61
- end
63
+ def query_params
64
+ URI.parse(request.path).query
65
+ end
62
66
 
63
- def post_params
64
- request.body
65
- end
67
+ def post_params
68
+ request.body
69
+ end
66
70
 
67
- def auth_header_params
68
- return nil unless request['Authorization'] && request['Authorization'][0,5] == 'OAuth'
69
- request['Authorization']
71
+ def auth_header_params
72
+ return unless request["Authorization"] && request["Authorization"][0, 5] == "OAuth"
73
+
74
+ request["Authorization"]
75
+ end
76
+ end
70
77
  end
71
78
  end
72
79
  end
@@ -1,43 +1,43 @@
1
- require 'oauth/request_proxy/base'
2
- require 'uri'
3
- require 'rack'
1
+ # frozen_string_literal: true
4
2
 
5
- module OAuth::RequestProxy
6
- class RackRequest < OAuth::RequestProxy::Base
7
- proxies Rack::Request
3
+ require "oauth/request_proxy/base"
4
+ require "uri"
5
+ require "rack"
8
6
 
9
- def method
10
- request.env["rack.methodoverride.original_method"] || request.request_method
11
- end
7
+ module OAuth
8
+ module RequestProxy
9
+ class RackRequest < OAuth::RequestProxy::Base
10
+ proxies ::Rack::Request
12
11
 
13
- def uri
14
- request.url
15
- end
12
+ def method
13
+ request.env["rack.methodoverride.original_method"] || request.request_method
14
+ end
16
15
 
17
- def parameters
18
- if options[:clobber_request]
19
- options[:parameters] || {}
20
- else
21
- params = request_params.merge(query_params).merge(header_params)
22
- params.merge(options[:parameters] || {})
16
+ def uri
17
+ request.url
23
18
  end
24
- end
25
19
 
26
- def signature
27
- parameters['oauth_signature']
28
- end
20
+ def parameters
21
+ if options[:clobber_request]
22
+ options[:parameters] || {}
23
+ else
24
+ params = request_params.merge(query_params).merge(header_params)
25
+ params.merge(options[:parameters] || {})
26
+ end
27
+ end
29
28
 
30
- protected
29
+ protected
31
30
 
32
- def query_params
33
- request.GET
34
- end
31
+ def query_params
32
+ request.GET
33
+ end
35
34
 
36
- def request_params
37
- if request.content_type and request.content_type.to_s.downcase.start_with?("application/x-www-form-urlencoded")
38
- request.POST
39
- else
40
- {}
35
+ def request_params
36
+ if request.content_type && request.content_type.to_s.downcase.start_with?("application/x-www-form-urlencoded")
37
+ request.POST
38
+ else
39
+ {}
40
+ end
41
41
  end
42
42
  end
43
43
  end
@@ -1,62 +1,67 @@
1
- require 'oauth/request_proxy/base'
2
- require 'rest-client'
3
- require 'uri'
4
- require 'cgi'
5
-
6
- module OAuth::RequestProxy::RestClient
7
- class Request < OAuth::RequestProxy::Base
8
- proxies RestClient::Request
9
-
10
- def method
11
- request.method.to_s.upcase
12
- end
1
+ # frozen_string_literal: true
13
2
 
14
- def uri
15
- request.url
16
- end
3
+ require "oauth/request_proxy/base"
4
+ require "rest-client"
5
+ require "uri"
6
+ require "cgi"
7
+
8
+ module OAuth
9
+ module RequestProxy
10
+ module RestClient
11
+ class Request < OAuth::RequestProxy::Base
12
+ proxies ::RestClient::Request
17
13
 
18
- def parameters
19
- if options[:clobber_request]
20
- options[:parameters] || {}
21
- else
22
- post_parameters.merge(query_params).merge(options[:parameters] || {})
14
+ def method
15
+ request.method.to_s.upcase
23
16
  end
24
- end
25
17
 
26
- protected
18
+ def uri
19
+ request.url
20
+ end
27
21
 
28
- def query_params
29
- query = URI.parse(request.url).query
30
- query ? CGI.parse(query) : {}
31
- end
22
+ def parameters
23
+ if options[:clobber_request]
24
+ options[:parameters] || {}
25
+ else
26
+ post_parameters.merge(query_params).merge(options[:parameters] || {})
27
+ end
28
+ end
32
29
 
33
- def request_params
34
- end
35
-
36
- def post_parameters
37
- # Post params are only used if posting form data
38
- if method == 'POST' || method == 'PUT'
39
- OAuth::Helper.stringify_keys(query_string_to_hash(request.payload.to_s) || {})
40
- else
41
- {}
30
+ protected
31
+
32
+ def query_params
33
+ query = URI.parse(request.url).query
34
+ query ? CGI.parse(query) : {}
42
35
  end
43
- end
44
-
45
- private
46
-
47
- def query_string_to_hash(query)
48
- keyvals = query.split('&').inject({}) do |result, q|
49
- k,v = q.split('=')
50
- if !v.nil?
51
- result.merge({k => v})
52
- elsif !result.key?(k)
53
- result.merge({k => true})
36
+
37
+ def request_params
38
+ end
39
+
40
+ def post_parameters
41
+ # Post params are only used if posting form data
42
+ is_form_data = request.payload && request.payload.headers["Content-Type"] == "application/x-www-form-urlencoded"
43
+ if is_form_data && (method == "POST" || method == "PUT")
44
+ OAuth::Helper.stringify_keys(query_string_to_hash(request.payload.to_s) || {})
54
45
  else
55
- result
46
+ {}
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def query_string_to_hash(query)
53
+ query.split("&").inject({}) do |result, q|
54
+ k, v = q.split("=")
55
+ if !v.nil?
56
+ result.merge({k => v})
57
+ elsif !result.key?(k)
58
+ result.merge({k => true})
59
+ else
60
+ result
61
+ end
56
62
  end
57
63
  end
58
- keyvals
59
64
  end
60
-
65
+ end
61
66
  end
62
- end
67
+ end
@@ -1,53 +1,59 @@
1
- require 'oauth/request_proxy/base'
2
- require 'typhoeus'
3
- require 'typhoeus/request'
4
- require 'uri'
5
- require 'cgi'
6
-
7
- module OAuth::RequestProxy::Typhoeus
8
- class Request < OAuth::RequestProxy::Base
9
- # Proxy for signing Typhoeus::Request requests
10
- # Usage example:
11
- # oauth_params = {:consumer => oauth_consumer, :token => access_token}
12
- # req = Typhoeus::Request.new(uri, options)
13
- # oauth_helper = OAuth::Client::Helper.new(req, oauth_params.merge(:request_uri => uri))
14
- # req.options[:headers].merge!({"Authorization" => oauth_helper.header})
15
- # hydra = Typhoeus::Hydra.new()
16
- # hydra.queue(req)
17
- # hydra.run
18
- # response = req.response
19
- proxies Typhoeus::Request
20
-
21
- def method
22
- request_method = request.options[:method].to_s.upcase
23
- request_method.empty? ? 'GET' : request_method
24
- end
1
+ # frozen_string_literal: true
25
2
 
26
- def uri
27
- options[:uri].to_s
28
- end
3
+ require "oauth/request_proxy/base"
4
+ require "typhoeus"
5
+ require "typhoeus/request"
6
+ require "uri"
7
+ require "cgi"
29
8
 
30
- def parameters
31
- if options[:clobber_request]
32
- options[:parameters]
33
- else
34
- post_parameters.merge(query_parameters).merge(options[:parameters] || {})
35
- end
36
- end
9
+ module OAuth
10
+ module RequestProxy
11
+ module Typhoeus
12
+ class Request < OAuth::RequestProxy::Base
13
+ # Proxy for signing Typhoeus::Request requests
14
+ # Usage example:
15
+ # oauth_params = {:consumer => oauth_consumer, :token => access_token}
16
+ # req = Typhoeus::Request.new(uri, options)
17
+ # oauth_helper = OAuth::Client::Helper.new(req, oauth_params.merge(:request_uri => uri))
18
+ # req.options[:headers].merge!({"Authorization" => oauth_helper.header})
19
+ # hydra = Typhoeus::Hydra.new()
20
+ # hydra.queue(req)
21
+ # hydra.run
22
+ # response = req.response
23
+ proxies ::Typhoeus::Request
37
24
 
38
- private
25
+ def method
26
+ request_method = request.options[:method].to_s.upcase
27
+ request_method.empty? ? "GET" : request_method
28
+ end
39
29
 
40
- def query_parameters
41
- query = URI.parse(request.url).query
42
- query ? CGI.parse(query) : {}
43
- end
30
+ def uri
31
+ options[:uri].to_s
32
+ end
33
+
34
+ def parameters
35
+ if options[:clobber_request]
36
+ options[:parameters]
37
+ else
38
+ post_parameters.merge(query_parameters).merge(options[:parameters] || {})
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def query_parameters
45
+ query = URI.parse(request.url).query
46
+ query ? CGI.parse(query) : {}
47
+ end
44
48
 
45
- def post_parameters
46
- # Post params are only used if posting form data
47
- if method == 'POST'
48
- OAuth::Helper.stringify_keys(request.options[:params] || {})
49
- else
50
- {}
49
+ def post_parameters
50
+ # Post params are only used if posting form data
51
+ if method == "POST"
52
+ OAuth::Helper.stringify_keys(request.options[:params] || {})
53
+ else
54
+ {}
55
+ end
56
+ end
51
57
  end
52
58
  end
53
59
  end
@@ -1,24 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module OAuth
2
4
  module RequestProxy
3
- def self.available_proxies #:nodoc:
4
- @available_proxies ||= {}
5
- end
5
+ AVAILABLE_PROXIES = {}
6
6
 
7
- def self.proxy(request, options = {})
8
- return request if request.kind_of?(OAuth::RequestProxy::Base)
7
+ class << self
8
+ def available_proxies # :nodoc:
9
+ AVAILABLE_PROXIES
10
+ end
9
11
 
10
- klass = available_proxies[request.class]
12
+ def proxy(request, options = {})
13
+ return request if request.is_a?(OAuth::RequestProxy::Base)
11
14
 
12
- # Search for possible superclass matches.
13
- if klass.nil?
14
- request_parent = available_proxies.keys.find { |rc| request.kind_of?(rc) }
15
- klass = available_proxies[request_parent]
16
- end
15
+ klass = available_proxies[request.class]
17
16
 
18
- raise UnknownRequestType, request.class.to_s unless klass
19
- klass.new(request, options)
17
+ # Search for possible superclass matches.
18
+ if klass.nil?
19
+ request_parent = available_proxies.keys.find { |rc| request.is_a?(rc) }
20
+ klass = available_proxies[request_parent]
21
+ end
22
+
23
+ raise UnknownRequestType, request.class.to_s unless klass
24
+
25
+ klass.new(request, options)
26
+ end
20
27
  end
21
28
 
22
- class UnknownRequestType < Exception; end
29
+ class UnknownRequestType < RuntimeError; end
23
30
  end
24
31
  end
data/lib/oauth/server.rb CHANGED
@@ -1,16 +1,19 @@
1
- require 'oauth/helper'
2
- require 'oauth/consumer'
1
+ # frozen_string_literal: true
2
+
3
+ require "oauth/helper"
4
+ require "oauth/consumer"
3
5
 
4
6
  module OAuth
5
7
  # This is mainly used to create consumer credentials and can pretty much be ignored if you want to create your own
6
8
  class Server
7
9
  include OAuth::Helper
10
+
8
11
  attr_accessor :base_url
9
12
 
10
13
  @@server_paths = {
11
- :request_token_path => "/oauth/request_token",
12
- :authorize_path => "/oauth/authorize",
13
- :access_token_path => "/oauth/access_token"
14
+ request_token_path: "/oauth/request_token",
15
+ authorize_path: "/oauth/authorize",
16
+ access_token_path: "/oauth/access_token",
14
17
  }
15
18
 
16
19
  # Create a new server instance
@@ -23,20 +26,23 @@ module OAuth
23
26
  [generate_key(16), generate_key]
24
27
  end
25
28
 
26
- def generate_consumer_credentials(params = {})
29
+ def generate_consumer_credentials(_params = {})
27
30
  Consumer.new(*generate_credentials)
28
31
  end
29
32
 
30
33
  # mainly for testing purposes
31
34
  def create_consumer
32
35
  creds = generate_credentials
33
- Consumer.new(creds[0], creds[1],
36
+ Consumer.new(
37
+ creds[0],
38
+ creds[1],
34
39
  {
35
- :site => base_url,
36
- :request_token_path => request_token_path,
37
- :authorize_path => authorize_path,
38
- :access_token_path => access_token_path
39
- })
40
+ site: base_url,
41
+ request_token_path: request_token_path,
42
+ authorize_path: authorize_path,
43
+ access_token_path: access_token_path,
44
+ },
45
+ )
40
46
  end
41
47
 
42
48
  def request_token_path