diff --git a/reader/rewrite/rewrite_functions.go b/reader/rewrite/rewrite_functions.go index cda21976f3f86fcd0737d7d95f20e3f473f0b6ab..55016a7132b31d4cc982e904128f556d2c9fe9f1 100644 --- a/reader/rewrite/rewrite_functions.go +++ b/reader/rewrite/rewrite_functions.go @@ -16,7 +16,7 @@ import ( var ( youtubeRegex = regexp.MustCompile(`youtube\.com/watch\?v=(.*)`) - invidioRegex = regexp.MustCompile(`invidio\.us\/watch\?v=(.*)`) + invidioRegex = regexp.MustCompile(`https?:\/\/(.*)\/watch\?v=(.*)`) imgRegex = regexp.MustCompile(`<img [^>]+>`) textLinkRegex = regexp.MustCompile(`(?mi)(\bhttps?:\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])`) ) @@ -161,9 +161,8 @@ func addYoutubeVideoUsingInvidiousPlayer(entryURL, entryContent string) string { func addInvidiousVideo(entryURL, entryContent string) string { matches := invidioRegex.FindStringSubmatch(entryURL) - fmt.Println(matches) - if len(matches) == 2 { - video := `<iframe width="650" height="350" frameborder="0" src="https://invidio.us/embed/` + matches[1] + `" allowfullscreen></iframe>` + if len(matches) == 3 { + video := `<iframe width="650" height="350" frameborder="0" src="https://` + matches[1] + `/embed/` + matches[2] + `" allowfullscreen></iframe>` return video + `<br>` + entryContent } return entryContent diff --git a/reader/sanitizer/sanitizer.go b/reader/sanitizer/sanitizer.go index 18b8a84adda157021556bb568b6937194cfd5c82..9814d8032a03c26a93b03611fc1666678cf68c0c 100644 --- a/reader/sanitizer/sanitizer.go +++ b/reader/sanitizer/sanitizer.go @@ -100,7 +100,7 @@ func sanitizeAttributes(baseURL, tagName string, attributes []html.Attribute) ([ if isExternalResourceAttribute(attribute.Key) { if tagName == "iframe" { - if isValidIframeSource(attribute.Val) { + if isValidIframeSource(baseURL, attribute.Val) { value = rewriteIframeURL(attribute.Val) } else { continue @@ -290,7 +290,7 @@ func isBlacklistedResource(src string) bool { return false } -func isValidIframeSource(src string) bool { +func isValidIframeSource(baseURL, src string) bool { whitelist := []string{ "https://invidio.us", "//www.youtube.com", @@ -312,6 +312,11 @@ func isValidIframeSource(src string) bool { "https://cdn.embedly.com", } + // allow iframe from same origin + if url.Domain(baseURL) == url.Domain(src) { + return true + } + for _, prefix := range whitelist { if strings.HasPrefix(src, prefix) { return true diff --git a/reader/sanitizer/sanitizer_test.go b/reader/sanitizer/sanitizer_test.go index 1dfa10361fdaec2c9befa7b741e439669db82e29..d1639ad22f26be5e8020a19709f6f923c57227e5 100644 --- a/reader/sanitizer/sanitizer_test.go +++ b/reader/sanitizer/sanitizer_test.go @@ -106,7 +106,7 @@ func TestInvalidNestedTag(t *testing.T) { func TestInvalidIFrame(t *testing.T) { input := `<iframe src="http://example.org/"></iframe>` expected := `` - output := Sanitize("http://example.org/", input) + output := Sanitize("http://example.com/", input) if expected != output { t.Errorf(`Wrong output: "%s" != "%s"`, expected, output)