fix(emulators): подмена личности в НРД гаснет по окончании dev-режима

disableEmulatorsIfDevOff сбрасывал только LK.EmulateNSD / Quik.Emulate /
Quik.RealWrite, но не LK.RealNSDTest.Enabled (тест «боевой ЛК → TEST3»).
Из-за этого после истечения dev-режима подмена инвестора оставалась включённой,
а клиент без доступа к dev-вкладкам не мог вернуть стандартный режим.

Теперь сброс LK объединён в одно обновление и гасит и подмену (список паспортов
сохраняется). + тест TestDisableEmulatorsIfDevOffRealNSD.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
fontvielle
2026-10-12 21:15:49 +03:00
parent bb103e9f98
commit fe005c0422
2 changed files with 55 additions and 8 deletions
+18 -8
View File
@@ -186,26 +186,36 @@ func emuOutcomeRu(outcome string) string {
return "подтверждение"
}
// disableEmulatorsIfDevOff — безопасность: эмуляторы НРД/МНП действуют только в режиме
// разработки; когда он заканчивается (по времени dev_until или снят на сервере лицензий),
// флаги сбрасываются из настроек — иначе при следующей выдаче dev-режима эмуляция
// молча оживёт. Вызывается при старте и в цикле продления лицензии.
// disableEmulatorsIfDevOff — безопасность: эмуляторы НРД/МНП и подмена личности в НРД
// («боевой ЛК → тестовый контур») действуют только в режиме разработки; когда он
// заканчивается (по времени dev_until или снят на сервере лицензий), флаги сбрасываются из
// настроек — иначе при следующей выдаче dev-режима эмуляция/подмена молча оживёт, а клиент
// без доступа к dev-вкладкам не смог бы вернуть стандартный режим. Вызывается при старте и в
// цикле продления лицензии.
func disableEmulatorsIfDevOff(rc *RuntimeConfig) {
if rc == nil || devMode(rc) {
return
}
s := rc.Snapshot()
if !s.LK.EmulateNSD && !s.Quik.Emulate && !s.Quik.RealWrite {
if !s.LK.EmulateNSD && !s.LK.RealNSDTest.Enabled && !s.Quik.Emulate && !s.Quik.RealWrite {
return
}
var off []string
if s.LK.EmulateNSD {
// Эмулятор НРД и подмена личности («боевой ЛК → тестовый контур НРД») — оба в настройках LK;
// сбрасываем одним обновлением, чтобы без режима разработки заявки шли под своими данными.
if s.LK.EmulateNSD || s.LK.RealNSDTest.Enabled {
lk := s.LK
lk.EmulateNSD = false
lk.RealNSDTest.Enabled = false
if err := rc.UpdateLK(lk); err != nil {
log.Printf("lk-gateway: авто-сброс эмулятора НРД: %v", err)
log.Printf("lk-gateway: авто-сброс эмулятора/подмены НРД: %v", err)
} else {
off = append(off, "эмулятор НРД (заявки ЛК)")
if s.LK.EmulateNSD {
off = append(off, "эмулятор НРД (заявки ЛК)")
}
if s.LK.RealNSDTest.Enabled {
off = append(off, "подмена личности в НРД (тест «боевой ЛК → TEST3»)")
}
}
}
if s.Quik.Emulate || s.Quik.RealWrite {