diff options
author | Stan Hu <stanhu@gmail.com> | 2018-06-21 23:25:00 -0700 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-06-21 23:25:00 -0700 |
commit | d90378bdafb3c11da8f12d4f799fa3b056fb8a45 (patch) | |
tree | 0f3b3ebc6bb2edd6e56ecd101d827c9ba4b01a69 | |
parent | 0ea5d6645c9919b63ebb44fb37ea402fd40609ac (diff) | |
download | gitlab-ce-sh-add-captcha-prometheus-counters.tar.gz |
Add Prometheus metrics to track reCAPTCHA success/failuressh-add-captcha-prometheus-counters
-rw-r--r-- | app/controllers/sessions_controller.rb | 20 | ||||
-rw-r--r-- | spec/controllers/sessions_controller_spec.rb | 13 |
2 files changed, 32 insertions, 1 deletions
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 7aa277b3614..f8483221965 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -62,7 +62,11 @@ class SessionsController < Devise::SessionsController return unless captcha_enabled? return unless Gitlab::Recaptcha.load_configurations! - unless verify_recaptcha + if verify_recaptcha + increment_successful_login_captcha_counter + else + increment_failed_login_captcha_counter + self.resource = resource_class.new flash[:alert] = 'There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.' flash.delete :recaptcha_error @@ -71,6 +75,20 @@ class SessionsController < Devise::SessionsController end end + def increment_failed_login_captcha_counter + Gitlab::Metrics.counter( + :failed_login_captcha_total, + 'Number of failed CAPTCHA attempts for logins' + ).increment + end + + def increment_successful_login_captcha_counter + Gitlab::Metrics.counter( + :successful_login_captcha_total, + 'Number of successful CAPTCHA attempts for logins' + ).increment + end + def log_failed_login Gitlab::AppLogger.info("Failed Login: username=#{user_params[:login]} ip=#{request.remote_ip}") end diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb index cdec26bd421..aa2f6c0f6f6 100644 --- a/spec/controllers/sessions_controller_spec.rb +++ b/spec/controllers/sessions_controller_spec.rb @@ -93,6 +93,12 @@ describe SessionsController do it 'displays an error when the reCAPTCHA is not solved' do # Without this, `verify_recaptcha` arbitraily returns true in test env Recaptcha.configuration.skip_verify_env.delete('test') + counter = double(:counter) + + expect(counter).to receive(:increment) + expect(Gitlab::Metrics).to receive(:counter) + .with(:failed_login_captcha_total, + 'Number of failed CAPTCHA attempts for logins').and_return(counter) post(:create, user: user_params) @@ -104,6 +110,13 @@ describe SessionsController do it 'successfully logs in a user when reCAPTCHA is solved' do # Avoid test ordering issue and ensure `verify_recaptcha` returns true Recaptcha.configuration.skip_verify_env << 'test' + counter = double(:counter) + + expect(counter).to receive(:increment) + expect(Gitlab::Metrics).to receive(:counter) + .with(:successful_login_captcha_total, + 'Number of successful CAPTCHA attempts for logins').and_return(counter) + expect(Gitlab::Metrics).to receive(:counter).and_call_original post(:create, user: user_params) |