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 .Flash}}{{.Flash}}
✓ Лицензия активна: {{.Lic.Tenant}}, план {{.Lic.Plan}}, модули: {{if .Lic.Features}}{{range $i, $f := .Lic.Features}}{{if $i}}, {{end}}{{$f}}{{end}}{{else}}только ядро{{end}}; {{.Lic.Message}}
{{end}} + +Модуль обмена с DEPO и QUIK не входит в текущую лицензию — шаг пропускается. После добавления модуля в лицензию он станет доступен здесь и в «Настройка → Обмен Fancy».
+ {{else}} + {{if .Done.Depo}}✓ Подключение сохранено: {{.Settings.Fancy.Server}}, база {{.DepoDB}}. {{if .Settings.Fancy.DepoTablesCheckOK}}Трансферные таблицы на месте.{{else}}Трансферные таблицы ещё не проверены — «Настройка → Обмен Fancy → Трансферные таблицы DEPO».{{end}}
{{end}} + + {{end}} + +Сюда система пишет журнал сделок и принимает данные от команды Fansy.
Пропустить (буду работать в режиме in-memory — без сохранения сделок)
{{end}} + {{if not .Done.Postgres}}Пропустить (буду работать в режиме in-memory — без сохранения сделок)
{{end}}СКЗИ нужен для подписи XMLDSig и проверки квитанций НРД.
Импортируйте сертификаты вашей организации и сертификаты УЦ НРД (для проверки квитанций).
Адрес web-сервиса ONYX и имя ключевого контейнера НРД.
Прогон полного цикла: создание заявки → валидация → подпись → отправка в НРД (или mock) → ожидание Decision → подтверждение.
Проверьте, что база данных, СКЗИ и шлюз НРД доступны: на странице «Статус» bj проверяет каждое подключение и показывает, что нужно исправить.
Открыть проверку подключений → {{end}} @@ -288,7 +339,7 @@