Демо-режим¶
Управление механизмом сброса демо-режима для публичных демо-сайтов. О настройке демо-режима см. в разделе Демо-режим. Демо-учётная запись — это любая учётная запись с установленным 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 или демо-учётная запись. |