in internal/httpserver/httpserver.go [42:82]
func New(opts *Options, logger *zap.SugaredLogger) (*Server, error) {
if opts.Addr == "" {
return nil, errors.New("a listen address is required")
}
if !(opts.TLSCertificate == "" && opts.TLSKey == "") &&
!(opts.TLSCertificate != "" && opts.TLSKey != "") {
return nil, errors.New("both TLS certificate and key files must be defined")
}
config, err := newConfigFromFile(opts.ConfigPath)
if err != nil {
return nil, err
}
notFoundHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
logger.Debugf("request did not match with any rule: %s", strRequest(r))
w.WriteHeader(404)
if opts.ExitOnUnmatchedRule {
logger.Fatalf("--exit-on-unmatched-rule is set, exiting")
}
})
handler, err := newHandlerFromConfig(config, notFoundHandler, logger)
if err != nil {
return nil, err
}
server := &http.Server{
ReadTimeout: opts.ReadTimeout,
WriteTimeout: opts.WriteTimeout,
MaxHeaderBytes: 1 << 20,
Handler: handler,
}
return &Server{
logger: logger,
opts: opts,
server: server,
}, nil
}