diff --git a/internal/handlers/resthome/controller.go b/internal/handlers/resthome/controller.go index 0c22bb2..a911787 100644 --- a/internal/handlers/resthome/controller.go +++ b/internal/handlers/resthome/controller.go @@ -3,7 +3,6 @@ package resthome import ( "net/http" - "git.schreifuchs.ch/schreifuchs/schreifuchs.ch/web/layouts" "git.schreifuchs.ch/schreifuchs/schreifuchs.ch/web/pages" ) @@ -14,7 +13,7 @@ func (h *Handler) home(w http.ResponseWriter, r *http.Request) { return } - layouts.Render(r.Context(), w, r, pages.Home(pageHeaders)) + h.r.Render(r.Context(), w, r, pages.Home(pageHeaders)) } func (h *Handler) page(w http.ResponseWriter, r *http.Request) { @@ -26,5 +25,5 @@ func (h *Handler) page(w http.ResponseWriter, r *http.Request) { return } - layouts.Render(r.Context(), w, r, pages.ContentPage(page)) + h.r.Render(r.Context(), w, r, pages.ContentPage(page)) } diff --git a/internal/handlers/resthome/resource.go b/internal/handlers/resthome/resource.go index f1d0cb2..a9b78f1 100644 --- a/internal/handlers/resthome/resource.go +++ b/internal/handlers/resthome/resource.go @@ -2,18 +2,22 @@ package resthome import ( "context" + "io" "net/http" "git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/components/page" + "github.com/a-h/templ" ) type Handler struct { src pageService + r renderer } -func New(mux *http.ServeMux, srv pageService) *Handler { +func New(mux *http.ServeMux, renderer renderer, srv pageService) *Handler { h := &Handler{ src: srv, + r: renderer, } mux.HandleFunc("GET /{$}", h.home) @@ -25,3 +29,6 @@ type pageService interface { GetPages(ctx context.Context) ([]page.PageHeader, error) GetPage(ctx context.Context, uid string) (page.Page, error) } +type renderer interface { + Render(ctx context.Context, w io.Writer, r *http.Request, component templ.Component) +} diff --git a/internal/pkg/config/default.go b/internal/pkg/config/default.go index eb9030e..5ec370e 100644 --- a/internal/pkg/config/default.go +++ b/internal/pkg/config/default.go @@ -6,5 +6,9 @@ func Default() Cfg { Concurency: 10, Quality: 80, }, + Tracking: &UmamiConfig{ + ScriptSrc: "https://umami.schreifuchs.ch/script.js", + WebsiteID: "54d8a379-77d5-4c20-b46d-5c9a6c9e39bd", + }, } } diff --git a/internal/pkg/config/resource.go b/internal/pkg/config/resource.go index e5f7725..7ff973b 100644 --- a/internal/pkg/config/resource.go +++ b/internal/pkg/config/resource.go @@ -10,6 +10,7 @@ type Cfg struct { FileSystem *WebdavConfig `env:", prefix=FILESYSTEM_"` Cache *ValkeyConfig `env:", prefix=CACHE_"` Image *ImageConfig `env:", prefix=IMAGE_"` + Tracking *UmamiConfig `env:", prefix=TRACKING_"` } type WebdavConfig struct { @@ -36,6 +37,11 @@ type ImageConfig struct { Quality int `env:"QUALITY"` } +type UmamiConfig struct { + ScriptSrc string `env:"SCRIPT_SRC"` + WebsiteID string `env:"WEBSITE_ID"` +} + func Read(ctx context.Context) (cfg Cfg, err error) { cfg = Default() err = envconfig.ProcessWith(ctx, &envconfig.Config{ diff --git a/internal/server/routes.go b/internal/server/routes.go index efacfbe..0f9c706 100644 --- a/internal/server/routes.go +++ b/internal/server/routes.go @@ -13,6 +13,7 @@ import ( "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" ) @@ -31,7 +32,6 @@ func (s *Server) RegisterRoutes() (h http.Handler) { 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) @@ -49,7 +49,9 @@ func (s *Server) registerOther() (h http.Handler) { fs = filesystem.NewCachedClient(webdavClient, valkeyClient, 5*time.Hour) } - _ = resthome.New(mux, page.New(fs)) + 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()))) diff --git a/web/layouts/base.templ b/web/layouts/base.templ index 26d11c5..0f772b5 100644 --- a/web/layouts/base.templ +++ b/web/layouts/base.templ @@ -3,8 +3,9 @@ package layouts import "git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/components/translate" import "strings" import "git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/pkg/templer" +import "git.schreifuchs.ch/schreifuchs/schreifuchs.ch/internal/pkg/config" -templ Base(title string) { +templ Base(cfg config.Cfg, title string) { @@ -15,6 +16,7 @@ templ Base(title string) { +