about summary refs log tree commit diff
path: root/app/helpers
diff options
context:
space:
mode:
authormultiple creatures <dev@multiple-creature.party>2019-08-03 05:32:49 -0500
committermultiple creatures <dev@multiple-creature.party>2019-08-03 05:32:49 -0500
commit6613005ae63bdc31a818d7488c36a130b558a903 (patch)
treec5ac9032e4b87413f902b0e0be087fb0c476a1e1 /app/helpers
parent99d1b1ff6f482df13d6917d5340ec28baaf76302 (diff)
`monsterpit-janitor` is now built in as a sidekiq job (with better code)
Diffstat (limited to 'app/helpers')
-rw-r--r--app/helpers/blocklist_helper.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/app/helpers/blocklist_helper.rb b/app/helpers/blocklist_helper.rb
new file mode 100644
index 000000000..5730a2ef5
--- /dev/null
+++ b/app/helpers/blocklist_helper.rb
@@ -0,0 +1,51 @@
+module BlocklistHelper
+  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.uniq { |entry| entry[:domain] }
+  end
+
+  def dialup_express_blocks
+    admin_id = Account.find_remote('xenon', 'sleeping.town')&.id
+    return [] if admin_id.nil?
+
+    domains = ActiveRecord::Base.connection.select_values("SELECT unnest(regexp_matches(text, '\\m[\\w\\-]+\\.[\\w\-]+(?:\\.[\\w\\-]+)*', 'g')) FROM statuses WHERE account_id = #{admin_id.to_i} AND NOT reply AND created_at >= (NOW() - INTERVAL '2 days') AND tsv @@ to_tsquery('new <-> dialup <-> express <2> block') EXCEPT SELECT domain FROM domain_blocks")
+
+    domains.map! do |domain|
+      {domain: domain, severity: :suspend, reason: '(imported from dialup.express)'}
+    end
+  end
+
+  def ten_forward_blocks
+    admin_id = Account.find_remote('guinan', 'tenforward.social')&.id
+    return [] if admin_id.nil?
+
+    domains += ActiveRecord::Base.connection.select_values("SELECT unnest(regexp_matches(text, '\\m[\\w\\-]+\\.[\\w\-]+(?:\\.[\\w\\-]+)*', 'g')) FROM statuses WHERE account_id = #{admin_id.to_i} AND NOT reply AND created_at >= (NOW() - INTERVAL '2 days') AND tsv @@ to_tsquery('ten <-> forward <-> moderation <-> announcement') EXCEPT SELECT domain FROM domain_blocks")
+
+    domains.map! do |domain|
+      {domain: domain, severity: :suspend, reason: '(imported from ten.forward)'}
+    end
+  end
+
+  def vulpine_club_blocks
+    url = "https://raw.githubusercontent.com/vulpineclub/vulpineclub.github.io/master/_data/blocks.yml"
+
+    body = Request.new(:get, url).perform do |response|
+      response.code != 200 ? nil : response.body_with_limit(66.kilobytes)
+    end
+
+    return [] unless body.present?
+
+    yaml = YAML::load(body)
+    yaml.map! do |entry|
+      domain = entry['domain']
+      next if domain.blank?
+      severity = entry['severity'].split('/')
+      reject_media = 'nomedia'.in?(severity)
+      severity = severity[0] || 'noop'
+      reason = "(imported from vulpine.club) #{entry['reason']}#{entry['link'].present? ? " (#{entry['link']})" : ''}".rstrip
+      {domain: domain, severity: severity.to_sym, reject_media: reject_media, reason: reason}
+    end
+  end
+end