diff options
Diffstat (limited to 'pkg/handler/git/handler.go')
-rw-r--r-- | pkg/handler/git/handler.go | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go index 28cc99e..7bdf372 100644 --- a/pkg/handler/git/handler.go +++ b/pkg/handler/git/handler.go @@ -2,8 +2,10 @@ package git import ( "bytes" + "io" "log/slog" "net/http" + "os" "path/filepath" "git.gabrielgio.me/cerrado/pkg/ext" @@ -15,11 +17,15 @@ import ( "github.com/alecthomas/chroma/v2/styles" "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/object" + "github.com/gomarkdown/markdown" + markdownhtml "github.com/gomarkdown/markdown/html" + "github.com/gomarkdown/markdown/parser" ) type ( GitHandler struct { gitService gitService + readmePath string } gitService interface { @@ -31,11 +37,16 @@ type ( ListTags(name string) ([]*object.Tag, error) ListBranches(name string) ([]*plumbing.Reference, error) } + + configurationRepository interface { + GetRootReadme() string + } ) -func NewGitHandler(gitService gitService) *GitHandler { +func NewGitHandler(gitService gitService, confRepo configurationRepository) *GitHandler { return &GitHandler{ gitService: gitService, + readmePath: confRepo.GetRootReadme(), } } @@ -46,7 +57,32 @@ func (g *GitHandler) List(w http.ResponseWriter, _ *http.Request) { return } - gitList := &templates.GitListPage{repos} + 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) + + htmlFlag := markdownhtml.CommonFlags | markdownhtml.HrefTargetBlank + opts := markdownhtml.RendererOptions{Flags: htmlFlag} + renderer := markdownhtml.NewRenderer(opts) + + bs = markdown.Render(doc, renderer) + + gitList := &templates.GitListPage{ + Respositories: repos, + About: bs, + } templates.WritePageTemplate(w, gitList) } |