From 5a6c878fb5b58775853b6fbd52e9f9c71d40b721 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 16 Jul 2021 12:23:00 +0200 Subject: [PATCH] add option for selecting layout to graph handler and using circo as new default --- cmd/kg/handlers.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/cmd/kg/handlers.go b/cmd/kg/handlers.go index 3296a7a..4213487 100644 --- a/cmd/kg/handlers.go +++ b/cmd/kg/handlers.go @@ -76,16 +76,27 @@ func (h *graphHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { buf := bytes.NewBufferString(dot) format := r.URL.Query().Get("format") - if format == "" { - format = "svg" - } else if format == ".dot" || format == ".gv" { + if format == "dot" || format == "gv" { // If the raw dot data is requested, return it as string. // This allows client-side rendering rather than server-side. w.Write(buf.Bytes()) return + } else if format == "" { + format = "svg" + } else if format != "png" && format != "bmp" && format != "fig" && format != "gif" && format != "json" && format != "ps" { + http.Error(w, "unsupported format", http.StatusInternalServerError) + return } - command := exec.Command("dot", "-T"+format) + layout := r.URL.Query().Get("layout") + if layout == "" { + layout = "circo" + } else if layout != "dot" && layout != "neato" && format != "twopi" && format != "fdp" { + http.Error(w, "unsupported layout", http.StatusInternalServerError) + return + } + + command := exec.Command("dot", "-K"+layout, "-T"+format) command.Stderr = os.Stderr stdin, err := command.StdinPipe()