Что нового в 3.0
SHM 3.0
Версия 3.0 — крупный релиз, в котором переработана система авторизации пользователей, добавлены новые каналы связи и модули аналитики, а также существенно усилена безопасность API. Ниже перечислены основные изменения относительно ветки 2.0.
Перед обновлением
Сделайте резервную копию БД — при первом запуске 3.0 автоматически применяются миграции, часть из которых необратимо меняет структуру таблиц (например, объединение логинов в единую таблицуaccounts). Подробности —
на странице Обновление SHM.
Единая система логинов (Accounts)
Раньше данные для входа пользователя были размазаны по нескольким полям:
login, login2, settings.email, settings.telegram и т.д. В 3.0 они
объединены в единую таблицу accounts — у одного пользователя теперь может
быть произвольное количество способов входа (login, email, telegram,
oauth2 и др.), каждый описывается парой (login, type).
- Новый модуль
Core::User::Loginsуправляет привязкой/поиском аккаунтов - Новые методы API:
/user/accounts,/admin/user/accounts - Миграция
3.0.0.sqlавтоматически переносит существующиеlogin,login2и e-mail/Telegram изsettingsв новую таблицу при обновлении - Отдельный метод
/user/email/verifyубран — подтверждение e-mail теперь часть общего механизма аккаунтов
OAuth2-авторизация
Добавлена авторизация через внешние OAuth2-провайдеры: Google,
Yandex, GitHub (модули Core::Auth::OAuth2::*).
Новые публичные методы:
/oauth2/init/{provider}/oauth2/start/{provider}/oauth2/callback/{provider}
Транспорт MAX
Добавлен новый мессенджер-транспорт MAX (Core::Transport::Max) — по
аналогии с Telegram: приём вебхуков, авторизация WebApp, команда /start.
Новые методы API: /max/bot/*, /max/set_webhook, /max/webapp/auth.
Очереди задач (Spool Queues)
Добавлен модуль Core::SpoolQueue и таблица spool_queues — теперь задачи
в очереди (spool) можно группировать в именованные очереди с собственным
rate_limit (лимит задач в секунду) и управлением через API:
/admin/spool/queues— список/создание очередей/admin/spool/queues/pause,/admin/spool/queues/resume,/admin/spool/queues/delete
Дополнительно:
- Новый статус задачи
SKIPPED - Поддержка приоритетов при постановке задач в очередь
- Глобальный таймаут задач через переменную окружения
TASK_TIMEOUT
Модуль статистики
Добавлен модуль Core::Statistics и таблица statistics — агрегированные
по дням показатели (количество, сумма, min/max/avg) по ключевым метрикам
биллинга.
Логирование API-запросов
Добавлен модуль Core::Logs::Api и таблица logs_api — все запросы к API
пишутся отдельной транзакцией (пользователь, IP, метод, URL, аргументы,
код ответа, длительность). Просмотр — /admin/logs/api. Чувствительные
данные (пароли, токены и т.п.) в логе рекурсивно маскируются.
Безопасность
- Валидация параметров API v1: все методы
v1.cgiпереведены с форматаrequired => [...]на полную схемуparams => { ... }с проверкой типов, длины и обязательности каждого поля - Telegram WebApp/OIDC: подпись (HMAC) и срок действия
auth_dateтеперь проверяются до поиска пользователя; убрана поддержкаlogin_prefix— используется «сырой» Telegramuser_id - Passkey: обязательная проверка при аутентификации
- Смена пароля: требует ввода старого пароля; смена пароля возможна только для собственного логина (запрещено менять пароль по чужому логину)
- Из редиректов OAuth/Telegram авторизации убран
session_id(передаётся иным защищённым способом)
База данных
- Все таблицы переведены с
MyISAMнаInnoDB - Поле
users.passwordрасширено доVARCHAR(128)— для поддержки современных алгоритмов хеширования - Добавлен индекс
idx_forecast_candidatesвuser_services, ускоряющий расчёт прогноза списаний (Core::Pay)
Прочее
- Шаблонизатор: фильтры
isTrue/isFalse, поддержкаgroup_byв System - Возможность задавать приоритет событиям (
events) - Флаг
payment_modeдля платёжных виджетов в WebApp - Режим авто-перезагрузки SHM при разработке (
dev)