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
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
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_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_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
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
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