From 0f258fd55b34b968c20a0af0401b7aea85e16e5a Mon Sep 17 00:00:00 2001
From: alex <irgendwie@users.noreply.github.com>
Date: Sun, 6 Sep 2020 22:41:42 +0200
Subject: [PATCH] Make add_invidious_video rule applicable for different
 invidious instances

---
 reader/rewrite/rewrite_functions.go | 7 +++----
 reader/sanitizer/sanitizer.go       | 9 +++++++--
 reader/sanitizer/sanitizer_test.go  | 2 +-
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/reader/rewrite/rewrite_functions.go b/reader/rewrite/rewrite_functions.go
index cda21976..55016a71 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 18b8a84a..9814d803 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 1dfa1036..d1639ad2 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)
-- 
GitLab