diff options
author | Runxi Yu <me@runxiyu.org> | 2025-04-05 18:26:51 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-04-05 18:26:51 +0800 |
commit | 4f4f6a25be2625b4bb2cb10e3520f52c4a35c243 (patch) | |
tree | 5458da1ee5efa5e46e831c34c1f39ebc67fb71b0 /readme_to_html.go | |
parent | Remove renderReadmeAtTree (diff) | |
download | forge-4f4f6a25be2625b4bb2cb10e3520f52c4a35c243.tar.gz forge-4f4f6a25be2625b4bb2cb10e3520f52c4a35c243.tar.zst forge-4f4f6a25be2625b4bb2cb10e3520f52c4a35c243.zip |
Separate code/README rendering and unsafe to their own packages
Diffstat (limited to 'readme_to_html.go')
-rw-r--r-- | readme_to_html.go | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/readme_to_html.go b/readme_to_html.go deleted file mode 100644 index 6d3f6f3..0000000 --- a/readme_to_html.go +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only -// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org> - -package main - -import ( - "bytes" - "html" - "html/template" - "strings" - - "github.com/microcosm-cc/bluemonday" - "github.com/niklasfasching/go-org/org" - "github.com/yuin/goldmark" - "github.com/yuin/goldmark/extension" -) - -var markdownConverter = goldmark.New(goldmark.WithExtensions(extension.GFM)) - -// escapeHTML just escapes a string and wraps it in [template.HTML]. -func escapeHTML(s string) template.HTML { - return template.HTML(html.EscapeString(s)) //#nosec G203 -} - -// renderReadme renders and sanitizes README content from a byte slice and filename. -func renderReadme(data []byte, filename string) (string, template.HTML) { - switch strings.ToLower(filename) { - case "readme": - return "README", template.HTML("<pre>" + html.EscapeString(bytesToString(data)) + "</pre>") //#nosec G203 - case "readme.md": - var buf bytes.Buffer - if err := markdownConverter.Convert(data, &buf); err != nil { - return "Error fetching README", escapeHTML("Unable to render README: " + err.Error()) - } - return "README.md", template.HTML(bluemonday.UGCPolicy().SanitizeBytes(buf.Bytes())) //#nosec G203 - case "readme.org": - htmlStr, err := org.New().Parse(strings.NewReader(bytesToString(data)), filename).Write(org.NewHTMLWriter()) - if err != nil { - return "Error fetching README", escapeHTML("Unable to render README: " + err.Error()) - } - return "README.org", template.HTML(bluemonday.UGCPolicy().Sanitize(htmlStr)) //#nosec G203 - default: - return filename, template.HTML("<pre>" + html.EscapeString(bytesToString(data)) + "</pre>") //#nosec G203 - } -} |