Files
Bridge-and-Join-s/deploy/license
zuevav 86aa452ed6 feat(license): сервер лицензий lic.zetit.ru — кабинет, онлайн-активация и защита
- bj-license-server: активация по коду и продление токенов (API /v1), кабинет
  администратора (клиенты, лицензии, установки, журнал, администраторы)
- защита: доверенные IP установок, jail fail2ban api/admin, раздел «Защита»
  с режимом обороны, белым списком и сроками блокировок (root-помощник fw-apply)
- доступ к кабинету: свой адрес вместо /admin, вход только из белого списка,
  второй фактор — TOTP или подтверждение в «ЗЕТИТ Ключ» (push/код)
- deploy/license: unit-файлы, fail2ban, path/timer помощника; контракт API в docs

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 19:41:11 +03:00
..

Лицензирование 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/