// Package assets hält die eingebetteten Presets und Custom-Scripte. package assets import ( "embed" "strings" ) //go:embed presets scripts var embedded embed.FS // ScriptContent liefert den Inhalt einer gebündelten Script-Vorlage. func ScriptContent(name string) (string, bool) { b, err := embedded.ReadFile("scripts/" + name) if err != nil { return "", false } return string(b), true } // ScriptNames listet alle gebündelten Script-Vorlagen. func ScriptNames() []string { entries, err := embedded.ReadDir("scripts") if err != nil { return nil } names := make([]string, 0, len(entries)) for _, e := range entries { if !e.IsDir() { names = append(names, e.Name()) } } return names } // PresetFiles liefert Dateiname → Inhalt aller eingebetteten Presets. func PresetFiles() map[string]string { entries, err := embedded.ReadDir("presets") if err != nil { return nil } files := make(map[string]string, len(entries)) for _, e := range entries { if e.IsDir() { continue } if b, err := embedded.ReadFile("presets/" + e.Name()); err == nil { files[e.Name()] = string(b) } } return files } // MatchScript findet die Vorlage, deren Inhalt zu content passt, und // erkennt damit bereits installierte motd-assist-Scripte. func MatchScript(content string) (string, bool) { return MatchScriptBytes([]byte(content)) } // MatchScriptBytes ist die Byte-Variante von MatchScript. func MatchScriptBytes(b []byte) (string, bool) { content := strings.TrimSpace(string(b)) if content == "" { return "", false } for _, name := range ScriptNames() { if c, ok := ScriptContent(name); ok && strings.TrimSpace(c) == content { return name, true } } return "", false }