diff --git a/Justfile b/Justfile
index a908e7a..c824efa 100644
--- a/Justfile
+++ b/Justfile
@@ -21,6 +21,10 @@ lint: tool-golangci tool-gofumpt
fmt: tool-gofumpt
gofumpt -w --extra .
+clean:
+ go clean ./...
+ rm -rf build/
+
tool-golangci:
@hash golangci-lint> /dev/null 2>&1; if [ $? -ne 0 ]; then \
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest; \
diff --git a/html/404.html b/html/404.html
index 08ab16d..b7ec96e 100644
--- a/html/404.html
+++ b/html/404.html
@@ -23,11 +23,11 @@
- This page was not found!
+ Page not found!
- Sorry, this page doesn't exist or is inaccessible for other reasons (%status).
- We hope this is not our fault ;) - Make sure to check the troubleshooting section in the Docs!
+ Sorry, but this page couldn't be found or is inaccessible (%status).
+ We hope this isn't a problem on our end ;) - Make sure to check the troubleshooting section in the Docs!
diff --git a/integration/get_test.go b/integration/get_test.go
index 1997010..8af40f0 100644
--- a/integration/get_test.go
+++ b/integration/get_test.go
@@ -59,6 +59,8 @@ func TestGetContent(t *testing.T) {
assert.EqualValues(t, "text/html; charset=utf-8", resp.Header.Get("Content-Type"))
assert.True(t, getSize(resp.Body) > 100)
assert.Len(t, resp.Header.Get("ETag"), 42)
+
+ // TODO: test get of non cachable content (content size > fileCacheSizeLimit)
}
func TestCustomDomain(t *testing.T) {
diff --git a/server/gitea/client_fasthttp.go b/server/gitea/client_fasthttp.go
index cebe2cd..c667e0a 100644
--- a/server/gitea/client_fasthttp.go
+++ b/server/gitea/client_fasthttp.go
@@ -59,9 +59,6 @@ func (client *Client) ServeRawContent(uri string) (*fasthttp.Response, error) {
return nil, err
}
- // fasthttp else will set "Content-Length: 0"
- resp.SetBodyStream(&strings.Reader{}, -1)
-
switch res.StatusCode() {
case fasthttp.StatusOK:
return res, nil
diff --git a/server/setup.go b/server/setup.go
index 9a332aa..6476d41 100644
--- a/server/setup.go
+++ b/server/setup.go
@@ -7,12 +7,20 @@ import (
"net/http"
"time"
+ "github.com/rs/zerolog/log"
+
"github.com/valyala/fasthttp"
"codeberg.org/codeberg/pages/server/cache"
"codeberg.org/codeberg/pages/server/utils"
)
+type fasthttpLogger struct{}
+
+func (fasthttpLogger) Printf(format string, args ...interface{}) {
+ log.Printf("[FASTHTTP] "+format, args...)
+}
+
func SetupServer(handler fasthttp.RequestHandler) *fasthttp.Server {
// Enable compression by wrapping the handler with the compression function provided by FastHTTP
compressedHandler := fasthttp.CompressHandlerBrotliLevel(handler, fasthttp.CompressBrotliBestSpeed, fasthttp.CompressBestSpeed)
@@ -23,6 +31,7 @@ func SetupServer(handler fasthttp.RequestHandler) *fasthttp.Server {
NoDefaultServerHeader: true,
NoDefaultDate: true,
ReadTimeout: 30 * time.Second, // needs to be this high for ACME certificates with ZeroSSL & HTTP-01 challenge
+ Logger: fasthttpLogger{},
}
}
diff --git a/server/upstream/upstream.go b/server/upstream/upstream.go
index 7c9a035..5e888ac 100644
--- a/server/upstream/upstream.go
+++ b/server/upstream/upstream.go
@@ -181,6 +181,9 @@ func (o *Options) Upstream(ctx *fasthttp.RequestCtx, giteaClient *gitea.Client,
var cacheBodyWriter bytes.Buffer
if res != nil {
if res.Header.ContentLength() > fileCacheSizeLimit {
+ // fasthttp else will set "Content-Length: 0"
+ ctx.Response.SetBodyStream(&strings.Reader{}, -1)
+
err = res.BodyWriteTo(ctx.Response.BodyWriter())
} else {
// TODO: cache is half-empty if request is cancelled - does the ctx.Err() below do the trick?
@@ -196,7 +199,7 @@ func (o *Options) Upstream(ctx *fasthttp.RequestCtx, giteaClient *gitea.Client,
}
log.Debug().Msg("response")
- if res != nil && ctx.Err() == nil {
+ if res != nil && res.Header.ContentLength() > fileCacheSizeLimit && ctx.Err() == nil {
cachedResponse.Exists = true
cachedResponse.MimeType = mimeType
cachedResponse.Body = cacheBodyWriter.Bytes()