+ h.flash(u'You are now logged in.')
+
+ # XXX send me where I came from
+ redirect('/')
+
+ def logout(self):
+ """Log user out."""
+
+ if 'user_id' in session:
+ del session['user_id']
+ session.save()
+
+ # XXX success message
+ # XXX send me where I came from
+ redirect('/')
+
+ def register(self):
+ """Logging in with an unrecognized identity URL redirects here."""
+
+ c.identity_url = session['register:identity_url']
+ c.nickname = session.get('register:nickname', None)
+ # XXX hey, uh. warn if this name is taken already.
+
+ return render('/account/register.mako')
+
+ def register_finish(self):
+ """Complete a new-user registration. Create the user and log in."""
+
+ identity_url = session['register:identity_url']
+ username = request.params.get('username', None)
+
+ if not username:
+ h.flash(u'Please enter a username.')
+ return self.register()
+
+ if User.query.filter_by(name=username).count():
+ h.flash(u'This username is already taken.')
+ return self.register()
+
+ if not User.is_valid_name(username):
+ h.flash(u'This username is not valid.')
+ return self.register()
+
+ if username in ['me']:
+ h.flash(u'This username is reserved.')
+ return self.register()
+
+ # Create db records
+ user = User(name=username, display_name=username)
+ user.identity_urls.append(IdentityURL(url=identity_url))
+
+ elixir.session.commit()
+
+ # Log in
+ session['user_id'] = user.id
+ session.save()
+ h.flash(u'You are now logged in.')