mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-27 03:54:00 +03:00
51 lines
1.1 KiB
Python
51 lines
1.1 KiB
Python
|
"""Password hashing example."""
|
||
|
|
||
|
from typing import Callable, Dict
|
||
|
|
||
|
import passlib.hash
|
||
|
|
||
|
from dependency_injector import containers, providers
|
||
|
|
||
|
|
||
|
class UserService:
|
||
|
|
||
|
def __init__(self, password_hasher: Callable[[str], str]) -> None:
|
||
|
self._password_hasher = password_hasher
|
||
|
|
||
|
def create_user(self, name: str, password: str) -> Dict[str, str]:
|
||
|
hashed_password = self._password_hasher(password)
|
||
|
return {
|
||
|
'name': name,
|
||
|
'password': hashed_password,
|
||
|
}
|
||
|
|
||
|
|
||
|
class Container(containers.DeclarativeContainer):
|
||
|
|
||
|
config = providers.Configuration()
|
||
|
|
||
|
password_hasher = providers.Callable(
|
||
|
passlib.hash.sha256_crypt.hash,
|
||
|
salt_size=config.salt_size,
|
||
|
rounds=config.rounds,
|
||
|
)
|
||
|
|
||
|
user_service = providers.Factory(
|
||
|
UserService,
|
||
|
password_hasher=password_hasher.provider,
|
||
|
)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
container = Container(
|
||
|
config={
|
||
|
'salt_size': 16,
|
||
|
'rounds': 10000,
|
||
|
},
|
||
|
)
|
||
|
|
||
|
user_service = container.user_service()
|
||
|
|
||
|
user = user_service.create_user(name='Roman', password='secret1')
|
||
|
print(user)
|