76 lines
3.4 KiB
Markdown
76 lines
3.4 KiB
Markdown
|
|
# storage.json_storage
|
|||
|
|
|
|||
|
|
### *class* storage.json_storage.JsonStorage(file_path: str = '/etc/gonets/users.json')
|
|||
|
|
|
|||
|
|
Bases: `object`
|
|||
|
|
|
|||
|
|
Хранилище пользователей в JSON-файле.
|
|||
|
|
|
|||
|
|
Назначение:
|
|||
|
|
: Обеспечивает простое файловое хранилище для учетных записей пользователей
|
|||
|
|
без полноценной СУБД. Подходит для встраиваемых окружений и сценариев,
|
|||
|
|
где важна минимальная зависимость от внешних сервисов.
|
|||
|
|
|
|||
|
|
Формат данных:
|
|||
|
|
: JSON‑структура вида:
|
|||
|
|
{
|
|||
|
|
<br/>
|
|||
|
|
> “users”: [
|
|||
|
|
> : {“id”: int, “username”: str, “password_hash”: str, “is_admin”: bool},
|
|||
|
|
> …
|
|||
|
|
<br/>
|
|||
|
|
> ],
|
|||
|
|
> “next_id”: int
|
|||
|
|
<br/>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Безопасность:
|
|||
|
|
: Пароли никогда не сохраняются в открытом виде. Для хеширования используется
|
|||
|
|
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
|