annotate piecrust/admin/bcryptfallback.py @ 1195:ae9387338db1 draft default tip

admin: add option to publish immediately
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 30 Dec 2022 16:48:04 -0800
parents 28c388fc18b2
children
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:
1151
0d699f04968c cm: Update dependencies and fix imports of Flask plugins.
Ludovic Chabant <ludovic@chabant.com>
parents: 783
diff changeset
22 from flask_bcrypt import Bcrypt
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 except ImportError:
1176
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
24 try:
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
25 from flask.ext.bcrypt import Bcrypt
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
26 except ImportError:
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
27 print_warning = True
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28
1176
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
29 def generate_password_hash(password):
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
30 return hashlib.sha512(password.encode('utf8')).hexdigest()
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31
1176
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
32 def check_password_hash(reference, check):
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
33 check_hash = hashlib.sha512(check.encode('utf8')).hexdigest()
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
34 return check_hash == reference
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35
1176
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
36 class SHA512Fallback(object):
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
37 is_fallback_bcrypt = True
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38
1176
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
39 def __init__(self, app=None):
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
40 self.generate_password_hash = generate_password_hash
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
41 self.check_password_hash = check_password_hash
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42
1176
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
43 def init_app(self, app):
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
44 app.bcrypt = self
772
3885421c29a3 admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
45
1176
28c388fc18b2 cm: Upgrade flask-login and flask-bcrypt.
Ludovic Chabant <ludovic@chabant.com>
parents: 1151
diff changeset
46 Bcrypt = SHA512Fallback
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 if print_warning:
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 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
51 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
52 "password hashing.")
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53