Ключ подписи ставится прямо в мастере (шаг «Ключ подписи»), а не на отдельной странице
- Мастер установки ключа — общий блок part_keywiz.html: на шаге мастера и на странице /admin/setup/keywizard. Формы возвращают туда, откуда открыли (ret= wizard), с выбранным контуром; вид — как у мастера. - «Установить ключ» у канала на шаге «Шлюз НРД» ведёт на шаг «Ключ подписи» с контуром этого канала. - Подсказка «сначала установите шлюз» — по установленному ИШ (раньше — по готовности шлюза, которая сама требует ключа). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -105,6 +105,39 @@ type keyWizardData struct {
|
||||
Drives []flashDrive
|
||||
SuggestContour string // контур по сертификату в архиве: test3 (издатель «Тестовый УЦ») | prod | "" (не понятно)
|
||||
SuggestIssuer string
|
||||
WantContour string // контур, для которого открыли установку (кнопка «Установить ключ» у канала)
|
||||
InWizard bool // блок — на шаге мастера: формы возвращают туда же
|
||||
}
|
||||
|
||||
// keyWizView — данные блока установки ключа (want — контур, у которого нажали «Установить ключ»).
|
||||
func (h *setupHandlers) keyWizView(want string, inWizard bool) *keyWizardData {
|
||||
if h.keyWiz == nil { // обработчики без мастера ключа (тесты)
|
||||
h.keyWiz = newKeyWizardState()
|
||||
}
|
||||
h.keyWiz.mu.Lock()
|
||||
st := h.keyWiz
|
||||
h.keyWiz.mu.Unlock()
|
||||
d := &keyWizardData{State: st, InWizard: inWizard}
|
||||
if want == "test3" || want == "prod" {
|
||||
d.WantContour = want
|
||||
}
|
||||
if st.StagingID != "" && !st.Done { // список флешек — на шаге выбора носителя (архив уже загружен)
|
||||
d.Drives = listFlashDrives()
|
||||
d.SuggestContour, d.SuggestIssuer = keyArchiveContour(filepath.Join("/var/lib/bj/media/iso", st.StagingID))
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
// keyWizBack — куда вернуться после действия: на шаг мастера (ret=wizard) или на отдельную страницу.
|
||||
func keyWizBack(r *http.Request) string {
|
||||
u := "/admin/setup/keywizard?"
|
||||
if r.FormValue("ret") == "wizard" {
|
||||
u = "/admin/wizard?step=8&"
|
||||
}
|
||||
if c := r.FormValue("want"); c == "test3" || c == "prod" {
|
||||
u += "contour=" + c + "&"
|
||||
}
|
||||
return u
|
||||
}
|
||||
|
||||
// keyArchiveContour — контур ключа по сертификатам в распакованном архиве (не самоподписанным — это УЦ):
|
||||
@@ -229,25 +262,17 @@ func (h *setupHandlers) renderKeyWizard(w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
h.keyWiz.mu.Lock()
|
||||
h.keyWiz.Flash = r.URL.Query().Get("flash")
|
||||
st := h.keyWiz
|
||||
h.keyWiz.mu.Unlock()
|
||||
// Список флешек нужен на шаге выбора носителя (когда архив уже загружен).
|
||||
var drives []flashDrive
|
||||
if st.StagingID != "" && !st.Done {
|
||||
drives = listFlashDrives()
|
||||
}
|
||||
d := keyWizardData{page: nowPage("Установка ключа", "setup"), State: st, Drives: drives}
|
||||
if st.StagingID != "" && !st.Done {
|
||||
d.SuggestContour, d.SuggestIssuer = keyArchiveContour(filepath.Join("/var/lib/bj/media/iso", st.StagingID))
|
||||
}
|
||||
render(w, h.tpl.a.keyWizard, d)
|
||||
d := h.keyWizView(r.URL.Query().Get("contour"), false)
|
||||
d.page = nowPage("Установка ключа", "setup")
|
||||
render(w, h.tpl.a.keyWizard, *d)
|
||||
}
|
||||
|
||||
func (h *setupHandlers) keyWizardReset(w http.ResponseWriter, r *http.Request) {
|
||||
h.keyWiz.mu.Lock()
|
||||
h.keyWiz.reset()
|
||||
h.keyWiz.mu.Unlock()
|
||||
http.Redirect(w, r, "/admin/setup/keywizard", http.StatusSeeOther)
|
||||
http.Redirect(w, r, strings.TrimRight(keyWizBack(r), "?&"), http.StatusSeeOther)
|
||||
}
|
||||
|
||||
// keyWizardUpload — шаг 1: приём .7z + пароль, распаковка, инспекция.
|
||||
@@ -320,7 +345,7 @@ func (h *setupHandlers) keyWizardUpload(w http.ResponseWriter, r *http.Request)
|
||||
h.keyWiz.set(1, "active", "")
|
||||
h.keyWiz.mu.Unlock()
|
||||
|
||||
http.Redirect(w, r, "/admin/setup/keywizard", http.StatusSeeOther)
|
||||
http.Redirect(w, r, strings.TrimRight(keyWizBack(r), "?&"), http.StatusSeeOther)
|
||||
}
|
||||
|
||||
// keyWizardInstall — шаги 2-5: запись на флешку, справочник, проверка, готово.
|
||||
@@ -427,7 +452,7 @@ func (h *setupHandlers) keyWizardInstall(w http.ResponseWriter, r *http.Request)
|
||||
if dev {
|
||||
final += " Финальная проверка — тестовым документом роботу."
|
||||
}
|
||||
http.Redirect(w, r, "/admin/setup/keywizard?flash="+urlQ(final), http.StatusSeeOther)
|
||||
http.Redirect(w, r, keyWizBack(r)+"flash="+urlQ(final), http.StatusSeeOther)
|
||||
}
|
||||
|
||||
// restartAndVerifyISH перезапускает Интеграционный шлюз и проверяет, что он
|
||||
@@ -635,7 +660,7 @@ func runKeymediaOp(ctx context.Context, action string, fields map[string]string)
|
||||
}
|
||||
|
||||
func (h *setupHandlers) keyWizFlash(w http.ResponseWriter, r *http.Request, msg string) {
|
||||
http.Redirect(w, r, "/admin/setup/keywizard?flash="+urlQ(msg), http.StatusSeeOther)
|
||||
http.Redirect(w, r, keyWizBack(r)+"flash="+urlQ(msg), http.StatusSeeOther)
|
||||
}
|
||||
|
||||
func fallback(s, def string) string {
|
||||
|
||||
Reference in New Issue
Block a user