You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.3 KiB
37 lines
1.3 KiB
7 years ago
|
from passlib.context import CryptContext
|
||
|
from pyramid.settings import aslist, asbool
|
||
|
|
||
|
|
||
|
password_context = CryptContext()
|
||
|
|
||
|
|
||
|
def crypt_context_settings_to_string(settings, prefix='passlib.'):
|
||
|
''' returns a passlib context setting as a INI-formatted content
|
||
|
|
||
|
:param dict settings: settings for the crypt context
|
||
|
:param str prefix: prefix of the settings keys
|
||
|
:rtype: (str) config string in INI format for CryptContext.load()
|
||
|
|
||
|
This looks at first like a dump hack, but the parsing of all possible
|
||
|
context settings is quite a task. Since passlib has a context parser
|
||
|
included, this seems the most reliable way to do it.
|
||
|
'''
|
||
|
config_lines = ['[passlib]']
|
||
|
for ini_key, value in settings.items():
|
||
|
if ini_key.startswith(prefix):
|
||
|
context_key = ini_key.replace(prefix, '')
|
||
|
config_lines.append(f'{context_key} = {value}')
|
||
|
return '\n'.join(config_lines)
|
||
|
|
||
|
|
||
|
def includeme(config):
|
||
|
''' initializing authentication, authorization and password hash settings
|
||
|
|
||
|
Activate this setup using ``config.include('ordr2.security')``.
|
||
|
'''
|
||
|
settings = config.get_settings()
|
||
|
|
||
|
# configure the passlib context manager for hashing user passwords
|
||
|
config_str = crypt_context_settings_to_string(settings, prefix='passlib.')
|
||
|
password_context.load(config_str)
|