REST API для разработчиков
PearCMS отдаёт REST API на /api/v1/admin/* для нативного Android-приложения админа. Авторизация по Bearer-токену с поддержкой 2FA, PIN и refresh. Все эндпоинты модулей проходят через единый диспатчер.
Авторизация #
Логин — обычный login + password. Если у юзера включён 2FA или PIN, сервер выдаёт «pending»-токен с особым скоупом и просит ввести код:
| Метод | URL | Назначение |
|---|---|---|
POST | /api/v1/admin/auth/login | Логин/пароль → access-токен или pending-токен |
POST | /api/v1/admin/auth/2fa | Подтверждение TOTP-кодом |
POST | /api/v1/admin/auth/pin | Подтверждение 4-значным PIN’ом |
POST | /api/v1/admin/auth/refresh | Продление токена |
POST | /api/v1/admin/auth/logout | Отзыв токена |
// Request { "login": "alice", "password": "…", "device": "Pixel 8" } // Response (если 2FA не нужно) { "ok": true, "token": "eyJh…", "expires_at": "2026-07-15T10:00:00Z", "user": { "id": 42, "login": "alice", "flags": "abc", "role": "" } }
Все последующие запросы — с заголовком Authorization: Bearer <token>.
Профиль и discover #
| Метод | URL | Описание |
|---|---|---|
GET | /api/v1/admin/me | Текущий пользователь, его флаги и группы |
GET | /api/v1/admin/discover | Доступные модули, пункты меню, конфиг приложения |
GET | /api/v1/admin/ping | Health-check — для мониторинга и keep-alive |
/discover мобильный клиент дергает один раз после логина и кеширует: оттуда он узнает какие модули включены и какие иконки рисовать.
Универсальный диспатчер #
Все эндпоинты модулей идут через один URL-шаблон:
/api/v1/admin/{module}/{action} # GET / POST / PUT / DELETE / PATCHНапример, список баннеров: GET /api/v1/admin/Banner/list. Модуль регистрирует свои action’ы в собственном AdminApi/<Name>AdminApi.php через интерфейс AdminApiPanelInterface:
public function endpoints(): array { return [ 'list' => ['method' => 'GET', 'flag' => 'manage', 'handler' => [$this, 'list']], 'create' => ['method' => 'POST', 'flag' => 'manage', 'params' => ['login' => 'string', 'password' => 'string'], 'handler' => [$this, 'create']], // … ]; }
Права и проверка #
DispatchController для каждого запроса:
- Резолвит токен — узнаёт user_id, его личные флаги и union-флаги групп
- Эти данные через
primeSessionFromCtx()кладутся в$_SESSION, чтобыAuth::flags()работал так же, как в браузерной сессии - Берёт из спеки эндпоинта
flag— это action_key для FlagsPanel модуля - Вызывает
module_can($module, $flag); если нет — 403 Forbidden с телом{"flag":"<имя>"}
Тот же admin, что сидит в браузерной панели, ходит через REST с теми же правами.
Управление токенами #
Раздел REST API (/s-panel/api) в админке показывает все выпущенные токены, их устройства, IP, last_used. Можно отозвать любой одним кликом или почистить просроченные пакетом.
Также там настройки модуля Api — TTL access-токена, лимиты на rate limiting, и журнал ошибок аутентификации.