class Net::HTTPGenericRequest

Attributes

oauth_helper[R]

Public Instance Methods

oauth!(http, consumer = nil, token = nil, options = {}) click to toggle source

Add the OAuth information to an HTTP request. Depending on the options[:scheme] setting this may add a header, additional query string parameters, or additional POST body parameters. The default scheme is header, in which the OAuth parameters as put into the Authorization header.

  • http - Configured Net::HTTP instance

  • consumer - OAuth::Consumer instance

  • token - OAuth::Token instance

  • options - Request-specific options (e.g. request_uri, consumer, token, scheme, signature_method, nonce, timestamp)

This method also modifies the User-Agent header to add the OAuth gem version.

See Also: OAuth core spec version 1.0, section 5.4.1,

{OAuth Request Body Hash 1.0 Draft 4}[http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/drafts/4/spec.html,
                                      http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html#when_to_include]
# File lib/oauth/client/net_http.rb, line 25
def oauth!(http, consumer = nil, token = nil, options = {})
  helper_options = oauth_helper_options(http, consumer, token, options)
  @oauth_helper = OAuth::Client::Helper.new(self, helper_options)
  @oauth_helper.amend_user_agent_header(self)
  @oauth_helper.hash_body if oauth_body_hash_required?
  send("set_oauth_#{helper_options[:scheme]}")
end
signature_base_string(http, consumer = nil, token = nil, options = {}) click to toggle source

Create a string suitable for signing for an HTTP request. This process involves parameter normalization as specified in the OAuth specification. The exact normalization also depends on the options[:scheme] being used so this must match what will be used for the request itself. The default scheme is header, in which the OAuth parameters as put into the Authorization header.

  • http - Configured Net::HTTP instance

  • consumer - OAuth::Consumer instance

  • token - OAuth::Token instance

  • options - Request-specific options (e.g. request_uri, consumer, token, scheme, signature_method, nonce, timestamp)

See Also: OAuth core spec version 1.0, section 5.4.1,

{OAuth Request Body Hash 1.0 Draft 4}[http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/drafts/4/spec.html,
                                      http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html#when_to_include]
# File lib/oauth/client/net_http.rb, line 48
def signature_base_string(http, consumer = nil, token = nil, options = {})
  helper_options = oauth_helper_options(http, consumer, token, options)
  @oauth_helper = OAuth::Client::Helper.new(self, helper_options)
  @oauth_helper.hash_body if oauth_body_hash_required?
  @oauth_helper.signature_base_string
end

Private Instance Methods

oauth_body_hash_required?() click to toggle source
# File lib/oauth/client/net_http.rb, line 87
def oauth_body_hash_required?
  !@oauth_helper.token_request? && request_body_permitted? && !content_type.to_s.downcase.start_with?("application/x-www-form-urlencoded")
end
oauth_full_request_uri(http, options) click to toggle source
# File lib/oauth/client/net_http.rb, line 67
def oauth_full_request_uri(http, options)
  uri = URI.parse(path)
  uri.host = http.address
  uri.port = http.port

  if options[:request_endpoint] && options[:site]
    is_https = options[:site].match(%r{^https://})
    uri.host = options[:site].gsub(%r{^https?://}, "")
    uri.port ||= is_https ? 443 : 80
  end

  uri.scheme = if http.respond_to?(:use_ssl?) && http.use_ssl?
                 "https"
               else
                 "http"
               end

  uri.to_s
end
oauth_helper_options(http, consumer, token, options) click to toggle source
# File lib/oauth/client/net_http.rb, line 57
def oauth_helper_options(http, consumer, token, options)
  { request_uri: oauth_full_request_uri(http, options),
    consumer: consumer,
    token: token,
    scheme: "header",
    signature_method: nil,
    nonce: nil,
    timestamp: nil }.merge(options)
end
set_oauth_body() click to toggle source

FIXME: if you’re using a POST body and query string parameters, this method will move query string parameters into the body unexpectedly. This may cause problems with non-x-www-form-urlencoded bodies submitted to URLs containing query string params. If duplicate parameters are present in both places, all instances should be included when calculating the signature base string.

# File lib/oauth/client/net_http.rb, line 102
def set_oauth_body
  set_form_data(@oauth_helper.stringify_keys(@oauth_helper.parameters_with_oauth))
  params_with_sig = @oauth_helper.parameters.merge(oauth_signature: @oauth_helper.signature)
  set_form_data(@oauth_helper.stringify_keys(params_with_sig))
end
set_oauth_header() click to toggle source
# File lib/oauth/client/net_http.rb, line 91
def set_oauth_header
  self["Authorization"] = @oauth_helper.header
end
set_oauth_query_string() click to toggle source
# File lib/oauth/client/net_http.rb, line 108
def set_oauth_query_string
  oauth_params_str = @oauth_helper.oauth_parameters.map { |k, v| [escape(k), escape(v)].join("=") }.join("&")
  uri = URI.parse(path)
  uri.query = if uri.query.to_s == ""
                oauth_params_str
              else
                uri.query + "&" + oauth_params_str
              end

  @path = uri.to_s

  @path << "&oauth_signature=#{escape(oauth_helper.signature)}"
end