60 lines
1.3 KiB
Go
60 lines
1.3 KiB
Go
package main // import "git.fromouter.space/zygovh/caddy-runner"
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
type config struct {
|
|
Backends map[string]struct {
|
|
Servers map[string]struct{ URL string }
|
|
}
|
|
Frontends map[string]struct {
|
|
EntryPoints []string
|
|
Backend string
|
|
Routes map[string]struct{ Rule string }
|
|
}
|
|
}
|
|
|
|
const PREFIX = "# +rule"
|
|
|
|
func main() {
|
|
dir := flag.String("dir", "/opt/caddy/conf", "Path to Caddy configuration files")
|
|
suffix := flag.String("cfgext", ".conf", "File extension for matching configuration files")
|
|
flag.Parse()
|
|
|
|
checkErr(filepath.Walk(*dir, func(path string, info os.FileInfo, err error) error {
|
|
if strings.ToLower(filepath.Ext(path)) != strings.ToLower(*suffix) {
|
|
return nil
|
|
}
|
|
|
|
// Read file
|
|
data, err := ioutil.ReadFile(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Split by linebreak
|
|
lines := strings.Split(string(data), "\n")
|
|
for _, line := range lines {
|
|
// Skip lines without marked comments
|
|
index := strings.Index(line, PREFIX)
|
|
if index < 0 {
|
|
return nil
|
|
}
|
|
rule := strings.TrimSpace(line[index+len(PREFIX):])
|
|
}
|
|
|
|
return nil
|
|
}), "error while scanning configuration files")
|
|
}
|
|
|
|
func checkErr(err error, errfmt string, args ...interface{}) {
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "[FATAL ERROR] "+errfmt+":\n "+err.Error(), args...)
|
|
}
|
|
}
|