diff options
author | Peter De Wachter <pdewacht@gmail.com> | 2019-08-13 17:44:23 +0200 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2019-08-19 19:42:47 -0700 |
commit | b6f3160dbc3efe7a86d39d526a1780eb320eefd4 (patch) | |
tree | fc1148cd9a3de6611a9ca319a54b29c9a0f05cd0 /reader | |
parent | 77125f45ccebc1b9abc9aeef2a8576b6841c5768 (diff) |
add_mailto_subject: New rewrite function
Dinosaur Comics (qwantz.com) likes to hide jokes in mailto: links, but
miniflux's sanitizer strips those out.
Diffstat (limited to 'reader')
-rw-r--r-- | reader/rewrite/rewrite_functions.go | 33 | ||||
-rw-r--r-- | reader/rewrite/rewriter.go | 2 | ||||
-rw-r--r-- | reader/rewrite/rewriter_test.go | 9 | ||||
-rw-r--r-- | reader/rewrite/rules.go | 1 |
4 files changed, 45 insertions, 0 deletions
diff --git a/reader/rewrite/rewrite_functions.go b/reader/rewrite/rewrite_functions.go index 667f359..8988cc5 100644 --- a/reader/rewrite/rewrite_functions.go +++ b/reader/rewrite/rewrite_functions.go @@ -7,6 +7,7 @@ package rewrite // import "miniflux.app/reader/rewrite" import ( "fmt" "html" + "net/url" "regexp" "strings" @@ -43,6 +44,38 @@ func addImageTitle(entryURL, entryContent string) string { return entryContent } +func addMailtoSubject(entryURL, entryContent string) string { + doc, err := goquery.NewDocumentFromReader(strings.NewReader(entryContent)) + if err != nil { + return entryContent + } + + matches := doc.Find(`a[href^="mailto:"]`) + + if matches.Length() > 0 { + matches.Each(func(i int, a *goquery.Selection) { + hrefAttr, _ := a.Attr("href") + + mailto, err := url.Parse(hrefAttr) + if err != nil { + return + } + + subject := mailto.Query().Get("subject") + if subject == "" { + return + } + + a.AppendHtml(" [" + html.EscapeString(subject) + "]") + }) + + output, _ := doc.Find("body").First().Html() + return output + } + + return entryContent +} + func addDynamicImage(entryURL, entryContent string) string { doc, err := goquery.NewDocumentFromReader(strings.NewReader(entryContent)) if err != nil { diff --git a/reader/rewrite/rewriter.go b/reader/rewrite/rewriter.go index 25c742d..ad1b9a3 100644 --- a/reader/rewrite/rewriter.go +++ b/reader/rewrite/rewriter.go @@ -27,6 +27,8 @@ func Rewriter(entryURL, entryContent, customRewriteRules string) string { switch strings.TrimSpace(rule) { case "add_image_title": entryContent = addImageTitle(entryURL, entryContent) + case "add_mailto_subject": + entryContent = addMailtoSubject(entryURL, entryContent) case "add_dynamic_image": entryContent = addDynamicImage(entryURL, entryContent) case "add_youtube_video": diff --git a/reader/rewrite/rewriter_test.go b/reader/rewrite/rewriter_test.go index 9bd83e8..0fd49ba 100644 --- a/reader/rewrite/rewriter_test.go +++ b/reader/rewrite/rewriter_test.go @@ -98,6 +98,15 @@ func TestRewriteWithXkcdAndNoImage(t *testing.T) { } } +func TestRewriteMailtoLink(t *testing.T) { + description := `<a href="mailto:ryan@qwantz.com?subject=blah%20blah">contact</a>` + output := Rewriter("https://www.qwantz.com/", description, ``) + expected := `<a href="mailto:ryan@qwantz.com?subject=blah%20blah">contact [blah blah]</a>` + if expected != output { + t.Errorf(`Not expected output: got "%s" instead of "%s"`, output, expected) + } +} + func TestRewriteWithPDFLink(t *testing.T) { description := "test" output := Rewriter("https://example.org/document.pdf", description, ``) diff --git a/reader/rewrite/rules.go b/reader/rewrite/rules.go index 500459f..62df1ed 100644 --- a/reader/rewrite/rules.go +++ b/reader/rewrite/rules.go @@ -22,6 +22,7 @@ var predefinedRules = map[string]string{ "oglaf.com": "add_image_title", "optipess.com": "add_image_title", "peebleslab.com": "add_image_title", + "www.qwantz.com": "add_image_title,add_mailto_subject", "sentfromthemoon.com": "add_image_title", "thedoghousediaries.com": "add_image_title", "treelobsters.com": "add_image_title", |