module DeviseTokenAuth

Constants

VERSION

Public Class Methods

setup() { |self| ... } click to toggle source
# File lib/devise_token_auth/engine.rb, line 54
def self.setup(&block)
  yield self

  Rails.application.config.after_initialize do
    if defined?(::OmniAuth)
      ::OmniAuth::config.path_prefix = Devise.omniauth_path_prefix = omniauth_prefix

      # Omniauth currently does not pass along omniauth.params upon failure redirect
      # see also: https://github.com/intridea/omniauth/issues/626
      OmniAuth::FailureEndpoint.class_eval do
        def redirect_to_failure
          message_key = env['omniauth.error.type']
          origin_query_param = env['omniauth.origin'] ? "&origin=#{CGI.escape(env['omniauth.origin'])}" : ''
          strategy_name_query_param = env['omniauth.error.strategy'] ? "&strategy=#{env['omniauth.error.strategy'].name}" : ''
          extra_params = env['omniauth.params'] ? "&#{env['omniauth.params'].to_query}" : ''
          new_path = "#{env['SCRIPT_NAME']}#{OmniAuth.config.path_prefix}/failure?message=#{message_key}#{origin_query_param}#{strategy_name_query_param}#{extra_params}"
          Rack::Response.new(['302 Moved'], 302, 'Location' => new_path).finish
        end
      end

      # Omniauth currently removes omniauth.params during mocked requests
      # see also: https://github.com/intridea/omniauth/pull/812
      OmniAuth::Strategy.class_eval do
        def mock_callback_call
          setup_phase
          @env['omniauth.origin'] = session.delete('omniauth.origin')
          @env['omniauth.origin'] = nil if env['omniauth.origin'] == ''
          @env['omniauth.params'] = session.delete('omniauth.params') || {}
          mocked_auth = OmniAuth.mock_auth_for(name.to_s)
          if mocked_auth.is_a?(Symbol)
            fail!(mocked_auth)
          else
            @env['omniauth.auth'] = mocked_auth
            OmniAuth.config.before_callback_phase.call(@env) if OmniAuth.config.before_callback_phase
            call_app!
          end
        end
      end

    end
  end
end

Public Instance Methods

mock_callback_call() click to toggle source
# File lib/devise_token_auth/engine.rb, line 77
def mock_callback_call
  setup_phase
  @env['omniauth.origin'] = session.delete('omniauth.origin')
  @env['omniauth.origin'] = nil if env['omniauth.origin'] == ''
  @env['omniauth.params'] = session.delete('omniauth.params') || {}
  mocked_auth = OmniAuth.mock_auth_for(name.to_s)
  if mocked_auth.is_a?(Symbol)
    fail!(mocked_auth)
  else
    @env['omniauth.auth'] = mocked_auth
    OmniAuth.config.before_callback_phase.call(@env) if OmniAuth.config.before_callback_phase
    call_app!
  end
end
redirect_to_failure() click to toggle source
# File lib/devise_token_auth/engine.rb, line 64
def redirect_to_failure
  message_key = env['omniauth.error.type']
  origin_query_param = env['omniauth.origin'] ? "&origin=#{CGI.escape(env['omniauth.origin'])}" : ''
  strategy_name_query_param = env['omniauth.error.strategy'] ? "&strategy=#{env['omniauth.error.strategy'].name}" : ''
  extra_params = env['omniauth.params'] ? "&#{env['omniauth.params'].to_query}" : ''
  new_path = "#{env['SCRIPT_NAME']}#{OmniAuth.config.path_prefix}/failure?message=#{message_key}#{origin_query_param}#{strategy_name_query_param}#{extra_params}"
  Rack::Response.new(['302 Moved'], 302, 'Location' => new_path).finish
end