diff options
author | Scytrin dai Kinthra <scytrin@gmail.com> | 2008-06-28 14:07:57 -0700 |
---|---|---|
committer | Scytrin dai Kinthra <scytrin@gmail.com> | 2008-06-28 15:06:59 -0700 |
commit | a52cf1b2b476ba21cb521a07fa471baf4959a5c9 (patch) | |
tree | 8c70874ec4c8add0f8e59179835647f98c9e2474 | |
parent | d79bf8ee9066dc890b61814feed6523f57fb315b (diff) | |
download | rack-a52cf1b2b476ba21cb521a07fa471baf4959a5c9.tar.gz |
Initial support for OpenID extensions.
Extensions require implementation from ::OpenID::Extension
-rw-r--r-- | lib/rack/auth/openid.rb | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/rack/auth/openid.rb b/lib/rack/auth/openid.rb index f093e8f4..fed6b629 100644 --- a/lib/rack/auth/openid.rb +++ b/lib/rack/auth/openid.rb @@ -126,9 +126,7 @@ module Rack end # TODO: extension support - if options.has_key? :extensions - warn "Extensions are not currently supported by Rack::Auth::OpenID" - end + ext = extensions(options).map{|ext,val| ext.to_s[/[^:]+$/].downcase } @options = { :session_key => 'rack.session', @@ -136,6 +134,7 @@ module Rack #:return_to, :login_good, :login_fail, :login_quit #:no_session, :auth_fail, :error :store => OIDStore, + :extensions => ext, :immediate => false, :anonymous => false, :catch_errors => false @@ -214,6 +213,11 @@ module Rack query_args[2] = false if session.key? :setup_needed pp query_args if $DEBUG + ## Extension support + extensions.each do |ext,args| + oid.add_extension ext::Request.new(*args) + end + if oid.send_redirect?(*query_args) redirect = oid.redirect_url(*query_args) [ 303, {'Location'=>redirect}, [] ] @@ -277,6 +281,13 @@ module Rack body << "Authentication unsuccessful.\n" when ::OpenID::Consumer::SUCCESS session.clear + + ## Extension support + extensions.each do |ext,args| + label = ext.to_s[/[^:]+$/].downcase + session[label] = ext::Response.from_success_response(oid) + end + session['authenticated'] = true # Value for unique identification and such session['identity'] = oid.identity_url @@ -305,6 +316,16 @@ module Rack body << oid.message if oid.message [ 303, {'Location'=>goto}, body] end + + private + + def extensions from=@options + from.select do |e,v| + e.is_a? Module \ + and ::OpenID::Extension > e::Request \ + and ::OpenID::Extension > e::Response + end + end end end end |