81 lines
2.2 KiB
Go
81 lines
2.2 KiB
Go
package server
|
|
|
|
import (
|
|
"log/slog"
|
|
"net/http"
|
|
"os"
|
|
"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/filesystem"
|
|
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/handlers/handlehome"
|
|
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/handlers/handleimage"
|
|
"git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/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("/", registerOther())
|
|
|
|
h = mux
|
|
h = templer.Middleware(h)
|
|
h = s.loggingMiddleware(h)
|
|
return h
|
|
}
|
|
|
|
func registerOther() (h http.Handler) {
|
|
mux := http.NewServeMux()
|
|
|
|
webdavClient := gowebdav.NewClient("https://cloud.schreifuchs.ch/remote.php/dav/files/test/website", "test", os.Getenv("TEST_PW"))
|
|
if err := webdavClient.Connect(); err != nil {
|
|
slog.Error("could not connect webdavClient", "err", err, "pw", os.Getenv("TEST_PW"))
|
|
}
|
|
|
|
var fs filesystem.FS = webdavClient
|
|
|
|
valkeyAddr := os.Getenv("VALKEY_ADDR")
|
|
if valkeyAddr == "" {
|
|
valkeyAddr = "127.0.0.1:6379"
|
|
}
|
|
valkeyClient, err := valkey.NewClient(valkey.ClientOption{
|
|
InitAddress: []string{valkeyAddr},
|
|
Password: os.Getenv("VALKEY_PASSWORD"),
|
|
})
|
|
if err != nil {
|
|
slog.Error("failed to create valkey client", "err", err)
|
|
} else {
|
|
fs = filesystem.NewCachedClient(webdavClient, valkeyClient, 5*time.Minute)
|
|
}
|
|
|
|
_ = handlehome.New(mux, page.New(fs))
|
|
_ = handleimage.New(mux, images.New(fs))
|
|
|
|
mux.Handle("/", http.FileServer(http.FS(web.GetStaticFS())))
|
|
|
|
translator := translate.New()
|
|
|
|
h = mux
|
|
h = translator.Middleware(h)
|
|
h = cacheMiddleware(time.Second * 45)(h)
|
|
return h
|
|
}
|
|
|
|
func (s *Server) loggingMiddleware(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
start := time.Now()
|
|
next.ServeHTTP(w, r)
|
|
slog.Info("request",
|
|
"method", r.Method,
|
|
"path", r.URL.Path,
|
|
"duration", time.Since(start),
|
|
)
|
|
})
|
|
}
|