From 1e2382335ea1e52b42cdc07fd1f74b9a9b0cec39 Mon Sep 17 00:00:00 2001 From: Eevee Date: Wed, 21 Apr 2010 23:09:07 -0700 Subject: [PATCH] Updated login to work correctly with current spline. #69 --- .../versions/001_Add_user_and_openid_tables.py | 25 ++++++++++++++++ migration/versions/__init__.py | 0 spline/plugins/users/__init__.py | 34 ++++++++++++++++++---- spline/plugins/users/controllers/accounts.py | 5 ++-- .../users/templates/widgets/user_state.mako | 9 ++++++ 5 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 migration/versions/001_Add_user_and_openid_tables.py create mode 100755 migration/versions/__init__.py create mode 100644 spline/plugins/users/templates/widgets/user_state.mako diff --git a/migration/versions/001_Add_user_and_openid_tables.py b/migration/versions/001_Add_user_and_openid_tables.py new file mode 100644 index 0000000..473d3df --- /dev/null +++ b/migration/versions/001_Add_user_and_openid_tables.py @@ -0,0 +1,25 @@ +from sqlalchemy import * +from migrate import * + +from sqlalchemy.ext.declarative import declarative_base +TableBase = declarative_base(bind=migrate_engine) + + +class User(TableBase): + __tablename__ = 'users' + id = Column(Integer, primary_key=True) + name = Column(Unicode(length=20), nullable=False) + +class OpenID(TableBase): + __tablename__ = 'openid' + openid = Column(Unicode(length=255), primary_key=True) + user_id = Column(Integer, ForeignKey('users.id')) + + +def upgrade(): + User.__table__.create() + OpenID.__table__.create() + +def downgrade(): + OpenID.__table__.drop() + User.__table__.drop() diff --git a/migration/versions/__init__.py b/migration/versions/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/spline/plugins/users/__init__.py b/spline/plugins/users/__init__.py index 53633d7..92a825c 100644 --- a/spline/plugins/users/__init__.py +++ b/spline/plugins/users/__init__.py @@ -1,17 +1,27 @@ +from pkg_resources import resource_filename + from pylons import c, session from spline.lib.plugin import PluginBase +from spline.lib.plugin import PluginBase, PluginLink, Priority import spline.model as model import spline.model.meta as meta -import controllers.accounts -import model as user_model +import spline.plugins.users.controllers.accounts +import spline.plugins.users.model + +def add_routes_hook(map, *args, **kwargs): + """Hook to inject some of our behavior into the routes configuration.""" + map.connect('/accounts/login_begin', controller='accounts', action='login_begin') + map.connect('/accounts/login_finish', controller='accounts', action='login_finish') def check_userid_hook(action, **params): """Hook to see if a user is logged in and, if so, stick a user object in c. """ + c.user = None + if not 'user_id' in session: return @@ -28,13 +38,27 @@ def check_userid_hook(action, **params): class UsersPlugin(PluginBase): def controllers(self): return dict( - accounts = controllers.accounts.AccountsController, + accounts = spline.plugins.users.controllers.accounts.AccountsController, ) def model(self): - return [user_model.User, user_model.OpenID] + return [ + spline.plugins.users.model.User, + spline.plugins.users.model.OpenID, + ] + + def template_dirs(self): + return [ + (resource_filename(__name__, 'templates'), Priority.NORMAL) + ] def hooks(self): return [ - ('before_controller', 1, check_userid_hook), + ('routes_mapping', Priority.NORMAL, add_routes_hook), + ('before_controller', Priority.VERY_FIRST, check_userid_hook), + ] + + def widgets(self): + return [ + ('page_header', Priority.NORMAL, 'widgets/user_state.mako'), ] diff --git a/spline/plugins/users/controllers/accounts.py b/spline/plugins/users/controllers/accounts.py index 09ca1ac..03c9392 100644 --- a/spline/plugins/users/controllers/accounts.py +++ b/spline/plugins/users/controllers/accounts.py @@ -61,7 +61,8 @@ class AccountsController(BaseController): sreg_res = SRegResponse.fromSuccessResponse(res) try: username = sreg_res['nickname'] - except KeyError: + except (KeyError, TypeError): + # KeyError if sreg has no nickname; TypeError if sreg is None username = 'Anonymous' # Create db records @@ -75,4 +76,4 @@ class AccountsController(BaseController): session['user_id'] = user.id session.save() - return "Hello, %s" % user.name + redirect_to(url('/')) diff --git a/spline/plugins/users/templates/widgets/user_state.mako b/spline/plugins/users/templates/widgets/user_state.mako new file mode 100644 index 0000000..d279dc4 --- /dev/null +++ b/spline/plugins/users/templates/widgets/user_state.mako @@ -0,0 +1,9 @@ +${h.form(url(controller='accounts', action='login_begin'), id='user')} + % if c.user: + Logged in as ${c.user.name}. + % else: + + + + % endif +${h.end_form()} -- 2.7.4