Админка: секретный путь, смена ссылки, интервал и принудительное обновление
Панель без публичного входа: страница живёт по ADMIN_PATH, логин/пароль — ADMIN_LOGIN/ADMIN_PASSWORD из .env (пусто = админка выключена и маршруты /api/admin/* не регистрируются, прод можно не трогать). Умеет: посмотреть текущую ссылку и состояние кэша, вставить новую ссылку (проверяется скачиванием и разбором до сохранения, при ошибке откат), принудительно обновить таблицу вне интервала и без проверки modified, задать интервал в минутах (1..1440). Реализация: - backend/admin.py — cookie-сессия на HMAC (ключ = пароль, 12 часов, HttpOnly/SameSite/Secure-за-https), сравнение за постоянное время; compare_digest по байтам — кириллица в логине не роняет сервер; - schedule/settings.py — ссылка и интервал в JSON (SETTINGS_FILE), атомарная запись, терпимость к битому/недоступному файлу (тогда живёт в памяти); - schedule/cache.py — интервал вместо TTL, apply_link с откатом, force_reload, state() для панели; кэш без ссылки больше не роняет старт; - frontend: страница admin.html (вне static, прямой /admin.html закрыт) и прокси /api/admin/* с телом и Set-Cookie; - docker-compose: том schedule_data для настроек, ADMIN_* в окружении; - deploy/: nginx-конфиг и инструкция для стенда dev.schedule.our-place.ru. Тесты: 138 (новые — админ-API, сессии, ссылка/интервал, force, хранилище).
This commit is contained in:
19
.env.example
19
.env.example
@@ -1,6 +1,23 @@
|
||||
# --- расписание -------------------------------------------------------------
|
||||
# Публичная ссылка на Яндекс.Диск (обязательна)
|
||||
SCHEDULE_LINK=
|
||||
SCHEDULE_CACHE_TTL=900
|
||||
# Интервал обновления в минутах (переживает перезапуск: правится в админке)
|
||||
SCHEDULE_INTERVAL_MINUTES=15
|
||||
# Пауза между повторными попытками при сбое источника, секунд
|
||||
SCHEDULE_RETRY_AFTER=60
|
||||
# Устаревшее: интервал в секундах (используется, только если не задан SCHEDULE_INTERVAL_MINUTES)
|
||||
SCHEDULE_CACHE_TTL=900
|
||||
|
||||
# --- админка (пусто = выключена) ---------------------------------------------
|
||||
# Секретный путь страницы админки, например /manage-7f3a91
|
||||
ADMIN_PATH=
|
||||
# Логин и пароль администратора
|
||||
ADMIN_LOGIN=
|
||||
ADMIN_PASSWORD=
|
||||
# Где хранить настройки (ссылка/интервал); в docker это том schedule_data
|
||||
SETTINGS_FILE=/data/settings.json
|
||||
|
||||
# --- порты и адреса ----------------------------------------------------------
|
||||
API_PORT=8000
|
||||
FRONTEND_PORT=8080
|
||||
SCHEDULE_API=http://api:8000
|
||||
|
||||
Reference in New Issue
Block a user