From 502d3bdc8a2de614648ef0db403042e72a8164c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= <sebastien.gaya@gmail.com>
Date: Mon, 7 Aug 2023 18:19:08 +0200
Subject: [PATCH] fix embed blocks from indirect source

---
 .../website/with_associated_objects.rb         | 18 +++++++++++++++++-
 .../communication/website/with_security.rb     | 11 +++++++----
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/app/models/communication/website/with_associated_objects.rb b/app/models/communication/website/with_associated_objects.rb
index 98565eb68..1e293ed3f 100644
--- a/app/models/communication/website/with_associated_objects.rb
+++ b/app/models/communication/website/with_associated_objects.rb
@@ -21,7 +21,7 @@ module Communication::Website::WithAssociatedObjects
     has_many    :permalinks,
                 class_name: "Communication::Website::Permalink",
                 dependent: :destroy
-                
+
     has_many    :communication_blocks,
                 class_name: "Communication::Block",
                 foreign_key: :communication_website_id
@@ -29,6 +29,22 @@ module Communication::Website::WithAssociatedObjects
 
   end
 
+  def blocks_from_education
+    Communication::Block.where(about: education_programs).or(
+      Communication::Block.where(about: education_diplomas)
+    )
+  end
+
+  def blocks_from_research
+    Communication::Block.where(about: research_papers)
+  end
+
+  def blocks_from_university
+    Communication::Block.where(about: connected_people).or(
+      Communication::Block.where(about: connected_organizations)
+    )
+  end
+
   def education_diplomas
     has_education_diplomas? ? about.diplomas : Education::Diploma.none
   end
diff --git a/app/models/communication/website/with_security.rb b/app/models/communication/website/with_security.rb
index 381c5f2a7..9ae03475b 100644
--- a/app/models/communication/website/with_security.rb
+++ b/app/models/communication/website/with_security.rb
@@ -5,7 +5,10 @@ module Communication::Website::WithSecurity
     list = external_domains_default
     list.concat external_domains_plausible
     list.concat external_domains_from_blocks_video
-    list.concat external_domains_from_blocks_embed
+    list.concat external_domains_from_blocks_embed(blocks)
+    list.concat external_domains_from_blocks_embed(blocks_from_education)
+    list.concat external_domains_from_blocks_embed(blocks_from_research)
+    list.concat external_domains_from_blocks_embed(blocks_from_university)
     list.uniq.compact
   end
 
@@ -34,14 +37,14 @@ module Communication::Website::WithSecurity
     list
   end
 
-  def external_domains_from_blocks_embed
+  def external_domains_from_blocks_embed(blocks)
     list = []
-    blocks.where(template_kind: :embed).each do |block|
+    blocks.where(template_kind: :embed).published.each do |block|
       code = block.template.code
       # https://stackoverflow.com/questions/25095176/extracting-all-urls-from-a-page-using-ruby
       code.scan(/[[:lower:]]+:\/\/[^\s"]+/).each do |url|
         url = CGI.unescapeHTML(url)
-        url =  ActionController::Base.helpers.strip_tags(url)
+        url = ActionController::Base.helpers.strip_tags(url)
         url = URI::Parser.new.escape(url)
         host = URI.parse(url).host
         list << host
-- 
GitLab