func New()

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
}