From afdc2478caa3e0b4292af963d51e690efeffe3a4 Mon Sep 17 00:00:00 2001 From: Neil Twigg Date: Tue, 20 Jun 2023 11:32:43 +0100 Subject: [PATCH] WebSocket-specific `INFO` This fixes #4252 by ensuring that `tls_available`, `tls_required`, `host` and `port` are populated based on the WebSocket listener rather than standard listeners. Signed-off-by: Neil Twigg --- server/client.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/server/client.go b/server/client.go index 6586a5db..bcedd134 100644 --- a/server/client.go +++ b/server/client.go @@ -2167,6 +2167,25 @@ func (c *client) generateClientInfoJSON(info Info) []byte { info.MaxPayload = c.mpay if c.isWebsocket() { info.ClientConnectURLs = info.WSConnectURLs + if c.srv != nil { // Otherwise lame duck info can panic + c.srv.websocket.mu.RLock() + info.TLSAvailable = c.srv.websocket.tls + if c.srv.websocket.server != nil { + if tc := c.srv.websocket.server.TLSConfig; tc != nil { + info.TLSRequired = !tc.InsecureSkipVerify + } + } + if c.srv.websocket.listener != nil { + laddr := c.srv.websocket.listener.Addr().String() + if h, p, err := net.SplitHostPort(laddr); err == nil { + if p, err := strconv.Atoi(p); err == nil { + info.Host = h + info.Port = p + } + } + } + c.srv.websocket.mu.RUnlock() + } } info.WSConnectURLs = nil // Generate the info json