diff options
| author | bndw <ben@bdw.to> | 2026-02-13 21:31:09 -0800 |
|---|---|---|
| committer | bndw <ben@bdw.to> | 2026-02-13 21:31:09 -0800 |
| commit | 1527a7313ca46cd646737fb05c33908fba034df9 (patch) | |
| tree | f250effb887aaa7e85a68af59e155066d66f3e33 | |
| parent | f59a1c7ad8c571f1eaaf148941741cd4026a519f (diff) | |
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).
| -rw-r--r-- | internal/handler/websocket/handler.go | 5 |
1 files changed, 3 insertions, 2 deletions
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) { | |||
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { | 45 | func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { |
| 46 | // Handle GET requests | 46 | // Handle GET requests (but not WebSocket upgrades) |
| 47 | if r.Method == "GET" { | 47 | if r.Method == "GET" && r.Header.Get("Upgrade") != "websocket" { |
| 48 | accept := r.Header.Get("Accept") | 48 | accept := r.Header.Get("Accept") |
| 49 | 49 | ||
| 50 | // NIP-11: Relay information document | 50 | // NIP-11: Relay information document |
| @@ -58,6 +58,7 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { | |||
| 58 | return | 58 | return |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | // Handle WebSocket upgrade | ||
| 61 | conn, err := websocket.Accept(w, r) | 62 | conn, err := websocket.Accept(w, r) |
| 62 | if err != nil { | 63 | if err != nil { |
| 63 | log.Printf("WebSocket accept failed: %v", err) | 64 | log.Printf("WebSocket accept failed: %v", err) |
