Class: RailsBase::Mfa::Decision
Instance Method Summary
collapse
Methods inherited from ServiceBase
inherited, #internal_validate, #service_base_logging
#aletered_message, #class_name, #log, #log_prefix, #logger, #service_id
Instance Method Details
#available_mfa_options! ⇒ Object
24
25
26
27
28
29
30
|
# File 'app/services/rails_base/mfa/decision.rb', line 24
def available_mfa_options!
mfa_options = []
mfa_options << OTP if user.mfa_otp_enabled
mfa_options << SMS if user.mfa_sms_enabled
context.mfa_options = mfa_options
end
|
#call ⇒ Object
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# File 'app/services/rails_base/mfa/decision.rb', line 7
def call
unless RailsBase.config.mfa.enable?
execute_nil("Application")
return
end
if user.mfa_otp_enabled
execute_otp
elsif user.mfa_sms_enabled
execute_sms
else
execute_nil("User")
end
available_mfa_options!
end
|
#context_clues(type:, require_mfa:) ⇒ Object
53
54
55
56
|
# File 'app/services/rails_base/mfa/decision.rb', line 53
def context_clues(type:, require_mfa:)
context.mfa_type = type
context.mfa_require = require_mfa
end
|
#execute_nil(classify) ⇒ Object
48
49
50
51
|
# File 'app/services/rails_base/mfa/decision.rb', line 48
def execute_nil(classify)
log(level: :info, msg: "#{classify} does not have any MFA type enabled. Skipping")
context_clues(type: NONE, require_mfa: false)
end
|
#execute_otp ⇒ Object
32
33
34
35
36
37
38
|
# File 'app/services/rails_base/mfa/decision.rb', line 32
def execute_otp
log(level: :info, msg: "MFA type OTP is enabled on user. Executing OTP workflow")
result = reauth_strategy_class.(user: user, force: force_mfa, mfa_type: OTP, mfa_last_used: user.last_mfa_otp_login)
require_mfa = result.request_mfa
context_clues(type: OTP, require_mfa: require_mfa)
end
|
#execute_sms ⇒ Object
40
41
42
43
44
45
46
|
# File 'app/services/rails_base/mfa/decision.rb', line 40
def execute_sms
log(level: :info, msg: "MFA type SMS is enabled on user. Executing SMS workflow")
result = reauth_strategy_class.(user: user, force: force_mfa, mfa_type: SMS, mfa_last_used: user.last_mfa_sms_login)
require_mfa = result.request_mfa
context_clues(type: SMS, require_mfa: require_mfa)
end
|
#force_mfa ⇒ Object
58
59
60
|
# File 'app/services/rails_base/mfa/decision.rb', line 58
def force_mfa
context.force_mfa.nil? ? false : context.force_mfa
end
|
#reauth_strategy_class ⇒ Object
62
63
64
|
# File 'app/services/rails_base/mfa/decision.rb', line 62
def reauth_strategy_class
RailsBase.config.mfa.reauth_strategy
end
|
#validate! ⇒ Object
66
67
68
|
# File 'app/services/rails_base/mfa/decision.rb', line 66
def validate!
raise "Expected user to be a User. Received #{user.class}" unless user.is_a? User
end
|