class EventMachine::HttpClient

Attributes

oauth_helper[R]

Public Instance Methods

normalize_uri() click to toggle source

This code was lifted from the em-http-request because it was removed from the gem June 19, 2010 see: github.com/igrigorik/em-http-request/commit/d536fc17d56dbe55c487eab01e2ff9382a62598b

# File lib/oauth/client/em_http.rb, line 66
def normalize_uri
  @normalized_uri ||= begin
    uri = @conn.dup
    encoded_query = encode_query(@conn, @req[:query])
    path, query = encoded_query.split("?", 2)
    uri.query = query unless encoded_query.empty?
    uri.path  = path
    uri
  end
end
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, ignored in this scenario except for getting host.

  • 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

# File lib/oauth/client/em_http.rb, line 25
def oauth!(http, consumer = nil, token = nil, options = {})
  options = { request_uri: normalized_oauth_uri(http),
              consumer: consumer,
              token: token,
              scheme: "header",
              signature_method: nil,
              nonce: nil,
              timestamp: nil }.merge(options)

  @oauth_helper = OAuth::Client::Helper.new(self, options)
  __send__(:"set_oauth_#{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 9.1.1

# File lib/oauth/client/em_http.rb, line 51
def signature_base_string(http, consumer = nil, token = nil, options = {})
  options = { request_uri: normalized_oauth_uri(http),
              consumer: consumer,
              token: token,
              scheme: "header",
              signature_method: nil,
              nonce: nil,
              timestamp: nil }.merge(options)

  OAuth::Client::Helper.new(self, options).signature_base_string
end

Protected Instance Methods

combine_query(path, query, uri_query) click to toggle source
# File lib/oauth/client/em_http.rb, line 79
def combine_query(path, query, uri_query)
  combined_query = if query.is_a?(Hash)
                     query.map { |k, v| encode_param(k, v) }.join("&")
                   else
                     query.to_s
  end
  unless uri_query.to_s.empty?
    combined_query = [combined_query, uri_query].reject(&:empty?).join("&")
  end
  combined_query.to_s.empty? ? path : "#{path}?#{combined_query}"
end
normalized_oauth_uri(http) click to toggle source

Since we expect to get the host etc details from the http instance (…), we create a fake url here. Surely this is a horrible, horrible idea?

# File lib/oauth/client/em_http.rb, line 93
def normalized_oauth_uri(http)
  uri = URI.parse(normalize_uri.path)
  uri.host = http.address
  uri.port = http.port

  uri.scheme = if http.respond_to?(:use_ssl?) && http.use_ssl?
                 "https"
               else
                 "http"
               end
  uri.to_s
end
set_oauth_body() click to toggle source
# File lib/oauth/client/em_http.rb, line 111
def set_oauth_body
  raise NotImplementedError, "please use the set_oauth_header method instead"
end
set_oauth_header() click to toggle source
# File lib/oauth/client/em_http.rb, line 106
def set_oauth_header
  req[:head] ||= {}
  req[:head].merge!("Authorization" => @oauth_helper.header)
end
set_oauth_query_string() click to toggle source
# File lib/oauth/client/em_http.rb, line 115
def set_oauth_query_string
  raise NotImplementedError, "please use the set_oauth_header method instead"
end