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 17 def initialize(request, options = {}) 18 @request = request 19 @unsigned_parameters = (options[:unsigned_parameters] || []).map(&:to_s) 20 @options = options 21 end
proxies(klass)
click to toggle source
# File lib/oauth/request_proxy/base.rb 11 def self.proxies(klass) 12 OAuth::RequestProxy.available_proxies[klass] = self 13 end
Public Instance Methods
non_oauth_parameters()
click to toggle source
# File lib/oauth/request_proxy/base.rb 92 def non_oauth_parameters 93 parameters.select { |k, _v| !OAuth::PARAMETERS.include?(k) } 94 end
normalized_parameters()
click to toggle source
See 9.1.1. in specs Normalize Request Parameters
# File lib/oauth/request_proxy/base.rb 107 def normalized_parameters 108 normalize(parameters_for_signature) 109 end
normalized_uri()
click to toggle source
See 9.1.2 in specs
# File lib/oauth/request_proxy/base.rb 101 def normalized_uri 102 u = URI.parse(uri) 103 "#{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 : "/"}" 104 end
oauth_callback()
click to toggle source
OAuth parameters
# File lib/oauth/request_proxy/base.rb 25 def oauth_callback 26 parameters["oauth_callback"] 27 end
oauth_consumer_key()
click to toggle source
# File lib/oauth/request_proxy/base.rb 29 def oauth_consumer_key 30 parameters["oauth_consumer_key"] 31 end
Also aliased as: consumer_key
oauth_header(options = {})
click to toggle source
Authorization header for OAuth
# File lib/oauth/request_proxy/base.rb 148 def oauth_header(options = {}) 149 header_params_str = oauth_parameters.map { |k, v| "#{k}=\"#{escape(v)}\"" }.join(", ") 150 151 realm = "realm=\"#{options[:realm]}\", " if options[:realm] 152 "OAuth #{realm}#{header_params_str}" 153 end
oauth_nonce()
click to toggle source
# File lib/oauth/request_proxy/base.rb 33 def oauth_nonce 34 parameters["oauth_nonce"] 35 end
Also aliased as: nonce
oauth_parameters()
click to toggle source
# File lib/oauth/request_proxy/base.rb 88 def oauth_parameters 89 parameters.select { |k, v| OAuth::PARAMETERS.include?(k) && !v.nil? && v != "" } 90 end
oauth_signature()
click to toggle source
# File lib/oauth/request_proxy/base.rb 37 def oauth_signature 38 # TODO: can this be nil? 39 [parameters["oauth_signature"]].flatten.first || "" 40 end
Also aliased as: signature
oauth_signature_method()
click to toggle source
# File lib/oauth/request_proxy/base.rb 42 def oauth_signature_method 43 case parameters["oauth_signature_method"] 44 when Array 45 parameters["oauth_signature_method"].first 46 else 47 parameters["oauth_signature_method"] 48 end 49 end
Also aliased as: signature_method
oauth_timestamp()
click to toggle source
# File lib/oauth/request_proxy/base.rb 51 def oauth_timestamp 52 parameters["oauth_timestamp"] 53 end
Also aliased as: timestamp
oauth_token()
click to toggle source
# File lib/oauth/request_proxy/base.rb 55 def oauth_token 56 parameters["oauth_token"] 57 end
Also aliased as: token
oauth_verifier()
click to toggle source
oauth_version()
click to toggle source
# File lib/oauth/request_proxy/base.rb 66 def oauth_version 67 parameters["oauth_version"] 68 end
parameters()
click to toggle source
Parameter accessors
# File lib/oauth/request_proxy/base.rb 80 def parameters 81 raise NotImplementedError, "Must be implemented by subclasses" 82 end
parameters_for_signature()
click to toggle source
# File lib/oauth/request_proxy/base.rb 84 def parameters_for_signature 85 parameters.select { |k, _v| !signature_and_unsigned_parameters.include?(k) } 86 end
query_string_blank?()
click to toggle source
# File lib/oauth/request_proxy/base.rb 155 def query_string_blank? 156 if (uri = request.env["REQUEST_URI"]) 157 uri.split("?", 2)[1].nil? 158 else 159 request.query_string.match(/\A\s*\z/) 160 end 161 end
sign(options = {})
click to toggle source
# File lib/oauth/request_proxy/base.rb 111 def sign(options = {}) 112 OAuth::Signature.sign(self, options) 113 end
sign!(options = {})
click to toggle source
# File lib/oauth/request_proxy/base.rb 115 def sign!(options = {}) 116 parameters["oauth_signature"] = sign(options) 117 @signed = true 118 signature 119 end
signature_and_unsigned_parameters()
click to toggle source
# File lib/oauth/request_proxy/base.rb 96 def signature_and_unsigned_parameters 97 unsigned_parameters + ["oauth_signature"] 98 end
signature_base_string()
click to toggle source
See 9.1 in specs
# File lib/oauth/request_proxy/base.rb 122 def signature_base_string 123 base = [method, normalized_uri, normalized_parameters] 124 base.map { |v| escape(v) }.join("&") 125 end
signed?()
click to toggle source
Has this request been signed yet?
# File lib/oauth/request_proxy/base.rb 128 def signed? 129 @signed 130 end
signed_uri(with_oauth: true)
click to toggle source
URI, including OAuth parameters
# File lib/oauth/request_proxy/base.rb 133 def signed_uri(with_oauth: true) 134 if signed? 135 params = if with_oauth 136 parameters 137 else 138 non_oauth_parameters 139 end 140 141 [uri, normalize(params)].join("?") 142 else 143 warn("This request has not yet been signed!") 144 end 145 end
Protected Instance Methods
header_params()
click to toggle source
# File lib/oauth/request_proxy/base.rb 165 def header_params 166 %w[X-HTTP_AUTHORIZATION Authorization HTTP_AUTHORIZATION].each do |header| 167 next unless request.env.include?(header) 168 169 header = request.env[header] 170 next unless header[0, 6] == "OAuth " 171 172 # parse the header into a Hash 173 oauth_params = OAuth::Helper.parse_header(header) 174 175 # remove non-OAuth parameters 176 oauth_params.select! { |k, _v| k =~ /^oauth_/ } 177 178 return oauth_params 179 end 180 181 {} 182 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 188 def wrap_values(hash) 189 return {} unless hash 190 hash.each_with_object({}) do |(k, v), acc| 191 acc[k] = (v.is_a?(Array) || v.nil?) ? v : [v] 192 end 193 end