Публичные ссылки и экспорт
Готовый дашборд можно открыть публично по ссылке — без учётной записи FileDB у посетителя.
Создание и отзыв
POST /api/dashboards/share создаёт ссылку (требует роль write и доступ к БД дашборда); dashboard_id обязан ссылаться на реальный, существующий дашборд — БД для шаринга берётся из самой записи дашборда, а не из отдельного поля запроса, так что ссылку нельзя подсунуть к чужой базе. У ссылки: 192-битный случайный токен, опциональный пароль (хранится как PBKDF2-хэш, сверяется constant-time — по времени ответа нельзя отличить «неверный пароль» от «неизвестный токен» от «истёкшую ссылку»), опциональный TTL (нулевой — ссылка не истекает), и флаг allow_download, разрешающий экспорт.
curl -X POST $URL/api/dashboards/share -H "X-Token: $TOK" -d '{
"dashboard_id": "dsh_a1b2c3",
"password": "опционально",
"ttl_seconds": 604800,
"allow_download": true
}'
POST /api/dashboards/share/revoke отключает ссылку немедленно; отдельной долгоживущей сессии у посетителя нет — каждый запрос заново проверяет токен и пароль, так что отзыв не требует инвалидации чего-то ещё.
Просмотр по ссылке
POST /api/dashboards/share/validate (публичный, ограничен по частоте запросов) проверяет токен/пароль и возвращает только метаданные — без SQL и без схемы БД. POST /api/dashboards/share/query рендерит сохранённые виджеты дашборда тем же кодом, что и авторизованный просмотр, и возвращает {dashboard_name, widgets: [...]}, где каждый элемент — уже готовый результат (id, type, title, data, error); в этой структуре физически нет места для SQL или структуры таблиц. Глобальные фильтры на публичном пути работают так же, как при авторизованном просмотре, с тем же ограничением — только для виджетов на структурированном источнике.
Экспорт в CSV
POST /api/dashboards/share/export — публичный, доступен только если у ссылки включён allow_download. Заново рендерит один конкретный табличный виджет (widget_id) и отдаёт его как CSV; виджеты-графики (line/bar/pie/kpi) экспортировать нечего — у них нет построчных данных для скачивания.