mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 09:57:37 +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)
 |