Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-06-09 12:10:14 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-06-09 12:10:14 +0300
commit8b50d36626f3a71a2d8552a316d700510559b0de (patch)
tree154f4b0391d0943438f577559a8adad32885bfe1 /app/services/spam
parent7a544c9ef1136ce0b52e269f54ebe74d0f26ad3d (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/spam')
-rw-r--r--app/services/spam/spam_action_service.rb39
1 files changed, 25 insertions, 14 deletions
diff --git a/app/services/spam/spam_action_service.rb b/app/services/spam/spam_action_service.rb
index 9a55576384b..0527412e9bc 100644
--- a/app/services/spam/spam_action_service.rb
+++ b/app/services/spam/spam_action_service.rb
@@ -11,26 +11,16 @@ module Spam
@extra_features = extra_features
end
- # rubocop:disable Metrics/AbcSize
def execute
return ServiceResponse.success(message: 'Skipped spam check because spam_params was not present') unless spam_params
+ return ServiceResponse.success(message: 'Skipped spam check because user was not present') unless user
- recaptcha_verified = Captcha::CaptchaVerificationService.new(spam_params: spam_params).execute
-
- if recaptcha_verified
- # If it's a request which is already verified through CAPTCHA,
- # update the spam log accordingly.
- SpamLog.verify_recaptcha!(user_id: user.id, id: spam_params.spam_log_id)
- ServiceResponse.success(message: "CAPTCHA successfully verified")
+ if target.supports_recaptcha?
+ execute_with_captcha_support
else
- return ServiceResponse.success(message: 'Skipped spam check because user was allowlisted') if allowlisted?(user)
- return ServiceResponse.success(message: 'Skipped spam check because it was not required') unless check_for_spam?(user: user)
-
- perform_spam_service_check
- ServiceResponse.success(message: "Spam check performed. Check #{target.class.name} spammable model for any errors or CAPTCHA requirement")
+ execute_spam_check
end
end
- # rubocop:enable Metrics/AbcSize
delegate :check_for_spam?, to: :target
@@ -42,6 +32,27 @@ module Spam
Gitlab::RequestContext.instance.spam_params
end
+ def execute_with_captcha_support
+ recaptcha_verified = Captcha::CaptchaVerificationService.new(spam_params: spam_params).execute
+
+ if recaptcha_verified
+ # If it's a request which is already verified through CAPTCHA,
+ # update the spam log accordingly.
+ SpamLog.verify_recaptcha!(user_id: user.id, id: spam_params.spam_log_id)
+ ServiceResponse.success(message: "CAPTCHA successfully verified")
+ else
+ execute_spam_check
+ end
+ end
+
+ def execute_spam_check
+ return ServiceResponse.success(message: 'Skipped spam check because user was allowlisted') if allowlisted?(user)
+ return ServiceResponse.success(message: 'Skipped spam check because it was not required') unless check_for_spam?(user: user)
+
+ perform_spam_service_check
+ ServiceResponse.success(message: "Spam check performed. Check #{target.class.name} spammable model for any errors or CAPTCHA requirement")
+ end
+
##
# In order to be proceed to the spam check process, the target must be
# a dirty instance, which means it should be already assigned with the new