Перейти к содержанию

Демо-режим

Управление механизмом сброса демо-режима для публичных демо-сайтов. О настройке демо-режима см. в разделе Демо-режим. Демо-учётная запись — это любая учётная запись с установленным access.api.demo. Демо-учётные записи могут читать, но любая запись отклоняется, кроме разрешений, перечисленных в plugins.api.demo.writable (демо только для чтения, когда список пуст, — это поведение по умолчанию), и маршрутов плагинов из plugins.api.demo.allow_routes. Чтения, раскрывающие серверные пути, журналы, резервные копии или журнал аудита, от них скрыты. Отклонённый запрос получает 403 с кодом ошибки demo_mode_write_blocked.

Базовый снимок — это сохранённая копия папок, которые восстанавливает сброс. После его создания эти папки возвращаются к нему каждые reset_interval минут — при первом запросе к API после истечения интервала (reset_on_request), заданием планировщика (reset_on_schedule) или обоими способами. Пока базового снимка нет, ничего не сбрасывается.

Разрешения: Состояние демо-режима требует любой аутентифицированной учётной записи. Создание базового снимка и Сброс демо-контента требуют суперадминистратора (ключу API с ограниченной областью действия нужна область admin.super), а демо-учётные записи всегда получают на них отказ, даже если они суперадминистраторы, чтобы посетитель не мог сохранить испорченное состояние как базовый снимок или принудительно запустить сброс.

Поля состояния

Все три маршрута возвращают один и тот же объект состояния:

Поле Значение
baseline_exists Создан ли базовый снимок
baseline_at Метка времени Unix базового снимка или null, когда его нет
writable plugins.api.demo.writable в текущей настройке: разрешения, которые могут использовать демо-учётные записи, например api.pages.update или краткая запись api.pages.write
roots Папки, которые восстанавливает сброс: pages, media и config (а также environments/<name> для папки настроек каждого окружения) из разрешений, plugins и themes с include_code и каждая папка extra_roots по её пути внутри user/, если они существуют
reset_interval Минут между сбросами
reset_on_request Начинается ли сброс при первом запросе к API после истечения интервала
reset_on_schedule Выполняет ли сбросы задание планировщика
last_reset Метка времени Unix последнего сброса (или базового снимка, если сбросов ещё не было) или null
seconds_until_reset Секунд до следующего сброса; 0 означает, что пора сейчас, null — когда базового снимка нет

Состояние демо-режима

GET /demo/status

Состояние сброса демо-режима, управляющее баннером демо-режима Admin Next и его обратным отсчётом. Его может вызвать любая аутентифицированная учётная запись; конкретное разрешение не требуется. Описание полей см. во введении к разделу.

Ответ

{"data": {"baseline_exists": true, "baseline_at": 1789998200, "writable": ["api.pages.create", "api.pages.update", "api.media.upload"], "roots": ["media", "pages"], "reset_interval": 30, "reset_on_request": true, "reset_on_schedule": true, "last_reset": 1790000000, "seconds_until_reset": 1234}}

Коды ответов

Код Описание
200 Состояние возвращено.
401 Не авторизован.

Создание базового снимка

POST /demo/baseline

Сохраняет папки, которые восстанавливает сброс (определённые по plugins.api.demo.writable, include_code и extra_roots), как базовый снимок. Когда папок нет, как в демо только для чтения, ничего не сохраняется и captured равно false, но ответ всё равно 200. При успехе вызывает onApiDemoBaselineCaptured и отправляет X-Invalidates: demo:status. Требуется суперадминистратор (ключу API с ограниченной областью действия нужна область admin.super); демо-учётные записи получают 403, даже если они суперадминистраторы.

Ответ

{"data": {"captured": true, "message": "Demo baseline captured.", "status": {"baseline_exists": true, "baseline_at": 1789998200, "writable": ["api.pages.create", "api.pages.update", "api.media.upload"], "roots": ["media", "pages"], "reset_interval": 30, "reset_on_request": true, "reset_on_schedule": true, "last_reset": 1790000000, "seconds_until_reset": 1800}}}

Коды ответов

Код Описание
200 Попытка создания выполнена; captured сообщает, сохранён ли базовый снимок.
401 Не авторизован.
403 Не суперадминистратор, ключ с ограниченной областью действия без admin.super или демо-учётная запись.

Когда ничего не сохранено, message равен «No writable demo resources are configured, so there is nothing to capture.»

Создание заменяет любой предыдущий базовый снимок и перезапускает таймер сброса, поэтому last_reset устанавливается в момент создания снимка.


Сброс демо-контента

POST /demo/reset

Восстанавливает демо-контент из сохранённого базового снимка сейчас, дожидаясь уже идущего фонового сброса. Без базового снимка ничего не происходит и reset равно false, но ответ всё равно 200. Вызывает onApiDemoReset и отправляет X-Invalidates: demo:status. Требуется суперадминистратор (ключу API с ограниченной областью действия нужна область admin.super); демо-учётные записи получают 403, даже если они суперадминистраторы.

Ответ

{"data": {"reset": true, "message": "Demo content reset to baseline.", "status": {"baseline_exists": true, "baseline_at": 1789998200, "writable": ["api.pages.create", "api.pages.update", "api.media.upload"], "roots": ["media", "pages"], "reset_interval": 30, "reset_on_request": true, "reset_on_schedule": true, "last_reset": 1790000000, "seconds_until_reset": 1800}}}

Коды ответов

Код Описание
200 Попытка сброса выполнена; reset сообщает, был ли восстановлен контент.
401 Не авторизован.
403 Не суперадминистратор, ключ с ограниченной областью действия без admin.super или демо-учётная запись.