Changes
3 changed files (+18/-10)
-
-
@@ -3,6 +3,7 @@ package routesimport ( "net/http" "github.com/microcosm-cc/bluemonday" "github.com/pocka/legit/config" )
-
@@ -30,7 +31,10 @@ func (d *deps) Multiplex(w http.ResponseWriter, r *http.Request) {func Handlers(c *config.Config) *http.ServeMux { mux := http.NewServeMux() d := deps{c} d := deps{ c: c, ugcPolicy: bluemonday.UGCPolicy(), } mux.HandleFunc("GET /", d.Index) mux.HandleFunc("GET /static/{file}", d.ServeStatic)
-
-
-
@@ -20,14 +20,15 @@ type Renderer interface {Render(code []byte) ([]byte, error) } type MarkdownToHtmlRenderer struct{} type MarkdownToHtmlRenderer struct { policy *bluemonday.Policy } func (r MarkdownToHtmlRenderer) GetPreviewType() string { return "html" } func (r MarkdownToHtmlRenderer) Render(code []byte) ([]byte, error) { sanitizer := bluemonday.UGCPolicy() parser := blackfriday.New(blackfriday.WithExtensions(blackfriday.CommonExtensions)) tree := parser.Parse(code)
-
@@ -63,15 +64,15 @@ func (r MarkdownToHtmlRenderer) Render(code []byte) ([]byte, error) {renderer.RenderFooter(&writer, tree) unsafe := blackfriday.Run(writer.Bytes(), blackfriday.WithExtensions(blackfriday.CommonExtensions)) return sanitizer.SanitizeBytes(unsafe), nil return r.policy.SanitizeBytes(unsafe), nil } func GetPreviewRenderers(fileName string) []Renderer { func GetPreviewRenderers(fileName string, bmPolicy *bluemonday.Policy) []Renderer { ext := filepath.Ext(fileName) switch ext { case ".md", ".mkd", ".markdown": return []Renderer{MarkdownToHtmlRenderer{}} return []Renderer{MarkdownToHtmlRenderer{bmPolicy}} default: return []Renderer{} }
-
-
-
@@ -24,6 +24,9 @@ import (type deps struct { c *config.Config // ugcPolicy is a bluemonday policy for user generated content. ugcPolicy *bluemonday.Policy } func (d *deps) Index(w http.ResponseWriter, r *http.Request) {
-
@@ -180,10 +183,10 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) {writer.Bytes(), blackfriday.WithExtensions(blackfriday.CommonExtensions), ) html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) html := d.ugcPolicy.SanitizeBytes(unsafe) readmeContent = template.HTML(html) default: safe := bluemonday.UGCPolicy().SanitizeBytes([]byte(content)) safe := d.ugcPolicy.SanitizeBytes([]byte(content)) readmeContent = template.HTML( fmt.Sprintf(`<pre>%s</pre>`, safe), )
-
@@ -334,7 +337,7 @@ func (d *deps) FileContent(w http.ResponseWriter, r *http.Request) {if r.URL.Query().Has("preview") { previewType := r.URL.Query().Get("preview") for _, renderer := range preview.GetPreviewRenderers(treePath) { for _, renderer := range preview.GetPreviewRenderers(treePath, d.ugcPolicy) { resolvedPreviewType := renderer.GetPreviewType() if previewType != "" && resolvedPreviewType != previewType {
-
@@ -387,7 +390,7 @@ func (d *deps) FileContent(w http.ResponseWriter, r *http.Request) {lines[i] = uint(i + 1) } renderers := preview.GetPreviewRenderers(treePath) renderers := preview.GetPreviewRenderers(treePath, d.ugcPolicy) previewTypes := make([]string, len(renderers)) for i, renderer := range renderers { previewTypes[i] = renderer.GetPreviewType()
-