GonetsDocs/Документация/Техническая-документация-api/api/storage/json_storage.md
2025-10-14 16:14:11 +05:00

3.4 KiB
Raw Blame History

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