cerrado @ cb6060a60d71ce1be1591bb10f499916155160de

 1package about
 2
 3import (
 4	"io"
 5	"net/http"
 6	"os"
 7
 8	"github.com/gomarkdown/markdown"
 9	"github.com/gomarkdown/markdown/html"
10	"github.com/gomarkdown/markdown/parser"
11
12	"git.gabrielgio.me/cerrado/pkg/ext"
13	"git.gabrielgio.me/cerrado/templates"
14)
15
16type (
17	AboutHandler struct {
18		readmePath string
19	}
20
21	configurationRepository interface {
22		GetRootReadme() string
23	}
24)
25
26func NewAboutHandler(configRepo configurationRepository) *AboutHandler {
27	return &AboutHandler{configRepo.GetRootReadme()}
28}
29
30func (g *AboutHandler) About(w http.ResponseWriter, r *ext.Request) error {
31	f, err := os.Open(g.readmePath)
32	if err != nil {
33		return err
34	}
35
36	bs, err := io.ReadAll(f)
37	if err != nil {
38		return err
39	}
40
41	extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock
42	p := parser.NewWithExtensions(extensions)
43	doc := p.Parse(bs)
44
45	htmlFlags := html.CommonFlags | html.HrefTargetBlank
46	opts := html.RendererOptions{Flags: htmlFlags}
47	renderer := html.NewRenderer(opts)
48
49	bs = markdown.Render(doc, renderer)
50
51	gitList := &templates.AboutPage{
52		Body: bs,
53	}
54	templates.WritePageTemplate(w, gitList, r.Context())
55	return nil
56}