Что нового в 3.0

Основные изменения SHM 3.0 относительно 2.0

SHM 3.0

Версия 3.0 — крупный релиз, в котором переработана система авторизации пользователей, добавлены новые каналы связи и модули аналитики, а также существенно усилена безопасность API. Ниже перечислены основные изменения относительно ветки 2.0.

Единая система логинов (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 — используется «сырой» Telegram user_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)