From 95dec0f0564c158d2884faa24cac650043e8dc37 Mon Sep 17 00:00:00 2001 From: James Mills <1290234+prologic@users.noreply.github.com> Date: Mon, 26 Dec 2022 16:20:08 +1000 Subject: routes: render markdown readmes in repo index (#11) --- routes/routes.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'routes') diff --git a/routes/routes.go b/routes/routes.go index 30f101a..1034f2f 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -1,6 +1,7 @@ package routes import ( + "fmt" "html/template" "log" "net/http" @@ -13,6 +14,8 @@ import ( "git.icyphox.sh/legit/git" "github.com/alexedwards/flow" "github.com/dustin/go-humanize" + "github.com/microcosm-cc/bluemonday" + "github.com/russross/blackfriday/v2" ) type deps struct { @@ -101,10 +104,21 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) { return } - var readmeContent string + var readmeContent template.HTML for _, readme := range d.c.Repo.Readme { - readmeContent, _ = gr.FileContent(readme) - if readmeContent != "" { + ext := filepath.Ext(readme) + content, _ := gr.FileContent(readme) + if len(content) > 0 { + switch ext { + case ".md": + unsafe := blackfriday.Run([]byte(content), blackfriday.WithExtensions(blackfriday.CommonExtensions)) + html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) + readmeContent = template.HTML(html) + default: + readmeContent = template.HTML( + fmt.Sprintf(`
%s
`, content), + ) + } break } } -- cgit