diff options
Diffstat (limited to 'plugin/header/setup.go')
-rw-r--r-- | plugin/header/setup.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/plugin/header/setup.go b/plugin/header/setup.go new file mode 100644 index 000000000..b0e67206a --- /dev/null +++ b/plugin/header/setup.go @@ -0,0 +1,50 @@ +package header + +import ( + "fmt" + + "github.com/coredns/coredns/core/dnsserver" + "github.com/coredns/coredns/plugin" + "github.com/coredns/caddy" +) + +func init() { plugin.Register("header", setup) } + +func setup(c *caddy.Controller) error { + rules, err := parse(c) + if err != nil { + return plugin.Error("header", err) + } + + dnsserver.GetConfig(c).AddPlugin(func(next plugin.Handler) plugin.Handler { + return Header{ + Rules: rules, + Next: next, + } + }) + + return nil +} + +func parse(c *caddy.Controller) ([]Rule, error) { + for c.Next() { + var all []Rule + for c.NextBlock() { + v := c.Val() + args := c.RemainingArgs() + // set up rules + rules, err := newRules(v, args) + if err != nil { + return nil, fmt.Errorf("seting up rule: %w", err) + } + all = append(all, rules...) + } + + // return combined rules + if len(all) > 0 { + return all, nil + } + } + return nil, c.ArgErr() + +} |