cerrado @ e991b497e8433ee207e597b17f0b7daa3a0e0f26

 1package handler
 2
 3import (
 4	"bytes"
 5	"encoding/json"
 6	"log/slog"
 7	"net/http"
 8	"os"
 9
10	"github.com/alecthomas/chroma/v2/formatters/html"
11	"github.com/alecthomas/chroma/v2/lexers"
12	"github.com/alecthomas/chroma/v2/styles"
13
14	"git.gabrielgio.me/cerrado/pkg/config"
15	"git.gabrielgio.me/cerrado/templates"
16)
17
18func ConfigFile(configPath string) func(http.ResponseWriter, *http.Request) {
19	return func(w http.ResponseWriter, _ *http.Request) {
20		f, err := os.Open(configPath)
21		if err != nil {
22			slog.Error("Error openning config file", "error", err, "path", configPath)
23			return
24		}
25
26		c, err := config.Parse(f)
27		if err != nil {
28			slog.Error("Error parsing config", "error", err, "path", configPath)
29			return
30		}
31
32		b, err := json.MarshalIndent(c, "", "	")
33		if err != nil {
34			slog.Error("Error parsing json", "error", err)
35			return
36		}
37
38		lexer := lexers.Get("json")
39		style := styles.Get("monokailight")
40		formatter := html.New(
41			html.WithLineNumbers(true),
42		)
43		iterator, err := lexer.Tokenise(nil, string(b))
44		if err != nil {
45			slog.Error("Error tokenise", "error", err)
46			return
47		}
48
49		var code bytes.Buffer
50		err = formatter.Format(&code, style, iterator)
51		if err != nil {
52			slog.Error("Error format", "error", err)
53			return
54		}
55
56		hello := &templates.HelloPage{
57			Body: code.Bytes(),
58		}
59
60		templates.WritePageTemplate(w, hello)
61	}
62}