Class: OmniAuth::FailureEndpoint

Inherits:
Object
  • Object
show all
Defined in:
lib/omniauth/failure_endpoint.rb

Overview

This simple Rack endpoint that serves as the default 'failure' mechanism for OmniAuth. If a strategy fails for any reason this endpoint will be invoked. The default behavior is to redirect to /auth/failure except in the case of a development RACK_ENV, in which case an exception will be raised.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(env) ⇒ FailureEndpoint

Returns a new instance of FailureEndpoint.



15
16
17
# File 'lib/omniauth/failure_endpoint.rb', line 15

def initialize(env)
  @env = env
end

Instance Attribute Details

#envObject (readonly)

Returns the value of attribute env.



9
10
11
# File 'lib/omniauth/failure_endpoint.rb', line 9

def env
  @env
end

Class Method Details

.call(env) ⇒ Object



11
12
13
# File 'lib/omniauth/failure_endpoint.rb', line 11

def self.call(env)
  new(env).call
end

Instance Method Details

#callObject



19
20
21
22
# File 'lib/omniauth/failure_endpoint.rb', line 19

def call
  raise_out! if OmniAuth.config.failure_raise_out_environments.include?(ENV['RACK_ENV'].to_s)
  redirect_to_failure
end

#origin_query_paramObject



49
50
51
52
53
# File 'lib/omniauth/failure_endpoint.rb', line 49

def origin_query_param
  return '' unless env['omniauth.origin']

  "&origin=#{Rack::Utils.escape(env['omniauth.origin'])}"
end

#raise_out!Object



24
25
26
# File 'lib/omniauth/failure_endpoint.rb', line 24

def raise_out!
  raise(env['omniauth.error'] || OmniAuth::Error.new(env['omniauth.error.type']))
end

#redirect_to_failureObject



28
29
30
31
32
33
# File 'lib/omniauth/failure_endpoint.rb', line 28

def redirect_to_failure
  message_key = env['omniauth.error.type']

  new_path = "#{env['SCRIPT_NAME']}#{strategy_path_prefix}/failure?message=#{Rack::Utils.escape(message_key)}#{origin_query_param}#{strategy_name_query_param}"
  Rack::Response.new(['302 Moved'], 302, 'Location' => new_path).finish
end

#strategy_name_query_paramObject



43
44
45
46
47
# File 'lib/omniauth/failure_endpoint.rb', line 43

def strategy_name_query_param
  return '' unless env['omniauth.error.strategy']

  "&strategy=#{env['omniauth.error.strategy'].name}"
end

#strategy_path_prefixObject



35
36
37
38
39
40
41
# File 'lib/omniauth/failure_endpoint.rb', line 35

def strategy_path_prefix
  if env['omniauth.error.strategy']
    env['omniauth.error.strategy'].path_prefix
  else
    OmniAuth.config.path_prefix
  end
end