From 6178a7784f3a49831270102c643c2bc1c155ae07 Mon Sep 17 00:00:00 2001 From: Quadrubo <71718414+Quadrubo@users.noreply.github.com> Date: Fri, 17 Apr 2026 17:43:43 +0200 Subject: [PATCH] perf: resolve client tokens once at startup --- server/internal/config/config.go | 9 +++++++++ server/internal/server/server.go | 7 +------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/server/internal/config/config.go b/server/internal/config/config.go index 840b89f..3537fa8 100644 --- a/server/internal/config/config.go +++ b/server/internal/config/config.go @@ -105,6 +105,15 @@ func Load(envFile string) (*Config, error) { return nil, err } + for i := range cfg.Clients { + c := &cfg.Clients[i] + t, err := c.ResolveToken() + if err != nil { + return nil, fmt.Errorf("config: reading token for client %q: %w", c.ID, err) + } + c.Token = t + } + return cfg, nil } diff --git a/server/internal/server/server.go b/server/internal/server/server.go index e9e1493..9c0ee57 100644 --- a/server/internal/server/server.go +++ b/server/internal/server/server.go @@ -49,12 +49,7 @@ func (s *Server) authenticate(r *http.Request) *config.Client { return nil } for i := range s.cfg.Clients { - t, err := s.cfg.Clients[i].ResolveToken() - if err != nil { - slog.Warn("cannot read token for client", "client", s.cfg.Clients[i].ID, "error", err) - continue - } - if subtle.ConstantTimeCompare([]byte(t), []byte(token)) == 1 { + if subtle.ConstantTimeCompare([]byte(s.cfg.Clients[i].Token), []byte(token)) == 1 { return &s.cfg.Clients[i] } }