HTTPS: http:// перебрасывается на https://; имя сервера — с проверкой DNS; скрипты DEPO при обновлении

Порт HTTPS принимает и http://: 308 на https:// того же имени и порта
(было «Client sent an HTTP request to an HTTPS server»).

Доменное имя сервера сохраняется, только если оно есть в DNS и указывает
на этот сервер; иначе — что добавить/исправить (запись A → IP сервера).
Сообщение об успехе — с адресом https://имя:порт/ и честно про
самоподписанный сертификат.

Обновление bj с новыми процедурами DEPO: отпечаток установленного набора
(depo_procs_applied) не совпадает со встроенным — на главной и в
настройках плашка «требуются повышенные права на базу данных» с вводом
логина/пароля администратора SQL (не сохраняются) и «Применить скрипты».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-22 13:22:34 +03:00
parent b652baba63
commit 1952f020a1
10 changed files with 222 additions and 18 deletions
+25
View File
@@ -10,8 +10,10 @@ package lkgateway
import (
"context"
"crypto/sha256"
"database/sql"
"embed"
"encoding/hex"
"fmt"
"log"
"net/http"
@@ -85,6 +87,28 @@ func depoProcOrderText(sep string) string {
return strings.Join(parts, sep)
}
// depoProcsHash — отпечаток набора процедур, который bj установит (с учётом правки под клиента).
func depoProcsHash(f FancyMSSQLSettings) string {
h := sha256.New()
for _, p := range depoProcInstallOrder {
h.Write([]byte(p.Name + "\n" + strings.TrimSpace(depoProcEffective(f, p.Name)) + "\n"))
}
return hex.EncodeToString(h.Sum(nil))[:16]
}
// depoProcsPending — обновление bj принесло процедуры DEPO, которые ещё не применены в базе: bj работает с
// DEPO (подключение есть, обработка включена), а отпечаток установленного набора не совпадает со встроенным.
func depoProcsPending() bool {
if globalRC == nil {
return false
}
f := globalRC.Snapshot().Fancy
if strings.TrimSpace(f.Server) == "" || (!f.DepoJobRun && f.DepoJobMode == "") {
return false
}
return f.DepoProcsApplied != depoProcsHash(f)
}
// depoProcList — порядок процедур для шаблона (редактор текстов).
func depoProcList() []struct{ Name, File string } { return depoProcInstallOrder }
@@ -315,6 +339,7 @@ func (h *setupHandlers) installFancyDepoProcs(w http.ResponseWriter, r *http.Req
pmsg, pok := depoProcCheck(ctx, h.rc)
s = h.rc.Snapshot().Fancy
s.DepoProcCheck, s.DepoProcCheckOK, s.DepoProcCheckAt = pmsg, pok, time.Now()
s.DepoProcsApplied, s.DepoProcsAppliedAt = depoProcsHash(s), time.Now() // применено — плашка обновления уходит
_ = h.rc.UpdateFancy(s)
setupFlash(w, r, "Процедуры DEPO: "+msg+". Проверка обработки: "+pmsg)
}