1
0
Fork 0
mirror of https://github.com/omniauth/omniauth.git synced 2022-11-09 12:31:49 -05:00
omniauth--omniauth/oa-core/lib/omniauth/strategy.rb

92 lines
1.8 KiB
Ruby
Raw Normal View History

require 'omniauth/core'
2010-03-30 16:26:26 -04:00
module OmniAuth
2010-03-30 16:26:26 -04:00
module Strategy
2010-03-30 16:26:26 -04:00
def self.included(base)
base.class_eval do
attr_reader :app, :name, :env
end
end
def initialize(app, name, *args)
@app = app
@name = name.to_sym
end
def call(env)
dup.call!(env)
2010-03-30 16:26:26 -04:00
end
def call!(env)
2010-03-30 16:26:26 -04:00
@env = env
if request.path == "#{OmniAuth.config.path_prefix}/#{name}"
request_phase
elsif request.path == "#{OmniAuth.config.path_prefix}/#{name}/callback"
callback_phase
else
if respond_to?(:other_phase)
other_phase
else
call_app!
end
2010-03-30 16:26:26 -04:00
end
end
def request_phase
raise NotImplementedError
end
def callback_phase
env['omniauth.auth'] = auth_hash
call_app!
end
def call_app!
@env['rack.auth'] = env['omniauth.auth'] if env.key?('omniauth.auth')
@env['rack.auth.error'] = env['omniauth.error'] if env.key?('omniauth.error')
@app.call(@env)
2010-03-30 16:26:26 -04:00
end
def auth_hash
{
'provider' => name.to_s,
'uid' => nil
}
end
def full_host
uri = URI.parse(request.url)
uri.path = ''
uri.query = nil
uri.to_s
end
def callback_url
full_host + "#{OmniAuth.config.path_prefix}/#{name}/callback"
end
2010-03-30 16:26:26 -04:00
def session
@env['rack.session']
end
def request
@request ||= Rack::Request.new(@env)
end
def redirect(uri)
r = Rack::Response.new("Redirecting to #{uri}...")
r.redirect(uri)
r.finish
end
2010-03-30 16:26:26 -04:00
def user_info; {} end
def fail!(message_key, exception = nil)
self.env['omniauth.error'] = exception
2010-03-30 16:26:26 -04:00
OmniAuth.config.on_failure.call(self.env, message_key.to_sym)
end
end
end