diff --git a/internal/lkgateway/firstrun.go b/internal/lkgateway/firstrun.go index 7c605b6..3a6780d 100644 --- a/internal/lkgateway/firstrun.go +++ b/internal/lkgateway/firstrun.go @@ -101,17 +101,17 @@ func registerFirstRun(mux *http.ServeMux) { acancel() if err != nil { log.Printf("auth: первичная настройка: ключ продукта не принят: %v", err) - http.Redirect(w, r, "/admin/setup?flash="+url.QueryEscape("Лицензия: ключ продукта не принят — "+err.Error()+". Введите его в разделе «Лицензия».")+"#sec-license", http.StatusSeeOther) + http.Redirect(w, r, "/admin/wizard?step=1&flash="+url.QueryEscape("Администратор создан. Ключ продукта не принят: "+err.Error()+". Проверьте его и введите ещё раз."), http.StatusSeeOther) return } - http.Redirect(w, r, "/admin/setup?flash="+url.QueryEscape("Лицензия активирована. Дальше — подключение к базе DEPO, затем реквизиты НРД (кнопка «Определить из DEPO»)."), http.StatusSeeOther) + http.Redirect(w, r, "/admin/wizard?flash="+url.QueryEscape("Администратор создан, лицензия активирована. Мастер проведёт по остальным шагам — любой можно пропустить."), http.StatusSeeOther) return } if d.NeedKey { - http.Redirect(w, r, "/admin/setup?flash="+url.QueryEscape("Администратор создан. Лицензия ещё не активирована — введите ключ продукта в разделе «Лицензия», иначе модули и обновления недоступны.")+"#sec-license", http.StatusSeeOther) + http.Redirect(w, r, "/admin/wizard?step=1&flash="+url.QueryEscape("Администратор создан. Начнём с лицензии: без ключа продукта модули и обновления недоступны (шаг можно пропустить)."), http.StatusSeeOther) return } - http.Redirect(w, r, "/admin/setup", http.StatusSeeOther) + http.Redirect(w, r, "/admin/wizard", http.StatusSeeOther) return } w.WriteHeader(http.StatusUnauthorized) diff --git a/internal/lkgateway/setup.go b/internal/lkgateway/setup.go index f11824f..6f0d14c 100644 --- a/internal/lkgateway/setup.go +++ b/internal/lkgateway/setup.go @@ -166,9 +166,14 @@ type WizardData struct { Step int Settings Settings Suggest *DepoRequisites // предложение реквизитов из DEPO (после «Определить из DEPO») + Lic LicenseStatus + DepoLicensed bool + DepoDB string Certs []cryptocli.Certificate Flash string Done struct { + License bool + Depo bool Postgres bool Crypto bool Certs bool @@ -193,6 +198,11 @@ func (h *setupHandlers) renderWizard(w http.ResponseWriter, r *http.Request) { Certs: h.listCertsForUI(), Flash: r.URL.Query().Get("flash"), } + d.Lic = licenseStatus(h.rc) + d.Done.License = d.Lic.Valid + d.DepoLicensed = moduleAllowed(h.rc, "quik-mnp") + d.DepoDB = s.Fancy.DepoDB() + d.Done.Depo = strings.TrimSpace(s.Fancy.Server) != "" || !d.DepoLicensed d.Done.Postgres = s.Postgres.DSN != "" d.Done.Crypto = s.Crypto.Provider != "" && s.Crypto.Provider != "stub" && s.Crypto.ModulePath != "" d.Done.Certs = len(d.Certs) > 0 @@ -202,22 +212,26 @@ func (h *setupHandlers) renderWizard(w http.ResponseWriter, r *http.Request) { // Определяем текущий шаг. step := 1 if v := r.URL.Query().Get("step"); v != "" { - if n, err := strconv.Atoi(v); err == nil && n >= 1 && n <= 5 { + if n, err := strconv.Atoi(v); err == nil && n >= 1 && n <= 7 { step = n } } else { // Авто: первый незавершённый. switch { - case !d.Done.Postgres: + case !d.Done.License: step = 1 - case !d.Done.Crypto: + case !d.Done.Postgres: step = 2 - case !d.Done.Certs: + case !d.Done.Depo: step = 3 - case !d.Done.NSD: + case !d.Done.Crypto: step = 4 - default: + case !d.Done.Certs: step = 5 + case !d.Done.NSD: + step = 6 + default: + step = 7 } } d.Step = step diff --git a/internal/lkgateway/web/templates/admin_wizard.html b/internal/lkgateway/web/templates/admin_wizard.html index 2ead4c0..5c4fbdf 100644 --- a/internal/lkgateway/web/templates/admin_wizard.html +++ b/internal/lkgateway/web/templates/admin_wizard.html @@ -26,21 +26,72 @@

Пошаговый мастер первого запуска — состояние сохраняется после каждого шага

-
-
{{if .Done.Postgres}}✓{{else}}1{{end}}База
-
{{if .Done.Crypto}}✓{{else}}2{{end}}Валидата
-
{{if .Done.Certs}}✓{{else}}3{{end}}Сертификаты
-
{{if .Done.NSD}}✓{{else}}4{{end}}Шлюз НРД
-
{{if .Done.TestRun}}✓{{else}}5{{end}}Проверка
+
+
{{if .Done.License}}✓{{else}}1{{end}}Лицензия
+
{{if .Done.Postgres}}✓{{else}}2{{end}}База bj
+
{{if .Done.Depo}}✓{{else}}3{{end}}Учёт DEPO
+
{{if .Done.Crypto}}✓{{else}}4{{end}}Валидата
+
{{if .Done.Certs}}✓{{else}}5{{end}}Сертификаты
+
{{if .Done.NSD}}✓{{else}}6{{end}}Шлюз НРД
+
{{if .Done.TestRun}}✓{{else}}7{{end}}Проверка
+

Пропустить мастер и перейти в систему → — вернуться к нему можно из «Настройка → Мастер настройки»

{{if .Flash}}

{{.Flash}}

{{end}}
-{{/* ============= ШАГ 1: PostgreSQL ============= */}} + +{{/* ============= ШАГ 1: Лицензия ============= */}} {{if eq .Step 1}}
-

Шаг 1. PostgreSQL

+

Шаг 1. Лицензия

+
Что это. Ключ продукта (BJ-XXXX-XXXX-XXXX) привязывает этот сервер к вашей лицензии.
+ Зачем. От лицензии зависят модули (обмен с DEPO и QUIK, личный кабинет, НПР/УДС) и получение обновлений: bj скачает и поставит модули, входящие в лицензию, автоматически.
+ Где взять. Портал клиента lic.zetit.ru/portal или письмо от ZETIT.
+ {{if .Done.License}}

✓ Лицензия активна: {{.Lic.Tenant}}, план {{.Lic.Plan}}, модули: {{if .Lic.Features}}{{range $i, $f := .Lic.Features}}{{if $i}}, {{end}}{{$f}}{{end}}{{else}}только ядро{{end}}; {{.Lic.Message}}

{{end}} +
+ + + + +
+
+ {{if .Done.License}}К шагу 2 →{{else}}Пропустить (ввести позже) →{{end}}
+
+{{end}} + +{{/* ============= ШАГ 3: Учёт DEPO (Fancy) ============= */}} +{{if eq .Step 3}} +
+

Шаг 3. Учётная система DEPO (Fancy)

+
Что это. Подключение к базе депозитарного учёта DEPO (MS SQL / PostgreSQL).
+ Зачем. bj сверяет с DEPO каждый перевод (клиент, счёт, остаток, квалификация) и передаёт в DEPO поручения и их исполнение — документы создаются в учёте автоматически. Отсюда же bj возьмёт ваши реквизиты в НРД (шаг 6), чтобы не вводить их вручную.
+ Что нужно. Адрес сервера БД и логин с правами чтения DEPO и записи в трансферные таблицы FTV_M2M (выдаёт администратор СУБД).
+ {{if not .DepoLicensed}} +

Модуль обмена с DEPO и QUIK не входит в текущую лицензию — шаг пропускается. После добавления модуля в лицензию он станет доступен здесь и в «Настройка → Обмен Fancy».

+ {{else}} + {{if .Done.Depo}}

✓ Подключение сохранено: {{.Settings.Fancy.Server}}, база {{.DepoDB}}. {{if .Settings.Fancy.DepoTablesCheckOK}}Трансферные таблицы на месте.{{else}}Трансферные таблицы ещё не проверены — «Настройка → Обмен Fancy → Трансферные таблицы DEPO».{{end}}

{{end}} +
+ +
+
+
+
+
+ +
+ {{if .Settings.Fancy.Server}}{{end}}
+
+ {{end}} +
+ ← К шагу 2 + {{if .Done.Depo}}К шагу 4 →{{else}}Пропустить →{{end}}
+
+{{end}} +{{/* ============= ШАГ 1: PostgreSQL ============= */}} +{{if eq .Step 2}} +
+

Шаг 2. PostgreSQL

Сюда система пишет журнал сделок и принимает данные от команды Fansy.

@@ -70,16 +121,16 @@
- {{if .Done.Postgres}}К шагу 2 →{{else}}{{end}} + {{if .Done.Postgres}}К шагу 2 →{{else}}{{end}}
- {{if not .Done.Postgres}}

Пропустить (буду работать в режиме in-memory — без сохранения сделок)

{{end}} + {{if not .Done.Postgres}}

Пропустить (буду работать в режиме in-memory — без сохранения сделок)

{{end}}
{{end}} {{/* ============= ШАГ 2: Крипто (Валидата) ============= */}} -{{if eq .Step 2}} +{{if eq .Step 4}}
-

Шаг 2. СКЗИ «Валидата Клиент L»

+

Шаг 4. СКЗИ «Валидата Клиент L»

СКЗИ нужен для подписи XMLDSig и проверки квитанций НРД.

@@ -106,16 +157,16 @@
- ← К шагу 1 - {{if .Done.Crypto}}К шагу 3 →{{else}}Пропустить →{{end}} + ← К шагу 1 + {{if .Done.Crypto}}К шагу 3 →{{else}}Пропустить →{{end}}
{{end}} {{/* ============= ШАГ 3: Сертификаты ============= */}} -{{if eq .Step 3}} +{{if eq .Step 5}}
-

Шаг 3. Сертификаты

+

Шаг 5. Сертификаты

Импортируйте сертификаты вашей организации и сертификаты УЦ НРД (для проверки квитанций).

{{end}} {{/* ============= ШАГ 4: НРД ============= */}} -{{if eq .Step 4}} +{{if eq .Step 6}}
-

Шаг 4. Интеграционный шлюз НРД

+

Шаг 6. Интеграционный шлюз НРД

Адрес web-сервиса ONYX и имя ключевого контейнера НРД.

@@ -203,7 +254,7 @@
- +
@@ -220,7 +271,7 @@ {{if .Suggest}}{{if .Suggest.OrgName}}

Организация (из DEPO — проверьте): код участника, ИНН, наименование.

- +
@@ -242,17 +293,17 @@
{{end}} {{/* ============= ШАГ 5: Тест-ран (режим разработки) / проверка подключений ============= */}} -{{if eq .Step 5}} +{{if eq .Step 7}}
{{if devOn}} -

Шаг 5. Тестовая заявка

+

Шаг 7. Тестовая заявка

Прогон полного цикла: создание заявки → валидация → подпись → отправка в НРД (или mock) → ожидание Decision → подтверждение.

@@ -273,7 +324,7 @@ {{end}} {{else}} -

Шаг 5. Проверка подключений

+

Шаг 7. Проверка подключений

Проверьте, что база данных, СКЗИ и шлюз НРД доступны: на странице «Статус» bj проверяет каждое подключение и показывает, что нужно исправить.

Открыть проверку подключений → {{end}} @@ -288,7 +339,7 @@