X-Git-Url: http://git.veekun.com/zzz-floof.git/blobdiff_plain/55270a42bf0699bd78b95a945fddd73a165507ee..c472ed30b5d4600a8ead8846ddbcbf3bb1b027d6:/floof/controllers/account.py?ds=inline diff --git a/floof/controllers/account.py b/floof/controllers/account.py index e4f39f3..2c94736 100644 --- a/floof/controllers/account.py +++ b/floof/controllers/account.py @@ -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('/')