Files
schreifuchs.ch/internal/server/routes.go
T
schreifuchs eab7eb3879
/ publish (push) Successful in 3m1s
chore: better config
2026-03-07 20:55:04 +01:00

64 lines
1.8 KiB
Go

package server
import (
"log/slog"
"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/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/templer"
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/web"
"github.com/studio-b12/gowebdav"
"github.com/valkey-io/valkey-go"
)
func (s *Server) RegisterRoutes() (h http.Handler) {
mux := http.NewServeMux()
registerStatic(mux)
mux.Handle("/", s.registerOther())
h = mux
h = templer.Middleware(h)
h = s.loggingMiddleware(h)
return h
}
func (s *Server) registerOther() (h http.Handler) {
mux := http.NewServeMux()
webdavClient := gowebdav.NewClient(s.cfg.FileSystem.URL, s.cfg.FileSystem.User, s.cfg.FileSystem.Password)
if err := webdavClient.Connect(); err != nil {
slog.Error("could not connect webdavClient", "err", err)
}
var fs filesystem.FS = webdavClient
valkeyClient, err := valkey.NewClient(valkey.ClientOption{
InitAddress: s.cfg.Cache.InitAddress,
Password: s.cfg.Cache.Password,
})
if err != nil {
slog.Error("failed to create valkey client", "err", err)
} else {
fs = filesystem.NewCachedClient(webdavClient, valkeyClient, 5*time.Hour)
}
_ = resthome.New(mux, page.New(fs))
_ = restimage.New(mux, images.New(fs, s.cfg.Image, valkeyClient))
mux.Handle("/", http.FileServer(http.FS(web.GetStaticFS())))
translator := translate.New()
h = mux
h = translator.Middleware(h)
h = cacheMiddleware(time.Minute * 5)(h)
return h
}