Parent

EventMachine::HttpClient

Extensions for em-http so that we can use consumer.sign! with an EventMachine::HttpClient instance. This is purely syntactic sugar.

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 67
def normalize_uri
  @normalized_uri ||= begin
    uri = @uri.dup
    encoded_query = encode_query(@uri, @options[: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 26
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)
  self.__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 52
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 80
def combine_query(path, query, uri_query)
  combined_query = if query.kind_of?(Hash)
    query.map { |k, v| encode_param(k, v) }.join('&')
  else
    query.to_s
  end
  if !uri_query.to_s.empty?
    combined_query = [combined_query, uri_query].reject {|part| part.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 94
def normalized_oauth_uri(http)
  uri = URI.parse(normalize_uri.path)
  uri.host = http.address
  uri.port = http.port

  if http.respond_to?(:use_ssl?) && http.use_ssl?
    uri.scheme = "https"
  else
    uri.scheme = "http"
  end
  uri.to_s
end
set_oauth_body() click to toggle source
# File lib/oauth/client/em_http.rb, line 112
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 107
def set_oauth_header
  headers = (self.options[:head] ||= {})
  headers['Authorization'] = @oauth_helper.header
end
set_oauth_query_string() click to toggle source
# File lib/oauth/client/em_http.rb, line 116
def set_oauth_query_string
  raise NotImplementedError, 'please use the set_oauth_header method instead'
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.