18F/identity-idp

View on GitHub
app/services/idv/steps/doc_auth_base_step.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
90%
# frozen_string_literal: true

module Idv
  module Steps
    class DocAuthBaseStep < Flow::BaseStep
      def initialize(flow)
        super(flow, :doc_auth)
      end

      private

      def save_proofing_components
        return unless current_user

        doc_auth_vendor = DocAuthRouter.doc_auth_vendor(
          discriminator: flow_session[document_capture_session_uuid_key],
          analytics: @flow.analytics,
        )

        component_attributes = {
          document_check: doc_auth_vendor,
          document_type: 'state_id',
        }
        ProofingComponent.create_or_find_by(user: current_user).update(component_attributes)
      end

      def user_id_from_token
        flow_session[:doc_capture_user_id]
      end

      def hybrid_flow_mobile?
        user_id_from_token.present?
      end

      def rate_limited_response
        @flow.analytics.rate_limit_reached(
          limiter_type: :idv_doc_auth,
        )
        redirect_to rate_limited_url
        DocAuth::Response.new(
          success: false,
          errors: { limit: I18n.t('doc_auth.errors.rate_limited_heading') },
        )
      end

      def rate_limited_url
        idv_session_errors_rate_limited_url
      end

      def user_id
        current_user ? current_user.id : user_id_from_token
      end

      def sp_session
        session.fetch(:sp, {})
      end

      def create_document_capture_session(key)
        document_capture_session = DocumentCaptureSession.create(
          user_id: user_id,
          issuer: sp_session[:issuer],
        )
        flow_session[key] = document_capture_session.uuid

        document_capture_session
      end

      def document_capture_session
        @document_capture_session ||= DocumentCaptureSession.find_by(
          uuid: flow_session[document_capture_session_uuid_key],
        )
      end

      def document_capture_session_uuid_key
        :document_capture_session_uuid
      end

      def verify_step_document_capture_session_uuid_key
        :idv_verify_step_document_capture_session_uuid
      end

      delegate :idv_session, :session, :flow_path, to: :@flow
    end
  end
end