fix: clear HTTP deadlines before WebSocket upgrade in miniapp log viewer

The HTTP server's WriteTimeout/ReadTimeout (5s) was killing WebSocket
connections after ~5 seconds. Clear deadlines before Upgrade(), matching
the existing pattern in the SSE handler. Also allow same-origin WebSocket
connections for Tailscale direct access.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
dj-oyu 2026-02-24 05:30:04 +09:00
parent b65876896e
commit d77106da2e

View file

@ -220,6 +220,10 @@ var wsUpgrader = websocket.Upgrader{
if origin == "" { if origin == "" {
return true // non-browser clients (e.g. curl) return true // non-browser clients (e.g. curl)
} }
// Allow same-origin requests (e.g. Tailscale direct access)
if u, err := url.Parse(origin); err == nil && u.Host == r.Host {
return true
}
// Allow Telegram WebApp origins and localhost for dev // Allow Telegram WebApp origins and localhost for dev
return strings.HasSuffix(origin, ".telegram.org") || return strings.HasSuffix(origin, ".telegram.org") ||
strings.HasSuffix(origin, ".t.me") || strings.HasSuffix(origin, ".t.me") ||
@ -884,6 +888,11 @@ func (h *Handler) wsLogs(w http.ResponseWriter, r *http.Request) {
minLevel = logger.ParseLevel(levelStr) minLevel = logger.ParseLevel(levelStr)
} }
// Clear HTTP server deadlines before WebSocket hijack
rc := http.NewResponseController(w)
_ = rc.SetWriteDeadline(time.Time{})
_ = rc.SetReadDeadline(time.Time{})
conn, err := wsUpgrader.Upgrade(w, r, nil) conn, err := wsUpgrader.Upgrade(w, r, nil)
if err != nil { if err != nil {
return return