Browse Source

Add support for protocol relative YouTube URLs

Frédéric Guillot 7 years ago
parent
commit
de1a4aad30
2 changed files with 12 additions and 1 deletions
  1. 2 1
      reader/sanitizer/sanitizer.go
  2. 10 0
      reader/sanitizer/sanitizer_test.go

+ 2 - 1
reader/sanitizer/sanitizer.go

@@ -17,7 +17,7 @@ import (
 )
 
 var (
-	youtubeEmbedRegex = regexp.MustCompile(`http[s]?://www\.youtube\.com/embed/(.*)`)
+	youtubeEmbedRegex = regexp.MustCompile(`//www\.youtube\.com/embed/(.*)`)
 )
 
 // Sanitize returns safe HTML.
@@ -291,6 +291,7 @@ func isBlacklistedResource(src string) bool {
 
 func isValidIframeSource(src string) bool {
 	whitelist := []string{
+		"//www.youtube.com",
 		"http://www.youtube.com",
 		"https://www.youtube.com",
 		"https://www.youtube-nocookie.com",

+ 10 - 0
reader/sanitizer/sanitizer_test.go

@@ -203,6 +203,16 @@ func TestReplaceYoutubeURLAlreadyReplaced(t *testing.T) {
 	}
 }
 
+func TestReplaceProtocolRelativeYoutubeURL(t *testing.T) {
+	input := `<iframe src="//www.youtube.com/embed/Bf2W84jrGqs" width="560" height="314" allowfullscreen="allowfullscreen"></iframe>`
+	expected := `<iframe src="https://www.youtube-nocookie.com/embed/Bf2W84jrGqs" width="560" height="314" allowfullscreen="allowfullscreen" sandbox="allow-scripts allow-same-origin"></iframe>`
+	output := Sanitize("http://example.org/", input)
+
+	if expected != output {
+		t.Errorf(`Wrong output: "%s" != "%s"`, expected, output)
+	}
+}
+
 func TestReplaceIframeURL(t *testing.T) {
 	input := `<iframe src="https://player.vimeo.com/video/123456?title=0&amp;byline=0"></iframe>`
 	expected := `<iframe src="https://player.vimeo.com/video/123456?title=0&amp;byline=0" sandbox="allow-scripts allow-same-origin"></iframe>`