summaryrefslogtreecommitdiff
path: root/app/models/intruder.rb
diff options
context:
space:
mode:
authorStefan Wintermeyer <stefan.wintermeyer@amooma.de>2013-02-27 12:22:29 +0100
committerStefan Wintermeyer <stefan.wintermeyer@amooma.de>2013-02-27 12:22:29 +0100
commit67c1a0a951403a546250ea860a3e3d199cae2fce (patch)
treef86ec6cedf081a1a57005eca1661e9bead34e4de /app/models/intruder.rb
parent5d8ce5f4775ac8bc5f523964e6e36f63ff3c4683 (diff)
parent211f558a86ae30cdd5b392ab1376e1393f97e22c (diff)
Merge branch 'develop'5.1-beta6
Diffstat (limited to 'app/models/intruder.rb')
-rw-r--r--app/models/intruder.rb35
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?