From ba8725a3aa5f3d53f36e2222bc99ab15fedca4f6 Mon Sep 17 00:00:00 2001 From: Michael Kaye <1917473+michaelkaye@users.noreply.github.com> Date: Thu, 17 Feb 2022 11:47:21 +0000 Subject: [PATCH] Factor out serveDirectory into it's own method --- logserver.go | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/logserver.go b/logserver.go index e92aac8..4261151 100644 --- a/logserver.go +++ b/logserver.go @@ -69,6 +69,7 @@ func (f *logServer) ServeHTTP(w http.ResponseWriter, r *http.Request) { serveFile(w, r, upath) } + func serveFile(w http.ResponseWriter, r *http.Request, path string) { d, err := os.Stat(path) if err != nil { @@ -82,20 +83,7 @@ func serveFile(w http.ResponseWriter, r *http.Request, path string) { // if it's a directory, serve a listing or a tarball if d.IsDir() { - format, _ := r.URL.Query()["format"] - if len(format) == 1 && format[0] == "tar.gz" { - log.Println("Serving tarball of", path) - err := serveTarball(w, r, path) - if err != nil { - msg, code := toHTTPError(err) - http.Error(w, msg, code) - log.Println("Error", err) - } - return - } - log.Println("Serving directory listing of", path) - http.ServeFile(w, r, path) - return + serveDirectory(w, r, path) } // if it's a gzipped log file, serve it as text @@ -137,6 +125,24 @@ func extensionToMimeType(path string) string { return "application/octet-stream" } +// Chooses to serve either a directory listing or tarball based on the 'format' parameter. +func serveDirectory(w http.ResponseWriter, r *http.Request, path string) { + format, _ := r.URL.Query()["format"] + if len(format) == 1 && format[0] == "tar.gz" { + log.Println("Serving tarball of", path) + err := serveTarball(w, r, path) + if err != nil { + msg, code := toHTTPError(err) + http.Error(w, msg, code) + log.Println("Error", err) + } + return + } + log.Println("Serving directory listing of", path) + http.ServeFile(w, r, path) + return +} + // Streams a dynamically created tar.gz file with the contents of the given directory // Will serve a partial, corrupted response if there is a error partway through the // operation as we stream the response.