Mercurial > piecrust2
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 |
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 |