Class: FaradayMiddleware::OAuth2
- Inherits:
-
Faraday::Middleware
- Object
- Faraday::Middleware
- FaradayMiddleware::OAuth2
- Extended by:
- Forwardable
- Defined in:
- lib/faraday_middleware/request/oauth2.rb
Overview
Public: A simple middleware that adds an access token to each request.
By default, the token is added as both “access_token” query parameter and the “Authorization” HTTP request header. It can alternatively be added exclusively as a bearer token “Authorization” header by specifying a “token_type” option of “bearer”. However, an explicit “access_token” parameter or “Authorization” header for the current request are not overriden.
Examples
# configure default token:
OAuth2.new(app, 'abc123')
# configure query parameter name:
OAuth2.new(app, 'abc123', :param_name => 'my_oauth_token')
# use bearer token authorization header only
OAuth2.new(app, 'abc123', :token_type => 'bearer')
# default token value is optional:
OAuth2.new(app, :param_name => 'my_oauth_token')
Constant Summary collapse
- PARAM_NAME =
'access_token'
- TOKEN_TYPE =
'param'
- AUTH_HEADER =
'Authorization'
Instance Attribute Summary collapse
-
#param_name ⇒ Object
readonly
Returns the value of attribute param_name.
-
#token_type ⇒ Object
readonly
Returns the value of attribute token_type.
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, token = nil, options = {}) ⇒ OAuth2
constructor
A new instance of OAuth2.
- #query_params(url) ⇒ Object
Constructor Details
#initialize(app, token = nil, options = {}) ⇒ OAuth2
Returns a new instance of OAuth2.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/faraday_middleware/request/oauth2.rb', line 56 def initialize(app, token = nil, = {}) super(app) if token.is_a? Hash = token token = nil end @token = token&.to_s @param_name = .fetch(:param_name, PARAM_NAME).to_s @token_type = .fetch(:token_type, TOKEN_TYPE).to_s raise ArgumentError, ":param_name can't be blank" if @token_type == 'param' && @param_name.empty? return unless [:token_type].nil? warn "\nWarning: FaradayMiddleware::OAuth2 initialized with default "\ 'token_type - token will be added as both a query string parameter '\ 'and an Authorization header. In the next major release, tokens will '\ 'be added exclusively as an Authorization header by default. Please '\ 'see https://github.com/lostisland/faraday_middleware/wiki.' end |
Instance Attribute Details
#param_name ⇒ Object (readonly)
Returns the value of attribute param_name.
34 35 36 |
# File 'lib/faraday_middleware/request/oauth2.rb', line 34 def param_name @param_name end |
#token_type ⇒ Object (readonly)
Returns the value of attribute token_type.
34 35 36 |
# File 'lib/faraday_middleware/request/oauth2.rb', line 34 def token_type @token_type end |
Instance Method Details
#call(env) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/faraday_middleware/request/oauth2.rb', line 39 def call(env) params = { param_name => @token }.update query_params(env[:url]) token = params[param_name] if token.respond_to?(:empty?) && !token.empty? case @token_type.downcase when 'param' env[:url].query = build_query params env[:request_headers][AUTH_HEADER] ||= %(Token token="#{token}") when 'bearer' env[:request_headers][AUTH_HEADER] ||= %(Bearer #{token}) end end @app.call env end |
#query_params(url) ⇒ Object
77 78 79 80 81 82 83 |
# File 'lib/faraday_middleware/request/oauth2.rb', line 77 def query_params(url) if url.query.nil? || url.query.empty? {} else parse_query url.query end end |