changeset 114:ef683c12f981

Fallback to SHA512 if Bcrypt is not available.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 18 Nov 2013 12:35:41 -0800
parents 74eb145eb839
children 1aee72ba7028
files requirements.txt wikked/views.py wikked/web.py
diffstat 3 files changed, 19 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/requirements.txt	Sat Nov 16 08:36:02 2013 -0800
+++ b/requirements.txt	Mon Nov 18 12:35:41 2013 -0800
@@ -1,29 +1,19 @@
-Creoleparser==0.7.4
 Flask==0.10.1
-Flask-Bcrypt==0.5.2
 Flask-Login==0.1.3
 Flask-SQLAlchemy==1.0
 Flask-Script==0.5.1
 Flask-Testing==0.4
-Flask-WTF==0.8
-Genshi==0.6
 Jinja2==2.6
 Markdown==2.2.1
-PyMeta==0.5.0
 PyYAML==3.10
 Pygments==1.5
 SQLAlchemy==0.8.1
-WTForms==1.0.2
 Werkzeug==0.8.3
 Whoosh==2.4.1
 argparse==1.2.1
 itsdangerous==0.22
 nose==1.2.1
-py-bcrypt==0.2
 pybars==0.0.4
-pystache==0.5.3
-python-creole==1.0.6
-python-hglib==unknown
-textile==2.1.5
+python-hglib==1.0
 twill==0.9
 wsgiref==0.1.2
--- a/wikked/views.py	Sat Nov 16 08:36:02 2013 -0800
+++ b/wikked/views.py	Mon Nov 18 12:35:41 2013 -0800
@@ -471,7 +471,7 @@
     remember = request.form.get('remember')
 
     user = g.wiki.auth.getUser(username)
-    if user is not None:
+    if user is not None and app.bcrypt:
         if app.bcrypt.check_password_hash(user.password, password):
             login_user(user, remember=bool(remember))
             result = {'username': username, 'logged_in': 1}
--- a/wikked/web.py	Sat Nov 16 08:36:02 2013 -0800
+++ b/wikked/web.py	Mon Nov 18 12:35:41 2013 -0800
@@ -72,8 +72,23 @@
 
 
 # Bcrypt extension.
-from flaskext.bcrypt import Bcrypt
-app.bcrypt = Bcrypt(app)
+try:
+    from flaskext.bcrypt import Bcrypt
+    app.bcrypt = Bcrypt(app)
+except ImportError:
+    app.logger.warning("Bcrypt not available... falling back to SHA512.")
+
+    import hashlib
+
+    class SHA512Fallback(object):
+        def check_password_hash(self, reference, check):
+            check_hash = hashlib.sha512(check).hexdigest()
+            return check_hash == reference
+
+        def generate_password_hash(self, password):
+            return hashlib.sha512(password).hexdigest()
+
+    app.bcrypt = SHA512Fallback()
 
 
 # Create the wiki.