Files
EvoBGP/internal/birdfmt/fragment.go
T

48 lines
1.1 KiB
Go

package birdfmt
import (
"fmt"
"strings"
)
// ManagedBanner returns a comment block marking EvoBGP-generated files (optional first line in bird.d/*.conf).
func ManagedBanner(revisionHint string) string {
rev := strings.TrimSpace(revisionHint)
var b strings.Builder
b.WriteString("# EvoBGP generated — do not edit by hand.\n")
if rev != "" {
b.WriteString("# Revision: ")
b.WriteString(rev)
b.WriteByte('\n')
}
return b.String()
}
// JoinFragments concatenates non-empty text blocks with a blank line between them.
func JoinFragments(parts ...string) string {
var out []string
for _, p := range parts {
p = strings.TrimSpace(p)
if p == "" {
continue
}
out = append(out, p)
}
if len(out) == 0 {
return ""
}
return strings.Join(out, "\n\n") + "\n"
}
// ValidateIncludePath rejects paths that could break out of the config directory.
func ValidateIncludePath(p string) error {
p = strings.TrimSpace(p)
if p == "" {
return fmt.Errorf("birdfmt: include path is empty")
}
if strings.Contains(p, "..") {
return fmt.Errorf("birdfmt: include path must not contain '..': %q", p)
}
return nil
}