Этап A: healthcheck-эндпоинт /api/health и CORS (ALLOWED_ORIGINS) #5

Closed
opened 2026-09-26 09:08:20 +00:00 by developer · 2 comments
Collaborator

Подзадача этапа A из плана развития UI-хаба (#1).

Объём (только сервер, обратно совместимо)

  1. GET /api/health — healthcheck с той же Bearer-авторизацией, что и остальное API:

    • 200 — процесс жив, SESSIONS_DIR существует; тело — JSON со статусом сервиса;
    • 401 — сервис есть, токен неверный.

    Нужен UI-хабу (Этап B), чтобы различать состояния «машина/порт недоступны», «неверный токен» и «OK». Анонимный эндпоинт не делаем — он палит существование сервиса.

  2. ALLOWED_ORIGINS — новая переменная конфига: список разрешённых origin через запятую. Если origin запроса есть в списке — отдаём CORS-заголовки и обрабатываем preflight OPTIONS; переменная не задана — поведение как сейчас (same-origin, без CORS-заголовков).

  3. Тесты на оба пункта.

Критерии приёмки

  • /api/health без токена → 401, с верным токеном → 200 и JSON со статусом.
  • При ALLOWED_ORIGINS=http://example.com запрос с этим origin получает Access-Control-Allow-Origin, preflight OPTIONS отвечает корректно; без переменной — CORS-заголовков нет.
  • Все существующие тесты зелёные; текущий сценарий «UI с того же origin» не меняется.

Часть работ по #1. Следом — Этап B: реестр агентов и переключение в UI.

Подзадача этапа A из плана развития UI-хаба (#1). ## Объём (только сервер, обратно совместимо) 1. **`GET /api/health`** — healthcheck с той же Bearer-авторизацией, что и остальное API: - `200` — процесс жив, `SESSIONS_DIR` существует; тело — JSON со статусом сервиса; - `401` — сервис есть, токен неверный. Нужен UI-хабу (Этап B), чтобы различать состояния «машина/порт недоступны», «неверный токен» и «OK». Анонимный эндпоинт не делаем — он палит существование сервиса. 2. **`ALLOWED_ORIGINS`** — новая переменная конфига: список разрешённых origin через запятую. Если origin запроса есть в списке — отдаём CORS-заголовки и обрабатываем preflight `OPTIONS`; переменная не задана — поведение как сейчас (same-origin, без CORS-заголовков). 3. Тесты на оба пункта. ## Критерии приёмки - [ ] `/api/health` без токена → `401`, с верным токеном → `200` и JSON со статусом. - [ ] При `ALLOWED_ORIGINS=http://example.com` запрос с этим origin получает `Access-Control-Allow-Origin`, preflight `OPTIONS` отвечает корректно; без переменной — CORS-заголовков нет. - [ ] Все существующие тесты зелёные; текущий сценарий «UI с того же origin» не меняется. Часть работ по #1. Следом — Этап B: реестр агентов и переключение в UI.
Author
Collaborator

Беру задачу, ветка feature/5_api_health_and_cors.

Беру задачу, ветка `feature/5_api_health_and_cors`.
Author
Collaborator

Готово, PR #7 на ревью, ветка feature/5_api_health_and_cors. Реализовано по TDD: 5 новых тестов (healthcheck ×2, CORS ×3), всего 33 — зелёные. Детали и как проверить — в описании PR.

Готово, PR #7 на ревью, ветка `feature/5_api_health_and_cors`. Реализовано по TDD: 5 новых тестов (healthcheck ×2, CORS ×3), всего 33 — зелёные. Детали и как проверить — в описании PR.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
forgejo-admin/watcherenish#5
No description provided.