From fbb1105a6af2f3d16f4800f6e2383fadbad61907 Mon Sep 17 00:00:00 2001 From: Luis Date: Thu, 15 Sep 2022 16:18:19 -0500 Subject: [PATCH 1/2] LG-7299 Add delivery preference to OTP sent events changelog: Internal, Attempts API, Track additional events --- .../two_factor_authentication_controller.rb | 9 +++++--- .../irs_attempts_api/tracker_events.rb | 22 +++++++++++-------- ...o_factor_authentication_controller_spec.rb | 6 ++--- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/app/controllers/users/two_factor_authentication_controller.rb b/app/controllers/users/two_factor_authentication_controller.rb index b380d7767e3..b3d4eeec0ed 100644 --- a/app/controllers/users/two_factor_authentication_controller.rb +++ b/app/controllers/users/two_factor_authentication_controller.rb @@ -224,19 +224,22 @@ def track_events(otp_delivery_preference:) if UserSessionContext.reauthentication_context?(context) irs_attempts_api_tracker.mfa_login_phone_otp_sent( reauthentication: true, - phone_number: parsed_phone.e164, success: @telephony_result.success?, + phone_number: parsed_phone.e164, + otp_delivery_method: otp_delivery_preference, ) elsif UserSessionContext.authentication_context?(context) irs_attempts_api_tracker.mfa_login_phone_otp_sent( reauthentication: false, - phone_number: parsed_phone.e164, success: @telephony_result.success?, + phone_number: parsed_phone.e164, + otp_delivery_method: otp_delivery_preference, ) elsif UserSessionContext.confirmation_context?(context) irs_attempts_api_tracker.mfa_enroll_phone_otp_sent( - phone_number: parsed_phone.e164, success: @telephony_result.success?, + phone_number: parsed_phone.e164, + otp_delivery_method: otp_delivery_preference, ) end end diff --git a/app/services/irs_attempts_api/tracker_events.rb b/app/services/irs_attempts_api/tracker_events.rb index a7cedd5b361..bab2029059d 100644 --- a/app/services/irs_attempts_api/tracker_events.rb +++ b/app/services/irs_attempts_api/tracker_events.rb @@ -195,7 +195,7 @@ def idv_personal_key_generated(success:) # @param [Boolean] success # @param [String] phone_number - # @param [String] otp_delivery_method + # @param [String] otp_delivery_method - Either SMS or Voice # @param [Hash>] failure_reason # Track when OTP is sent and what method chosen during idv flow. def idv_phone_confirmation_otp_sent(success:, phone_number:, @@ -426,15 +426,17 @@ def mfa_enroll_options_selected(success:, mfa_device_types:) ) end - # @param [String] phone_number - The user's phone_number used for multi-factor authentication # @param [Boolean] success - True if the OTP Verification was sent + # @param [String] phone_number - The user's phone_number used for multi-factor authentication + # @param [String] otp_delivery_method - Either SMS or Voice # Relevant only when the user is enrolling a phone as their MFA. - # The user has been sent an OTP by login.gov over SMS during the MFA enrollment process. - def mfa_enroll_phone_otp_sent(phone_number:, success:) + # The user has been sent an OTP by login.gov and by what method during the MFA enrollment process. + def mfa_enroll_phone_otp_sent(success:, phone_number:, otp_delivery_method:) track_event( :mfa_enroll_phone_otp_sent, - phone_number: phone_number, success: success, + phone_number: phone_number, + otp_delivery_method: otp_delivery_method, ) end @@ -521,15 +523,17 @@ def mfa_login_backup_code(success:) end # @param [Boolean] reauthentication - True if the user was already logged in - # @param [String] phone_number - The user's phone_number used for multi-factor authentication # @param [Boolean] success - True if the OTP Verification was sent - # During a login attempt, an OTP code has been sent via SMS. - def mfa_login_phone_otp_sent(reauthentication:, phone_number:, success:) + # @param [String] phone_number - The user's phone_number used for multi-factor authentication + # @param [String] otp_delivery_method - Either SMS or Voice + # During a login attempt, an OTP code has been sent via SMS or Voice. + def mfa_login_phone_otp_sent(reauthentication:, success:, phone_number:, otp_delivery_method:) track_event( :mfa_login_phone_otp_sent, reauthentication: reauthentication, - phone_number: phone_number, success: success, + phone_number: phone_number, + otp_delivery_method: otp_delivery_method, ) end diff --git a/spec/controllers/users/two_factor_authentication_controller_spec.rb b/spec/controllers/users/two_factor_authentication_controller_spec.rb index ab63bfd2320..d2e237a7f5c 100644 --- a/spec/controllers/users/two_factor_authentication_controller_spec.rb +++ b/spec/controllers/users/two_factor_authentication_controller_spec.rb @@ -327,7 +327,7 @@ def index it 'tracks the verification attempt event' do stub_attempts_tracker expect(@irs_attempts_api_tracker).to receive(:mfa_login_phone_otp_sent). - with(phone_number: '+12025551212', reauthentication: false, success: true) + with(phone_number: '+12025551212', reauthentication: false, success: true, otp_delivery_method: 'sms') get :send_code, params: { otp_delivery_selection_form: { otp_delivery_preference: 'sms' } } @@ -338,7 +338,7 @@ def index subject.user_session[:context] = 'reauthentication' expect(@irs_attempts_api_tracker).to receive(:mfa_login_phone_otp_sent). - with(phone_number: '+12025551212', reauthentication: true, success: true) + with(phone_number: '+12025551212', reauthentication: true, success: true, otp_delivery_method: 'sms') get :send_code, params: { otp_delivery_selection_form: { otp_delivery_preference: 'sms' } } @@ -532,7 +532,7 @@ def index stub_attempts_tracker expect(@irs_attempts_api_tracker).to receive(:mfa_enroll_phone_otp_sent). - with({ phone_number: '+12025551213', success: true }) + with({ phone_number: '+12025551213', success: true, otp_delivery_method: 'sms' }) get :send_code, params: { otp_delivery_selection_form: { otp_delivery_preference: 'sms' } } end From 017ef0792d18c5e69be106a251fac2a427a0a86e Mon Sep 17 00:00:00 2001 From: Luis Date: Thu, 15 Sep 2022 21:35:29 -0500 Subject: [PATCH 2/2] lint fix --- app/services/irs_attempts_api/tracker_events.rb | 2 +- .../two_factor_authentication_controller_spec.rb | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/services/irs_attempts_api/tracker_events.rb b/app/services/irs_attempts_api/tracker_events.rb index bab2029059d..33f4746308d 100644 --- a/app/services/irs_attempts_api/tracker_events.rb +++ b/app/services/irs_attempts_api/tracker_events.rb @@ -430,7 +430,7 @@ def mfa_enroll_options_selected(success:, mfa_device_types:) # @param [String] phone_number - The user's phone_number used for multi-factor authentication # @param [String] otp_delivery_method - Either SMS or Voice # Relevant only when the user is enrolling a phone as their MFA. - # The user has been sent an OTP by login.gov and by what method during the MFA enrollment process. + # The user has been sent an OTP and by SMS or Voice during the MFA enrollment process. def mfa_enroll_phone_otp_sent(success:, phone_number:, otp_delivery_method:) track_event( :mfa_enroll_phone_otp_sent, diff --git a/spec/controllers/users/two_factor_authentication_controller_spec.rb b/spec/controllers/users/two_factor_authentication_controller_spec.rb index d2e237a7f5c..534f711f3e0 100644 --- a/spec/controllers/users/two_factor_authentication_controller_spec.rb +++ b/spec/controllers/users/two_factor_authentication_controller_spec.rb @@ -327,7 +327,12 @@ def index it 'tracks the verification attempt event' do stub_attempts_tracker expect(@irs_attempts_api_tracker).to receive(:mfa_login_phone_otp_sent). - with(phone_number: '+12025551212', reauthentication: false, success: true, otp_delivery_method: 'sms') + with( + phone_number: '+12025551212', + reauthentication: false, + success: true, + otp_delivery_method: 'sms', + ) get :send_code, params: { otp_delivery_selection_form: { otp_delivery_preference: 'sms' } } @@ -338,7 +343,12 @@ def index subject.user_session[:context] = 'reauthentication' expect(@irs_attempts_api_tracker).to receive(:mfa_login_phone_otp_sent). - with(phone_number: '+12025551212', reauthentication: true, success: true, otp_delivery_method: 'sms') + with( + phone_number: '+12025551212', + reauthentication: true, + success: true, + otp_delivery_method: 'sms', + ) get :send_code, params: { otp_delivery_selection_form: { otp_delivery_preference: 'sms' } }