package lkgateway // Шаги настройки — одни и те же для мастера и дашборда: дашборд пишет «Требуется настройка — N из M» // ровно по шагам мастера (с учётом лицензии), а не по отдельному списку проверок. import ( "context" "strings" "sync" "time" "git.zetit.ru/zuevav/Bridge-and-Join-s/internal/cryptocli" ) type SetupStep struct { Step int Title string Done bool } var setupProbeCache = struct { sync.Mutex at time.Time validata string certs int }{} // setupProbes — версия Валидаты и число сертификатов (внешние вызовы) с кэшем на минуту. func setupProbes(rc *RuntimeConfig) (string, int) { setupProbeCache.Lock() defer setupProbeCache.Unlock() if time.Since(setupProbeCache.at) < time.Minute { return setupProbeCache.validata, setupProbeCache.certs } ctx, cancel := context.WithTimeout(context.Background(), 4*time.Second) defer cancel() setupProbeCache.validata, _, _ = validataVersion(ctx) setupProbeCache.certs = 0 s := rc.Snapshot() if s.Crypto.Provider != "" && s.Crypto.Provider != "stub" { cli := cryptocli.New(cryptocli.Config{Provider: cryptocli.Provider(s.Crypto.Provider), SocketPath: s.Crypto.SocketPath, ModulePath: s.Crypto.ModulePath}) if certs, err := cli.FindCertificates(ctx); err == nil { setupProbeCache.certs = len(certs) } cli.Close() } setupProbeCache.at = time.Now() return setupProbeCache.validata, setupProbeCache.certs } // setupSteps — шаги мастера, которые относятся к этой установке (по лицензии), и выполнены ли они. func setupSteps(rc *RuntimeConfig) []SetupStep { s := rc.Snapshot() mnp := moduleAllowed(rc, "quik-mnp") validata, certs := setupProbes(rc) steps := []SetupStep{ {1, "Лицензия", licenseStatus(rc).Valid}, {2, "База bj", s.Postgres.DSN != ""}, } if mnp { steps = append(steps, SetupStep{3, "Учёт DEPO", strings.TrimSpace(s.Fancy.Server) != "" && s.Fancy.DepoTablesCheckOK && s.Fancy.DepoJobCheckOK}) } steps = append(steps, SetupStep{4, "Наша организация", orgCode(s) != "" && orgINN(s) != ""}) if mnp { steps = append(steps, SetupStep{5, "QUIK МНП", s.Quik.Verified}) } steps = append(steps, SetupStep{6, "Валидата", validata != "" || (s.Crypto.Provider != "" && s.Crypto.Provider != "stub" && s.Crypto.ModulePath != "")}, SetupStep{7, "Сертификаты", certs > 0}, SetupStep{8, "Шлюз НРД", s.NSD.IGWBaseURL != "" && s.NSD.Profile != ""}, ) return steps }