package app import ( "net/http" "path/filepath" "github.com/rs/zerolog" "github.com/xlgmokha/x/pkg/ioc" "github.com/xlgmokha/x/pkg/log" "github.com/xlgmokha/x/pkg/x" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/controllers/dashboard" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/controllers/sparkles" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/middleware" ) type Mountable interface { MountTo(*http.ServeMux) } func New(rootDir string) http.Handler { mux := ioc.MustResolve[*http.ServeMux](ioc.Default) mountable := []Mountable{ ioc.MustResolve[*dashboard.Controller](ioc.Default), ioc.MustResolve[*sparkles.Controller](ioc.Default), } for _, m := range mountable { m.MountTo(mux) } dir := http.Dir(filepath.Join(rootDir, "public")) mux.Handle("GET /", http.FileServer(dir)) logger := ioc.MustResolve[*zerolog.Logger](ioc.Default) return x.Middleware[http.Handler]( mux, log.HTTP(logger), middleware.User(), ) }