myexperiment-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myexperiment-hackers] [2224] trunk/app: Update openid controller for ru


From: noreply
Subject: [myexperiment-hackers] [2224] trunk/app: Update openid controller for ruby-openid 2.x.x.
Date: Thu, 11 Jun 2009 09:32:56 -0400 (EDT)

Revision
2224
Author
dtm
Date
2009-06-11 09:32:56 -0400 (Thu, 11 Jun 2009)

Log Message

Update openid controller for ruby-openid 2.x.x.
Add cancel button.

Modified Paths

Diff

Modified: trunk/app/controllers/openid_controller.rb (2223 => 2224)


--- trunk/app/controllers/openid_controller.rb	2009-06-10 15:53:50 UTC (rev 2223)
+++ trunk/app/controllers/openid_controller.rb	2009-06-11 13:32:56 UTC (rev 2224)
@@ -1,5 +1,9 @@
 gem 'ruby-openid'
 
+require 'openid'
+require 'openid/store/filesystem'
+
+
 # http://www.danwebb.net/2007/2/27/the-no-shit-guide-to-supporting-openid-in-your-applications
 class OpenidController < ApplicationController
   before_filter :login_required
@@ -10,41 +14,55 @@
 
   def create
     openid_url = params[:openid_url]
-    response = consumer.begin openid_url
+    begin
+      response = consumer.begin(openid_url)
 
-    if response.status == OpenID::SUCCESS
       return_to = url_for(:action="" 'complete')
       trust_root = url_for(:controller=>'')
       
-      redirect_url = response.redirect_url(trust_root, return_to, true) # <== immediate mode
-      redirect_to redirect_url
+      url = "" return_to, true) # <== immediate mode
+      redirect_to(url)
       return
+    rescue OpenID::DiscoveryFailure
+      flash[:error] = "Couldn't find an OpenID for that URL"
+    rescue RuntimeError, Timeout::Error => e
+      if e.class == Timeout::Error
+        flash[:error] = "Could not contact your OpenID server."
+      else
+        flash[:error] = "An unknown error occurred whilst contacting your OpenID server."
+      end
     end
-
-    flash[:error] = "Couldn't find an OpenID for that URL"
     render :action ="" :new
   end
 
   def complete
-    response = consumer.complete params
+    current_url = url_for(:action ="" 'complete', : false)
+    parameters = params.reject{|k,v|request.path_parameters[k]}
 
+    response = consumer.complete(parameters, current_url)
+
     case response.status
-      when OpenID::SUCCESS
+      when OpenID::Consumer::SUCCESS, OpenID::Consumer::SETUP_NEEDED
         current_user.openid_url = response.identity_url
         if current_user.save
           redirect_to user_path(current_user)
+          return
         else
           flash[:error] = "OpenID already registered to another #{Conf.sitename} account"
-          redirect_to new_openid_url
         end
         
-        return
-      when OpenID::SETUP_NEEDED
-        redirect_to response.setup_url # <== here!
-        return
+      # In immediate mode, we shouldnt wont get these responses, but just in
+      # case..
+      when OpenID::Consumer::FAILURE
+        if response.display_identifier
+          flash[:error] = "Verification of #{response.display_identifier} failed: #{response.message}"
+        else
+          flash[:error] = "Verification failed: #{response.message}"
+        end
+        redirect_to new_openid_url
+      when OpenID::Consumer::CANCEL
+          flash[:error] = "OpenID transaction cancelled"
     end
-
-    flash[:error] = 'Could not log on with your OpenID'
     redirect_to new_openid_url
   end
 
@@ -55,7 +73,7 @@
     # create the OpenID store for storing associations and nonces,
     # putting it in your app's db directory
     store_dir = Pathname.new(RAILS_ROOT).join('db').join('openid-store')
-    store = OpenID::FilesystemStore.new(store_dir)
+    store = OpenID::Store::Filesystem.new(store_dir)
 
     return OpenID::Consumer.new(session, store)
   end

Modified: trunk/app/views/openid/new.rhtml (2223 => 2224)


--- trunk/app/views/openid/new.rhtml	2009-06-10 15:53:50 UTC (rev 2223)
+++ trunk/app/views/openid/new.rhtml	2009-06-11 13:32:56 UTC (rev 2224)
@@ -13,5 +13,6 @@
     </p>
     
     <%= submit_tag 'Validate', :disable_with => "Validating..." %>
+    <input type="submit" id="cancel_button" value="Return to your Profile"  user_path(current_user) -%>';return false;"/>
   <% end %>
-</div>
\ No newline at end of file
+</div>

reply via email to

[Prev in Thread] Current Thread [Next in Thread]