Учёт DEPO в мастере: поле базы, логин и пароль bj на экране, скрипт показывается на странице
База DEPO — видимое поле (необязательно: пусто — найдётся по учётным таблицам), порт заполнен по умолчанию. «Отдать скрипт администратору»: логин и пароль bj видны и меняются, «Показать скрипт» выводит его на странице с кнопкой «Скопировать». В начале скрипта — блок «Проверьте перед запуском»: @db и @pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -286,27 +286,64 @@ func depoEnsureLogin(s *FancyMSSQLSettings) {
|
||||
}
|
||||
}
|
||||
|
||||
// wizardDepoScript — POST /admin/setup/wizard-depo/script.sql: один скрипт подготовки базы файлом.
|
||||
// depoScriptCreds — логин и пароль bj с экрана «Отдать скрипт администратору» (поля видны и меняются;
|
||||
// пустой пароль — bj придумает сам). Возвращает текст ошибки.
|
||||
func depoScriptCreds(r *http.Request, s *FancyMSSQLSettings) string {
|
||||
if u := strings.TrimSpace(r.FormValue("bj_user")); u != "" {
|
||||
if !depoLoginRe.MatchString(u) {
|
||||
return "логин bj — латинские буквы, цифры, точка, дефис и _"
|
||||
}
|
||||
if u != s.User {
|
||||
s.User, s.Password = u, ""
|
||||
}
|
||||
}
|
||||
if p := r.FormValue("bj_password"); p != "" {
|
||||
if len(p) < 8 {
|
||||
return "пароль bj — не короче 8 знаков (SQL Server не примет короче)"
|
||||
}
|
||||
s.Password = p
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// wizardDepoScript — POST /admin/setup/wizard-depo/script.sql: один скрипт подготовки базы файлом
|
||||
// (view=1 — текстом для показа на странице).
|
||||
func (h *setupHandlers) wizardDepoScript(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodPost || !requireDepo(w, r) {
|
||||
return
|
||||
}
|
||||
view := r.FormValue("view") != ""
|
||||
fail := func(msg string) {
|
||||
if view {
|
||||
http.Error(w, msg, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
wizDepoGo(w, r, "setup", msg, false)
|
||||
}
|
||||
s, db, agent, bad := h.depoSetupForm(r)
|
||||
if bad == "" {
|
||||
bad = depoScriptCreds(r, &s)
|
||||
}
|
||||
if bad != "" {
|
||||
wizDepoGo(w, r, "setup", bad, false)
|
||||
fail(bad)
|
||||
return
|
||||
}
|
||||
depoEnsureLogin(&s)
|
||||
s.DepoTablesMode = "script"
|
||||
if err := h.rc.UpdateFancy(s); err != nil {
|
||||
wizDepoGo(w, r, "setup", "не сохранилось: "+err.Error(), false)
|
||||
fail("не сохранилось: " + err.Error())
|
||||
return
|
||||
}
|
||||
body := depoSetupScript(s, db, s.User, s.Password, agent)
|
||||
w.Header().Set("Cache-Control", "no-store")
|
||||
if view {
|
||||
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
|
||||
_, _ = w.Write([]byte(body))
|
||||
return
|
||||
}
|
||||
if !s.IsPostgres() {
|
||||
body = "\uFEFF" + body // SSMS без BOM читает кириллицу в комментариях как ANSI
|
||||
}
|
||||
w.Header().Set("Cache-Control", "no-store")
|
||||
w.Header().Set("Content-Type", "application/sql; charset=utf-8")
|
||||
w.Header().Set("Content-Disposition", `attachment; filename="`+depoSetupFileName(s)+`"`)
|
||||
_, _ = w.Write([]byte(body))
|
||||
@@ -354,7 +391,12 @@ func (h *setupHandlers) wizardDepoSetup(w http.ResponseWriter, r *http.Request)
|
||||
if u != s.User || r.FormValue("password") != "" {
|
||||
s.User, s.Password = u, r.FormValue("password")
|
||||
}
|
||||
default: // script — администратор выполнил скрипт: логин и пароль bj уже в настройках
|
||||
default: // script — администратор выполнил скрипт: логин и пароль bj — с экрана (они же в настройках)
|
||||
if bad := depoScriptCreds(r, &s); bad != "" {
|
||||
wizDepoGo(w, r, "setup", bad, false)
|
||||
return
|
||||
}
|
||||
s.DepoTablesMode = "script"
|
||||
if s.User == "" || s.Password == "" {
|
||||
wizDepoGo(w, r, "setup", "сначала скачайте скрипт и передайте администратору SQL", false)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user