Class: OAuthSimple::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/oauth-simple/request.rb

Constant Summary collapse

VERSION =
"1.0"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Request

Returns a new instance of Request.



26
27
28
29
30
# File 'lib/oauth-simple/request.rb', line 26

def initialize(options={})
  @http_method = options[:http_method] || :GET
  @http_url = options[:http_url]
  @parameters = options[:parameters] || {}
end

Instance Attribute Details

#consumerObject

Returns the value of attribute consumer.



25
26
27
# File 'lib/oauth-simple/request.rb', line 25

def consumer
  @consumer
end

Class Method Details

.from_consumer_and_token(consumer, token, url, options = {}) ⇒ Object

Builds a request from a consumer and (optionally) a token



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/oauth-simple/request.rb', line 33

def self.from_consumer_and_token(consumer, token, url, options = {})
  defaults = {
    'oauth_consumer_key' => consumer.key,
    'oauth_timestamp' => generate_timestamp,
    'oauth_nonce' => generate_nonce,
    'oauth_version' => VERSION
  }
  options.merge!(defaults)
  instance = new(:http_url => url, :parameters => options)
  instance.set_parameter('oauth_token', token.key) if token
  instance.consumer = consumer
  return instance
end

.generate_nonce(size = 32) ⇒ Object



123
124
125
126
# File 'lib/oauth-simple/request.rb', line 123

def self.generate_nonce(size=32)
  bytes = OpenSSL::Random.random_bytes(size)
  [bytes].pack('m').gsub(/\W/,'')
end

.generate_timestampObject



119
120
121
# File 'lib/oauth-simple/request.rb', line 119

def self.generate_timestamp
  return Time.now.to_i.to_s
end

Instance Method Details

#build_signature(signature_klass, token = nil) ⇒ Object



134
135
136
# File 'lib/oauth-simple/request.rb', line 134

def build_signature(signature_klass, token=nil)
  return signature_klass.build_signature(self, consumer, token)
end

#get_nonoauth_parametersObject



56
57
58
# File 'lib/oauth-simple/request.rb', line 56

def get_nonoauth_parameters
  @parameters.reject{|k,v| k =~ /^oauth_.*/}
end

#get_normalized_http_methodObject



102
103
104
# File 'lib/oauth-simple/request.rb', line 102

def get_normalized_http_method
  return @http_method.to_s.upcase
end

#get_normalized_http_urlObject



93
94
95
96
97
98
99
100
# File 'lib/oauth-simple/request.rb', line 93

def get_normalized_http_url
  parts = URI.parse(@http_url)
  if parts.port == 80
    return "#{parts.scheme}://#{parts.host}#{parts.path}"
  else
    return "#{parts.scheme}://#{parts.host}:#{parts.port}#{parts.path}"
  end
end

#get_normalized_parametersObject



106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/oauth-simple/request.rb', line 106

def get_normalized_parameters
  @parameters.sort.map do |k, values|
    if values.is_a?(Array)
      # multiple values were provided for a single key
      values.sort.collect do |v|
        [CGI.escape(k),CGI.escape(v)] * "="
      end
    else
      [CGI.escape(k),CGI.escape(values)] * "="
    end
  end * "&"    
end

#get_parameter(k) ⇒ Object



52
53
54
# File 'lib/oauth-simple/request.rb', line 52

def get_parameter(k)
  @parameters[k]
end

#postdata_hashObject



73
74
75
76
77
78
79
# File 'lib/oauth-simple/request.rb', line 73

def postdata_hash
  result = {}
  @parameters.sort.each do |k,v|
    result[k] = v
  end
  result
end

#set_parameter(k, v) ⇒ Object



48
49
50
# File 'lib/oauth-simple/request.rb', line 48

def set_parameter(k, v)
  @parameters[k] = v
end

#sign_request(signature_klass, token = nil) ⇒ Object



128
129
130
131
132
# File 'lib/oauth-simple/request.rb', line 128

def sign_request(signature_klass, token=nil)
  raise "Consumer is nothing" if @consumer.nil?
  set_parameter('oauth_signature_method', signature_klass.oauth_name)
  set_parameter('oauth_signature', build_signature(signature_klass, token))
end

#to_header(realm = nil) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/oauth-simple/request.rb', line 60

def to_header(realm=nil)
  auth_header = "OAuth "
  pairs = []
  pairs  << "realm=#{realm}" 
  @parameters.sort.each do |k, v|
    if k =~ /^oauth_/
      pairs << "#{k}=#{CGI.escape(v)}"
    end
  end
  auth_header << pairs.join(", ")
  return {"Authorization" => auth_header}
end

#to_postdataObject



81
82
83
84
85
86
87
# File 'lib/oauth-simple/request.rb', line 81

def to_postdata
  result = []
  @parameters.sort.each do |key, value|
    result << "#{CGI.escape(key)}=#{CGI.escape(value)}"
  end
  return result.join("&")
end

#to_urlObject



89
90
91
# File 'lib/oauth-simple/request.rb', line 89

def to_url
  return "#{get_normalized_http_url}?#{to_postdata}"
end