diff options
author | Patricio Cano <suprnova32@gmail.com> | 2016-07-22 02:11:53 +0300 |
---|---|---|
committer | Patricio Cano <suprnova32@gmail.com> | 2016-07-27 03:29:16 +0300 |
commit | f01fce7f4683e06e83d3f91d38ca5b749e27e7ec (patch) | |
tree | 4e43e365de7cc27cc7c22458fa0a8d079e35add6 /app/services/spam_check_service.rb | |
parent | 8f04cf0eadbcde7fc5d1c970741e30ca8b97967d (diff) |
Refactor spam validation to a concern that can be easily reused and improve legibility in `SpamCheckService`
Diffstat (limited to 'app/services/spam_check_service.rb')
-rw-r--r-- | app/services/spam_check_service.rb | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/app/services/spam_check_service.rb b/app/services/spam_check_service.rb index 6768047aa63..7c3e692bde9 100644 --- a/app/services/spam_check_service.rb +++ b/app/services/spam_check_service.rb @@ -1,28 +1,38 @@ -class SpamCheckService +class SpamCheckService < BaseService include Gitlab::AkismetHelper - attr_accessor :subject, :current_user, :params + attr_accessor :request, :api - def initialize(subject, user, params = {}) - @subject, @current_user, @params = subject, user, params.dup - end + def execute(request, api) + @request, @api = request, api + return false unless request || check_for_spam?(project) + return false unless is_spam?(request.env, current_user, text) + + create_spam_log - def spam_detected? - request = params[:request] - return false unless request || check_for_spam?(subject) + true + end - text = [params[:title], params[:description]].reject(&:blank?).join("\n") + private - return false unless is_spam?(request.env, current_user, text) - - attrs = { + def text + [params[:title], params[:description]].reject(&:blank?).join("\n") + end + + def spam_log_attrs + { user_id: current_user.id, - project_id: subject.id, + project_id: project.id, title: params[:title], - description: params[:description] + description: params[:description], + source_ip: client_ip(request.env), + user_agent: user_agent(request.env), + noteable_type: 'Issue', + via_api: api } - create_spam_log(subject, current_user, attrs, request.env, api: false) + end - true + def create_spam_log + CreateSpamLogService.new(project, current_user, spam_log_attrs).execute end end |