diff --git a/app/models/upload.rb b/app/models/upload.rb index cd374a4efd4..d71365cc99e 100644 --- a/app/models/upload.rb +++ b/app/models/upload.rb @@ -128,7 +128,9 @@ class Upload < ActiveRecord::Base end def self.secure_media_url?(url) - url.include?(SECURE_MEDIA_ROUTE) + # we do not want to exclude topic links that for whatever reason + # have secure-media-uploads in the URL e.g. /t/secure-media-uploads-are-cool/223452 + url.include?(SECURE_MEDIA_ROUTE) && !url.include?("/t/") && FileHelper.is_supported_media?(url) end def self.signed_url_from_secure_media_url(url) diff --git a/lib/email/styles.rb b/lib/email/styles.rb index 6513ba2a168..852ef80e705 100644 --- a/lib/email/styles.rb +++ b/lib/email/styles.rb @@ -288,15 +288,14 @@ module Email def replace_secure_media_urls @fragment.css('[href]').each do |a| - if a['href'][/#{Upload::SECURE_MEDIA_ROUTE}/] + if Upload.secure_media_url?(a['href']) a.add_next_sibling "<p class='secure-media-notice'>#{I18n.t("emails.secure_media_placeholder")}</p>" a.remove end end - @fragment.search('img').each do |img| - next unless img['src'] - if img['src'][/#{Upload::SECURE_MEDIA_ROUTE}/] + @fragment.search('img[src]').each do |img| + if Upload.secure_media_url?(img['src']) img.add_next_sibling "<p class='secure-media-notice'>#{I18n.t("emails.secure_media_placeholder")}</p>" img.remove end diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb index d0cb4a87e34..d1c15d9d761 100644 --- a/lib/pretty_text.rb +++ b/lib/pretty_text.rb @@ -388,7 +388,7 @@ module PrettyText def self.strip_secure_media(doc) doc.css("a[href]").each do |a| - if a["href"].include?("/#{Upload::SECURE_MEDIA_ROUTE}/") && FileHelper.is_supported_media?(a["href"]) + if Upload.secure_media_url?(a["href"]) target = %w(video audio).include?(a&.parent&.parent&.name) ? a.parent.parent : a target.replace "<p class='secure-media-notice'>#{I18n.t("emails.secure_media_placeholder")}</p>" end diff --git a/spec/components/email/styles_spec.rb b/spec/components/email/styles_spec.rb index a6f9e28505e..bdcd27aa066 100644 --- a/spec/components/email/styles_spec.rb +++ b/spec/components/email/styles_spec.rb @@ -212,6 +212,10 @@ describe Email::Styles do expect(frag.at('p.secure-media-notice')).to be_present expect(frag.at('img')).not_to be_present end - end + it "does not replace topic links with secure-media-uploads in the name" do + frag = html_fragment("<a href=\"#{Discourse.base_url}\/t/secure-media-uploads/235723\">Visit Topic</a>") + expect(frag.at('p.secure-media-notice')).not_to be_present + end + end end