package deploy import "strings" // DefaultLotlOnionTiers is the ordered LOTL spread contingency chain baked into // the LOTL Onion forge preset and server config unless overridden at runtime. var DefaultLotlOnionTiers = []string{ "vuln_recon", "docker", "wsl", "powershell", "dotnet", "bits_curl", "smb", "winrm", "linux", "gpo", } // NormalizeLotlTiers filters unknown ids and falls back to defaults when empty. func NormalizeLotlTiers(raw []string) []string { allowed := map[string]struct{}{ "vuln_recon": {}, "docker": {}, "wsl": {}, "powershell": {}, "dotnet": {}, "bits_curl": {}, "smb": {}, "winrm": {}, "linux": {}, "gpo": {}, } out := make([]string, 0, len(raw)) for _, t := range raw { t = strings.ToLower(strings.TrimSpace(t)) if t == "bits/curl" { t = "bits_curl" } if _, ok := allowed[t]; ok { out = append(out, t) } } if len(out) == 0 { dup := make([]string, len(DefaultLotlOnionTiers)) copy(dup, DefaultLotlOnionTiers) return dup } return out }