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" "git.schreifuchs.ch/schreifuchs/schreifuchs.ch/web/layouts" "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) } renderer := layouts.New(s.cfg) _ = resthome.New(mux, renderer, 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 }