Move HTTPS exception for YouTube and Vimeo to OEmbed::fetchUrl
authorHypolite Petovan <hypolite@mrpetovan.com>
Mon, 8 Feb 2021 07:06:24 +0000 (02:06 -0500)
committerHypolite Petovan <hypolite@mrpetovan.com>
Wed, 10 Feb 2021 04:25:18 +0000 (23:25 -0500)
- Both Youtube and Vimeo output OEmbed endpoint URL with HTTP but their OEmbed endpoint is only accessible by HTTPS ¯\_(ツ)_/¯

src/Content/OEmbed.php

index 3afa369..1a5d1d9 100644 (file)
@@ -106,6 +106,10 @@ class OEmbed
                                                        as $link)
                                                {
                                                        $href = $link->getAttributeNode('href')->nodeValue;
+                                                       // Both Youtube and Vimeo output OEmbed endpoint URL with HTTP
+                                                       // but their OEmbed endpoint is only accessible by HTTPS ¯\_(ツ)_/¯
+                                                       $href = str_replace(['http://www.youtube.com/', 'http://player.vimeo.com/'],
+                                                               ['https://www.youtube.com/', 'https://player.vimeo.com/'], $href);
                                                        $result = DI::httpRequest()->fetchFull($href . '&maxwidth=' . $a->videowidth);
                                                        if ($result->getReturnCode() === 200) {
                                                                $json_string = $result->getBody();
@@ -335,10 +339,6 @@ class OEmbed
 
        public static function getHTML($url, $title = null)
        {
-               // Always embed the SSL version
-               $url = str_replace(["http://www.youtube.com/", "http://player.vimeo.com/"],
-                                       ["https://www.youtube.com/", "https://player.vimeo.com/"], $url);
-
                $o = self::fetchURL($url, !self::isAllowedURL($url));
 
                if (!is_object($o) || property_exists($o, 'type') && $o->type == 'error') {