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, line 17
def initialize(request, options = {})
  @request = request
  @unsigned_parameters = (options[:unsigned_parameters] || []).map(&:to_s)
  @options = options
end
proxies(klass) click to toggle source
# File lib/oauth/request_proxy/base.rb, line 11
def self.proxies(klass)
  OAuth::RequestProxy.available_proxies[klass] = self
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, line 89
def non_oauth_parameters
  parameters.reject { |k, _v| OAuth::PARAMETERS.include?(k) }
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, line 104
def normalized_parameters
  normalize(parameters_for_signature)
end
normalized_uri() click to toggle source

See 9.1.2 in specs

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

OAuth parameters

# File lib/oauth/request_proxy/base.rb, line 25
def oauth_callback
  parameters["oauth_callback"]
end
oauth_consumer_key() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 29
def oauth_consumer_key
  parameters["oauth_consumer_key"]
end
Also aliased as: consumer_key
oauth_header(options = {}) click to toggle source

Authorization header for OAuth

# File lib/oauth/request_proxy/base.rb, line 145
def oauth_header(options = {})
  header_params_str = oauth_parameters.map { |k, v| "#{k}=\"#{escape(v)}\"" }.join(", ")

  realm = "realm=\"#{options[:realm]}\", " if options[:realm]
  "OAuth #{realm}#{header_params_str}"
end
oauth_nonce() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 33
def oauth_nonce
  parameters["oauth_nonce"]
end
Also aliased as: nonce
oauth_parameters() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 85
def oauth_parameters
  parameters.select { |k, _v| OAuth::PARAMETERS.include?(k) }.reject { |_k, v| v == "" }
end
oauth_signature() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 37
def oauth_signature
  # TODO: can this be nil?
  [parameters["oauth_signature"]].flatten.first || ""
end
Also aliased as: signature
oauth_signature_method() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 42
def oauth_signature_method
  case parameters["oauth_signature_method"]
  when Array
    parameters["oauth_signature_method"].first
  else
    parameters["oauth_signature_method"]
  end
end
Also aliased as: signature_method
oauth_timestamp() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 51
def oauth_timestamp
  parameters["oauth_timestamp"]
end
Also aliased as: timestamp
oauth_token() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 55
def oauth_token
  parameters["oauth_token"]
end
Also aliased as: token
oauth_verifier() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 59
def oauth_verifier
  parameters["oauth_verifier"]
end
oauth_version() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 63
def oauth_version
  parameters["oauth_version"]
end
parameters() click to toggle source

Parameter accessors

# File lib/oauth/request_proxy/base.rb, line 77
def parameters
  raise NotImplementedError, "Must be implemented by subclasses"
end
parameters_for_signature() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 81
def parameters_for_signature
  parameters.reject { |k, _v| signature_and_unsigned_parameters.include?(k) }
end
query_string_blank?() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 152
def query_string_blank?
  if (uri = request.env["REQUEST_URI"])
    uri.split("?", 2)[1].nil?
  else
    request.query_string.match(/\A\s*\z/)
  end
end
sign(options = {}) click to toggle source
# File lib/oauth/request_proxy/base.rb, line 108
def sign(options = {})
  OAuth::Signature.sign(self, options)
end
sign!(options = {}) click to toggle source
# File lib/oauth/request_proxy/base.rb, line 112
def sign!(options = {})
  parameters["oauth_signature"] = sign(options)
  @signed = true
  signature
end
signature()
Alias for: oauth_signature
signature_and_unsigned_parameters() click to toggle source
# File lib/oauth/request_proxy/base.rb, line 93
def signature_and_unsigned_parameters
  unsigned_parameters + ["oauth_signature"]
end
signature_base_string() click to toggle source

See 9.1 in specs

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

Has this request been signed yet?

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

URI, including OAuth parameters

# File lib/oauth/request_proxy/base.rb, line 130
def signed_uri(with_oauth = true)
  if signed?
    params = if with_oauth
               parameters
             else
               non_oauth_parameters
             end

    [uri, normalize(params)].join("?")
  else
    warn "This request has not yet been signed!"
  end
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, line 162
def header_params
  %w[X-HTTP_AUTHORIZATION Authorization HTTP_AUTHORIZATION].each do |header|
    next unless request.env.include?(header)

    header = request.env[header]
    next unless header[0, 6] == "OAuth "

    # parse the header into a Hash
    oauth_params = OAuth::Helper.parse_header(header)

    # remove non-OAuth parameters
    oauth_params.select! { |k, _v| k =~ /^oauth_/ }

    return oauth_params
  end

  {}
end