diff options
| author | Michael Merickel <mmerickel@users.noreply.github.com> | 2016-12-08 13:23:52 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-12-08 13:23:52 -0600 |
| commit | 1154ebf6ae89c200b4be19831377472b19fdf7dd (patch) | |
| tree | 64b20deea7bfa8b22b44adc7679b67f73f8c5dc0 /docs/tutorials/wiki/src/authorization | |
| parent | acf2a8f4e583a0d456a34832d772a4f018aef53c (diff) | |
| parent | b4abcd1f596297eb083e855d5e9a158d9e108c81 (diff) | |
| download | pyramid-1154ebf6ae89c200b4be19831377472b19fdf7dd.tar.gz pyramid-1154ebf6ae89c200b4be19831377472b19fdf7dd.tar.bz2 pyramid-1154ebf6ae89c200b4be19831377472b19fdf7dd.zip | |
Merge pull request #2849 from mfrlin/issue-2656
Changed wiki tutorial to showcase passwrd hashing with bcrypt.
Diffstat (limited to 'docs/tutorials/wiki/src/authorization')
| -rw-r--r-- | docs/tutorials/wiki/src/authorization/setup.py | 1 | ||||
| -rw-r--r-- | docs/tutorials/wiki/src/authorization/tutorial/security.py | 17 | ||||
| -rw-r--r-- | docs/tutorials/wiki/src/authorization/tutorial/views.py | 4 |
3 files changed, 18 insertions, 4 deletions
diff --git a/docs/tutorials/wiki/src/authorization/setup.py b/docs/tutorials/wiki/src/authorization/setup.py index beeed75c9..68e3c0abd 100644 --- a/docs/tutorials/wiki/src/authorization/setup.py +++ b/docs/tutorials/wiki/src/authorization/setup.py @@ -18,6 +18,7 @@ requires = [ 'ZODB3', 'waitress', 'docutils', + 'bcrypt', ] tests_require = [ diff --git a/docs/tutorials/wiki/src/authorization/tutorial/security.py b/docs/tutorials/wiki/src/authorization/tutorial/security.py index d88c9c71f..cbb3acd5d 100644 --- a/docs/tutorials/wiki/src/authorization/tutorial/security.py +++ b/docs/tutorials/wiki/src/authorization/tutorial/security.py @@ -1,5 +1,18 @@ -USERS = {'editor':'editor', - 'viewer':'viewer'} +import bcrypt + + +def hash_password(pw): + hashed_pw = bcrypt.hashpw(pw.encode('utf-8'), bcrypt.gensalt()) + # return unicode instead of bytes because databases handle it better + return hashed_pw.decode('utf-8') + +def check_password(expected_hash, pw): + if expected_hash is not None: + return bcrypt.checkpw(pw.encode('utf-8'), expected_hash.encode('utf-8')) + return False + +USERS = {'editor': hash_password('editor'), + 'viewer': hash_password('viewer')} GROUPS = {'editor':['group:editors']} def groupfinder(userid, request): diff --git a/docs/tutorials/wiki/src/authorization/tutorial/views.py b/docs/tutorials/wiki/src/authorization/tutorial/views.py index c271d2cc1..e4560dfe1 100644 --- a/docs/tutorials/wiki/src/authorization/tutorial/views.py +++ b/docs/tutorials/wiki/src/authorization/tutorial/views.py @@ -14,7 +14,7 @@ from pyramid.security import ( ) -from .security import USERS +from .security import USERS, check_password from .models import Page # regular expression used to find WikiWords @@ -94,7 +94,7 @@ def login(request): if 'form.submitted' in request.params: login = request.params['login'] password = request.params['password'] - if USERS.get(login) == password: + if check_password(USERS.get(login), password): headers = remember(request, login) return HTTPFound(location=came_from, headers=headers) |
