Class: Faraday::OAuth::Middleware
- Inherits:
-
Middleware
- Object
- Middleware
- Faraday::OAuth::Middleware
- Extended by:
- Forwardable
- Defined in:
- lib/faraday/oauth/middleware.rb
Overview
Uses the simple_oauth library to sign requests according the OAuth protocol.
The options for this middleware are forwarded to SimpleOAuth::Header: :consumer_key, :consumer_secret, :token, :token_secret. All these parameters are optional.
The signature is added to the “Authorization” HTTP request header. If the value for this header already exists, it is not overriden.
If no Content-Type header is specified, this middleware assumes that request body parameters should be included while signing the request. Otherwise, it only includes them if the Content-Type is “application/x-www-form-urlencoded”, as per OAuth 1.0.
For better performance while signing requests, this middleware should be positioned before UrlEncoded middleware on the stack, but after any other body-encoding middleware (such as EncodeJson).
Constant Summary collapse
- AUTH_HEADER =
"Authorization"
- CONTENT_TYPE =
"Content-Type"
- TYPE_URLENCODED =
"application/x-www-form-urlencoded"
Instance Method Summary collapse
- #body_params(env) ⇒ Object
- #include_body_params?(env) ⇒ Boolean
- #oauth_header(env) ⇒ Object
- #oauth_options(env) ⇒ Object
- #on_request(env) ⇒ Object
- #sign_request?(env) ⇒ Boolean
- #signature_params(params) ⇒ Object
Instance Method Details
#body_params(env) ⇒ Object
58 59 60 61 62 63 64 65 66 |
# File 'lib/faraday/oauth/middleware.rb', line 58 def body_params(env) if include_body_params?(env) if env.request_body.respond_to?(:to_str) parse_nested_query(env.request_body) else env.request_body end end || {} end |
#include_body_params?(env) ⇒ Boolean
68 69 70 71 |
# File 'lib/faraday/oauth/middleware.rb', line 68 def include_body_params?(env) # see RFC 5849, section 3.4.1.3.1 for details !(type = env.request_headers[CONTENT_TYPE]) || (type == TYPE_URLENCODED) end |
#oauth_header(env) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/faraday/oauth/middleware.rb', line 39 def oauth_header(env) SimpleOAuth::Header.new(env.method, env.url.to_s, signature_params(body_params(env)), (env)) end |
#oauth_options(env) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/faraday/oauth/middleware.rb', line 50 def (env) if (extra = env.request[:oauth]) && extra.is_a?(Hash) && !extra.empty? .merge extra else end end |
#on_request(env) ⇒ Object
35 36 37 |
# File 'lib/faraday/oauth/middleware.rb', line 35 def on_request(env) env.request_headers[AUTH_HEADER] ||= oauth_header(env).to_s if sign_request?(env) end |
#sign_request?(env) ⇒ Boolean
46 47 48 |
# File 'lib/faraday/oauth/middleware.rb', line 46 def sign_request?(env) !!env.request.fetch(:oauth, true) end |
#signature_params(params) ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/faraday/oauth/middleware.rb', line 73 def signature_params(params) if params.empty? params else params.reject { |_k, v| v.respond_to?(:content_type) } end end |