Учёт DEPO: ход подготовки по шагам, понятный блок «Логин bj», пауза после неудачного входа

- «Подготовить» / «Проверить подключение» показывают ход: подключение логином
  администратора, проверка, что это база DEPO, применение скрипта, вход логином bj,
  таблицы обмена, задание, процедуры, «Готово». Сервер отдаёт шаги строками JSON
  (stream=1), на ошибке — шаг с крестиком и причина, без перехода со страницы.
- Блоки «Администратор SQL — нужен один раз, не сохраняется» и «Логин bj — под ним
  bj будет работать»: bj сохраняет и использует ровно то, что вписано; «другой
  пароль»; на итоге шага — каким логином bj работает.
- Пауза 15 минут после неудачного входа в DEPO (логин/пароль отвергнуты) для
  фоновых служб: с неверным паролем они за минуты блокировали логин на сервере
  (CHECK_POLICY) у всех, кто им пользуется. Действия человека идут без паузы;
  новый пароль — сразу; системное событие в «Новостях».

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-06 15:46:25 +03:00
parent fbf6a23667
commit a9915bcc82
8 changed files with 395 additions and 53 deletions
+5 -5
View File
@@ -126,7 +126,7 @@ func (h *setupHandlers) createFancyDepoTables(w http.ResponseWriter, r *http.Req
setupFlash(w, r, "Таблицы DEPO: сначала сохраните подключение к серверу БД")
return
}
ctx, cancel := context.WithTimeout(r.Context(), 2*time.Minute)
ctx, cancel := context.WithTimeout(depoLoginForce(r.Context()), 2*time.Minute)
defer cancel()
msg, err := depoTablesCreate(ctx, s, r.FormValue("admin_user"), r.FormValue("admin_password"))
if err != nil {
@@ -158,7 +158,7 @@ func (h *setupHandlers) checkFancyDepoTables(w http.ResponseWriter, r *http.Requ
setupFlash(w, r, "Таблицы DEPO: сначала сохраните подключение к серверу БД")
return
}
ctx, cancel := context.WithTimeout(r.Context(), time.Minute)
ctx, cancel := context.WithTimeout(depoLoginForce(r.Context()), time.Minute)
defer cancel()
msg, ok := depoTablesCheck(ctx, s)
h.saveDepoTablesCheck(msg, ok)
@@ -235,7 +235,7 @@ func (h *setupHandlers) checkFancyDepoJob(w http.ResponseWriter, r *http.Request
http.Error(w, "method", http.StatusMethodNotAllowed)
return
}
ctx, cancel := context.WithTimeout(r.Context(), 90*time.Second)
ctx, cancel := context.WithTimeout(depoLoginForce(r.Context()), 90*time.Second)
defer cancel()
msg, ok := depoJobCheck(ctx, h.rc)
pmsg, pok := depoProcCheck(ctx, h.rc)
@@ -263,7 +263,7 @@ func (h *setupHandlers) createFancyDepoJob(w http.ResponseWriter, r *http.Reques
http.Error(w, "method", http.StatusMethodNotAllowed)
return
}
ctx, cancel := context.WithTimeout(r.Context(), 60*time.Second)
ctx, cancel := context.WithTimeout(depoLoginForce(r.Context()), 60*time.Second)
defer cancel()
if err := depoJobCreateAgent(ctx, h.rc, r.FormValue("admin_user"), r.FormValue("admin_password")); err != nil {
setupFlash(w, r, "Создание джобы: "+err.Error())
@@ -313,7 +313,7 @@ func (h *setupHandlers) testFancy(w http.ResponseWriter, r *http.Request) {
return
}
// Проверяем соединение к серверу (master) — БД может ещё не существовать.
ver, err := fancyPing(r.Context(), s, "master")
ver, err := fancyPing(depoLoginForce(r.Context()), s, "master")
if err != nil {
setupFlash(w, r, fancyDBLabel(s)+": соединение не удалось — "+err.Error())
return