api/plugins/http_proxy/main.go

63 lines
1.2 KiB
Go
Raw Normal View History

2020-04-08 22:59:22 +00:00
package main
import (
"fmt"
2020-04-08 22:59:22 +00:00
"github.com/baez90/inetmock/internal/config"
"github.com/baez90/inetmock/pkg/logging"
2020-04-08 22:59:22 +00:00
"go.uber.org/zap"
"gopkg.in/elazarl/goproxy.v1"
"net/http"
2020-04-08 22:59:22 +00:00
)
const (
name = "http_proxy"
)
type httpProxy struct {
logger logging.Logger
proxy *goproxy.ProxyHttpServer
server *http.Server
2020-04-08 22:59:22 +00:00
}
func (h *httpProxy) Start(config config.HandlerConfig) (err error) {
options := loadFromConfig(config.Options())
addr := fmt.Sprintf("%s:%d", config.ListenAddress(), config.Port())
h.server = &http.Server{Addr: addr, Handler: h.proxy}
h.logger = h.logger.With(
zap.String("address", addr),
)
proxyHandler := &proxyHttpHandler{
options: options,
logger: h.logger,
}
h.proxy.OnRequest().Do(proxyHandler)
go h.startProxy()
return
}
func (h *httpProxy) startProxy() {
if err := h.server.ListenAndServe(); err != nil {
h.logger.Error(
"failed to start proxy server",
zap.Error(err),
)
}
2020-04-08 22:59:22 +00:00
}
func (h *httpProxy) Shutdown() (err error) {
h.logger.Info("Shutting down HTTP proxy")
if err = h.server.Close(); err != nil {
h.logger.Error(
"failed to shutdown proxy endpoint",
zap.Error(err),
)
err = fmt.Errorf(
"failed to shutdown proxy endpoint: %w",
err,
)
}
return
2020-04-08 22:59:22 +00:00
}