api/internal/endpoint/handler/dns/mock/protocol_options.go
Peter Kurfer d70ba748f5 Introduce Lifecycle for every endpoint and manage listeners in the renamed Orchestrator
- merge packages to get a more concise layout because plugins are no more and therefore there's not a lot to be exported
- fix test logger
- rework config parsing to be easier and more transparent
- remove unnecessary APIs because dynamic endpoint handling is rather a won't implement
2021-02-10 20:26:45 +00:00

57 lines
968 B
Go

package mock
import (
"net"
"regexp"
"gitlab.com/inetmock/inetmock/internal/endpoint"
)
type resolverRule struct {
pattern *regexp.Regexp
response net.IP
}
type dnsOptions struct {
Rules []resolverRule
Fallback ResolverFallback
}
func loadFromConfig(lifecycle endpoint.Lifecycle) (options dnsOptions, err error) {
type rule struct {
Pattern string
Response string
}
type fallback struct {
Strategy string
Args map[string]interface{}
}
opts := struct {
Rules []rule
Fallback fallback
}{}
err = lifecycle.UnmarshalOptions(&opts)
for _, rule := range opts.Rules {
var err error
var rr resolverRule
if rr.pattern, err = regexp.Compile(rule.Pattern); err != nil {
continue
}
if rr.response = net.ParseIP(rule.Response); rr.response == nil {
continue
}
options.Rules = append(options.Rules, rr)
}
options.Fallback = CreateResolverFallback(
opts.Fallback.Strategy,
opts.Fallback.Args,
)
return
}