Канал ИШ: необязательные параметры — NULL (иначе ИШ молча выкидывал канал); мастер: шаг «Учётные записи», HTTPS сразу, DEPO без процедур — не блокирует
- bj-igate-admin: пустые строки в числовых/интервальных параметрах канала ИШ разбирал с ошибкой и не загружал канал («There are no active channels», API 500 «more than one Channel…»); теперь NULL, как пишет интерфейс ИШ; старые каналы чинятся при «Создать канал»; папка архивов 1042S — по имени - проверка «Шлюз НРД»: канал контура действительно загружен и включён (api/admin/channels/wsl) - «Учёт DEPO»: нет процедур bj2depo — жёлтое «не забудьте доустановить», не блокирует - HTTPS: перенаправление с http:// включено по умолчанию, только когда HTTPS реально слушает порт - мастер: шаг «Учётные записи» (роли, создание, «Придумать пароль») перед проверкой; письма с проверки убраны; форма «создать» не меняет существующую запись с тем же логином Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -54,6 +54,37 @@ func igateState(ctx context.Context, base string) (bool, string) {
|
||||
return true, "шлюз отвечает по адресу " + base + ", движок работает"
|
||||
}
|
||||
|
||||
// igateChannelState — загрузил ли ИШ канал с этим составным кодом (<канал контура><код депонента>) и включён ли он.
|
||||
// Движок может быть Running и без единого канала: ИШ молча выкидывает канал, который не смог прочитать из базы
|
||||
// (06.10.2026 на .29: пустые строки вместо NULL в необязательных параметрах), — и тогда любой обмен даёт HTTP 500.
|
||||
func igateChannelState(ctx context.Context, base, code string) (found, enabled bool, err error) {
|
||||
base = strings.TrimRight(pickStr(strings.TrimSpace(base), igateDefaultURL), "/")
|
||||
cctx, cancel := context.WithTimeout(ctx, 5*time.Second)
|
||||
defer cancel()
|
||||
req, _ := http.NewRequestWithContext(cctx, http.MethodGet, base+"/api/admin/channels/wsl", nil)
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return false, false, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return false, false, fmt.Errorf("HTTP %s", resp.Status)
|
||||
}
|
||||
var list []struct {
|
||||
Code string `json:"code"`
|
||||
IsEnabled bool `json:"isEnabled"`
|
||||
}
|
||||
if err := json.NewDecoder(io.LimitReader(resp.Body, 1<<20)).Decode(&list); err != nil {
|
||||
return false, false, err
|
||||
}
|
||||
for _, c := range list {
|
||||
if strings.EqualFold(c.Code, code) {
|
||||
return true, c.IsEnabled, nil
|
||||
}
|
||||
}
|
||||
return false, false, nil
|
||||
}
|
||||
|
||||
func registerIgate(mux *http.ServeMux, rc *RuntimeConfig) {
|
||||
registerIgateAdmin(mux, rc)
|
||||
mux.HandleFunc("/admin/setup/igate/state", func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
Reference in New Issue
Block a user