diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/models/intruder.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/app/models/intruder.rb b/app/models/intruder.rb index 249fffc..97e3773 100644 --- a/app/models/intruder.rb +++ b/app/models/intruder.rb @@ -31,6 +31,41 @@ class Intruder < ActiveRecord::Base end end + def self.write_firewall_blacklist + firewall_blacklist_file = GsParameter.get('blacklist_file', 'perimeter', 'general') + entry_template = GsParameter.get('blacklist_file_entry', 'perimeter', 'general') + comment_template = GsParameter.get('blacklist_file_comment', 'perimeter', 'general') + File.open(firewall_blacklist_file, 'w') do |file| + Intruder.where(:list_type => 'blacklist').where('bans > 0').all.each do |entry| + if ! comment_template.blank? + file.write(self.expand_variables(comment_template, entry.to_hash) + "\n") + end + file.write(self.expand_variables(entry_template, entry.to_hash) + "\n") + end + end + end + + def self.expand_variables(line, variables) + return line.gsub(/\{([a-z_]+)\}/) do |m| + variables[$1.to_sym] + end + end + + def to_hash + return { + :key => self.key, + :points => self.points, + :bans => self.bans, + :received_port => self.contact_port, + :received_ip => self.contact_ip, + :contact_count => self.contact_count, + :user_agent => self.user_agent, + :to_user => self.to_user, + :comment => self.comment, + :date => DateTime.now.strftime('%Y-%m-%d %X') + } + end + private def set_key_if_empty if self.key.blank? |