Files
Bridge-and-Join-s/internal/nsdadapter
zuevav 9737c787f9 feat: живой цикл M2M с НРД + мастер установки ключа на флешку
Инфраструктура M2M (живой обмен с НРД через ИШ):
- обработка M2MTransferResponse: ERROR(M2Mxx) → заявка Отклонена, сохранение
  ответа; INFO → ждём Decision; идемпотентность поллера
- fallback-корреляция ответов с нулевым GUID (M2M14/M2M17) по FIFO
- сырой XML ответа НРД в карточке заявки (для пересылки в ТП)
- тестовый пакет роботу приведён к эталону m2m_robot_samples (CostInfo=Yes,
  4 бумаги, IsolationStatus, DocumentSeries=сценарий); override паспорта
- редирект из теста сразу в карточку заявки

Мастер установки ключа Валидаты на флешку (admin/setup/keywizard):
- пошаговый: загрузка .7z+пароль → выбор флешки → запись → справочник
  сертификатов (CRL) → перезапуск+проверка ИШ → готово
- привилегированный воркер (bj-keymedia) в host-namespace через файл-обмен,
  bj-server остаётся в песочнице
- сохранение структуры профиля архива (spr<N>), перечисление съёмных USB

Прочее:
- пакет-доказательство для ТП НРД + форма регистрации участника M2M
- эталонные образцы робота (DOC/m2m_robot_samples)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 00:03:21 +03:00
..

internal/nsdadapter — транспорт к НРД

Реализует m2mcore.NSDSender. Основной канал — Интеграционный шлюз (ИШ) НРД через REST API; ИШ сам подписывает и упаковывает пакеты ЭДО, нам XMLDSig не требуется. Резерв — WS ONYX (заглушка до PR-6).

Состав

  • igw/client.go — REST-клиент ИШ: SendPackage, GetStatus, ListIncoming. Body передаётся base64 в JSON, ретраи на 5xx и сетевые ошибки, 4xx не ретраится.
  • router.go — маршрутизация доменного типа сообщения в PackageType ЭДО (#M2MTR, #M2MTD, #M2MER, SUBBR/SUBER/SUB16, Assets_investment).
  • sender.go — реализация m2mcore.NSDSender: сериализует Request в windows-1251 через nsdxml.Marshal и шлёт в ИШ. Ответы НРД приходят асинхронно через входящий поллер.
  • config.go — профили guest-gost, guest-rsa, test3-gost, test3-rsa, prod-gost, prod-rsa (URL ИШ, канал, контейнер ключа, таймауты, retry).
  • onyx/onyx.go — скелет SOAP-клиента WS ONYX. Реальная реализация — после PR-6 (подпись через crypto-service).

cmd/nsd-adapter

cmd/nsd-adapter/main.go — сервис с HTTP /healthz и фоновым поллером входящих пакетов (ListIncoming по типам ЭДО из IncomingPackageKinds). Параметры:

  • BJ_HTTP_ADDR — адрес HTTP (по умолчанию :8082).
  • BJ_NSD_PROFILE — имя профиля. Если не задан — сервис стартует в режиме idle (только healthz, опрос отключён). Полезно для CI и смоук-тестов без реального ИШ.
  • BJ_NSD_POLL_INTERVAL — частота опроса, например 15s.

Принципы логирования

  • Логируем: метод, путь, HTTP-статус, package_id, длительность.
  • Не логируем тело пакета — там могут быть ПДн.
  • Маскировка ПДн в любых журналах — на стороне m2m-core при логировании content до отправки в адаптер.