From 04a77a9fba6cf74fcf05b79e8aadce9acb99ce89 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Tue, 20 Jan 2026 16:55:51 -0800 Subject: fix: Use wildcard path for badge endpoint to support .svg extension Go's ServeMux doesn't support wildcards with extensions like {name}.svg, so use {name...} to capture the full path and strip .svg in the handler. --- internal/server/server.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/server/server.go b/internal/server/server.go index b835955..ace36f1 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -78,7 +78,8 @@ func New(cfg *config.Config, store *storage.Storage, sched *monitor.Scheduler, l mux.HandleFunc("GET /api/health", s.handleAPIHealth) // Badge endpoint - always public (for embedding in READMEs, docs) - mux.HandleFunc("GET /api/badge/{name}.svg", s.handleAPIBadge) + // Note: {name...} captures the rest of the path including .svg extension + mux.HandleFunc("GET /api/badge/{name...}", s.handleAPIBadge) // Full page data endpoint - public if refresh_mode=api, otherwise follows api.access if cfg.Display.RefreshMode == "api" { @@ -659,6 +660,9 @@ func (s *Server) handleAPIBadge(w http.ResponseWriter, r *http.Request) { return } + // Strip .svg extension if present + name = strings.TrimSuffix(name, ".svg") + // Get monitor stats stats, err := s.storage.GetMonitorStats(r.Context(), name) if err != nil { -- cgit v1.2.3