diff --git a/server/gitea/client.go b/server/gitea/client.go index bfc56d3..0bf3d11 100644 --- a/server/gitea/client.go +++ b/server/gitea/client.go @@ -187,12 +187,13 @@ func (client *Client) ServeRawContent(targetOwner, targetRepo, ref, resource str // Check if size of gzipped response is greater than fileCacheSizeLimit and return gzipped // response but uncached or return non-gzip response if not supported - len := int64(buf.Len()); - shouldRespBeSavedToCache := len < fileCacheSizeLimit + shouldRespBeSavedToCache := int64(buf.Len()) < fileCacheSizeLimit if !shouldRespBeSavedToCache { - return io.NopCloser(buf), resp.Response.Header, resp.StatusCode, err - } else if !shouldRespBeSavedToCache && !acceptsGzip { - return reader, resp.Response.Header, resp.StatusCode, err + if acceptsGzip { + return io.NopCloser(buf), resp.Response.Header, resp.StatusCode, err + } else { + return reader, resp.Response.Header, resp.StatusCode, err + } } // now we write to cache and respond at the same time diff --git a/server/upstream/upstream.go b/server/upstream/upstream.go index d315397..d3073f6 100644 --- a/server/upstream/upstream.go +++ b/server/upstream/upstream.go @@ -202,16 +202,14 @@ func (o *Options) Upstream(ctx *context.Context, giteaClient *gitea.Client, redi } // Decompress response if gzip is not supported - r := reader - if !acceptsGzip { - r, err = gzip.NewReader(reader) - if err != nil { - log.Error().Err(err).Msgf("Couldn't decompress for %q", o.TargetPath) - html.ReturnErrorPage(ctx, "", http.StatusInternalServerError) - return true - } - } else { + if acceptsGzip { ctx.RespWriter.Header().Set("Content-Encoding", "gzip") + } else if r, err := gzip.NewReader(reader); err == nil { + reader = r + } else { + log.Error().Err(err).Msgf("Couldn't decompress for %q", o.TargetPath) + html.ReturnErrorPage(ctx, "", http.StatusInternalServerError) + return true } // Set ETag & MIME @@ -223,7 +221,7 @@ func (o *Options) Upstream(ctx *context.Context, giteaClient *gitea.Client, redi // Write the response body to the original request if reader != nil { - _, err := io.Copy(ctx.RespWriter, r) + _, err := io.Copy(ctx.RespWriter, reader) if err != nil { log.Error().Err(err).Msgf("Couldn't write body for %q", o.TargetPath) html.ReturnErrorPage(ctx, "", http.StatusInternalServerError)