diff options
Diffstat (limited to 'pkg/handler/config/handler.go')
-rw-r--r-- | pkg/handler/config/handler.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/pkg/handler/config/handler.go b/pkg/handler/config/handler.go new file mode 100644 index 0000000..c278e35 --- /dev/null +++ b/pkg/handler/config/handler.go @@ -0,0 +1,65 @@ +package config + +import ( + "bytes" + "encoding/json" + "log/slog" + "net/http" + + "github.com/alecthomas/chroma/v2/formatters/html" + "github.com/alecthomas/chroma/v2/lexers" + "github.com/alecthomas/chroma/v2/styles" + + "git.gabrielgio.me/cerrado/pkg/config" + "git.gabrielgio.me/cerrado/templates" +) + +type ( + configurationRepository interface { + GetRootReadme() string + List() []*config.GitRepositoryConfiguration + } +) + +func ConfigFile(configRepo configurationRepository) func(http.ResponseWriter, *http.Request) { + return func(w http.ResponseWriter, _ *http.Request) { + + config := struct { + RootReadme string + Repositories []*config.GitRepositoryConfiguration + }{ + RootReadme: configRepo.GetRootReadme(), + Repositories: configRepo.List(), + } + + b, err := json.MarshalIndent(config, "", " ") + if err != nil { + slog.Error("Error parsing json", "error", err) + return + } + + lexer := lexers.Get("json") + style := styles.Get("monokailight") + formatter := html.New( + html.WithLineNumbers(true), + ) + iterator, err := lexer.Tokenise(nil, string(b)) + if err != nil { + slog.Error("Error tokenise", "error", err) + return + } + + var code bytes.Buffer + err = formatter.Format(&code, style, iterator) + if err != nil { + slog.Error("Error format", "error", err) + return + } + + hello := &templates.HelloPage{ + Body: code.Bytes(), + } + + templates.WritePageTemplate(w, hello) + } +} |