From 1527a7313ca46cd646737fb05c33908fba034df9 Mon Sep 17 00:00:00 2001 From: bndw Date: Fri, 13 Feb 2026 21:31:09 -0800 Subject: fix: allow WebSocket upgrades to bypass HTML index WebSocket connections start as GET requests with 'Upgrade: websocket' header. The handler was serving HTML for ALL GET requests, preventing WebSocket upgrades from ever happening. Fix by checking for Upgrade header and only serving HTML/NIP-11 for non-WebSocket GET requests. Now WebSocket connections return status 101 (Switching Protocols) instead of 200 (OK). --- internal/handler/websocket/handler.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'internal') diff --git a/internal/handler/websocket/handler.go b/internal/handler/websocket/handler.go index 2d531e9..c285df6 100644 --- a/internal/handler/websocket/handler.go +++ b/internal/handler/websocket/handler.go @@ -43,8 +43,8 @@ func (h *Handler) SetIndexData(grpcAddr, httpAddr, wsAddr string) { } func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - // Handle GET requests - if r.Method == "GET" { + // Handle GET requests (but not WebSocket upgrades) + if r.Method == "GET" && r.Header.Get("Upgrade") != "websocket" { accept := r.Header.Get("Accept") // NIP-11: Relay information document @@ -58,6 +58,7 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } + // Handle WebSocket upgrade conn, err := websocket.Accept(w, r) if err != nil { log.Printf("WebSocket accept failed: %v", err) -- cgit v1.2.3