mirror of
https://codeberg.org/Codeberg/pages-server.git
synced 2024-11-18 10:29:43 +00:00
Propagate ETag from gitea (#93)
close #15 Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://codeberg.org/Codeberg/pages-server/pulls/93
This commit is contained in:
parent
cc32bab31f
commit
4c6164ef05
4 changed files with 20 additions and 8 deletions
|
@ -23,7 +23,7 @@ func TestGetRedirect(t *testing.T) {
|
||||||
if !assert.EqualValues(t, http.StatusTemporaryRedirect, resp.StatusCode) {
|
if !assert.EqualValues(t, http.StatusTemporaryRedirect, resp.StatusCode) {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
assert.EqualValues(t, "https://www.cabr2.de/", resp.Header["Location"][0])
|
assert.EqualValues(t, "https://www.cabr2.de/", resp.Header.Get("Location"))
|
||||||
assert.EqualValues(t, 0, getSize(resp.Body))
|
assert.EqualValues(t, 0, getSize(resp.Body))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,9 +35,10 @@ func TestGetContent(t *testing.T) {
|
||||||
if !assert.EqualValues(t, http.StatusOK, resp.StatusCode) {
|
if !assert.EqualValues(t, http.StatusOK, resp.StatusCode) {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
assert.EqualValues(t, "image/jpeg", resp.Header["Content-Type"][0])
|
assert.EqualValues(t, "image/jpeg", resp.Header.Get("Content-Type"))
|
||||||
assert.EqualValues(t, "124635", resp.Header["Content-Length"][0])
|
assert.EqualValues(t, "124635", resp.Header.Get("Content-Length"))
|
||||||
assert.EqualValues(t, 124635, getSize(resp.Body))
|
assert.EqualValues(t, 124635, getSize(resp.Body))
|
||||||
|
assert.Len(t, resp.Header.Get("ETag"), 42)
|
||||||
|
|
||||||
// specify branch
|
// specify branch
|
||||||
resp, err = getTestHTTPSClient().Get("https://momar.localhost.mock.directory:4430/pag/@master/")
|
resp, err = getTestHTTPSClient().Get("https://momar.localhost.mock.directory:4430/pag/@master/")
|
||||||
|
@ -45,8 +46,9 @@ func TestGetContent(t *testing.T) {
|
||||||
if !assert.EqualValues(t, http.StatusOK, resp.StatusCode) {
|
if !assert.EqualValues(t, http.StatusOK, resp.StatusCode) {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
assert.EqualValues(t, "text/html; charset=utf-8", resp.Header["Content-Type"][0])
|
assert.EqualValues(t, "text/html; charset=utf-8", resp.Header.Get("Content-Type"))
|
||||||
assert.True(t, getSize(resp.Body) > 1000)
|
assert.True(t, getSize(resp.Body) > 1000)
|
||||||
|
assert.Len(t, resp.Header.Get("ETag"), 42)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCustomDomain(t *testing.T) {
|
func TestCustomDomain(t *testing.T) {
|
||||||
|
@ -56,8 +58,8 @@ func TestCustomDomain(t *testing.T) {
|
||||||
if !assert.EqualValues(t, http.StatusOK, resp.StatusCode) {
|
if !assert.EqualValues(t, http.StatusOK, resp.StatusCode) {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
assert.EqualValues(t, "text/markdown; charset=utf-8", resp.Header["Content-Type"][0])
|
assert.EqualValues(t, "text/markdown; charset=utf-8", resp.Header.Get("Content-Type"))
|
||||||
assert.EqualValues(t, "106", resp.Header["Content-Length"][0])
|
assert.EqualValues(t, "106", resp.Header.Get("Content-Length"))
|
||||||
assert.EqualValues(t, 106, getSize(resp.Body))
|
assert.EqualValues(t, 106, getSize(resp.Body))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,8 +71,8 @@ func TestGetNotFound(t *testing.T) {
|
||||||
if !assert.EqualValues(t, http.StatusNotFound, resp.StatusCode) {
|
if !assert.EqualValues(t, http.StatusNotFound, resp.StatusCode) {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
assert.EqualValues(t, "text/html; charset=utf-8", resp.Header["Content-Type"][0])
|
assert.EqualValues(t, "text/html; charset=utf-8", resp.Header.Get("Content-Type"))
|
||||||
assert.EqualValues(t, "37", resp.Header["Content-Length"][0])
|
assert.EqualValues(t, "37", resp.Header.Get("Content-Length"))
|
||||||
assert.EqualValues(t, 37, getSize(resp.Body))
|
assert.EqualValues(t, 37, getSize(resp.Body))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ type Client struct {
|
||||||
|
|
||||||
type FileResponse struct {
|
type FileResponse struct {
|
||||||
Exists bool
|
Exists bool
|
||||||
|
ETag []byte
|
||||||
MimeType string
|
MimeType string
|
||||||
Body []byte
|
Body []byte
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ var branchExistenceCacheTimeout = 5 * time.Minute
|
||||||
|
|
||||||
// fileCacheTimeout specifies the timeout for the file content cache - you might want to make this quite long, depending
|
// fileCacheTimeout specifies the timeout for the file content cache - you might want to make this quite long, depending
|
||||||
// on your available memory.
|
// on your available memory.
|
||||||
|
// TODO: move as option into cache interface
|
||||||
var fileCacheTimeout = 5 * time.Minute
|
var fileCacheTimeout = 5 * time.Minute
|
||||||
|
|
||||||
// fileCacheSizeLimit limits the maximum file size that will be cached, and is set to 1 MB by default.
|
// fileCacheSizeLimit limits the maximum file size that will be cached, and is set to 1 MB by default.
|
||||||
|
|
|
@ -161,6 +161,14 @@ func (o *Options) Upstream(ctx *fasthttp.RequestCtx, giteaClient *gitea.Client,
|
||||||
mimeType := o.getMimeTypeByExtension()
|
mimeType := o.getMimeTypeByExtension()
|
||||||
ctx.Response.Header.SetContentType(mimeType)
|
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 {
|
if ctx.Response.StatusCode() != fasthttp.StatusNotFound {
|
||||||
// Everything's okay so far
|
// Everything's okay so far
|
||||||
ctx.Response.SetStatusCode(fasthttp.StatusOK)
|
ctx.Response.SetStatusCode(fasthttp.StatusOK)
|
||||||
|
|
Loading…
Reference in a new issue