Канал ИШ: необязательные параметры — 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:
zuevav
2026-10-06 23:19:01 +03:00
parent b3f3454e4a
commit 44f00a006a
12 changed files with 264 additions and 47 deletions
+20
View File
@@ -1209,9 +1209,25 @@ func (v UsersView) RoleNote(k string) string {
}
func (h *setupHandlers) usersFlash(w http.ResponseWriter, r *http.Request, msg string) {
if safeReturnPath(r.FormValue("return_to")) != "" { // форма из мастера (шаг «Учётные записи») — туда же
setupFlash(w, r, msg)
return
}
http.Redirect(w, r, "/admin/setup?flash="+url.QueryEscape(msg)+"#users", http.StatusSeeOther)
}
// doneUsers — кроме администратора заведена хотя бы одна действующая учётная запись: у каждого сотрудника свой
// вход, и в журнале видно, кто что сделал.
func doneUsers() bool {
n := 0
for _, u := range globalUsers.List() {
if u.Active {
n++
}
}
return n > 1
}
func (h *setupHandlers) saveUser(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "method", http.StatusMethodNotAllowed)
@@ -1230,6 +1246,10 @@ func (h *setupHandlers) saveUser(w http.ResponseWriter, r *http.Request) {
}
u := globalUsers.Get(login)
isNew := u == nil
if !isNew && r.FormValue("create") != "" { // форма «создать» не должна молча менять существующую запись
h.usersFlash(w, r, "Пользователи: логин «"+login+"» уже занят — выберите другой.")
return
}
if isNew {
u = &User{Login: login, Source: "local", Active: true, CreatedAt: time.Now()}
}