class OmniAuth::Strategies::YNAB
Authentication strategy for connecting with APIs constructed using the [OAuth 2.0 Specification](tools.ietf.org/html/draft-ietf-oauth-v2-10). You must generally register your application with the provider and utilize an application id and secret in order to authenticate using OAuth 2.0.
Attributes
access_token[RW]
Public Class Methods
inherited(subclass)
click to toggle source
# File lib/omniauth/strategies/ynab.rb, line 17 def self.inherited(subclass) OmniAuth::Strategy.included(subclass) end
Public Instance Methods
callback_phase()
click to toggle source
Calls superclass method
# File lib/omniauth/strategies/ynab.rb, line 68 def callback_phase # rubocop:disable AbcSize, CyclomaticComplexity, MethodLength, PerceivedComplexity error = request.params["error_reason"] || request.params["error"] if error fail!(error, CallbackError.new(request.params["error"], request.params["error_description"] || request.params["error_reason"], request.params["error_uri"])) elsif !options.provider_ignores_state && (request.params["state"].to_s.empty? || request.params["state"] != session.delete("omniauth.state")) fail!(:csrf_detected, CallbackError.new(:csrf_detected, "CSRF detected")) else self.access_token = build_access_token self.access_token = access_token.refresh! if access_token.expired? super end rescue ::OAuth2::Error, CallbackError => e fail!(:invalid_credentials, e) rescue ::Timeout::Error, ::Errno::ETIMEDOUT => e fail!(:timeout, e) rescue ::SocketError => e fail!(:failed_to_connect, e) end
client()
click to toggle source
# File lib/omniauth/strategies/ynab.rb, line 37 def client ::OAuth2::Client.new(options.client_id, options.client_secret, deep_symbolize(options.client_options)) end
request_phase()
click to toggle source
# File lib/omniauth/strategies/ynab.rb, line 49 def request_phase redirect client.auth_code.authorize_url({:redirect_uri => callback_url}.merge(authorize_params)) end
token_params()
click to toggle source
# File lib/omniauth/strategies/ynab.rb, line 64 def token_params options.token_params.merge(options_for("token")) end
Protected Instance Methods
build_access_token()
click to toggle source
# File lib/omniauth/strategies/ynab.rb, line 89 def build_access_token verifier = request.params["code"] client.auth_code.get_token(verifier, {:redirect_uri => callback_url}.merge(token_params.to_hash(:symbolize_keys => true)), deep_symbolize(options.auth_token_params)) end
deep_symbolize(options)
click to toggle source
# File lib/omniauth/strategies/ynab.rb, line 94 def deep_symbolize(options) hash = {} options.each do |key, value| hash[key.to_sym] = value.is_a?(Hash) ? deep_symbolize(value) : value end hash end
options_for(option)
click to toggle source
# File lib/omniauth/strategies/ynab.rb, line 102 def options_for(option) hash = {} options.send(:"#{option}_options").select { |key| options[key] }.each do |key| hash[key.to_sym] = options[key] end hash end