diff options
author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-05-27 22:36:50 +0200 |
---|---|---|
committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-05-27 22:42:16 +0200 |
commit | 2dd4cf35aab8324608a83d337459fd8354521b92 (patch) | |
tree | b65ecc803260bc268332fb2fbce83ab5dd209dbc /pkg/handler/about | |
parent | 60e8e751c76d949a28eefe0c5462e0cf17337217 (diff) | |
download | cerrado-2dd4cf35aab8324608a83d337459fd8354521b92.tar.gz cerrado-2dd4cf35aab8324608a83d337459fd8354521b92.tar.bz2 cerrado-2dd4cf35aab8324608a83d337459fd8354521b92.zip |
feat: Wraps handler into its own package
Although this creates more complex folder structure will allow in the
feature for a easier testing of those given handlers.
Diffstat (limited to 'pkg/handler/about')
-rw-r--r-- | pkg/handler/about/handler.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/pkg/handler/about/handler.go b/pkg/handler/about/handler.go new file mode 100644 index 0000000..a2caa4e --- /dev/null +++ b/pkg/handler/about/handler.go @@ -0,0 +1,57 @@ +package about + +import ( + "io" + "log/slog" + "net/http" + "os" + + "github.com/gomarkdown/markdown" + "github.com/gomarkdown/markdown/html" + "github.com/gomarkdown/markdown/parser" + + "git.gabrielgio.me/cerrado/templates" +) + +type ( + AboutHandler struct { + readmePath string + } + + configurationRepository interface { + GetRootReadme() string + } +) + +func NewAboutHandler(configRepo configurationRepository) *AboutHandler { + return &AboutHandler{configRepo.GetRootReadme()} +} + +func (g *AboutHandler) About(w http.ResponseWriter, _ *http.Request) { + f, err := os.Open(g.readmePath) + if err != nil { + slog.Error("Error loading readme file", "error", err) + return + } + + bs, err := io.ReadAll(f) + if err != nil { + slog.Error("Error reading readme file bytes", "error", err) + return + } + + extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock + p := parser.NewWithExtensions(extensions) + doc := p.Parse(bs) + + htmlFlags := html.CommonFlags | html.HrefTargetBlank + opts := html.RendererOptions{Flags: htmlFlags} + renderer := html.NewRenderer(opts) + + bs = markdown.Render(doc, renderer) + + gitList := &templates.HelloPage{ + Body: bs, + } + templates.WritePageTemplate(w, gitList) +} |