server-monitor-manager/agents/_salvage-2026-08-18/smm-deliverables/Старые задачи/pr-body-web-console.md
Ochenstarik 23eb3f5233 chore(agents): разбор рабочих папок с диска на 2026-08-18
Задания, отчёты и патчи, лежавшие в C:\Users\Ochenstarik\projects и в
домашней папке, перенесены в agents/. Разложено по агентам там, где имя
файла позволяло определить автора; остальное — в _salvage-2026-08-18/
и разбирается вручную.

Патчи в notes/salvage-2026-08-18/ — незакоммиченная работа из брошенных
рабочих копий: она существовала только на диске.

Тяжёлое (релизные архивы, инсталляторы, наборы данных) в репозиторий не
попало: оно лежит рядом, в Agent_projects/_archive и Agent_projects/_data.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 14:19:54 +07:00

7.9 KiB
Raw Blame History

Antigravity: веб-консоль оператора — Этап 2

Реализована веб-консоль оператора для управления узлами, сетевыми связями (Links) и выдачи кодов регистрации (smm-antigravity-task-web-console-2026-08-17.md).

База

  • Базовая ветка: main @ f7b10ac
  • Ветка: antigravity/web-console

Что сделано

  1. Веб-интерфейс консоли оператора (SPA):
    • Список узлов: загрузка реальных данных из GET /api/v1/control/agents (имя узла, статус, версия агента, последний heartbeat, состояние сертификата).
    • Список сетевых связей (Links): загрузка реальных данных из GET /api/v1/control/links (ID связи, источник, назначение, протокол/порт, требуемое и фактическое состояние, срок действия).
    • Кнопка «Добавить узел» и модальное окно:
      • Валидация имени узла (1-63 символа, строчные буквы, цифры, дефисы).
      • Вызов эндпоинта POST /api/v1/control/agents/{nodeId}/enrollment-code.
      • Крупное отображение выданного кода SMMNODE2... и отпечатка CA (SHA-256) с копированием в буфер обмена в один клик.
      • Обязательное заметное предупреждение: «При выполнении установщика на сервере обязательно сверьте отпечаток CA, выведенный скриптом, с отпечатком ниже. Подтверждение без сверки обесценивает криптографическую проверку подписи!».
      • 10-минутный обратный отсчет срока действия кода.
  2. Интеграция в Control backend и поддержка встроенных ресурсов (Single-File Publish):
    • Веб-ресурсы размещены в src/ServerMonitorManager.Control/wwwroot/ (index.html, style.css, app.js) и встроены как EmbeddedResource в сборку Control, сохраняя единую разворачиваемую единицу (ochenstarik-smm-control) при PublishSingleFile=true.
    • Маршруты консоли (/, /index.html, /style.css, /app.js, /console) защищены авторизацией роли Operator (.RequireAuthorization("Operator")).
    • Механизм GetWebConsoleAsset проверяет наличие файлов на диске и автоматически переключается на извлечение из EmbeddedResource при отсутствии каталога wwwroot на диске.
  3. Безопасность доступа (mTLS):
    • Доступ к статическим ресурсам и API консоли строго ограничен ролью Operator.
    • Неаутентифицированные запросы отклоняются с 401 Unauthorized.
    • Роли Agent и Automation получают отказ с 403 Forbidden.

Отчёт о тестировании

1. Локальные тесты (PASS)

  • Сборка решения: dotnet build — 0 ошибок.
  • Набор тестов: dotnet test150 пройденных тестов (включая 16 интеграционных проверок в WebConsoleTests.cs):
    • AnonymousAccessToWebConsoleRoutesIsRejectedWithUnauthorized — 401 Unauthorized на маршрутах /, /index.html, /style.css, /app.js, /console;
    • AgentRoleIsForbiddenFromWebConsole — 403 Forbidden для роли Agent;
    • AutomationRoleIsForbiddenFromWebConsole — 403 Forbidden для роли Automation;
    • OperatorCanAccessWebConsoleHtmlAndAssets — 200 OK с корректными MIME-типами (text/html, text/css, application/javascript);
    • WebConsoleHtmlContainsRequiredUiElementsAndWarning — проверка наличия элементов интерфейса (таблицы, форма добавления узла, поля вывода кода, отпечатка CA, кнопки копирования и текста предупреждения о сверке отпечатка);
    • EmbeddedAssetsAreServedWhenDiskWebRootIsMissingтест ветки встроенных ресурсов: поднятие тестового хоста с пустым/отсутствующим WebRootPath подтверждает, что маршруты /, /index.html, /style.css, /app.js и /console успешно возвращают 200 OK, ожидаемые MIME-типы и непустое содержимое из ресурсов сборки EmbeddedResource.

2. CI Workflows (PASS, все зелёные)

3. Границы изменений

  • git diff --name-only origin/main:
    • src/ServerMonitorManager.Control/Program.cs
    • src/ServerMonitorManager.Control/ServerMonitorManager.Control.csproj
    • src/ServerMonitorManager.Control/wwwroot/app.js
    • src/ServerMonitorManager.Control/wwwroot/index.html
    • src/ServerMonitorManager.Control/wwwroot/style.css
    • tests/ServerMonitorManager.Control.Tests/WebConsoleTests.cs
  • Файлы deploy/**, релизные workflow и защищённые каталоги не затрагивались.

4. Что не проверялось и почему

  • Вход по логину и паролю без mTLS не реализовывался, так как является предметом изолированного Этапа 3 и должен разрабатываться после слияния Этапа 2 в main.