class Net::HTTPGenericRequest
Attributes
Public Instance Methods
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
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
# 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
# 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
# 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
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
# File lib/oauth/client/net_http.rb, line 91 def set_oauth_header self["Authorization"] = @oauth_helper.header end
# 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