diff --git a/cmd/dkl-local-server/upstream.go b/cmd/dkl-local-server/upstream.go index 0abf486..332ad09 100644 --- a/cmd/dkl-local-server/upstream.go +++ b/cmd/dkl-local-server/upstream.go @@ -35,7 +35,30 @@ func (_ upstreamServer) ServeHTTP(w http.ResponseWriter, req *http.Request) { return } - http.ServeFile(w, req, outPath) + f, err := os.Open(outPath) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte(err.Error() + "\n")) + return + } + defer f.Close() + + h := sha1.New() + if _, err := io.Copy(h, f); err != nil { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte(err.Error() + "\n")) + return + } + sha1Hex := hex.EncodeToString(h.Sum(nil)) + w.Header().Set("X-Content-SHA1", sha1Hex) + + if _, err := f.Seek(0, 0); err != nil { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte(err.Error() + "\n")) + return + } + + http.ServeContent(w, req, outPath, time.Time{}, f) } func distFetch(path ...string) (outPath string, err error) {