From 0baa928e56628fce2148d6c370ec1e91ea3a0042 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 12 Feb 2021 05:45:38 +0100 Subject: [PATCH] Fix YouTube embeds failing due to YouTube serving wrong OEmbed URLs (#15716) --- app/services/fetch_oembed_service.rb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/services/fetch_oembed_service.rb b/app/services/fetch_oembed_service.rb index 67e33875c6..60be9b9dc0 100644 --- a/app/services/fetch_oembed_service.rb +++ b/app/services/fetch_oembed_service.rb @@ -38,7 +38,17 @@ class FetchOEmbedService return if @endpoint_url.blank? - @endpoint_url = (Addressable::URI.parse(@url) + @endpoint_url).to_s + @endpoint_url = begin + base_url = Addressable::URI.parse(@url) + + # If the OEmbed endpoint is given as http but the URL we opened + # was served over https, we can assume OEmbed will be available + # through https as well + + (base_url + @endpoint_url).tap do |absolute_url| + absolute_url.scheme = base_url.scheme if base_url.scheme == 'https' + end.to_s + end cache_endpoint! rescue Addressable::URI::InvalidURIError