Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
671cedc
remove passport A/B and allowed
amirbey Sep 5, 2025
c063bbd
fix specs
amirbey Sep 6, 2025
9f5c103
fix specs
amirbey Sep 6, 2025
f528920
fix specs
amirbey Sep 6, 2025
6da94a6
fix specs
amirbey Sep 6, 2025
8dcde32
update ipp passports on ff and default passports to true
amirbey Sep 6, 2025
ffe310a
fix specs
amirbey Sep 6, 2025
8e9258f
fix specs
amirbey Sep 6, 2025
61ef393
include passports enabled in ipp passports enabled
amirbey Sep 6, 2025
0215245
add choose Id type to complete steps before doc cap
amirbey Sep 6, 2025
d3b8026
fix specs
amirbey Sep 6, 2025
bd8adf4
fix specs
amirbey Sep 6, 2025
7e98fcb
fix specs
amirbey Sep 6, 2025
6bbd101
fix specs
amirbey Sep 6, 2025
87d18c4
disable ipp passports now that passports are enabled by default
amirbey Sep 6, 2025
4c95dc0
fix specs
amirbey Sep 6, 2025
b3fa15f
fix specs
amirbey Sep 6, 2025
2d9901a
fix specs
amirbey Sep 6, 2025
346229f
comment Todo preconditions for choose id type standard
amirbey Sep 6, 2025
eb1357f
fix specs
amirbey Sep 6, 2025
4065a3f
fix specs
amirbey Sep 6, 2025
8b429fd
remove byebug
amirbey Sep 6, 2025
99ebbe1
fix specs
amirbey Sep 6, 2025
d81ac78
fix specs
amirbey Sep 6, 2025
3911a63
rename doc_auth.instructions.bullet1b to doc_auth.instructions.bullet1'
amirbey Sep 6, 2025
e534dba
fix specs
amirbey Sep 7, 2025
fb938d0
undo this change
amirbey Sep 7, 2025
37bda17
fix specs
amirbey Sep 7, 2025
f6407fa
fix specs
amirbey Sep 7, 2025
321e8b7
fix specs
amirbey Sep 7, 2025
d2bcf92
fix specs
amirbey Sep 7, 2025
b8b5b26
fix specs
amirbey Sep 7, 2025
c31e1fc
fix specs
amirbey Sep 8, 2025
78c0c9f
fix specs
amirbey Sep 8, 2025
5b9e2b4
fix specs
amirbey Sep 8, 2025
0ad3c89
fix specs
amirbey Sep 8, 2025
1015eac
fix specs
amirbey Sep 8, 2025
f1db670
fix specs
amirbey Sep 8, 2025
3066250
add choose id type to analytics specs
amirbey Sep 8, 2025
783d08a
fix specs
amirbey Sep 8, 2025
054450b
remove comments
amirbey Sep 8, 2025
f490535
happy linting
amirbey Sep 8, 2025
dbf169e
changelog: Internal, Document Authentication, Remove A/B test for per…
amirbey Sep 8, 2025
3ef8c6f
add local attrs test if passport disabled
amirbey Sep 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions app/controllers/concerns/idv/choose_id_type_concern.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,21 @@ def dos_passport_api_healthy?(
end

def locals_attrs(presenter:, form_submit_url: nil)
disable_passports = params.permit(:passports)[:passports].present?
{
presenter:,
form_submit_url:,
disable_passports:,
auto_check_value: disable_passports ? :drivers_license : selected_id_type,
disable_passports: disable_passports?,
auto_check_value: disable_passports? ? :drivers_license : selected_id_type,
}
end
Comment thread
shanechesnutt-ft marked this conversation as resolved.
Outdated

def disable_passports?
!passports_enabled? ||
params.permit(:passports)[:passports].present?
end

def passports_enabled?
IdentityConfig.store.doc_auth_passports_enabled
end
end
end
7 changes: 3 additions & 4 deletions app/controllers/concerns/idv_step_concern.rb
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,8 @@ def confirm_hybrid_handoff_needed

if in_person_proofing_route_enabled?
redirect_to idv_how_to_verify_url
elsif idv_session.passport_allowed
redirect_to idv_choose_id_type_url
else
redirect_to vendor_document_capture_url
redirect_to idv_choose_id_type_url
end
end
end
Expand All @@ -101,7 +99,8 @@ def vendor_document_capture_url
end

def in_person_passports_allowed?
IdentityConfig.store.in_person_passports_enabled && document_capture_session.passport_allowed?
IdentityConfig.store.doc_auth_passports_enabled &&
IdentityConfig.store.in_person_passports_enabled
end

private
Expand Down
10 changes: 2 additions & 8 deletions app/controllers/idv/choose_id_type_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ class ChooseIdTypeController < ApplicationController
include StepIndicatorConcern
include Idv::ChooseIdTypeConcern

before_action :redirect_if_passport_not_available
before_action :confirm_step_allowed

def show
Expand Down Expand Up @@ -49,25 +48,20 @@ def self.step_info
controller: self,
next_steps: [:document_capture],
preconditions: ->(idv_session:, user:) do
idv_session.flow_path == 'standard' &&
idv_session.passport_allowed == true
idv_session.flow_path == 'standard'
end,
undo_step: ->(idv_session:, user:) do
if idv_session.document_capture_session_uuid
DocumentCaptureSession.find_by(
uuid: idv_session.document_capture_session_uuid,
)&.update!(passport_status: idv_session.passport_allowed ? 'allowed' : nil)
)&.update!(passport_status: nil)
end
end,
)
end

private

def redirect_if_passport_not_available
redirect_to idv_how_to_verify_url if !idv_session.passport_allowed
end

def next_step
idv_document_capture_url
end
Expand Down
9 changes: 3 additions & 6 deletions app/controllers/idv/how_to_verify_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,9 @@ def update
idv_session.skip_doc_auth_from_how_to_verify = false
idv_session.flow_path = 'standard'
abandon_any_ipp_progress
if idv_session.passport_allowed
redirect_to idv_choose_id_type_url
else
redirect_to idv_document_capture_url
end

redirect_to idv_choose_id_type_url

else
idv_session.opted_in_to_in_person_proofing = true
idv_session.flow_path = 'standard'
Expand Down Expand Up @@ -102,7 +100,6 @@ def set_how_to_verify_presenter
@presenter = Idv::HowToVerifyPresenter.new(
mobile_required: @mobile_required,
selfie_check_required: @selfie_required,
passport_allowed: idv_session.passport_allowed,
)
end

Expand Down
11 changes: 1 addition & 10 deletions app/controllers/idv/hybrid_handoff_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ def set_how_to_verify_presenter
@presenter = Idv::HowToVerifyPresenter.new(
mobile_required: mobile_required?,
selfie_check_required: @selfie_required,
passport_allowed: idv_session.passport_allowed,
)
end

Expand Down Expand Up @@ -170,7 +169,7 @@ def update_document_capture_session_requested_at(session_uuid)

def bypass_send_link_steps
idv_session.flow_path = 'standard'
redirect_to next_step
redirect_to idv_choose_id_type_url

analytics.idv_doc_auth_hybrid_handoff_submitted(
**analytics_arguments.merge(
Expand All @@ -179,14 +178,6 @@ def bypass_send_link_steps
)
end

def next_step
if idv_session.passport_allowed
idv_choose_id_type_url
else
idv_document_capture_url
end
end

def extra_view_variables
{ idv_phone_form: build_form }
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class ChooseIdTypeController < ApplicationController
include Idv::ChooseIdTypeConcern

before_action :check_valid_document_capture_session
before_action :redirect_if_passport_not_available, only: :show

def show
analytics.idv_doc_auth_choose_id_type_visited(**analytics_arguments)
Expand Down Expand Up @@ -44,12 +43,6 @@ def update

private

def redirect_if_passport_not_available
unless document_capture_session.passport_allowed?
redirect_to idv_hybrid_mobile_document_capture_url
end
end

def next_step
idv_hybrid_mobile_document_capture_url
end
Expand Down
7 changes: 1 addition & 6 deletions app/controllers/idv/hybrid_mobile/entry_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,7 @@ def show

return handle_invalid_document_capture_session if !validate_document_capture_user_id

if document_capture_session.passport_allowed?
redirect_to idv_hybrid_mobile_choose_id_type_url
return
end

redirect_to idv_hybrid_mobile_document_capture_url
redirect_to idv_hybrid_mobile_choose_id_type_url
end

private
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/idv/in_person/choose_id_type_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def self.step_info
if idv_session.document_capture_session_uuid && user.has_establishing_in_person_enrollment?
DocumentCaptureSession.find_by(
uuid: idv_session.document_capture_session_uuid,
)&.update!(passport_status: idv_session.passport_allowed ? 'allowed' : nil)
)&.update!(passport_status: nil)
end
end,
)
Expand Down
17 changes: 1 addition & 16 deletions app/controllers/idv/welcome_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,21 @@ class WelcomeController < ApplicationController
before_action :confirm_step_allowed
before_action :confirm_not_rate_limited
before_action :cancel_previous_in_person_enrollments, only: :show
before_action :update_passport_allowed,
only: :show,
if: -> { IdentityConfig.store.doc_auth_passports_enabled }

def show
idv_session.proofing_started_at ||= Time.zone.now.iso8601
analytics.idv_doc_auth_welcome_visited(**analytics_arguments)

Funnel::DocAuth::RegisterStep.new(current_user.id, sp_session[:issuer])
.call('welcome', :view, true)

@presenter = Idv::WelcomePresenter.new(
decorated_sp_session:,
passport_allowed: idv_session.passport_allowed,
)
end

def update
clear_future_steps!
idv_session.proofing_started_at ||= Time.zone.now.iso8601
Comment thread
shanechesnutt-ft marked this conversation as resolved.
Outdated
create_document_capture_session
analytics.idv_doc_auth_welcome_submitted(**analytics_arguments)
idv_session.welcome_visited = true
Expand All @@ -45,7 +41,6 @@ def self.step_info
undo_step: ->(idv_session:, user:) do
idv_session.welcome_visited = nil
idv_session.document_capture_session_uuid = nil
idv_session.passport_allowed = nil
end,
)
end
Expand All @@ -56,15 +51,13 @@ def analytics_arguments
{
step: 'welcome',
analytics_id: 'Doc Auth',
passport_allowed: idv_session.passport_allowed,
}.merge(ab_test_analytics_buckets)
end

def create_document_capture_session
document_capture_session = DocumentCaptureSession.create!(
user_id: current_user.id,
issuer: sp_session[:issuer],
passport_status:,
)
idv_session.document_capture_session_uuid = document_capture_session.uuid
end
Expand All @@ -74,13 +67,5 @@ def cancel_previous_in_person_enrollments
current_user,
)
end

def update_passport_allowed
idv_session.passport_allowed ||= ab_test_bucket(:DOC_AUTH_PASSPORT) == :passport_allowed
end

def passport_status
:allowed if idv_session.passport_allowed
end
end
end
5 changes: 0 additions & 5 deletions app/models/document_capture_session.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ class DocumentCaptureSession < ApplicationRecord
belongs_to :user

PASSPORT_STATUSES = [
'allowed',
'not_requested',
'requested',
].freeze
Expand Down Expand Up @@ -108,10 +107,6 @@ def confirm_ocr
update!(ocr_confirmation_pending: false)
end

def passport_allowed?
PASSPORT_STATUSES.include? passport_status
end

def passport_requested?
passport_status == 'requested'
end
Expand Down
17 changes: 4 additions & 13 deletions app/presenters/idv/how_to_verify_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ class Idv::HowToVerifyPresenter
include ActionView::Helpers::TagHelper
include ActionView::Helpers::TranslationHelper

attr_reader :mobile_required, :selfie_required, :passport_allowed
attr_reader :mobile_required, :selfie_required

def initialize(mobile_required:, selfie_check_required:, passport_allowed:)
def initialize(mobile_required:, selfie_check_required:)
@mobile_required = mobile_required
@selfie_required = selfie_check_required
@passport_allowed = passport_allowed
end

def how_to_verify_info
Expand Down Expand Up @@ -51,11 +50,7 @@ def verify_online_instruction
end

def verify_online_description
if passport_allowed
t('doc_auth.info.verify_online_description_passport')
else
''
end
t('doc_auth.info.verify_online_description_passport')
end

def online_submit
Expand Down Expand Up @@ -83,13 +78,9 @@ def post_office_accepted_id_instruction
end

def post_office_description
if passport_allowed
IdentityConfig.store.in_person_passports_enabled ?
IdentityConfig.store.in_person_passports_enabled ?
t('doc_auth.info.verify_online_description_passport') :
t('doc_auth.info.verify_at_post_office_description_passport_html')
else
''
end
end

def post_office_submit
Expand Down
9 changes: 3 additions & 6 deletions app/presenters/idv/welcome_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@ class WelcomePresenter

attr_accessor :url_options

def initialize(decorated_sp_session:, passport_allowed:)
def initialize(decorated_sp_session:)
@decorated_sp_session = decorated_sp_session
@passport_allowed = passport_allowed
@url_options = {}
end

Expand Down Expand Up @@ -69,16 +68,14 @@ def bullet_points

private

attr_reader :decorated_sp_session, :passport_allowed
attr_reader :decorated_sp_session

def current_user
decorated_sp_session&.current_user
end

def id_type_copy
return t('doc_auth.instructions.bullet1b') if passport_allowed

t('doc_auth.instructions.bullet1a')
t('doc_auth.instructions.bullet1')
end

def bullet_point(bullet, text)
Expand Down
6 changes: 0 additions & 6 deletions app/services/analytics_events.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2392,13 +2392,11 @@ def idv_doc_auth_warning_visited(step_name:, remaining_submit_attempts:, **extra
# User submits IdV welcome screen
# @param [String] step Current IdV step
# @param [String] analytics_id Current IdV flow identifier
# @param [Boolean] passport_allowed Whether passport is allowed for document capture
# @param [Boolean] skip_hybrid_handoff Whether skipped hybrid handoff A/B test is active
# @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing
def idv_doc_auth_welcome_submitted(
step:,
analytics_id:,
passport_allowed:,
opted_in_to_in_person_proofing: nil,
skip_hybrid_handoff: nil,
**extra
Expand All @@ -2407,7 +2405,6 @@ def idv_doc_auth_welcome_submitted(
'IdV: doc auth welcome submitted',
step:,
analytics_id:,
passport_allowed:,
opted_in_to_in_person_proofing:,
skip_hybrid_handoff:,
**extra,
Expand All @@ -2417,13 +2414,11 @@ def idv_doc_auth_welcome_submitted(
# User visits IdV welcome screen
# @param [String] step Current IdV step
# @param [String] analytics_id Current IdV flow identifier
# @param [Boolean] passport_allowed Whether passport is allowed for document capture
# @param [Boolean] skip_hybrid_handoff Whether skipped hybrid handoff A/B test is active
# @param [Boolean] opted_in_to_in_person_proofing User opted into in person proofing
def idv_doc_auth_welcome_visited(
step:,
analytics_id:,
passport_allowed:,
opted_in_to_in_person_proofing: nil,
skip_hybrid_handoff: nil,
**extra
Expand All @@ -2432,7 +2427,6 @@ def idv_doc_auth_welcome_visited(
'IdV: doc auth welcome visited',
step:,
analytics_id:,
passport_allowed:,
skip_hybrid_handoff:,
opted_in_to_in_person_proofing:,
**extra,
Expand Down
Loading