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