From 978d6af91afe1daaf9efb36ff59fe3a3a512be9d Mon Sep 17 00:00:00 2001 From: Mihai Parparita Date: Wed, 30 Nov 2022 17:06:21 -0800 Subject: [PATCH] ipn/ipnlocal: tweak error handling in interfaces PeerAPI debug endpoint We were writing the error when getting the default interface before setting the content type, so we'd get HTML treated as plain text. Signed-off-by: Mihai Parparita --- ipn/ipnlocal/peerapi.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/ipn/ipnlocal/peerapi.go b/ipn/ipnlocal/peerapi.go index 49d646d4b..7fd2ed443 100644 --- a/ipn/ipnlocal/peerapi.go +++ b/ipn/ipnlocal/peerapi.go @@ -725,18 +725,20 @@ func (h *peerAPIHandler) handleServeInterfaces(w http.ResponseWriter, r *http.Re http.Error(w, "denied; no debug access", http.StatusForbidden) return } - i, err := interfaces.GetList() - if err != nil { - http.Error(w, err.Error(), 500) + w.Header().Set("Content-Type", "text/html; charset=utf-8") + fmt.Fprintln(w, "

Interfaces

") + + if dr, err := interfaces.DefaultRoute(); err == nil { + fmt.Fprintf(w, "

Default route is %q(%d)

\n", html.EscapeString(dr.InterfaceName), dr.InterfaceIndex) + } else { + fmt.Fprintf(w, "

Could not get the default route: %s

\n", html.EscapeString(err.Error())) } - dr, err := interfaces.DefaultRoute() + i, err := interfaces.GetList() if err != nil { - http.Error(w, err.Error(), 500) + fmt.Fprintf(w, "Could not get interfaces: %s\n", html.EscapeString(err.Error())) + return } - w.Header().Set("Content-Type", "text/html; charset=utf-8") - fmt.Fprintln(w, "

Interfaces

") - fmt.Fprintf(w, "

Default route is %q(%d)

\n", dr.InterfaceName, dr.InterfaceIndex) fmt.Fprintln(w, "") fmt.Fprint(w, "") @@ -747,7 +749,7 @@ func (h *peerAPIHandler) handleServeInterfaces(w http.ResponseWriter, r *http.Re i.ForeachInterface(func(iface interfaces.Interface, ipps []netip.Prefix) { fmt.Fprint(w, "") for _, v := range []any{iface.Index, iface.Name, iface.MTU, iface.Flags, ipps} { - fmt.Fprintf(w, " ", v) + fmt.Fprintf(w, " ", html.EscapeString(fmt.Sprintf("%v", v))) } fmt.Fprint(w, "\n") })
%v%s