Интерфейсы адаптеров¶
Модуль interfaces содержит протоколы (контракты) для работы с внешними сервисами. Эти интерфейсы обеспечивают гибкость при интеграции с различными сервисами и упрощают тестирование.
ISecretsProvider¶
Протокол для работы с хранилищами секретов. Определяет стандартный интерфейс для безопасного доступа к конфиденциальным данным.
Когда использовать¶
- Для работы с различными хранилищами секретов (HashiCorp Vault, AWS Secrets Manager и т.д.)
- При необходимости изолировать логику работы с секретами от остального кода
- Для упрощения тестирования компонентов
Детали реализации¶
Bases: Protocol
Контракт для любого хранилища секретов.
Source code in src/adapters/interfaces.py
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
get_secret(path: str, key: str | None = None) -> dict[str, Any]
async
¶
Получить значение секрета по пути и ключу.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
path
|
str
|
Путь к секрету в хранилище |
required |
key
|
str | None
|
Ключ секрета (опционально) |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Значение секрета или None, если не найдено |
Source code in src/adapters/interfaces.py
7 8 9 10 11 12 13 14 15 16 17 18 | |
IPasswordHasher¶
Протокол для безопасного хеширования и проверки паролей. Позволяет использовать различные алгоритмы хеширования.
Особенности¶
- Поддержка различных алгоритмов хеширования
- Единая точка управления безопасностью паролей
- Простая интеграция с существующими системами аутентификации
Детали реализации¶
Bases: Protocol
Контракт для реализации собственного хэширования и работы с паролями.
Source code in src/adapters/interfaces.py
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | |
hash_password(password: str) -> str
¶
Захэширвать переданный пароль и вернуть его хэш.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
password
|
str
|
Пароль, который необходимо захэшировать |
required |
Returns:
| Type | Description |
|---|---|
str
|
Хэш пароля. |
Source code in src/adapters/interfaces.py
37 38 39 40 41 42 43 44 45 46 47 | |
verify_password(password: str, hashed_password: str) -> bool
¶
Проверить переданый пароль с установленным.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
password
|
str
|
Введенный пароль |
required |
hashed_password
|
str
|
Захэшированный пароль |
required |
Returns:
| Type | Description |
|---|---|
bool
|
True, если пароль совпадает, False в ином случае |
Source code in src/adapters/interfaces.py
24 25 26 27 28 29 30 31 32 33 34 35 | |
Примеры использования¶
Работа с ISecretsProvider¶
from src.adapters.interfaces import ISecretsProvider
class VaultSecretsProvider(ISecretsProvider):
async def get_secret(self, path: str, key: str | None = None) -> dict[str, Any]:
# Реализация получения секрета
...
Работа с IPasswordHasher¶
from src.adapters.interfaces import IPasswordHasher
class BcryptPasswordHasher(IPasswordHasher):
def verify_password(self, password: str, hashed_password: str) -> bool:
# Проверка пароля
...
def hash_password(self, password: str) -> str:
# Хеширование пароля
...
Рекомендации¶
- Всегда внедряйте зависимости через конструктор
- Создавайте мок-реализации для тестирования
- Обрабатывайте ошибки на уровне реализации
- Документируйте неочевидные аспекты реализации