From 6dcb3b4ca088968b209b1b2d9ff9e66ffb595002 Mon Sep 17 00:00:00 2001
From: 6543 <6543@obermui.de>
Date: Tue, 14 Jun 2022 18:01:54 +0200
Subject: [PATCH] propagate ETag

---
 server/gitea/client.go      | 1 +
 server/upstream/upstream.go | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/server/gitea/client.go b/server/gitea/client.go
index 5410413..7b5d009 100644
--- a/server/gitea/client.go
+++ b/server/gitea/client.go
@@ -25,6 +25,7 @@ type Client struct {
 
 type FileResponse struct {
 	Exists   bool
+	ETag     []byte
 	MimeType string
 	Body     []byte
 }
diff --git a/server/upstream/upstream.go b/server/upstream/upstream.go
index da97021..7c9a035 100644
--- a/server/upstream/upstream.go
+++ b/server/upstream/upstream.go
@@ -161,6 +161,14 @@ func (o *Options) Upstream(ctx *fasthttp.RequestCtx, giteaClient *gitea.Client,
 	mimeType := o.getMimeTypeByExtension()
 	ctx.Response.Header.SetContentType(mimeType)
 
+	// Set ETag
+	if cachedResponse.Exists {
+		ctx.Response.Header.SetBytesV(fasthttp.HeaderETag, cachedResponse.ETag)
+	} else if res != nil {
+		cachedResponse.ETag = res.Header.Peek(fasthttp.HeaderETag)
+		ctx.Response.Header.SetBytesV(fasthttp.HeaderETag, cachedResponse.ETag)
+	}
+
 	if ctx.Response.StatusCode() != fasthttp.StatusNotFound {
 		// Everything's okay so far
 		ctx.Response.SetStatusCode(fasthttp.StatusOK)