From 0996167865993e7d9a9aed4ae67b0763d2b87d64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ask=20Bj=C3=B8rn=20Hansen?= Date: Sat, 19 Apr 2025 22:19:02 -0700 Subject: [PATCH] modernize + gofumpt --- apitls/apitls.go | 1 - config/config_test.go | 2 -- ekko/ekko.go | 12 ++++++++++-- health/health_test.go | 1 - kafka/kafka.go | 3 --- logger/logfmt.go | 1 - logger/logfmt_test.go | 2 -- logger/logger.go | 20 ++++++++++++-------- logger/stdlog.go | 6 +++--- metricsserver/metrics.go | 2 -- timeutil/duration.go | 2 +- timeutil/duration_test.go | 1 - tracing/tracing.go | 2 +- tracing/tracing_test.go | 2 -- types/log_scores.go | 2 +- ulid/ulid.go | 4 +--- version/version.go | 3 +++ xff/fastlyxff/xff_test.go | 3 --- 18 files changed, 32 insertions(+), 37 deletions(-) diff --git a/apitls/apitls.go b/apitls/apitls.go index a0ec79c..4e1bb04 100644 --- a/apitls/apitls.go +++ b/apitls/apitls.go @@ -30,7 +30,6 @@ func CAPool() (*x509.CertPool, error) { // GetCertman sets up certman for the specified cert / key pair. It is // used in the monitor-api and (for now) in the client func GetCertman(certFile, keyFile string) (*certman.CertMan, error) { - cm, err := certman.New(certFile, keyFile) if err != nil { return nil, err diff --git a/config/config_test.go b/config/config_test.go index b3a5f94..f353498 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -7,7 +7,6 @@ import ( ) func TestBaseURL(t *testing.T) { - os.Setenv("web_hostname", "www.ntp.dev, web.ntppool.dev") os.Setenv("web_tls", "yes") @@ -22,5 +21,4 @@ func TestBaseURL(t *testing.T) { if u != "https://www.ntp.dev/foo?foo=bar" { t.Fatalf("unexpected WebURL: %s", u) } - } diff --git a/ekko/ekko.go b/ekko/ekko.go index 899c33f..e0d3d6d 100644 --- a/ekko/ekko.go +++ b/ekko/ekko.go @@ -16,6 +16,7 @@ import ( "go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" + "golang.org/x/net/http2" "golang.org/x/sync/errgroup" ) @@ -50,7 +51,8 @@ func (ek *Ekko) Start(ctx context.Context) error { g.Go(func() error { e.Server.Addr = fmt.Sprintf(":%d", ek.port) log.Info("server starting", "port", ek.port) - err := e.Server.ListenAndServe() + // err := e.Server.ListenAndServe() + err := e.StartH2CServer(e.Server.Addr, &http2.Server{}) if err == http.ErrServerClosed { return nil } @@ -120,7 +122,13 @@ func (ek *Ekko) setup(ctx context.Context) (*echo.Echo, error) { e.Use(middleware.Gzip()) } - e.Use(middleware.Secure()) + secureConfig := middleware.DefaultSecureConfig + // secureConfig.ContentSecurityPolicy = "default-src *" + secureConfig.ContentSecurityPolicy = "" + secureConfig.HSTSMaxAge = int(time.Hour * 168 * 30 / time.Second) + secureConfig.HSTSPreloadEnabled = true + + e.Use(middleware.SecureWithConfig(secureConfig)) e.Use( func(next echo.HandlerFunc) echo.HandlerFunc { diff --git a/health/health_test.go b/health/health_test.go index dfee501..1094034 100644 --- a/health/health_test.go +++ b/health/health_test.go @@ -8,7 +8,6 @@ import ( ) func TestHealthHandler(t *testing.T) { - req := httptest.NewRequest(http.MethodGet, "/__health", nil) w := httptest.NewRecorder() diff --git a/kafka/kafka.go b/kafka/kafka.go index aa263cf..3377105 100644 --- a/kafka/kafka.go +++ b/kafka/kafka.go @@ -42,11 +42,9 @@ type Kafka struct { l *log.Logger // wr *kafka.Writer - } func (k *Kafka) tlsConfig() (*tls.Config, error) { - cm, err := certman.New(k.tls.Cert, k.tls.Key) if err != nil { return nil, err @@ -189,7 +187,6 @@ func (k *Kafka) brokerAddrs() []string { } func (k *Kafka) NewWriter(topic string) (*kafka.Writer, error) { - // https://pkg.go.dev/github.com/segmentio/kafka-go#Writer w := &kafka.Writer{ Addr: kafka.TCP(k.brokerAddrs()...), diff --git a/logger/logfmt.go b/logger/logfmt.go index 14844e3..9a81b51 100644 --- a/logger/logfmt.go +++ b/logger/logfmt.go @@ -17,7 +17,6 @@ type logfmt struct { } func newLogFmtHandler(next slog.Handler) slog.Handler { - buf := bytes.NewBuffer([]byte{}) h := &logfmt{ diff --git a/logger/logfmt_test.go b/logger/logfmt_test.go index 768d84d..bcc1ef6 100644 --- a/logger/logfmt_test.go +++ b/logger/logfmt_test.go @@ -9,7 +9,6 @@ import ( ) func TestLogFmt(t *testing.T) { - var buf bytes.Buffer jsonh := slog.NewJSONHandler(&buf, nil) h := newLogFmtHandler(jsonh) @@ -39,5 +38,4 @@ func TestLogFmt(t *testing.T) { t.Log("didn't find message in output") t.Fail() } - } diff --git a/logger/logger.go b/logger/logger.go index ccadc63..66ecb26 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -15,17 +15,21 @@ import ( var ConfigPrefix = "" -var textLogger *slog.Logger -var otlpLogger *slog.Logger -var multiLogger *slog.Logger +var ( + textLogger *slog.Logger + otlpLogger *slog.Logger + multiLogger *slog.Logger +) -var setupText sync.Once // this sets the default -var setupOtlp sync.Once // this never sets the default -var setupMulti sync.Once // this sets the default, and will always run after the others -var mu sync.Mutex +var ( + setupText sync.Once // this sets the default + setupOtlp sync.Once // this never sets the default + setupMulti sync.Once // this sets the default, and will always run after the others + mu sync.Mutex +) func setupStdErrHandler() slog.Handler { - var programLevel = new(slog.LevelVar) // Info by default + programLevel := new(slog.LevelVar) // Info by default envVar := "DEBUG" if len(ConfigPrefix) > 0 { diff --git a/logger/stdlog.go b/logger/stdlog.go index dfcb020..0f331b4 100644 --- a/logger/stdlog.go +++ b/logger/stdlog.go @@ -27,15 +27,15 @@ func NewStdLog(key string, debug bool, log *slog.Logger) *stdLoggerish { return sl } -func (l stdLoggerish) Println(msg ...interface{}) { +func (l stdLoggerish) Println(msg ...any) { l.f(l.key, "msg", msg) } -func (l stdLoggerish) Printf(msg string, args ...interface{}) { +func (l stdLoggerish) Printf(msg string, args ...any) { l.f(l.key, "msg", fmt.Sprintf(msg, args...)) } -func (l stdLoggerish) Fatalf(msg string, args ...interface{}) { +func (l stdLoggerish) Fatalf(msg string, args ...any) { l.log.Error(l.key, "msg", fmt.Sprintf(msg, args...)) panic("fatal error") // todo: does this make sense at all? } diff --git a/metricsserver/metrics.go b/metricsserver/metrics.go index bbaadb0..bee1541 100644 --- a/metricsserver/metrics.go +++ b/metricsserver/metrics.go @@ -32,7 +32,6 @@ func (m *Metrics) Registry() *prometheus.Registry { } func (m *Metrics) Handler() http.Handler { - log := logger.NewStdLog("prom http", false, nil) return promhttp.HandlerFor(m.r, promhttp.HandlerOpts{ @@ -46,7 +45,6 @@ func (m *Metrics) Handler() http.Handler { // the specified port. The server will shutdown and return when // the provided context is done func (m *Metrics) ListenAndServe(ctx context.Context, port int) error { - log := logger.Setup() srv := &http.Server{ diff --git a/timeutil/duration.go b/timeutil/duration.go index 5721ed5..458092a 100644 --- a/timeutil/duration.go +++ b/timeutil/duration.go @@ -15,7 +15,7 @@ func (d Duration) MarshalJSON() ([]byte, error) { } func (d *Duration) UnmarshalJSON(b []byte) error { - var v interface{} + var v any if err := json.Unmarshal(b, &v); err != nil { return err } diff --git a/timeutil/duration_test.go b/timeutil/duration_test.go index 3b808e2..23a9399 100644 --- a/timeutil/duration_test.go +++ b/timeutil/duration_test.go @@ -18,5 +18,4 @@ func TestDuration(t *testing.T) { if foo.Foo.Seconds() != 30 { t.Fatalf("parsed time.Duration wasn't 30 seconds: %s", foo.Foo) } - } diff --git a/tracing/tracing.go b/tracing/tracing.go index 2ba4ac9..bc0986e 100644 --- a/tracing/tracing.go +++ b/tracing/tracing.go @@ -237,7 +237,7 @@ func newOLTPExporter(ctx context.Context, cfg *TracerConfig) (sdktrace.SpanExpor } client = otlptracegrpc.NewClient(opts...) - case "http/protobuf": + case "http/protobuf", "http/json": opts := []otlptracehttp.Option{ otlptracehttp.WithCompression(otlptracehttp.GzipCompression), } diff --git a/tracing/tracing_test.go b/tracing/tracing_test.go index dac057a..bda498b 100644 --- a/tracing/tracing_test.go +++ b/tracing/tracing_test.go @@ -7,7 +7,6 @@ import ( ) func TestInit(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -18,5 +17,4 @@ func TestInit(t *testing.T) { t.FailNow() } defer shutdownFn(ctx) - } diff --git a/types/log_scores.go b/types/log_scores.go index 0184485..70cfdac 100644 --- a/types/log_scores.go +++ b/types/log_scores.go @@ -29,7 +29,7 @@ func (lsa *LogScoreAttributes) Value() (driver.Value, error) { return json.Marshal(lsa) } -func (lsa *LogScoreAttributes) Scan(value interface{}) error { +func (lsa *LogScoreAttributes) Scan(value any) error { var source []byte _t := LogScoreAttributes{} diff --git a/ulid/ulid.go b/ulid/ulid.go index feb1e63..291831a 100644 --- a/ulid/ulid.go +++ b/ulid/ulid.go @@ -14,8 +14,7 @@ import ( ) var monotonicPool = sync.Pool{ - New: func() interface{} { - + New: func() any { log := logger.Setup() var seed int64 @@ -39,7 +38,6 @@ var monotonicPool = sync.Pool{ } func MakeULID(t time.Time) (*oklid.ULID, error) { - mono := monotonicPool.Get().(io.Reader) id, err := oklid.New(oklid.Timestamp(t), mono) diff --git a/version/version.go b/version/version.go index e0e66b9..0d07a55 100644 --- a/version/version.go +++ b/version/version.go @@ -168,6 +168,9 @@ func CheckVersion(version, minimumVersion string) bool { if version == "dev-snapshot" { return true } + if idx := strings.Index(version, "/"); idx >= 0 { + version = version[0:idx] + } if semver.Compare(version, minimumVersion) < 0 { // log.Debug("version too old", "v", cl.Version.Version) return false diff --git a/xff/fastlyxff/xff_test.go b/xff/fastlyxff/xff_test.go index e048e48..b1b391a 100644 --- a/xff/fastlyxff/xff_test.go +++ b/xff/fastlyxff/xff_test.go @@ -3,14 +3,12 @@ package fastlyxff import "testing" func TestFastlyIPRanges(t *testing.T) { - fastlyxff, err := New("fastly.json") if err != nil { t.Fatalf("could not load test data: %s", err) } data, err := fastlyxff.EchoTrustOption() - if err != nil { t.Fatalf("could not parse test data: %s", err) } @@ -19,5 +17,4 @@ func TestFastlyIPRanges(t *testing.T) { t.Logf("only got %d prefixes, expected more", len(data)) t.Fail() } - }