Первичная настройка, часть 1: префикс торгового счёта DEPO — настройка с подсказкой по учёту (был зашит «ВТНКЦ» в 7 запросах); шаг 8 — адрес ИШ вместо ONYX, профили prod-gost/prod-rsa (пункт prod уводил bj в имитацию), без неиспользуемого контейнера, перезапуск bj после смены контура; реквизиты НРД на шаге 4; точная проверка процедур bj2depo и таблиц Fancy M2M; QUIK — объекты M2M и справочник получателей, без зашитого IP; сертификаты из справочника ИШ (FindCertificates — заглушка), уведомления о сроке за 30/14/7/3/1 день; тексты мастера, нумерация, режим разработки; уникальные id оповещений с русскими заголовками
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"time"
|
||||
|
||||
"git.zetit.ru/zuevav/Bridge-and-Join-s/internal/cryptocli"
|
||||
"git.zetit.ru/zuevav/Bridge-and-Join-s/internal/nsdadapter"
|
||||
)
|
||||
|
||||
type SetupStep struct {
|
||||
@@ -35,15 +36,7 @@ func setupProbes(rc *RuntimeConfig) (string, int) {
|
||||
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.certs = len(ownValidCerts(storeCertsForUI(rc.Snapshot())))
|
||||
setupProbeCache.at = time.Now()
|
||||
return setupProbeCache.validata, setupProbeCache.certs
|
||||
}
|
||||
@@ -60,14 +53,44 @@ func setupSteps(rc *RuntimeConfig) []SetupStep {
|
||||
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) != ""})
|
||||
steps = append(steps, SetupStep{4, "Наша организация", doneOrg(s)})
|
||||
if mnp {
|
||||
steps = append(steps, SetupStep{5, "QUIK МНП", s.Quik.Verified})
|
||||
steps = append(steps, SetupStep{5, "QUIK МНП", doneQuik(s)})
|
||||
}
|
||||
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 != ""},
|
||||
SetupStep{8, "Шлюз НРД", doneNSD(s)},
|
||||
)
|
||||
return steps
|
||||
}
|
||||
|
||||
// ownValidCerts — свои сертификаты (с закрытым ключом), срок которых не истёк: только они делают шаг
|
||||
// «Сертификаты» выполненным (сертификаты НРД и УЦ в хранилище есть и без ключа организации).
|
||||
func ownValidCerts(certs []cryptocli.Certificate) []cryptocli.Certificate {
|
||||
var out []cryptocli.Certificate
|
||||
now := time.Now()
|
||||
for _, c := range certs {
|
||||
if c.HasPrivateKey && (c.NotAfter.IsZero() || c.NotAfter.After(now)) {
|
||||
out = append(out, c)
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// doneOrg — организация и её депозитарные реквизиты в НРД заданы (без них перевод не сформировать).
|
||||
func doneOrg(s Settings) bool {
|
||||
return orgCode(s) != "" && orgINN(s) != "" && s.NSD.DeponentCode != "" && s.NSD.AccountID != "" && s.NSD.SectionID != ""
|
||||
}
|
||||
|
||||
// doneQuik — подключение к МНП проверено и ключевые объекты M2M видны.
|
||||
func doneQuik(s Settings) bool { return s.Quik.Verified && s.Quik.M2MMissing == "" }
|
||||
|
||||
// doneNSD — адрес ИШ задан и профиль известен bj (неизвестный профиль — молча режим имитации).
|
||||
func doneNSD(s Settings) bool {
|
||||
if s.NSD.IGWBaseURL == "" || s.NSD.Profile == "" {
|
||||
return false
|
||||
}
|
||||
_, err := nsdadapter.LookupProfile(s.NSD.Profile)
|
||||
return err == nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user