diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-09 12:10:14 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-09 12:10:14 +0300 |
commit | 8b50d36626f3a71a2d8552a316d700510559b0de (patch) | |
tree | 154f4b0391d0943438f577559a8adad32885bfe1 /app/services/spam | |
parent | 7a544c9ef1136ce0b52e269f54ebe74d0f26ad3d (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/spam')
-rw-r--r-- | app/services/spam/spam_action_service.rb | 39 |
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 |