diff options
author | Patricio Cano <suprnova32@gmail.com> | 2016-08-09 20:43:47 +0300 |
---|---|---|
committer | Patricio Cano <suprnova32@gmail.com> | 2016-08-16 01:20:57 +0300 |
commit | 5994c11910822463faeabb7b5f11d6529036db9d (patch) | |
tree | a80a8ffea4d4ef868790aab627abfcaa1c982d10 /app/services/spam_service.rb | |
parent | 43e756d4eafd79f4d2f366b646ebb94af78b5a4c (diff) |
Further refactor and syntax fixes.
Diffstat (limited to 'app/services/spam_service.rb')
-rw-r--r-- | app/services/spam_service.rb | 76 |
1 files changed, 45 insertions, 31 deletions
diff --git a/app/services/spam_service.rb b/app/services/spam_service.rb index ad60de368aa..48903291799 100644 --- a/app/services/spam_service.rb +++ b/app/services/spam_service.rb @@ -1,61 +1,75 @@ class SpamService - attr_accessor :spammable + attr_accessor :spammable, :request, :options - def initialize(spammable) + def initialize(spammable, request = nil) @spammable = spammable + @request = request + @options = {} + + if @request + @options[:ip_address] = @request.env['action_dispatch.remote_ip'].to_s + @options[:user_agent] = @request.env['HTTP_USER_AGENT'] + @options[:referrer] = @request.env['HTTP_REFERRER'] + else + @options[:ip_address] = @spammable.ip_address + @options[:user_agent] = @spammable.user_agent + end end - def check(api, request) - return false unless request && spammable.check_for_spam? - return false unless akismet.is_spam?(request.env) + def check(api = false) + return false unless request && check_for_spam? - create_spam_log(api, request) + return false unless akismet.is_spam? + + create_spam_log(api) true end - def mark_as_spam!(current_user) - return false unless akismet_enabled? && spammable.can_be_submitted? - if akismet.spam! - spammable.user_agent_detail.update_attribute(:submitted, true) + def mark_as_spam! + return false unless spammable.submittable_as_spam? - if spammable.is_a?(Issuable) - SystemNoteService.submit_spam(spammable, spammable.project, current_user) - end - true + if akismet.submit_spam + spammable.user_agent_detail.update_attribute(:submitted, true) else false end end - def mark_as_ham! - return false unless spammable.is_a?(SpamLog) + private - if akismet.ham! - spammable.update_attribute(:submitted_as_ham, true) - true - else - false - end + def akismet + @akismet ||= AkismetService.new( + spammable_owner, + spammable.spammable_text, + options + ) end - private + def spammable_owner + @user ||= User.find(spammable_owner_id) + end - def akismet - @akismet ||= AkismetService.new(spammable) + def spammable_owner_id + @owner_id ||= + if spammable.respond_to?(:author_id) + spammable.author_id + elsif spammable.respond_to?(:creator_id) + spammable.creator_id + end end - def akismet_enabled? - current_application_settings.akismet_enabled + def check_for_spam? + spammable.check_for_spam? end - def create_spam_log(api, request) + def create_spam_log(api) SpamLog.create( { - user_id: spammable.owner_id, + user_id: spammable_owner_id, title: spammable.spam_title, description: spammable.spam_description, - source_ip: akismet.client_ip(request.env), - user_agent: akismet.user_agent(request.env), + source_ip: options[:ip_address], + user_agent: options[:user_agent], noteable_type: spammable.class.to_s, via_api: api } |