Refactor spam filtering on issues API

parent 62cad887
...@@ -23,11 +23,13 @@ module API ...@@ -23,11 +23,13 @@ module API
end end
def create_spam_log(project, current_user, attrs) def create_spam_log(project, current_user, attrs)
params = attrs.dup params = attrs.merge({
params[:source_ip] = env['REMOTE_ADDR'] source_ip: env['REMOTE_ADDR'],
params[:user_agent] = env['HTTP_USER_AGENT'] user_agent: env['HTTP_USER_AGENT'],
params[:noteable_type] = 'Issue' noteable_type: 'Issue',
params[:via_api] = true via_api: true
})
::CreateSpamLogService.new(project, current_user, params).execute ::CreateSpamLogService.new(project, current_user, params).execute
end end
end end
...@@ -126,8 +128,7 @@ module API ...@@ -126,8 +128,7 @@ module API
end end
project = user_project project = user_project
text = attrs[:title] text = [attrs[:title], attrs[:description]].reject(&:blank?).join("\n")
text += "\n#{attrs[:description]}" if attrs[:description].present?
if check_for_spam?(project, current_user) && is_spam?(env, current_user, text) if check_for_spam?(project, current_user) && is_spam?(env, current_user, text)
create_spam_log(project, current_user, attrs) create_spam_log(project, current_user, attrs)
......
...@@ -249,14 +249,19 @@ describe API::API, api: true do ...@@ -249,14 +249,19 @@ describe API::API, api: true do
end end
end end
it "should create a new project issue" do it "should not create a new project issue" do
post api("/projects/#{project.id}/issues", user), expect {
title: 'new issue', labels: 'label, label2' 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(response.status).to eq(400)
expect(json_response['message']).to eq({ "error" => "Spam detected" }) expect(json_response['message']).to eq({ "error" => "Spam detected" })
spam_logs = SpamLog.all spam_logs = SpamLog.all
expect(spam_logs.count).to eq(1) expect(spam_logs.count).to eq(1)
expect(spam_logs[0].title).to eq('new issue') 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].user).to eq(user)
expect(spam_logs[0].noteable_type).to eq('Issue') expect(spam_logs[0].noteable_type).to eq('Issue')
expect(spam_logs[0].project_id).to eq(project.id) 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