Папки шлюза: тестовый — igate_exchange_test, боевой — igate_exchange; все папки в сообщении; Samba — в установщике
- Имена папок: тестовый контур — igate_exchange_test, боевой — igate_exchange (было igate_exchange и igate_exchange_prod); bj переименовывает открытые по прежней схеме сам — при сверке, в первый раз через 30 с после запуска. - После сохранения — все открытые папки с контуром: \\IP\igate_exchange_test (тестовый TEST3), \\IP\igate_exchange (боевой). - Закрыть папки — Samba выключается (сервер не отвечает по SMB, пока папок нет). - Установщик (bj-installer, preseed Debian, слой пакетов образа Ubuntu): samba, winbind, libnss-winbind — заранее, чтобы в закрытом контуре папки открывались без интернета; необязательной частью (нет на диске и нет сети — установка bj продолжается); службы выключены до открытия папок. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -203,6 +203,23 @@ func igateShareSync(ctx context.Context, rc *RuntimeConfig) (string, error) {
|
||||
if on, _ := st["on"].(bool); !on {
|
||||
return "папки закрыты — сверять нечего", nil
|
||||
}
|
||||
if man, _ := st["manual"].(bool); man {
|
||||
return "папки открыты вручную — bj их не меняет", nil
|
||||
}
|
||||
// прежние имена (тестовый — igate_exchange, боевой — igate_exchange_prod) → новые (_test и без суффикса)
|
||||
if sh, _ := st["shares"].([]any); igateShareOldNames(sh) {
|
||||
p := map[string]string{"enabled": "true", "mode": "simple"}
|
||||
if m, _ := st["mode"].(string); m == "domain" {
|
||||
valid, err := igateShareValid(rc.Snapshot().Auth)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
p = map[string]string{"enabled": "true", "mode": "domain", "valid": valid}
|
||||
} else {
|
||||
p["user"], _ = st["user"].(string)
|
||||
}
|
||||
return igateShareApply(ctx, p, "папки переименованы: тестовый — igate_exchange_test, боевой — igate_exchange")
|
||||
}
|
||||
if m, _ := st["mode"].(string); m != "domain" {
|
||||
return "простой режим — доступ по одному логину", nil
|
||||
}
|
||||
@@ -213,7 +230,11 @@ func igateShareSync(ctx context.Context, rc *RuntimeConfig) (string, error) {
|
||||
if cur, _ := st["user"].(string); cur == valid {
|
||||
return "список доступа не изменился", nil
|
||||
}
|
||||
extra, _ := json.Marshal(map[string]string{"enabled": "true", "mode": "domain", "valid": valid})
|
||||
return igateShareApply(ctx, map[string]string{"enabled": "true", "mode": "domain", "valid": valid}, "доступ к папкам шлюза обновлён: "+valid)
|
||||
}
|
||||
|
||||
func igateShareApply(ctx context.Context, p map[string]string, done string) (string, error) {
|
||||
extra, _ := json.Marshal(p)
|
||||
res, err := runKeymediaOp(ctx, "igate-share", map[string]string{"extra": string(extra)})
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -222,8 +243,18 @@ func igateShareSync(ctx context.Context, rc *RuntimeConfig) (string, error) {
|
||||
e, _ := res["error"].(string)
|
||||
return "", fmt.Errorf("%s", e)
|
||||
}
|
||||
log.Printf("igate-share: доступ к папкам шлюза обновлён: %s", valid)
|
||||
return "доступ обновлён: " + valid, nil
|
||||
log.Printf("igate-share: %s", done)
|
||||
return done, nil
|
||||
}
|
||||
|
||||
// igateShareOldNames — папки открыты по прежней схеме имён (до 07.10.2026: боевой был igate_exchange_prod).
|
||||
func igateShareOldNames(shares []any) bool {
|
||||
for _, x := range shares {
|
||||
if n, _ := x.(string); n == "igate_exchange_prod" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// igateShareSyncSoon — после изменения групп или сотрудников: сверить доступ к папкам в фоне (раз в несколько
|
||||
@@ -255,10 +286,12 @@ func igateShareSyncSoon(rc *RuntimeConfig) {
|
||||
func (s *Server) igateShareSyncLoop(ctx context.Context) {
|
||||
t := time.NewTicker(15 * time.Minute)
|
||||
defer t.Stop()
|
||||
first := time.After(30 * time.Second) // после запуска (обновления) — сразу, а не через 15 минут
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case <-first:
|
||||
case <-t.C:
|
||||
}
|
||||
c, cancel := context.WithTimeout(ctx, 2*time.Minute)
|
||||
|
||||
Reference in New Issue
Block a user