annotate piecrust/admin/bcryptfallback.py @ 783:a9f4a6e60b0b

admin: Fix various crashes caused by incorrect Blueprint setup.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 28 Aug 2016 20:48:05 -0700
parents 5e91bc0e3b4d
children 0d699f04968c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import hashlib
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import logging
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 print_warning = False
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 logger = logging.getLogger(__name__)
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 try:
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 from bcrypt import hashpw, gensalt
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 except ImportError:
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 print_warning = True
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 def hashpw(password, *args, **kwargs):
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 return hashlib.sha512(password).hexdigest().encode('utf8')
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 def gensalt(*args, **kwargs):
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 return b''
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 try:
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 from flask.ext.bcrypt import Bcrypt
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 except ImportError:
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 print_warning = True
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 def generate_password_hash(password):
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 return hashlib.sha512(password.encode('utf8')).hexdigest()
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 def check_password_hash(reference, check):
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 check_hash = hashlib.sha512(check.encode('utf8')).hexdigest()
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 return check_hash == reference
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 class SHA512Fallback(object):
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 is_fallback_bcrypt = True
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 def __init__(self, app=None):
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 self.generate_password_hash = generate_password_hash
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 self.check_password_hash = check_password_hash
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39
772
3885421c29a3 admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
40 def init_app(self, app):
783
a9f4a6e60b0b admin: Fix various crashes caused by incorrect Blueprint setup.
Ludovic Chabant <ludovic@chabant.com>
parents: 778
diff changeset
41 app.bcrypt = self
772
3885421c29a3 admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
42
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 Bcrypt = SHA512Fallback
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 if print_warning:
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 logging.warning("Bcrypt not available... falling back to SHA512.")
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 logging.warning("Run `pip install Flask-Bcrypt` for more secure "
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 "password hashing.")
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50