# 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