Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatricio Cano <suprnova32@gmail.com>2016-08-09 20:43:47 +0300
committerPatricio Cano <suprnova32@gmail.com>2016-08-16 01:20:57 +0300
commit5994c11910822463faeabb7b5f11d6529036db9d (patch)
treea80a8ffea4d4ef868790aab627abfcaa1c982d10 /app/services/spam_service.rb
parent43e756d4eafd79f4d2f366b646ebb94af78b5a4c (diff)
Further refactor and syntax fixes.
Diffstat (limited to 'app/services/spam_service.rb')
-rw-r--r--app/services/spam_service.rb76
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
}