main
 1# frozen_string_literal: true
 2
 3module Authenticatable
 4  extend ActiveSupport::Concern
 5  included do
 6    before_action :apply_current_request_details
 7    before_action :authenticate!
 8    before_action :authenticate_mfa!
 9    helper_method :current_user, :current_user?, :mfa_completed?
10  end
11
12  def current_user
13    Current.user
14  end
15
16  def current_user?
17    Current.user?
18  end
19
20  def mfa_completed?
21    Current.user.mfa.valid_session?(session[:mfa])
22  end
23
24  private
25
26  def authenticate!
27    redirect_to new_session_path unless current_user?
28  end
29
30  def authenticate_mfa!
31    return unless Current.user?
32
33    redirect_to new_mfa_path unless mfa_completed?
34  end
35
36  def apply_current_request_details
37    Current.access(request, session)
38  end
39end