48 lines
1.1 KiB
Go
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
|
|
}
|