diff --git a/app/models/comment.rb b/app/models/comment.rb index 21d11ac..dbc2958 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -224,6 +224,7 @@ class Comment < ActiveRecord::Base def spam! self.spam = true self.save! + SpammerLogger.log(ip_address, self) Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_spam)) self end diff --git a/app/models/spammer_logger.rb b/app/models/spammer_logger.rb new file mode 100644 index 0000000..671c6cd --- /dev/null +++ b/app/models/spammer_logger.rb @@ -0,0 +1,24 @@ +class SpammerLogger < Logger + @logpath = File.join(Rails.root, 'log', "#{ENV['RAILS_ENV']}_spammers.log") + @logger = new(@logpath) + + def self.log(spammer_ip, object=nil) + if object + if object.kind_of?(Comment) + @logger << "[#{Time.now.strftime("%F %T %z")}] Comment-id: #{object.id} IP: #{spammer_ip}\n" + end + else + @logger << "[#{Time.now.strftime("%F %T %z")}] IP: #{spammer_ip}\n" + end + end + + def self.clean_log + File.delete(@logpath) if File.exists?(@logpath) + end + + def self.reload_log + clean_log + @logger = new(@logpath) + end + +end diff --git a/test/unit/comment_test.rb b/test/unit/comment_test.rb index 077bc54..5791f4c 100644 --- a/test/unit/comment_test.rb +++ b/test/unit/comment_test.rb @@ -563,6 +563,14 @@ class CommentTest < ActiveSupport::TestCase assert_equal Environment.default, comment.environment end + should 'log spammer ip after marking comment as spam' do + comment = create_comment(:ip_address => '192.168.0.1') + comment.spam! + log = File.open('log/test_spammers.log') + assert_match "Comment-id: #{comment.id} IP: 192.168.0.1", log.read + SpammerLogger.clean_log + end + private def create_comment(args = {}) diff --git a/test/unit/spammer_logger_test.rb b/test/unit/spammer_logger_test.rb new file mode 100644 index 0000000..c56ca46 --- /dev/null +++ b/test/unit/spammer_logger_test.rb @@ -0,0 +1,26 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class SpammerLoggerTest < ActiveSupport::TestCase + + def setup + SpammerLogger.reload_log + end + + def teardown + SpammerLogger.clean_log + end + + should 'log the spammer ip' do + SpammerLogger.log('192.168.0.1') + log = File.open('log/test_spammers.log') + assert_match 'IP: 192.168.0.1', log.read + end + + should 'log the spammer ip with comment associated' do + comment = fast_create(Comment) + SpammerLogger.log('192.168.0.1', comment) + log = File.open('log/test_spammers.log') + assert_match "Comment-id: #{comment.id} IP: 192.168.0.1", log.read + end + +end -- libgit2 0.21.2