app/controllers/idv/how_to_verify_controller.rb
# frozen_string_literal: true
module Idv
class HowToVerifyController < ApplicationController
include Idv::AvailabilityConcern
include IdvStepConcern
include RenderConditionConcern
before_action :confirm_step_allowed
before_action :set_how_to_verify_presenter
check_or_render_not_found -> { self.class.enabled? }
def show
analytics.idv_doc_auth_how_to_verify_visited(**analytics_arguments)
@idv_how_to_verify_form = Idv::HowToVerifyForm.new
end
def update
clear_future_steps!
@idv_how_to_verify_form = Idv::HowToVerifyForm.new
result = @idv_how_to_verify_form.submit(how_to_verify_form_params)
if how_to_verify_form_params[:selection] == []
sendable_form_params = {}
else
sendable_form_params = how_to_verify_form_params
end
analytics.idv_doc_auth_how_to_verify_submitted(
**analytics_arguments.merge(sendable_form_params).merge(result.to_h),
)
if result.success?
if how_to_verify_form_params['selection'] == Idv::HowToVerifyForm::REMOTE
idv_session.opted_in_to_in_person_proofing = false
idv_session.skip_doc_auth = false
idv_session.skip_doc_auth_from_how_to_verify = false
redirect_to idv_hybrid_handoff_url
else
idv_session.opted_in_to_in_person_proofing = true
idv_session.flow_path = 'standard'
idv_session.skip_doc_auth = true
idv_session.skip_doc_auth_from_how_to_verify = true
redirect_to idv_document_capture_url
end
else
render :show, locals: { error: result.first_error_message }
end
end
def self.enabled?
IdentityConfig.store.in_person_proofing_opt_in_enabled &&
IdentityConfig.store.in_person_proofing_enabled
end
def self.step_info
Idv::StepInfo.new(
key: :how_to_verify,
controller: self,
next_steps: [:hybrid_handoff, :document_capture],
preconditions: ->(idv_session:, user:) do
self.enabled? &&
idv_session.idv_consent_given &&
idv_session.service_provider&.in_person_proofing_enabled
end,
undo_step: ->(idv_session:, user:) {
idv_session.skip_doc_auth = nil
idv_session.skip_doc_auth_from_how_to_verify = nil
idv_session.opted_in_to_in_person_proofing = nil
},
)
end
private
def analytics_arguments
{
step: 'how_to_verify',
analytics_id: 'Doc Auth',
skip_hybrid_handoff: idv_session.skip_hybrid_handoff,
}.merge(ab_test_analytics_buckets)
end
def how_to_verify_form_params
params.require(:idv_how_to_verify_form).permit(:selection, selection: [])
rescue ActionController::ParameterMissing
ActionController::Parameters.new(selection: [])
end
def set_how_to_verify_presenter
@selfie_required = idv_session.selfie_check_required
@presenter = Idv::HowToVerifyPresenter.new(selfie_check_required: @selfie_required)
end
end
end