posted by me checkbox
[zzz-floof.git] / floof / controllers / account.py
index e4f39f3..2c94736 100644 (file)
@@ -3,13 +3,15 @@ import logging
 from openid.consumer.consumer import Consumer
 from openid.extensions.sreg import SRegRequest, SRegResponse
 from openid.store.filestore import FileOpenIDStore
+from openid.yadis.discover import DiscoveryFailure
 from sqlalchemy.orm.exc import NoResultFound
 
 from pylons import request, response, session, tmpl_context as c, url
-from pylons.controllers.util import abort, redirect_to
+from pylons.controllers.util import abort, redirect, redirect_to
 from routes import url_for, request_config
 
 from floof.lib.base import BaseController, render
+import floof.lib.helpers as h
 from floof.model.users import IdentityURL, User
 
 log = logging.getLogger(__name__)
@@ -19,13 +21,20 @@ class AccountController(BaseController):
     openid_store = FileOpenIDStore('/var/tmp')
 
     def login(self):
-        return render('/login.mako')
+        c.bogus_identity_url = request.params.get('bogus_identity_url', None)
+        return render('/account/login.mako')
 
     def login_begin(self):
         """Step one of logging in with OpenID; we redirect to the provider"""
 
+        identity_url = request.params['identity_url']
         cons = Consumer(session=session, store=self.openid_store)
-        auth_request = cons.begin(request.params['identity_url'])
+        try:
+            auth_request = cons.begin(identity_url)
+        except DiscoveryFailure:
+            redirect_to(controller='account', action='login',
+                        bogus_identity_url=identity_url)
+
         sreg_req = SRegRequest(optional=['nickname', 'email', 'dob', 'gender',
                                          'country', 'language', 'timezone'])
         auth_request.addExtension(sreg_req)
@@ -35,7 +44,7 @@ class AccountController(BaseController):
         return_url = url_for(host=host, controller='account', action='login_finish')
         new_url = auth_request.redirectURL(return_to=return_url,
                                            realm=protocol + '://' + host)
-        redirect_to(new_url)
+        redirect(new_url)
 
     def login_finish(self):
         """Step two of logging in; the OpenID provider redirects back here."""
@@ -63,14 +72,14 @@ class AccountController(BaseController):
                 session['register:nickname'] = sreg_res['nickname']
 
             session.save()
-            redirect_to(url.current(action='register'))
+            redirect(url('register'))
 
         # Remember who's logged in, and we're good to go
         session['user_id'] = user.id
         session.save()
 
         # XXX send me where I came from
-        redirect_to('/')
+        redirect('/')
 
     def logout(self):
         """Log user out."""
@@ -81,7 +90,7 @@ class AccountController(BaseController):
 
         # XXX success message
         # XXX send me where I came from
-        redirect_to('/')
+        redirect('/')
 
     def register(self):
         """Logging in with an unrecognized identity URL redirects here."""
@@ -116,4 +125,4 @@ class AccountController(BaseController):
 
         # XXX how do we do success messages in some useful way?
         # XXX send me where I came from
-        redirect_to('/')
+        redirect('/')