Индикатор «Шлюз НРД», проверка ключа ИШ, папки шлюза по сети, сотрудники из домена, переключатель QUIK в настройках

- журнал ИШ: номер процесса выравнивается пробелами — опросы НРД не распознавались (серый индикатор)
- «Проверить СКЗИ и ключ»: Валидата, датчик случайных чисел, подпись профилем ИШ (а не старый bj-crypto);
  индикатор «Криптографии» — по готовности ключа; карточка автозагрузки УЦ — только для разработки
- шаг «Шлюз НРД»: папки обмена по сети (Samba): логин/пароль, ручная настройка не трогается
- «Учётные записи»: необязательно — подключить домен, проверить связь, найти сотрудника и добавить с ролью;
  роль из bj действует, пока группы домена с ролями не сопоставлены
- настройка QUIK МНП: «Только чтение / Чтение и запись», тонкая настройка цикла свёрнута
- индикатор «Обновления» — только когда есть что обновить; «Мастер настройки» в меню и в настройках

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-10-07 00:24:19 +03:00
parent 6a48f7e7a4
commit afc5776347
17 changed files with 421 additions and 55 deletions
+29
View File
@@ -429,6 +429,35 @@ func (h *setupHandlers) checkCrypto(w http.ResponseWriter, r *http.Request) {
return
}
s := h.rc.Snapshot()
// Подписывает документы для НРД шлюз (ИШ) профилем Валидаты, который создал шаг «Ключ подписи»: проверяем
// именно его — версия СКЗИ, датчик случайных чисел, подпись проверочного документа этим профилем.
if !devMode(h.rc) || igateInstalled() {
ctx, cancel := context.WithTimeout(r.Context(), 2*time.Minute)
defer cancel()
ver, _, _ := validataVersion(ctx)
if ver == "" {
setupFlash(w, r, "СКЗИ «Валидата» на сервере не найдена — её ставит установщик bj")
return
}
res, err := runKeymediaOp(ctx, "keycheck", map[string]string{"channel": contourChannel(contourOf(s.NSD.Profile))})
if err != nil {
setupFlash(w, r, "СКЗИ «Валидата» "+ver+": ключ не проверен — "+err.Error())
return
}
prof, _ := res["profile"].(string)
kc, _ := res["keycheck"].(string)
rng := "датчик случайных чисел готов"
if res["rng"] == "false" {
rng = "датчик случайных чисел не инициализирован (шаг «Ключ подписи»)"
}
if kc == "ok" {
setupFlash(w, r, "✓ СКЗИ «Валидата» "+ver+", "+rng+"; ключ организации (профиль ИШ «"+prof+"») подписывает проверочный документ")
return
}
diag, _ := res["keydiag"].(string)
setupFlash(w, r, "✗ СКЗИ «Валидата» "+ver+", "+rng+"; ключ профиля «"+prof+"» не подписывает: "+strings.TrimPrefix(kc, "fail: ")+prefixed(". ", diag))
return
}
cli := cryptocli.New(cryptocli.Config{
Provider: cryptocli.Provider(s.Crypto.Provider),
SocketPath: s.Crypto.SocketPath,