def call(env)
env['rack.auth.openid'] = self
session = env[@options[:session_key]]
unless session and session.is_a? Hash
raise(NoSession, 'No compatible session')
end
session = (session[:openid] ||= {})
unless session and session.is_a? Hash
raise(NoSession, 'Incompatible session')
end
request = Rack::Request.new env
consumer = ::OpenID::Consumer.new session, @options[:store]
if request.params['openid.mode']
finish consumer, session, request
elsif request.params[@options[:openid_param]]
check consumer, session, request
else
env['rack.errors'].puts "No valid params provided."
bad_request
end
rescue NoSession
env['rack.errors'].puts($!.message, *$@)
@options.
fetch :no_session, [ 500,
{'Content-Type'=>'text/plain'},
$!.message ]
rescue
env['rack.errors'].puts($!.message, *$@)
if not @options[:catch_error]
raise($!)
end
@options.
fetch :error, [ 500,
{'Content-Type'=>'text/plain'},
'OpenID has encountered an error.' ]
end