Extensions for em-http so that we can use consumer.sign! with an EventMachine::HttpClient instance. This is purely syntactic sugar.
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
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
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
# 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
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
# File lib/oauth/client/em_http.rb, line 112 def set_oauth_body raise NotImplementedError, 'please use the set_oauth_header method instead' end
Generated with the Darkfish Rdoc Generator 2.