routes: render markdown readmes in repo index (#11)
1 file changed, 17 insertions(+), 3 deletions(-)
changed files
M routes/routes.go → routes/routes.go
@@ -1,6 +1,7 @@ package routes import ( + "fmt" "html/template" "log" "net/http"@@ -13,6 +14,8 @@ "git.icyphox.sh/legit/config" "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 @@ log.Println(err) 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(`<pre>%s</pre>`, content), + ) + } break } }