From 359f6a1cba3f2e281cefa727db34e3497dc15a2c Mon Sep 17 00:00:00 2001 From: radhitya Date: Thu, 18 Jun 2026 18:17:19 +0700 Subject: add custom forwarders --- internal/config/config.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'internal/config') diff --git a/internal/config/config.go b/internal/config/config.go index f2624c2..1fa8069 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -27,8 +27,10 @@ type CacheConfig struct { } type ResolverConfig struct { + Mode string `toml:"mode"` Timeout string `toml:"timeout"` MaxDelegations int `toml:"max_delegations"` + Forwarders []string `toml:"forwarders"` } type BlocklistConfig struct { @@ -71,6 +73,7 @@ func Default() Config{ MaxEntries: 100000, }, Resolver: ResolverConfig{ + Mode: "recursive", Timeout: "2s", MaxDelegations: 30, }, @@ -111,6 +114,12 @@ func Merge(dst, src Config) Config { if src.Resolver.MaxDelegations > 0 { dst.Resolver.MaxDelegations = src.Resolver.MaxDelegations } + if src.Resolver.Mode != "" { + dst.Resolver.Mode = src.Resolver.Mode + } + if len(src.Resolver.Forwarders) > 0 { + dst.Resolver.Forwarders = src.Resolver.Forwarders + } if src.Blocklist.Response != "" { dst.Blocklist.Response = src.Blocklist.Response } @@ -148,5 +157,15 @@ func (c Config) Validate() error { default: return fmt.Errorf("invalid blocklist response %q (want zero_ip or nxdomain)", c.Blocklist.Response) } + + switch c.Resolver.Mode { + case "recursive", "forward", "": + // nothing happened lol + default: + return fmt.Errorf("invalid resolver mode %q (recursive or forward)", c.Resolver.Mode) + } + if c.Resolver.Mode == "forward" && len(c.Resolver.Forwarders) == 0 { + return fmt.Errorf("resolver mode=forward requires at least one forwarder") + } return nil } -- cgit v1.2.3