X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=bluechips%2Fcontrollers%2Fuser.py;h=8fff3c8efa3ec92b5faa6015a80475966200a1c0;hb=4f3b35da3c12251c426f9786f77d4b7aed3e243e;hp=b432126a15d587acb64f0fcfa4d88e8f4c975e46;hpb=9cc05ca9160a9432d037afb9cc22c511e2542947;p=bluechips.git diff --git a/bluechips/controllers/user.py b/bluechips/controllers/user.py index b432126..8fff3c8 100644 --- a/bluechips/controllers/user.py +++ b/bluechips/controllers/user.py @@ -13,7 +13,7 @@ from pylons import request from pylons.decorators import validate from pylons.decorators.secure import authenticate_form -from formencode import validators, Schema +from formencode import validators, Schema, FancyValidator, Invalid log = logging.getLogger(__name__) @@ -24,11 +24,40 @@ class EmailSchema(Schema): new_email = validators.Email() +class UniqueUsername(FancyValidator): + def _to_python(self, value, state): + u = meta.Session.query(model.User).\ + filter(model.User.username == value).\ + first() + if u: + raise Invalid( + 'That username already exists', + value, state) + return value + + +class NewUserSchema(Schema): + "Validate new users." + allow_extra_fields = False + username = UniqueUsername(not_empty=True) + password = validators.String(if_missing=None) + confirm_password = validators.String(if_missing=None) + name = validators.String(not_empty=False) + resident = validators.StringBoolean(not_empty=True) + chained_validators = [ + validators.FieldsMatch('password', 'confirm_password'), + ] + + class UserController(BaseController): def index(self): c.title = 'User Settings' return render('/user/index.mako') + def email(self): + c.title = 'User Settings' + return render('/user/email.mako') + @authenticate_form @validate(schema=EmailSchema(), form='index') def update(self): @@ -40,3 +69,27 @@ class UserController(BaseController): else: h.flash("Updated email address to '%s'." % new_email) return h.redirect_to('/') + + def new(self): + c.title = 'Register a New User' + return render('/user/new.mako') + + @authenticate_form + @validate(schema=NewUserSchema(), form='new') + def create(self): + u = model.User(username=self.form_result['username'], + resident=self.form_result['resident']) + + if self.form_result['name']: + u.name = self.form_result['name'] + else: + u.name = self.form_result['username'] + + if self.form_result['password'] is not None: + u.password = self.form_result['password'] + + meta.Session.save(u) + meta.Session.commit() + + h.flash('Successfully created new user %s' % u.username) + return h.redirect_to('/')