summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScytrin dai Kinthra <scytrin@gmail.com>2008-06-28 14:07:57 -0700
committerScytrin dai Kinthra <scytrin@gmail.com>2008-06-28 15:06:59 -0700
commita52cf1b2b476ba21cb521a07fa471baf4959a5c9 (patch)
tree8c70874ec4c8add0f8e59179835647f98c9e2474
parentd79bf8ee9066dc890b61814feed6523f57fb315b (diff)
downloadrack-a52cf1b2b476ba21cb521a07fa471baf4959a5c9.tar.gz
Initial support for OpenID extensions.
Extensions require implementation from ::OpenID::Extension
-rw-r--r--lib/rack/auth/openid.rb27
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