aboutsummaryrefslogtreecommitdiff
path: root/markdown
diff options
context:
space:
mode:
authorWilliam Hergès <william@herges.fr>2025-10-05 15:16:20 +0200
committerWilliam Hergès <william@herges.fr>2025-10-05 15:16:20 +0200
commitfa5ac4040e8e2fc57bef5c598e1ceda4c2fc0a73 (patch)
tree5dbbba0ec6101fb666ee88a977a21ef95d55a2e9 /markdown
parent5d6198f168dd1a8598048718d149d1171df09c1a (diff)
feat(backend): add noreferer on external link and move target blank
Diffstat (limited to 'markdown')
-rw-r--r--markdown/ast_external.go12
1 files changed, 11 insertions, 1 deletions
diff --git a/markdown/ast_external.go b/markdown/ast_external.go
index f37a685..e648ad5 100644
--- a/markdown/ast_external.go
+++ b/markdown/ast_external.go
@@ -3,8 +3,11 @@ package markdown
import (
"fmt"
"html/template"
+ "regexp"
)
+var externalLink = regexp.MustCompile(`https?://`)
+
type astLink struct {
content block
href block
@@ -19,7 +22,14 @@ func (a *astLink) Eval(opt *Option) (template.HTML, *ParseError) {
if err != nil {
return "", err
}
- return template.HTML(fmt.Sprintf(`<a href="%s">%s</a>`, href, content)), nil
+ return RenderLink(string(content), string(href)), nil
+}
+
+func RenderLink(content, href string) template.HTML {
+ if !externalLink.Match([]byte(href)) {
+ return template.HTML(fmt.Sprintf(`<a href="%s">%s</a>`, href, content))
+ }
+ return template.HTML(fmt.Sprintf(`<a href="%s" target="_blank" rel="noreferer">%s</a>`, href, content))
}
type astImage struct {