Repair docs (html, md). Update docstrings
This commit is contained in:
parent
e264750187
commit
6a4ad48577
125 changed files with 3706 additions and 4913 deletions
|
|
@ -8,16 +8,21 @@ from models.auth import UserCreate, UserResponse
|
|||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
DATA_DIR = os.getenv("GONETS_DATA_DIR", "/etc/gonets")
|
||||
DEFAULT_USERS_PATH = os.getenv("GONETS_USERS_PATH",
|
||||
os.path.join(DATA_DIR, "users.json"))
|
||||
|
||||
|
||||
class JsonStorage:
|
||||
"""Хранилище пользователей в JSON-файле.
|
||||
|
||||
Назначение:
|
||||
Обеспечивает простое файловое хранилище для учетных записей пользователей
|
||||
без полноценной СУБД. Подходит для встраиваемых окружений и сценариев,
|
||||
где важна минимальная зависимость от внешних сервисов.
|
||||
|
||||
Формат данных:
|
||||
JSON-структура вида:
|
||||
- Обеспечивает простое файловое хранилище учетных записей без полноценной СУБД.
|
||||
- Подходит для встраиваемых окружений, где критична минимальная зависимость от внешних сервисов.
|
||||
|
||||
Формат данных::
|
||||
|
||||
{
|
||||
"users": [
|
||||
{"id": int, "username": str, "password_hash": str, "is_admin": bool},
|
||||
|
|
@ -27,18 +32,17 @@ class JsonStorage:
|
|||
}
|
||||
|
||||
Безопасность:
|
||||
Пароли никогда не сохраняются в открытом виде. Для хеширования используется
|
||||
`passlib.context.CryptContext` со схемой `bcrypt`. Файл создаётся с правами
|
||||
доступа `0o600` (только владелец).
|
||||
|
||||
Ограничения и замечания:
|
||||
- Отсутствует конкурентный доступ/блокировки файла — при использовании в
|
||||
многопроцессной среде может потребоваться внешняя синхронизация.
|
||||
- Имя файла и каталог по умолчанию `/etc/gonets/users.json` предполагают
|
||||
наличие прав на запись и предварительную подготовку окружения.
|
||||
- Пароли никогда не сохраняются в открытом виде: используется `passlib.context.CryptContext` со схемой `bcrypt`.
|
||||
- Файл создаётся с правами доступа ``0o600`` (чтение/запись только владельцу).
|
||||
|
||||
Ограничения:
|
||||
|
||||
- Нет блокировок для конкурентного доступа — в многопроцессной среде требуется внешняя синхронизация.
|
||||
- Значение пути по умолчанию ``/etc/gonets/users.json`` предполагает наличие прав на запись и предварительную настройку окружения.
|
||||
"""
|
||||
|
||||
def __init__(self, file_path: str = "/etc/gonets/users.json"):
|
||||
def __init__(self, file_path: Optional[str] = None):
|
||||
"""Инициализирует хранилище пользователей.
|
||||
|
||||
Args:
|
||||
|
|
@ -48,7 +52,7 @@ class JsonStorage:
|
|||
Создаёт объект CryptContext для хеширования паролей и проверяет/создаёт
|
||||
файл, если он отсутствует.
|
||||
"""
|
||||
self.file_path = file_path
|
||||
self.file_path = file_path or DEFAULT_USERS_PATH
|
||||
self.pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
||||
self._ensure_file_exists()
|
||||
|
||||
|
|
@ -203,4 +207,4 @@ class JsonStorage:
|
|||
Returns:
|
||||
bool: True, если пароль верен, False в противном случае.
|
||||
"""
|
||||
return self.pwd_context.verify(plain_password, hashed_password)
|
||||
return self.pwd_context.verify(plain_password, hashed_password)
|
||||
|
|
|
|||
|
|
@ -8,16 +8,21 @@ from datetime import datetime, timedelta
|
|||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
DATA_DIR = os.getenv("GONETS_DATA_DIR", "/etc/gonets")
|
||||
DEFAULT_SESSIONS_PATH = os.getenv("GONETS_SESSIONS_PATH",
|
||||
os.path.join(DATA_DIR, "sessions.json"))
|
||||
|
||||
|
||||
class SessionStorage:
|
||||
"""Хранилище сессий пользователей в JSON-файле.
|
||||
|
||||
Назначение:
|
||||
Лёгкое файловое хранилище для сессионных токенов, сопоставленных с
|
||||
`client_id` (например, IP клиента). Предназначено для сред без БД и
|
||||
persistent-кэшей. Обеспечивает базовые операции и авто-очистку протухших
|
||||
сессий.
|
||||
|
||||
Формат данных:
|
||||
- Лёгкое файловое хранилище сессионных токенов, сопоставленных с ``client_id`` (например, IP клиента).
|
||||
- Предназначено для сред без БД и persistent-кэшей; обеспечивает простые операции и автоочистку истёкших сессий.
|
||||
|
||||
Формат данных::
|
||||
|
||||
{
|
||||
"sessions": {
|
||||
"<session_id>": {
|
||||
|
|
@ -32,15 +37,16 @@ class SessionStorage:
|
|||
}
|
||||
|
||||
Политика TTL:
|
||||
Каждая сессия действует 30 минут. При создании/чтении/удалении вызывается
|
||||
`clean_expired_sessions()` для удаления протухших записей.
|
||||
|
||||
- Каждая сессия действует 30 минут; метод ``clean_expired_sessions`` удаляет записи с истёкшим сроком.
|
||||
|
||||
Ограничения:
|
||||
- Нет файловых блокировок: в многопроцессных конфигурациях возможны гонки.
|
||||
- Размещение по умолчанию `/etc/gonets/sessions.json` требует прав на запись.
|
||||
|
||||
- Отсутствуют файловые блокировки — в многопроцессной среде возможны гонки.
|
||||
- Путь по умолчанию ``/etc/gonets/sessions.json`` требует прав на запись.
|
||||
"""
|
||||
|
||||
def __init__(self, file_path: str = "/etc/gonets/sessions.json"):
|
||||
def __init__(self, file_path: Optional[str] = None):
|
||||
"""Инициализирует хранилище сессий.
|
||||
|
||||
Args:
|
||||
|
|
@ -49,7 +55,7 @@ class SessionStorage:
|
|||
|
||||
Создаёт файл и директории, если они отсутствуют, с правами доступа 600.
|
||||
"""
|
||||
self.file_path = file_path
|
||||
self.file_path = file_path or DEFAULT_SESSIONS_PATH
|
||||
self._ensure_file_exists()
|
||||
|
||||
def _ensure_file_exists(self):
|
||||
|
|
@ -263,4 +269,4 @@ class SessionStorage:
|
|||
logger.error(
|
||||
f"Ошибка при очистке истекших сессий: {type(e).__name__} - {str(e)}"
|
||||
)
|
||||
raise
|
||||
raise
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue