Refactor spam filtering on issues API

parent 62cad887
......@@ -23,11 +23,13 @@ module API
end
def create_spam_log(project, current_user, attrs)
params = attrs.dup
params[:source_ip] = env['REMOTE_ADDR']
params[:user_agent] = env['HTTP_USER_AGENT']
params[:noteable_type] = 'Issue'
params[:via_api] = true
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
......@@ -126,8 +128,7 @@ module API
end
project = user_project
text = attrs[:title]
text += "\n#{attrs[:description]}" if attrs[:description].present?
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)
......
......@@ -249,14 +249,19 @@ describe API::API, api: true do
end
end
it "should create a new project issue" do
post api("/projects/#{project.id}/issues", user),
title: 'new issue', labels: 'label, label2'
it "should not create a new project issue" do
expect {
post api("/projects/#{project.id}/issues", user),
title: 'new issue', description: 'content here', labels: 'label, label2'
}.not_to change(Issue, :count)
expect(response.status).to eq(400)
expect(json_response['message']).to eq({ "error" => "Spam detected" })
spam_logs = SpamLog.all
expect(spam_logs.count).to eq(1)
expect(spam_logs[0].title).to eq('new issue')
expect(spam_logs[0].description).to eq('content here')
expect(spam_logs[0].user).to eq(user)
expect(spam_logs[0].noteable_type).to eq('Issue')
expect(spam_logs[0].project_id).to eq(project.id)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment