Class: OAuth::RequestProxy::Base

Inherits:
Object
  • Object
show all
Includes:
Helper
Defined in:
lib/oauth/request_proxy/base.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helper

_escape, escape, generate_key, generate_timestamp, normalize, normalize_nested_query, parse_header, stringify_keys, unescape

Constructor Details

#initialize(request, options = {}) ⇒ Base

Returns a new instance of Base.



17
18
19
20
21
# File 'lib/oauth/request_proxy/base.rb', line 17

def initialize(request, options = {})
  @request = request
  @unsigned_parameters = (options[:unsigned_parameters] || []).map(&:to_s)
  @options = options
end

Instance Attribute Details

#optionsObject

Returns the value of attribute options.



15
16
17
# File 'lib/oauth/request_proxy/base.rb', line 15

def options
  @options
end

#requestObject

Returns the value of attribute request.



15
16
17
# File 'lib/oauth/request_proxy/base.rb', line 15

def request
  @request
end

#unsigned_parametersObject

Returns the value of attribute unsigned_parameters.



15
16
17
# File 'lib/oauth/request_proxy/base.rb', line 15

def unsigned_parameters
  @unsigned_parameters
end

Class Method Details

.proxies(klass) ⇒ Object



11
12
13
# File 'lib/oauth/request_proxy/base.rb', line 11

def self.proxies(klass)
  OAuth::RequestProxy.available_proxies[klass] = self
end

Instance Method Details

#non_oauth_parametersObject



92
93
94
# File 'lib/oauth/request_proxy/base.rb', line 92

def non_oauth_parameters
  parameters.select { |k, _v| !OAuth::PARAMETERS.include?(k) }
end

#normalized_parametersObject

See 9.1.1. in specs Normalize Request Parameters



107
108
109
# File 'lib/oauth/request_proxy/base.rb', line 107

def normalized_parameters
  normalize(parameters_for_signature)
end

#normalized_uriObject

See 9.1.2 in specs



101
102
103
104
# File 'lib/oauth/request_proxy/base.rb', line 101

def normalized_uri
  u = URI.parse(uri)
  "#{u.scheme.downcase}://#{u.host.downcase}#{":#{u.port}" if (u.scheme.casecmp("http").zero? && u.port != 80) || (u.scheme.casecmp("https").zero? && u.port != 443)}#{(u.path && u.path != "") ? u.path : "/"}"
end

#oauth_callbackObject

OAuth parameters



25
26
27
# File 'lib/oauth/request_proxy/base.rb', line 25

def oauth_callback
  parameters["oauth_callback"]
end

#oauth_consumer_keyObject Also known as: consumer_key



29
30
31
# File 'lib/oauth/request_proxy/base.rb', line 29

def oauth_consumer_key
  parameters["oauth_consumer_key"]
end

#oauth_header(options = {}) ⇒ Object

Authorization header for OAuth



148
149
150
151
152
153
# File 'lib/oauth/request_proxy/base.rb', line 148

def oauth_header(options = {})
  header_params_str = oauth_parameters.map { |k, v| "#{k}=\"#{escape(v)}\"" }.join(", ")

  realm = "realm=\"#{options[:realm]}\", " if options[:realm]
  "OAuth #{realm}#{header_params_str}"
end

#oauth_nonceObject Also known as: nonce



33
34
35
# File 'lib/oauth/request_proxy/base.rb', line 33

def oauth_nonce
  parameters["oauth_nonce"]
end

#oauth_parametersObject



88
89
90
# File 'lib/oauth/request_proxy/base.rb', line 88

def oauth_parameters
  parameters.select { |k, v| OAuth::PARAMETERS.include?(k) && !v.nil? && v != "" }
end

#oauth_signatureObject Also known as: signature



37
38
39
40
# File 'lib/oauth/request_proxy/base.rb', line 37

def oauth_signature
  # TODO: can this be nil?
  [parameters["oauth_signature"]].flatten.first || ""
end

#oauth_signature_methodObject Also known as: signature_method



42
43
44
45
46
47
48
49
# File 'lib/oauth/request_proxy/base.rb', line 42

def oauth_signature_method
  case parameters["oauth_signature_method"]
  when Array
    parameters["oauth_signature_method"].first
  else
    parameters["oauth_signature_method"]
  end
end

#oauth_timestampObject Also known as: timestamp



51
52
53
# File 'lib/oauth/request_proxy/base.rb', line 51

def oauth_timestamp
  parameters["oauth_timestamp"]
end

#oauth_tokenObject Also known as: token



55
56
57
# File 'lib/oauth/request_proxy/base.rb', line 55

def oauth_token
  parameters["oauth_token"]
end

#oauth_verifierObject

OAuth 1.0a only: value returned to the Consumer after user authorization and required when exchanging a Request Token for an Access Token. Not present in OAuth 1.0 flows.



62
63
64
# File 'lib/oauth/request_proxy/base.rb', line 62

def oauth_verifier
  parameters["oauth_verifier"]
end

#oauth_versionObject



66
67
68
# File 'lib/oauth/request_proxy/base.rb', line 66

def oauth_version
  parameters["oauth_version"]
end

#parametersObject

Parameter accessors

Raises:

  • (NotImplementedError)


80
81
82
# File 'lib/oauth/request_proxy/base.rb', line 80

def parameters
  raise NotImplementedError, "Must be implemented by subclasses"
end

#parameters_for_signatureObject



84
85
86
# File 'lib/oauth/request_proxy/base.rb', line 84

def parameters_for_signature
  parameters.select { |k, _v| !signature_and_unsigned_parameters.include?(k) }
end

#query_string_blank?Boolean

Returns:

  • (Boolean)


155
156
157
158
159
160
161
# File 'lib/oauth/request_proxy/base.rb', line 155

def query_string_blank?
  if (uri = request.env["REQUEST_URI"])
    uri.split("?", 2)[1].nil?
  else
    request.query_string.match(/\A\s*\z/)
  end
end

#sign(options = {}) ⇒ Object



111
112
113
# File 'lib/oauth/request_proxy/base.rb', line 111

def sign(options = {})
  OAuth::Signature.sign(self, options)
end

#sign!(options = {}) ⇒ Object



115
116
117
118
119
# File 'lib/oauth/request_proxy/base.rb', line 115

def sign!(options = {})
  parameters["oauth_signature"] = sign(options)
  @signed = true
  signature
end

#signature_and_unsigned_parametersObject



96
97
98
# File 'lib/oauth/request_proxy/base.rb', line 96

def signature_and_unsigned_parameters
  unsigned_parameters + ["oauth_signature"]
end

#signature_base_stringObject

See 9.1 in specs



122
123
124
125
# File 'lib/oauth/request_proxy/base.rb', line 122

def signature_base_string
  base = [method, normalized_uri, normalized_parameters]
  base.map { |v| escape(v) }.join("&")
end

#signed?Boolean

Has this request been signed yet?

Returns:

  • (Boolean)


128
129
130
# File 'lib/oauth/request_proxy/base.rb', line 128

def signed?
  @signed
end

#signed_uri(with_oauth: true) ⇒ Object

URI, including OAuth parameters



133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/oauth/request_proxy/base.rb', line 133

def signed_uri(with_oauth: true)
  if signed?
    params = if with_oauth
      parameters
    else
      non_oauth_parameters
    end

    [uri, normalize(params)].join("?")
  else
    warn("This request has not yet been signed!")
  end
end