# storage.json_storage
### *class* storage.json_storage.JsonStorage(file_path: str = '/etc/gonets/users.json')
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
Создаёт нового пользователя с хешированием пароля.
* **Parameters:**
**user** (*UserCreate*) – Объект с данными нового пользователя (username, password, is_admin).
* **Returns:**
Объект с данными созданного пользователя (id, username, is_admin).
* **Return type:**
UserResponse
* **Raises:**
* **ValueError** – Если пользователь с таким именем уже существует.
* **Exception** – Если произошла ошибка при записи данных.
#### get_user_by_username(username: str) → dict | None
Получает данные пользователя по имени.
* **Parameters:**
**username** (*str*) – Имя пользователя для поиска.
* **Returns:**
Словарь с данными пользователя или None, если пользователь не найден.
* **Return type:**
Optional[dict]
* **Raises:**
**Exception** – Если произошла ошибка при чтении файла.
#### verify_password(plain_password: str, hashed_password: str) → bool
Проверяет соответствие введённого пароля хэшированному.
* **Parameters:**
* **plain_password** (*str*) – Введённый пользователем пароль.
* **hashed_password** (*str*) – Хэшированный пароль из хранилища.
* **Returns:**
True, если пароль верен, False в противном случае.
* **Return type:**
bool