feat: better caching headers for images
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/components/images"
|
||||
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/components/page"
|
||||
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/components/translate"
|
||||
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/handlers/rest"
|
||||
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/handlers/resthome"
|
||||
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/handlers/restimage"
|
||||
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/pkg/filesystem"
|
||||
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/pkg/middleware"
|
||||
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/pkg/templer"
|
||||
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/web/layouts"
|
||||
"github.com/studio-b12/gowebdav"
|
||||
"github.com/valkey-io/valkey-go"
|
||||
)
|
||||
|
||||
func (s *Server) allRoutes() (h http.Handler, err error) {
|
||||
mux := http.NewServeMux()
|
||||
|
||||
registerStatic(mux)
|
||||
|
||||
other, err := s.dynamicRoutes()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
mux.Handle("/", other)
|
||||
|
||||
h = mux
|
||||
h = templer.Middleware(h)
|
||||
h = middleware.Logging(h)
|
||||
return h, nil
|
||||
}
|
||||
|
||||
func (s *Server) dynamicRoutes() (h http.Handler, err error) {
|
||||
mux := http.NewServeMux()
|
||||
|
||||
webdavClient := gowebdav.NewClient(s.cfg.FileSystem.URL, s.cfg.FileSystem.User, s.cfg.FileSystem.Password)
|
||||
err = webdavClient.Connect()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("could not connect webdavClient: %w", err)
|
||||
return
|
||||
}
|
||||
|
||||
var fs filesystem.FS = webdavClient
|
||||
|
||||
valkeyClient, err := valkey.NewClient(valkey.ClientOption{
|
||||
InitAddress: s.cfg.Cache.InitAddress,
|
||||
Password: s.cfg.Cache.Password,
|
||||
})
|
||||
if err != nil {
|
||||
err = fmt.Errorf("failed to create valkey client: %w", err)
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
} else {
|
||||
fs = filesystem.NewCachedClient(webdavClient, valkeyClient, 5*time.Hour)
|
||||
}
|
||||
|
||||
mux.Handle("/images/", rest.Use(
|
||||
restimage.New(images.New(fs, s.cfg.Image, valkeyClient)),
|
||||
middleware.Cache(time.Hour*24*5),
|
||||
))
|
||||
|
||||
translator := translate.New()
|
||||
renderer := layouts.New(s.cfg)
|
||||
|
||||
mux.Handle("/", rest.Use(
|
||||
resthome.New(renderer, page.New(fs)),
|
||||
translator.Middleware,
|
||||
middleware.Cache(time.Minute),
|
||||
))
|
||||
|
||||
return mux, nil
|
||||
}
|
||||
Reference in New Issue
Block a user