From fa41e6e4a4757660e6338092f8dca672b531f7cd Mon Sep 17 00:00:00 2001 From: FC Stegerman Date: Fri, 16 Dec 2022 11:54:14 +0100 Subject: [PATCH 1/6] fdroid scrubber: remove nodes w/o href --- lib/fdroid/Package.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/fdroid/Package.rb b/lib/fdroid/Package.rb index e1aca7d..8fa4245 100644 --- a/lib/fdroid/Package.rb +++ b/lib/fdroid/Package.rb @@ -47,6 +47,11 @@ module Loofah::Scrubbers end end + if node.keys.empty? + node.remove + return STOP + end + begin url = URI.parse(node.attributes['href'].to_s) return STOP if url.host == nil || url.host.empty? || url.host == 'f-droid.org' -- GitLab From 0153eb2c7b86925644d64b66e32c2c7d8ad86247 Mon Sep 17 00:00:00 2001 From: FC Stegerman Date: Fri, 16 Dec 2022 11:55:01 +0100 Subject: [PATCH 2/6] fdroid scrubber: mark external links as such --- lib/fdroid/Package.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/fdroid/Package.rb b/lib/fdroid/Package.rb index 8fa4245..85decff 100644 --- a/lib/fdroid/Package.rb +++ b/lib/fdroid/Package.rb @@ -63,6 +63,7 @@ module Loofah::Scrubbers append_attribute(node, 'rel', 'nofollow') append_attribute(node, 'rel', 'noopener') append_attribute(node, 'target', '_blank') + node.after Nokogiri::XML::Text.new(' [external link]', node.document) return STOP end end -- GitLab From 0c5027fbea4ed4df70e6bf45622d820b1c22f0f0 Mon Sep 17 00:00:00 2001 From: FC Stegerman Date: Fri, 16 Dec 2022 12:03:24 +0100 Subject: [PATCH 3/6] update tests --- spec/lib/fdroid/FDroidIndex_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/lib/fdroid/FDroidIndex_spec.rb b/spec/lib/fdroid/FDroidIndex_spec.rb index d4bce90..891ce37 100644 --- a/spec/lib/fdroid/FDroidIndex_spec.rb +++ b/spec/lib/fdroid/FDroidIndex_spec.rb @@ -178,7 +178,7 @@ here" END output = <<~'END'.gsub("\n", '
') bold text -
link + link [external link] END scrubbed = Package.process_package_description(input) expect(scrubbed).to eql(output) -- GitLab From 52cd00e87206768ec8d532c4b8cc3213d799a13c Mon Sep 17 00:00:00 2001 From: FC Stegerman Date: Fri, 16 Dec 2022 13:49:45 +0100 Subject: [PATCH 4/6] fdroid scrubber: strip (not remove) w/o href --- lib/fdroid/Package.rb | 3 ++- spec/lib/fdroid/FDroidIndex_spec.rb | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/fdroid/Package.rb b/lib/fdroid/Package.rb index 85decff..fd4272c 100644 --- a/lib/fdroid/Package.rb +++ b/lib/fdroid/Package.rb @@ -48,7 +48,8 @@ module Loofah::Scrubbers end if node.keys.empty? - node.remove + node.name = '_remove' + Strip.new.scrub(node) return STOP end diff --git a/spec/lib/fdroid/FDroidIndex_spec.rb b/spec/lib/fdroid/FDroidIndex_spec.rb index 891ce37..aebfa74 100644 --- a/spec/lib/fdroid/FDroidIndex_spec.rb +++ b/spec/lib/fdroid/FDroidIndex_spec.rb @@ -184,6 +184,12 @@ here" expect(scrubbed).to eql(output) end + it 'strips w/o href' do + text = 'link' + scrubbed = Package.process_package_description(text) + expect(scrubbed).to eql('link') + end + it 'sanitises' do input = { 'description' => 'bold/b>', -- GitLab From 1bd0bfa015a888d38e427eff44fd0f60d4dbc027 Mon Sep 17 00:00:00 2001 From: FC Stegerman Date: Sat, 17 Dec 2022 10:03:20 +0100 Subject: [PATCH 5/6] use hostname instead of "external link" when possible --- lib/fdroid/Package.rb | 5 ++++- spec/lib/fdroid/FDroidIndex_spec.rb | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/fdroid/Package.rb b/lib/fdroid/Package.rb index fd4272c..38d5ab1 100644 --- a/lib/fdroid/Package.rb +++ b/lib/fdroid/Package.rb @@ -56,15 +56,18 @@ module Loofah::Scrubbers begin url = URI.parse(node.attributes['href'].to_s) return STOP if url.host == nil || url.host.empty? || url.host == 'f-droid.org' + + info = url.host rescue URI::Error # treat this URL as external + info = 'external link' end append_attribute(node, 'rel', 'external') append_attribute(node, 'rel', 'nofollow') append_attribute(node, 'rel', 'noopener') append_attribute(node, 'target', '_blank') - node.after Nokogiri::XML::Text.new(' [external link]', node.document) + node.after Nokogiri::XML::Text.new(" [#{info}]", node.document) return STOP end end diff --git a/spec/lib/fdroid/FDroidIndex_spec.rb b/spec/lib/fdroid/FDroidIndex_spec.rb index aebfa74..48565e6 100644 --- a/spec/lib/fdroid/FDroidIndex_spec.rb +++ b/spec/lib/fdroid/FDroidIndex_spec.rb @@ -178,7 +178,7 @@ here" END output = <<~'END'.gsub("\n", '
') bold text - link [external link] + link [example.com] END scrubbed = Package.process_package_description(input) expect(scrubbed).to eql(output) -- GitLab From fa0cc47ba6184a18e9c55e4378a1072f27d6330c Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Sun, 8 Dec 2024 18:08:23 +0100 Subject: [PATCH 6/6] mark external links with link emoji --- lib/fdroid/Package.rb | 11 ++++++----- spec/lib/fdroid/FDroidIndex_spec.rb | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/fdroid/Package.rb b/lib/fdroid/Package.rb index 38d5ab1..82adfd9 100644 --- a/lib/fdroid/Package.rb +++ b/lib/fdroid/Package.rb @@ -55,19 +55,20 @@ module Loofah::Scrubbers begin url = URI.parse(node.attributes['href'].to_s) - return STOP if url.host == nil || url.host.empty? || url.host == 'f-droid.org' - - info = url.host + # the only official domain names used for this site, everything else redirects + return STOP if (url.host == nil || + url.host.empty? || + url.host == 'f-droid.org' || + url.host == 'staging.f-droid.org') rescue URI::Error # treat this URL as external - info = 'external link' end append_attribute(node, 'rel', 'external') append_attribute(node, 'rel', 'nofollow') append_attribute(node, 'rel', 'noopener') append_attribute(node, 'target', '_blank') - node.after Nokogiri::XML::Text.new(" [#{info}]", node.document) + node.after Nokogiri::XML::Text.new("🔗", node.document) return STOP end end diff --git a/spec/lib/fdroid/FDroidIndex_spec.rb b/spec/lib/fdroid/FDroidIndex_spec.rb index 48565e6..7f52683 100644 --- a/spec/lib/fdroid/FDroidIndex_spec.rb +++ b/spec/lib/fdroid/FDroidIndex_spec.rb @@ -178,7 +178,7 @@ here" END output = <<~'END'.gsub("\n", '
') bold text - link [example.com] + link🔗 END scrubbed = Package.process_package_description(input) expect(scrubbed).to eql(output) -- GitLab