Sha256: 4b41e00c7c5a0bc13e84c8c975bacc2afbf8fdfa9201a0a1a4a1c45336db6015

Contents?: true

Size: 621 Bytes

Versions: 1

Compression:

Stored size: 621 Bytes

Contents

# frozen_string_literal: true

module PagesCore
  module HasOtp
    extend ActiveSupport::Concern

    included do
      validates :otp_secret, presence: true, if: :otp_enabled?
    end

    def recovery_codes=(codes)
      self.hashed_recovery_codes = codes.map do |c|
        BCrypt::Password.create(c, cost: 8)
      end
    end

    def use_recovery_code!(code)
      valid_hashes = hashed_recovery_codes.select do |c|
        BCrypt::Password.new(c) == code
      end
      return false unless valid_hashes.any?

      update(hashed_recovery_codes: hashed_recovery_codes - valid_hashes)
      true
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pages_core-3.14.0 app/models/concerns/pages_core/has_otp.rb