storage.json_storage¶
- class storage.json_storage.JsonStorage(file_path: str | None = None)[source]
Bases:
objectХранилище пользователей в 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]
Создаёт нового пользователя с хешированием пароля.
- 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[source]
Получает данные пользователя по имени.
- Parameters:
username (str) – Имя пользователя для поиска.
- Returns:
Словарь с данными пользователя или None, если пользователь не найден.
- Return type:
Optional[dict]
- Raises:
Exception – Если произошла ошибка при чтении файла.
- verify_password(plain_password: str, hashed_password: str) bool[source]
Проверяет соответствие введённого пароля хэшированному.
- Parameters:
plain_password (str) – Введённый пользователем пароль.
hashed_password (str) – Хэшированный пароль из хранилища.
- Returns:
True, если пароль верен, False в противном случае.
- Return type:
bool