From c4b2fb1a6062b6cb63ce0f08f48ccdaf72708643 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Sun, 3 Nov 2013 21:55:06 +0000 Subject: [PATCH] Use bcrypt to hash passwords for new users in firstboot and user_add forms. Removed references to md5 hashing which was already non-functional. --- modules/installed/first_boot.py | 10 ++++------ modules/installed/system/users.py | 32 ++++++++++++++++++------------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/modules/installed/first_boot.py b/modules/installed/first_boot.py index e2fcd736b..8c166c742 100644 --- a/modules/installed/first_boot.py +++ b/modules/installed/first_boot.py @@ -9,7 +9,7 @@ from withsqlite.withsqlite import sqlite_db import cfg import config from model import User -import md5 +from passlib.hash import bcrypt class FirstBoot(PagePlugin): def __init__(self, *args, **kwargs): @@ -65,16 +65,14 @@ class FirstBoot(PagePlugin): box_key = self.generate_box_key() db['box_key'] = box_key if username and password: - # FIXME: MD5 as a password hash? REALLY?! NOOO!!! - passphrase = md5.new() - passphrase.update(password) - + pass_hash = bcrypt.encrypt(password) di = { 'username':username, 'name': 'First user - please change', 'expert': 'on', "groups": ["expert"], - 'passphrase': passphrase.digest(), + 'passphrase':pass_hash, + 'salt':pass_hash[7:29], # for bcrypt } new_user = User(di) cfg.users.set(username,new_user) diff --git a/modules/installed/system/users.py b/modules/installed/system/users.py index 23e2470cd..53bf71192 100644 --- a/modules/installed/system/users.py +++ b/modules/installed/system/users.py @@ -6,6 +6,7 @@ import cfg from forms import Form from util import * from model import User +from passlib.hash import bcrypt class users(PagePlugin): order = 20 # order of running init in PagePlugins @@ -32,30 +33,35 @@ class add(FormPlugin, PagePlugin): don't worry about it.

""") def main(self, username='', name='', email='', message=None, *args, **kwargs): - form = Form(title="Add User", - action=cfg.server_dir + "/sys/users/add/index", - onsubmit="return md5ify('add_user_form', 'password')", + form = Form(title="Add User", + action=cfg.server_dir + "/sys/users/add/index", name="add_user_form", message=message) form.text_input(_("Username"), name="username", value=username) form.text_input(_("Full name"), name="name", value=name) form.text_input(_("Email"), name="email", value=email) form.text_input(_("Password"), name="password", type="password") - form.text_input(name="md5_password", type="hidden") form.submit(label=_("Create User"), name="create") return form.render() - def process_form(self, username=None, name=None, email=None, md5_password=None, **kwargs): + def process_form(self, username=None, name=None, email=None, password=None, **kwargs): msg = Message() if not username: msg.add = _("Must specify a username!") - if not md5_password: msg.add = _("Must specify a password!") - + if not password: msg.add = _("Must specify a password!") + if username in cfg.users.get_all(): msg.add = _("User already exists!") else: try: - di = {'username':username, 'name':name, 'email':email, 'passphrase':md5_password} + pass_hash = bcrypt.encrypt(password) + di = { + 'username':username, + 'name':name, + 'email':email, + 'passphrase':pass_hash, + 'salt': pass_hash[7:29], # for bcrypt + } new_user = User(di) cfg.users.set(username,new_user) except: @@ -70,7 +76,7 @@ class add(FormPlugin, PagePlugin): class edit(FormPlugin, PagePlugin): url = ["/sys/users/edit"] order = 35 - + sidebar_left = '' sidebar_right = _("""Edit Users

Click on a user's name to go to a screen for editing that user's account.

Delete @@ -84,9 +90,9 @@ class edit(FormPlugin, PagePlugin): add_form.html('Delete
') for uname in users: user = User(uname[1]) - add_form.html('  %s     ' % + add_form.html('  %s     ' % add_form.get_checkbox(name=user['username']) + - '%s (%s)
' % + '%s (%s)
' % (user['username'], user['name'], user['username'])) add_form.submit(label=_("Delete User"), name="delete") return add_form.render() @@ -123,9 +129,9 @@ class edit(FormPlugin, PagePlugin): u = cfg.users[kwargs['username']] if not u: main = _("

Could not find a user with username of %s!

" % kwargs['username']) - return self.fill_template(template="err", title=_("Unnown User"), main=main, + return self.fill_template(template="err", title=_("Unnown User"), main=main, sidebar_left=self.sidebar_left, sidebar_right=sidebar_right) - + main = _("""Edit User '%s'""" % u['username']) sidebar_right = '' return self.fill_template(title="Manage Users and Groups", main=main, sidebar_left=self.sidebar_left, sidebar_right=sidebar_right)