class OAuth::RequestProxy::Base

Attributes

options[RW]
request[RW]
unsigned_parameters[RW]

Public Class Methods

new(request, options = {}) click to toggle source
   # File lib/oauth/request_proxy/base.rb
19 def initialize(request, options = {})
20   @request = request
21   @unsigned_parameters = (options[:unsigned_parameters] || []).map(&:to_s)
22   @options = options
23 end
proxies(klass) click to toggle source
   # File lib/oauth/request_proxy/base.rb
12 def proxies(klass)
13   OAuth::RequestProxy.available_proxies[klass] = self
14 end

Public Instance Methods

consumer_key()

TODO: deprecate these

Alias for: oauth_consumer_key
non_oauth_parameters() click to toggle source
   # File lib/oauth/request_proxy/base.rb
89 def non_oauth_parameters
90   parameters.select { |k, _v| !OAuth::PARAMETERS.include?(k) }
91 end
nonce()
Alias for: oauth_nonce
normalized_parameters() click to toggle source

See 9.1.1. in specs Normalize Request Parameters

    # File lib/oauth/request_proxy/base.rb
104 def normalized_parameters
105   normalize(parameters_for_signature)
106 end
normalized_uri() click to toggle source

See 9.1.2 in specs

    # File lib/oauth/request_proxy/base.rb
 98 def normalized_uri
 99   u = URI.parse(uri)
100   "#{u.scheme.downcase}://#{u.host.downcase}#{":#{u.port}" if (u.scheme.casecmp("http").zero? && u.port != 80) || (u.scheme.casecmp("https").zero? && u.port != 443)}#{(u.path && u.path != "") ? u.path : "/"}"
101 end
oauth_callback() click to toggle source

OAuth parameters

   # File lib/oauth/request_proxy/base.rb
27 def oauth_callback
28   [parameters["oauth_callback"]].flatten.first
29 end
oauth_consumer_key() click to toggle source
   # File lib/oauth/request_proxy/base.rb
31 def oauth_consumer_key
32   [parameters["oauth_consumer_key"]].flatten.first
33 end
Also aliased as: consumer_key
oauth_header(options = {}) click to toggle source

Authorization header for OAuth

    # File lib/oauth/request_proxy/base.rb
145 def oauth_header(options = {})
146   header_params_str = oauth_parameters.map { |k, v| "#{k}=\"#{escape(v)}\"" }.join(", ")
147 
148   realm = "realm=\"#{options[:realm]}\", " if options[:realm]
149   "OAuth #{realm}#{header_params_str}"
150 end
oauth_nonce() click to toggle source
   # File lib/oauth/request_proxy/base.rb
35 def oauth_nonce
36   [parameters["oauth_nonce"]].flatten.first
37 end
Also aliased as: nonce
oauth_parameters() click to toggle source
   # File lib/oauth/request_proxy/base.rb
85 def oauth_parameters
86   parameters.select { |k, v| OAuth::PARAMETERS.include?(k) && !v.nil? && v != "" }
87 end
oauth_signature() click to toggle source
   # File lib/oauth/request_proxy/base.rb
39 def oauth_signature
40   # TODO: can this be nil?
41   [parameters["oauth_signature"]].flatten.first || ""
42 end
Also aliased as: signature
oauth_signature_method() click to toggle source
   # File lib/oauth/request_proxy/base.rb
44 def oauth_signature_method
45   [parameters["oauth_signature_method"]].flatten.first
46 end
Also aliased as: signature_method
oauth_timestamp() click to toggle source
   # File lib/oauth/request_proxy/base.rb
48 def oauth_timestamp
49   [parameters["oauth_timestamp"]].flatten.first
50 end
Also aliased as: timestamp
oauth_token() click to toggle source
   # File lib/oauth/request_proxy/base.rb
52 def oauth_token
53   [parameters["oauth_token"]].flatten.first
54 end
Also aliased as: token
oauth_verifier() click to toggle source

OAuth 1.0a only: value returned to the Consumer after user authorization and required when exchanging a Request Token for an Access Token. Not present in OAuth 1.0 flows.

   # File lib/oauth/request_proxy/base.rb
59 def oauth_verifier
60   [parameters["oauth_verifier"]].flatten.first
61 end
oauth_version() click to toggle source
   # File lib/oauth/request_proxy/base.rb
63 def oauth_version
64   [parameters["oauth_version"]].flatten.first
65 end
parameters() click to toggle source

Parameter accessors

   # File lib/oauth/request_proxy/base.rb
77 def parameters
78   raise NotImplementedError, "Must be implemented by subclasses"
79 end
parameters_for_signature() click to toggle source
   # File lib/oauth/request_proxy/base.rb
81 def parameters_for_signature
82   parameters.select { |k, _v| !signature_and_unsigned_parameters.include?(k) }
83 end
query_string_blank?() click to toggle source
    # File lib/oauth/request_proxy/base.rb
152 def query_string_blank?
153   if (uri = request.env["REQUEST_URI"])
154     uri.split("?", 2)[1].nil?
155   else
156     request.query_string.match(/\A\s*\z/)
157   end
158 end
sign(options = {}) click to toggle source
    # File lib/oauth/request_proxy/base.rb
108 def sign(options = {})
109   OAuth::Signature.sign(self, options)
110 end
sign!(options = {}) click to toggle source
    # File lib/oauth/request_proxy/base.rb
112 def sign!(options = {})
113   parameters["oauth_signature"] = sign(options)
114   @signed = true
115   signature
116 end
signature()
Alias for: oauth_signature
signature_and_unsigned_parameters() click to toggle source
   # File lib/oauth/request_proxy/base.rb
93 def signature_and_unsigned_parameters
94   unsigned_parameters + ["oauth_signature"]
95 end
signature_base_string() click to toggle source

See 9.1 in specs

    # File lib/oauth/request_proxy/base.rb
119 def signature_base_string
120   base = [method, normalized_uri, normalized_parameters]
121   base.map { |v| escape(v) }.join("&")
122 end
signature_method()
signed?() click to toggle source

Has this request been signed yet?

    # File lib/oauth/request_proxy/base.rb
125 def signed?
126   @signed
127 end
signed_uri(with_oauth: true) click to toggle source

URI, including OAuth parameters

    # File lib/oauth/request_proxy/base.rb
130 def signed_uri(with_oauth: true)
131   if signed?
132     params = if with_oauth
133       parameters
134     else
135       non_oauth_parameters
136     end
137 
138     [uri, normalize(params)].join("?")
139   else
140     warn("This request has not yet been signed!")
141   end
142 end
timestamp()
Alias for: oauth_timestamp
token()
Alias for: oauth_token

Protected Instance Methods

header_params() click to toggle source
    # File lib/oauth/request_proxy/base.rb
162 def header_params
163   %w[X-HTTP_AUTHORIZATION Authorization HTTP_AUTHORIZATION].each do |header|
164     next unless request.env.include?(header)
165 
166     header = request.env[header]
167     next unless header[0, 6] == "OAuth "
168 
169     # parse the header into a Hash
170     oauth_params = OAuth::Helper.parse_header(header)
171 
172     # remove non-OAuth parameters
173     oauth_params.select! { |k, _v| k =~ /^oauth_/ }
174 
175     return oauth_params
176   end
177 
178   {}
179 end
wrap_values(hash) click to toggle source

Utility to make parameter values array-style (or keep nil) so that subclasses can rely on array values for parameter merging/signing. Mirrors the implementation previously present in ActionDispatchRequest#wrap_values.

    # File lib/oauth/request_proxy/base.rb
185 def wrap_values(hash)
186   return {} unless hash
187   hash.each_with_object({}) do |(k, v), acc|
188     acc[k] = (v.is_a?(Array) || v.nil?) ? v : [v]
189   end
190 end