123456789101112131415161718192021222324252627282930313233343536373839 |
- from abc import ABC, abstractmethod
- from typing import Optional
- from .base import Provider, ProviderConfig
- class CryptoConfig(ProviderConfig):
- provider: Optional[str] = None
- @property
- def supported_providers(self) -> list[str]:
- return ["bcrypt"] # Add other crypto providers as needed
- def validate_config(self) -> None:
- if self.provider not in self.supported_providers:
- raise ValueError(f"Unsupported crypto provider: {self.provider}")
- class CryptoProvider(Provider, ABC):
- def __init__(self, config: CryptoConfig):
- if not isinstance(config, CryptoConfig):
- raise ValueError(
- "CryptoProvider must be initialized with a CryptoConfig"
- )
- super().__init__(config)
- @abstractmethod
- def get_password_hash(self, password: str) -> str:
- pass
- @abstractmethod
- def verify_password(
- self, plain_password: str, hashed_password: str
- ) -> bool:
- pass
- @abstractmethod
- def generate_verification_code(self, length: int = 32) -> str:
- pass
|