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.
48 lines
909 B
Ruby
Executable file
48 lines
909 B
Ruby
Executable file
#!/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
|
|
|