diff --git a/annotator/account.py b/annotator/account.py index a40fe4f..f9eee4f 100644 --- a/annotator/account.py +++ b/annotator/account.py @@ -28,7 +28,7 @@ def login(): password = form.password.data email = form.email.data accounts = Account.get_by_email(email) - if accounts and check_password_hash(accounts[0].pwdhash, password): + if accounts and accounts[0].check_password(password): acc = accounts[0] session['account-id'] = acc.id flash('Welcome back', 'success') @@ -71,9 +71,8 @@ def signup(): # TODO: re-enable csrf form = SignupForm(request.form, csrf_enabled=False) if request.method == 'POST' and form.validate(): - pwdhash = generate_password_hash(form.password.data) - account = Account(username=form.username.data, email=form.email.data, - pwdhash=pwdhash) + account = Account(username=form.username.data, email=form.email.data) + account.password = form.password.data account.save() flash('Thanks for signing-up', 'success') return redirect(url_for('login')) diff --git a/annotator/model/couch.py b/annotator/model/couch.py index eda62b9..bb8d9d2 100644 --- a/annotator/model/couch.py +++ b/annotator/model/couch.py @@ -1,6 +1,7 @@ from datetime import datetime import uuid +from werkzeug import generate_password_hash, check_password_hash import couchdb import couchdb.design from couchdb.mapping import Document, Mapping @@ -155,6 +156,14 @@ class Account(DomainObject): } }''') + def _password_set(self, v): + self.pwdhash = generate_password_hash(v) + + password = property(lambda self: self.pwdhash, _password_set) + + def check_password(self, password): + return check_password_hash(self.pwdhash, password) + @classmethod def get_by_email(cls, email): out = cls.by_email(Metadata.DB, limit=1)