diff --git a/Makefile b/Makefile index 414d789..4f3fa4b 100755 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ build: cp src/gossa.go gossa.go make -C gossa-ui/ go vet && go fmt - CGO_ENABLED=0 go build -o gossa + CGO_ENABLED=0 go build -ldflags "-s -w" -o gossa rm gossa.go install: @@ -48,11 +48,11 @@ watch-test: build-all: cp src/gossa.go gossa.go make -C gossa-ui/ - env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o gossa-linux64 - env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -o gossa-linux-arm - env CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o gossa-linux-arm64 - env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o gossa-mac - env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o gossa-windows.exe + env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o gossa-linux64 + env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "-s -w" -o gossa-linux-arm + env CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags "-s -w" -o gossa-linux-arm64 + env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o gossa-mac + env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o gossa-windows.exe rm gossa.go clean: @@ -64,3 +64,4 @@ clean: -rm gossa-linux-arm64 -rm gossa-mac -rm gossa-windows.exe + diff --git a/src/gossa.go b/src/gossa.go index 7807bc4..5d6d0b5 100755 --- a/src/gossa.go +++ b/src/gossa.go @@ -2,6 +2,7 @@ package main import ( "archive/zip" + "compress/gzip" "encoding/json" "errors" "flag" @@ -80,7 +81,7 @@ func humanize(bytes int64) string { } } -func replyList(w http.ResponseWriter, fullPath string, path string) { +func replyList(w http.ResponseWriter, r *http.Request, fullPath string, path string) { _files, err := ioutil.ReadDir(fullPath) check(err) sort.Slice(_files, func(i, j int) bool { return strings.ToLower(_files[i].Name()) < strings.ToLower(_files[j].Name()) }) @@ -116,7 +117,15 @@ func replyList(w http.ResponseWriter, fullPath string, path string) { } } - page.Execute(w, p) + if strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") { + w.Header().Set("Content-Type", "text/html") + w.Header().Add("Content-Encoding", "gzip") + gz, _ := gzip.NewWriterLevel(w, gzip.BestSpeed) // BestSpeed is much faster than Default on a very unscientific local test, and only ~30% larger (compression remains still very effective, ~6x) + defer gz.Close() + page.Execute(gz, p) + } else { + page.Execute(w, p) + } } func doContent(w http.ResponseWriter, r *http.Request) { @@ -132,7 +141,7 @@ func doContent(w http.ResponseWriter, r *http.Request) { check(errStat) if stat.IsDir() { - replyList(w, fullPath, path) + replyList(w, r, fullPath, path) } else { fs.ServeHTTP(w, r) }