storage.json_storage¶
- class storage.json_storage.JsonStorage(file_path: str = '/etc/gonets/users.json')[source]¶
Bases:
objectХранилище пользователей в JSON-файле.
- Назначение:
Обеспечивает простое файловое хранилище для учетных записей пользователей без полноценной СУБД. Подходит для встраиваемых окружений и сценариев, где важна минимальная зависимость от внешних сервисов.
- Формат данных:
JSON-структура вида: {
- “users”: [
{“id”: int, “username”: str, “password_hash”: str, “is_admin”: bool}, …
], “next_id”: int
}
- Безопасность:
Пароли никогда не сохраняются в открытом виде. Для хеширования используется passlib.context.CryptContext со схемой bcrypt. Файл создаётся с правами доступа 0o600 (только владелец).
- Ограничения и замечания:
Отсутствует конкурентный доступ/блокировки файла — при использовании в многопроцессной среде может потребоваться внешняя синхронизация.
Имя файла и каталог по умолчанию /etc/gonets/users.json предполагают наличие прав на запись и предварительную подготовку окружения.
- create_user(user: UserCreate) UserResponse[source]¶
Создаёт нового пользователя с хешированием пароля.
- Args:
user (UserCreate): Объект с данными нового пользователя (username, password, is_admin).
- Returns:
UserResponse: Объект с данными созданного пользователя (id, username, is_admin).
- Raises:
ValueError: Если пользователь с таким именем уже существует. Exception: Если произошла ошибка при записи данных.
- get_user_by_username(username: str) dict | None[source]¶
Получает данные пользователя по имени.
- Args:
username (str): Имя пользователя для поиска.
- Returns:
Optional[dict]: Словарь с данными пользователя или None, если пользователь не найден.
- Raises:
Exception: Если произошла ошибка при чтении файла.
- verify_password(plain_password: str, hashed_password: str) bool[source]¶
Проверяет соответствие введённого пароля хэшированному.
- Args:
plain_password (str): Введённый пользователем пароль. hashed_password (str): Хэшированный пароль из хранилища.
- Returns:
bool: True, если пароль верен, False в противном случае.