Class: RailsBase::Mfa::Totp::ValidateTemporaryCode

Inherits:
ServiceBase
  • Object
show all
Includes:
Helper
Defined in:
app/services/rails_base/mfa/totp/validate_temporary_code.rb

Instance Method Summary collapse

Methods included from Helper

#current_code, #lgp, #otp, #secret

Methods inherited from ServiceBase

inherited, #internal_validate, #service_base_logging

Methods included from ServiceLogging

#aletered_message, #class_name, #log, #log_prefix, #logger, #service_id

Instance Method Details

#callObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'app/services/rails_base/mfa/totp/validate_temporary_code.rb', line 10

def call
  valid_code = ValidateCode.(user: user, otp_code: otp_code, otp_secret: current_secret)
  if valid_code.failure?
    log(level: :debug, msg: "#{lgp} Code Validation failed. Will not persist temporary token")
    context.fail!(message: valid_code.message)
  end

  log(level: :info, msg: "#{lgp} correctly validated authenticator code. Persisting")
  user.persist_otp_metadata!
  if user.otp_backup_codes.empty?
    backup_codes = user.generate_otp_backup_codes!
    log(level: :info, msg: "#{lgp} first authenticator added. Generating Backup Codes. Will also return backup codes to user")
    context.backup_codes = backup_codes
  else
    log(level: :warn, msg: "#{lgp} added additional Authenticator. Will NOT provide backup codes")
  end
end

#current_secretObject



28
29
30
# File 'app/services/rails_base/mfa/totp/validate_temporary_code.rb', line 28

def current_secret
  @current_secret ||= user.reload.(safe: true, use_existing_temp: true)[:secret]
end

#validate!Object



32
33
34
35
# File 'app/services/rails_base/mfa/totp/validate_temporary_code.rb', line 32

def validate!
  raise "Expected user to be a User. " unless User === user
  raise "Expected otp_code to be present" if otp_code.nil?
end