about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authormultiple creatures <dev@multiple-creature.party>2019-08-04 23:48:59 -0500
committermultiple creatures <dev@multiple-creature.party>2019-08-04 23:48:59 -0500
commitf86a3314f78e86f5313c884e3ae5a2c3e140ab04 (patch)
tree48674481d8f36c3b9e6008344a7cffc8341b8381 /app
parent9a3c4bc0511d1c8a19ef591752be59fb9f3cdfd8 (diff)
port @zac@computerfox.xyz's `silence` to `BlocklistHelper`
Diffstat (limited to 'app')
-rw-r--r--app/helpers/blocklist_helper.rb29
1 files changed, 28 insertions, 1 deletions
diff --git a/app/helpers/blocklist_helper.rb b/app/helpers/blocklist_helper.rb
index fe12792fd..6c98b6d8a 100644
--- a/app/helpers/blocklist_helper.rb
+++ b/app/helpers/blocklist_helper.rb
@@ -1,8 +1,12 @@
 module BlocklistHelper
+  FEDIVERSE_SPACE_URLS = [
+    "https://fediverse.network/mastodon?build=gab",
+  ]
+
   def merged_blocklist
     # ordered by preference
     # prefer vulpine b/c they have easy-to-parse reason text
-    blocklist = vulpine_club_blocks | dialup_express_blocks | ten_forward_blocks
+    blocklist = vulpine_club_blocks | dialup_express_blocks | ten_forward_blocks | fediverse_space_blocks
     blocklist.uniq { |entry| entry[:domain] }
   end
 
@@ -49,4 +53,27 @@ module BlocklistHelper
       {domain: domain, severity: severity.to_sym, reject_media: reject_media, reason: reason}
     end
   end
+
+  # shamelessly adapted from @zac@computerfox.xyz's `silence` tool
+  # <https://github.com/theZacAttacks/silence/blob/master/silence>
+  # which you'll find useful if you're a non-monsterfork mastoadmin
+  def fediverse_space_fetch_domains(url)
+    body = Request.new(:get, url).perform do |response|
+      response.code != 200 ? nil : response.body_with_limit(66.kilobytes)
+    end
+
+    return [] unless body.present?
+
+    document = Nokogiri::HTML(body)
+    document.css('table.table-condensed td a').collect { |link| link.content.strip }
+  end
+
+  def fediverse_space_blocks
+    domains = FEDIVERSE_SPACE_URLS.flat_map { |url| fediverse_space_fetch_domains(url) }
+    domains.uniq!
+
+    domains.map! do |domain|
+      {domain: domain, severity: :suspend, reason: '(imported from fediverse.space)'}
+    end
+  end
 end