summaryrefslogtreecommitdiff
path: root/app/services/spam_service.rb
diff options
context:
space:
mode:
authorPatricio Cano <suprnova32@gmail.com>2016-08-05 17:10:08 -0500
committerPatricio Cano <suprnova32@gmail.com>2016-08-15 13:18:15 -0500
commit43e756d4eafd79f4d2f366b646ebb94af78b5a4c (patch)
tree07949d3368affcda301fd266e1e5bf0649474b23 /app/services/spam_service.rb
parent7179165af7553720089a0b7e7024374c371e2f90 (diff)
downloadgitlab-ce-43e756d4eafd79f4d2f366b646ebb94af78b5a4c.tar.gz
Refactored AkismetHelper into AkismetService and cleaned up `Spammable`
- Refactored SpamCheckService into SpamService
Diffstat (limited to 'app/services/spam_service.rb')
-rw-r--r--app/services/spam_service.rb64
1 files changed, 64 insertions, 0 deletions
diff --git a/app/services/spam_service.rb b/app/services/spam_service.rb
new file mode 100644
index 00000000000..ad60de368aa
--- /dev/null
+++ b/app/services/spam_service.rb
@@ -0,0 +1,64 @@
+class SpamService
+ attr_accessor :spammable
+
+ def initialize(spammable)
+ @spammable = spammable
+ end
+
+ def check(api, request)
+ return false unless request && spammable.check_for_spam?
+ return false unless akismet.is_spam?(request.env)
+
+ create_spam_log(api, request)
+ 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)
+
+ if spammable.is_a?(Issuable)
+ SystemNoteService.submit_spam(spammable, spammable.project, current_user)
+ end
+ true
+ else
+ false
+ end
+ end
+
+ def mark_as_ham!
+ return false unless spammable.is_a?(SpamLog)
+
+ if akismet.ham!
+ spammable.update_attribute(:submitted_as_ham, true)
+ true
+ else
+ false
+ end
+ end
+
+ private
+
+ def akismet
+ @akismet ||= AkismetService.new(spammable)
+ end
+
+ def akismet_enabled?
+ current_application_settings.akismet_enabled
+ end
+
+ def create_spam_log(api, request)
+ SpamLog.create(
+ {
+ 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),
+ noteable_type: spammable.class.to_s,
+ via_api: api
+ }
+ )
+ end
+end