diff options
| author | bndw <ben@bdw.to> | 2026-03-09 12:48:39 -0700 |
|---|---|---|
| committer | bndw <ben@bdw.to> | 2026-03-09 12:48:39 -0700 |
| commit | 0bd392e076e36c80a152abe00cbcd0bc9efedd9c (patch) | |
| tree | 2727cf8a030e675fa86082b56faf9fee4ddc45b1 /relay/server.go | |
| parent | 2c1ec8f9e964c2e89eee900299db667d9a58db25 (diff) | |
feat: add axon CLI for pub/sub; fix relay hijack context bug
- cmd/axon: new CLI module with keygen, pub, and req subcommands
- keygen: generate Ed25519 keypair, print hex seed and pubkey
- pub: sign and publish an event; accepts --kind, --content, --tag
- req: query/stream events as JSON lines; accepts --kind, --author,
--tag, --since, --until, --limit, --stream
- key loaded from --key flag or AXON_KEY env var
- relay/websocket: add Dial() for client-side WebSocket handshake
(ws:// and wss://, RFC 6455 masking via client:true)
- relay/server: fix broken-pipe on auth by switching hijacked conn
goroutine from r.Context() to context.Background(); r.Context() is
cancelled by net/http immediately after Hijack is called
Diffstat (limited to 'relay/server.go')
| -rw-r--r-- | relay/server.go | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/relay/server.go b/relay/server.go index 085929c..d4a1edd 100644 --- a/relay/server.go +++ b/relay/server.go | |||
| @@ -98,7 +98,10 @@ func (s *Server) handleWS(w http.ResponseWriter, r *http.Request) { | |||
| 98 | s.mu.Add(1) | 98 | s.mu.Add(1) |
| 99 | go func() { | 99 | go func() { |
| 100 | defer s.mu.Done() | 100 | defer s.mu.Done() |
| 101 | ctx := r.Context() | 101 | // r.Context() is cancelled by the HTTP server when Hijack is called, |
| 102 | // so we use a fresh context. The connection manages its own lifecycle | ||
| 103 | // via the ping loop and WebSocket close frames. | ||
| 104 | ctx := context.Background() | ||
| 102 | h.serve(ctx) | 105 | h.serve(ctx) |
| 103 | if err := c.CloseConn(); err != nil { | 106 | if err := c.CloseConn(); err != nil { |
| 104 | // Ignore close errors — connection may already be gone. | 107 | // Ignore close errors — connection may already be gone. |
