summaryrefslogtreecommitdiff
path: root/lib/api
diff options
context:
space:
mode:
authorRobert Speicher <robert@gitlab.com>2016-02-03 01:26:30 +0000
committerRobert Speicher <robert@gitlab.com>2016-02-03 01:26:30 +0000
commit8a85906a74aff295074c79619d491bea9c947e05 (patch)
treefc4aa22c44ce08a4bf6b823090e5c499b11ecc4a /lib/api
parentfcfafffef5535295e310407a7e3bb4a20ff2fd55 (diff)
parentdffacbb12c0abd4edf677aed2d9e201b41fd2dae (diff)
downloadgitlab-ce-8a85906a74aff295074c79619d491bea9c947e05.tar.gz
Merge branch 'support-akismet' into 'master'
Support Akismet spam checking for creation of issues via API Currently any spam detected by Akismet for non-members via API will be logged in a separate table in the admin page. Closes #5612 See merge request !2266
Diffstat (limited to 'lib/api')
-rw-r--r--lib/api/issues.rb23
1 files changed, 22 insertions, 1 deletions
diff --git a/lib/api/issues.rb b/lib/api/issues.rb
index 6e7a7672070..252744515da 100644
--- a/lib/api/issues.rb
+++ b/lib/api/issues.rb
@@ -3,6 +3,8 @@ module API
class Issues < Grape::API
before { authenticate! }
+ helpers ::Gitlab::AkismetHelper
+
helpers do
def filter_issues_state(issues, state)
case state
@@ -19,6 +21,17 @@ module API
def filter_issues_milestone(issues, milestone)
issues.includes(:milestone).where('milestones.title' => milestone)
end
+
+ def create_spam_log(project, current_user, attrs)
+ params = attrs.merge({
+ source_ip: env['REMOTE_ADDR'],
+ user_agent: env['HTTP_USER_AGENT'],
+ noteable_type: 'Issue',
+ via_api: true
+ })
+
+ ::CreateSpamLogService.new(project, current_user, params).execute
+ end
end
resource :issues do
@@ -114,7 +127,15 @@ module API
render_api_error!({ labels: errors }, 400)
end
- issue = ::Issues::CreateService.new(user_project, current_user, attrs).execute
+ project = user_project
+ text = [attrs[:title], attrs[:description]].reject(&:blank?).join("\n")
+
+ if check_for_spam?(project, current_user) && is_spam?(env, current_user, text)
+ create_spam_log(project, current_user, attrs)
+ render_api_error!({ error: 'Spam detected' }, 400)
+ end
+
+ issue = ::Issues::CreateService.new(project, current_user, attrs).execute
if issue.valid?
# Find or create labels and attach to issue. Labels are valid because