Add script to update spam block ACLs
authorTom Hughes <tom@compton.nu>
Sat, 8 May 2010 16:49:27 +0000 (17:49 +0100)
committerTom Hughes <tom@compton.nu>
Sat, 8 May 2010 16:49:27 +0000 (17:49 +0100)
Maintain a set of ACLs which block account creation for an IP address
which has had more than two users suspended or removed in the last 28 days.

script/update-spam-blocks [new file with mode: 0755]

diff --git a/script/update-spam-blocks b/script/update-spam-blocks
new file mode 100755 (executable)
index 0000000..eaf7d9d
--- /dev/null
@@ -0,0 +1,48 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../config/environment'
+require 'generator'
+
+addresses = User.count(
+  :conditions => {
+    :status => ["suspended", "deleted"],
+    :creation_time => Time.now - 28.days .. Time.now
+  },
+  :group => :creation_ip
+)
+
+addresses.each do |address,count|
+  if count > 2
+    acl = Acl.find(:first, :conditions => {
+      :address => address,
+      :netmask => "255.255.255.255"
+    })
+
+    unless acl
+      Acl.create(
+        :address => address,
+        :netmask => "255.255.255.255",
+        :k => "no_account",
+        :v => "auto_spam_block"
+      )
+
+      puts "Blocked #{address}"
+    end
+  end
+end
+
+acls = Acl.find(:all, :conditions => {
+  :netmask => "255.255.255.255",
+  :k => "no_account_creation",
+  :v => "auto_spam_block"
+})
+
+acls.each do |acl|
+  unless addresses[acl.address]
+    acl.delete
+
+    puts "Unblocked #{acl.address}"
+  end
+end
+
+exit 0