Files
Bridge-and-Join-s/deploy/license/README.md
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

3.3 KiB

Лицензирование Bridge-and-Join-s (#19)

Годовые лицензии с офлайн-проверкой по подписи Ed25519 + опциональный онлайн-отзыв.

Компоненты

  • internal/license — формат лицензии + подпись/проверка (offline).
  • cmd/bj-license — издательский CLI: keygen, issue, verify.
  • cmd/bj-license-server — онлайн-реестр отзывов (revocation).
  • Интеграция в bj-server: internal/lkgateway/licensecheck.go — проверка лицензии + гейт обновлений; UI раздел «Лицензия».

Модель

Лицензия — самодостаточный подписанный токен: payload.signature.keyid. bj-server проверяет подпись зашитым публичным ключом и срок офлайн — работает без связи с сервером. Online-сервер нужен только для отзыва.

Гейт обновлений: если лицензирование включено (есть публичный ключ), авто-обновление (#20) выполняется только при валидной лицензии с фичей updates. Без лицензирования (публичный ключ не зашит) — открытый режим, гейты не действуют (бесплатная редакция / разработка).

Издателю

# 1. Ключи лицензий (однократно; приватный — в секрете!)
bj-license keygen -out ./keys/license
#    публичный base64 — зашить в bj-server (DefaultLicensePublicKey)

# 2. Выпустить годовую лицензию клиенту
bj-license issue -tenant "ООО Ромашка" -plan pro -days 365 \
    -features updates,web-cabinet -key ./keys/license.priv -keyid main
#    → выводит ключ payload.signature.keyid — отдать клиенту

# 3. Проверить
bj-license verify -key-file license.key -pub ./keys/license.pub

Планы: free (без фич), pro (перечисленные features), enterprise (всё включено). Фичи: updates, web-cabinet, …

Клиенту (on-prem bj-server)

Админ → Настройка → Лицензия → вставить ключ → «Активировать». Проверка офлайн; статус (организация, план, срок, обновления) виден сразу.

Онлайн-отзыв (опционально)

bj-license-server --addr :8091 --revoked /var/lib/bj-license/revoked.json

revoked.json — JSON-массив отозванных license ID:

["28db4973-fde8-434c-b102-e83623eede2c"]

GET /v1/check?id=<id>{"revoked":true|false}. Перечитывается раз в минуту. В проде заменить файл на PostgreSQL + admin API выпуска/отзыва.

Зашивка публичного ключа в релиз

go build -ldflags "\
  -X .../lkgateway.DefaultLicensePublicKey=<base64-pub> \
  -X .../lkgateway.DefaultUpdatePublicKey=<base64-pub-артефактории> \
  -X .../lkgateway.BuildVersion=1.0.0" -o bj-server ./cmd/bj-server/