Peter Kurfer
7c2a41ad25
- apply changes in proxy plugin and TLS interceptor - add HTTPS proxy support - move ca-generation command to main app - minor refactoring to improve API stability - move mocks to extra packages to avoid cycling imports - fix bug in multi-port configuration - change HTTP proxy to redirect to HTTP mock instead of maintaining custom rules
77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/baez90/inetmock/pkg/api"
|
|
"github.com/baez90/inetmock/pkg/logging"
|
|
"github.com/miekg/dns"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type dnsHandler struct {
|
|
logger logging.Logger
|
|
dnsServer []*dns.Server
|
|
}
|
|
|
|
func (d *dnsHandler) Start(config api.HandlerConfig) (err error) {
|
|
options := loadFromConfig(config.Options())
|
|
addr := fmt.Sprintf("%s:%d", config.ListenAddress(), config.Port())
|
|
|
|
handler := ®exHandler{
|
|
fallback: options.Fallback,
|
|
logger: d.logger,
|
|
}
|
|
|
|
for _, rule := range options.Rules {
|
|
d.logger.Info(
|
|
"register DNS rule",
|
|
zap.String("pattern", rule.pattern.String()),
|
|
zap.String("response", rule.response.String()),
|
|
)
|
|
handler.AddRule(rule)
|
|
}
|
|
|
|
d.logger = d.logger.With(
|
|
zap.String("address", addr),
|
|
)
|
|
|
|
d.dnsServer = []*dns.Server{
|
|
{
|
|
Addr: addr,
|
|
Net: "udp",
|
|
Handler: handler,
|
|
},
|
|
{
|
|
Addr: addr,
|
|
Net: "tcp",
|
|
Handler: handler,
|
|
},
|
|
}
|
|
|
|
for _, dnsServer := range d.dnsServer {
|
|
go d.startServer(dnsServer)
|
|
}
|
|
return
|
|
}
|
|
|
|
func (d *dnsHandler) startServer(dnsServer *dns.Server) {
|
|
if err := dnsServer.ListenAndServe(); err != nil {
|
|
d.logger.Error(
|
|
"failed to start DNS server listener",
|
|
zap.Error(err),
|
|
)
|
|
}
|
|
}
|
|
|
|
func (d *dnsHandler) Shutdown() error {
|
|
d.logger.Info("shutting down DNS mock")
|
|
for _, dnsServer := range d.dnsServer {
|
|
if err := dnsServer.Shutdown(); err != nil {
|
|
d.logger.Error(
|
|
"failed to shutdown server",
|
|
zap.Error(err),
|
|
)
|
|
}
|
|
}
|
|
return nil
|
|
}
|