summaryrefslogtreecommitdiff
path: root/internal/api/fileserver.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/api/fileserver.go')
-rw-r--r--internal/api/fileserver.go31
1 files changed, 21 insertions, 10 deletions
diff --git a/internal/api/fileserver.go b/internal/api/fileserver.go
index fe4a781c3..042936551 100644
--- a/internal/api/fileserver.go
+++ b/internal/api/fileserver.go
@@ -21,6 +21,7 @@ package api
import (
"github.com/gin-gonic/gin"
"github.com/superseriousbusiness/gotosocial/internal/api/fileserver"
+ "github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/middleware"
"github.com/superseriousbusiness/gotosocial/internal/processing"
"github.com/superseriousbusiness/gotosocial/internal/router"
@@ -30,21 +31,31 @@ type Fileserver struct {
fileserver *fileserver.Module
}
+// maxAge returns an appropriate max-age value for the
+// storage method that's being used.
+//
+// The default max-age is very long to reflect that we
+// never host different files at the same URL (since
+// ULIDs are generated per piece of media), so we can
+// easily prevent clients having to fetch files repeatedly.
+//
+// If we're using non-proxying s3, however, the max age is
+// significantly shorter, to ensure that clients don't
+// cache redirect responses to expired pre-signed URLs.
+func maxAge() string {
+ if config.GetStorageBackend() == "s3" && !config.GetStorageS3Proxy() {
+ return "max-age=86400" // 24h
+ }
+
+ return "max-age=604800" // 7d
+}
+
func (f *Fileserver) Route(r router.Router, m ...gin.HandlerFunc) {
fileserverGroup := r.AttachGroup("fileserver")
// attach middlewares appropriate for this group
fileserverGroup.Use(m...)
- fileserverGroup.Use(
- // Since we'll never host different files at the same
- // URL (bc the ULIDs are generated per piece of media),
- // it's sensible and safe to use a long cache here, so
- // that clients don't keep fetching files over + over again.
- //
- // Nevertheless, we should use 'private' to indicate
- // that there might be media in there which are gated by ACLs.
- middleware.CacheControl("private", "max-age=604800"),
- )
+ fileserverGroup.Use(middleware.CacheControl("private", maxAge()))
f.fileserver.Route(fileserverGroup.Handle)
}