Sha256: 4fbdf7876a31024c6444d80868bc1642ad936185a53565ddc0af89de3ac0d5d7

Contents?: true

Size: 716 Bytes

Versions: 22

Compression:

Stored size: 716 Bytes

Contents

# frozen_string_literal: true

require 'openssl'

module Devise
  class TokenGenerator
    def initialize(key_generator, digest = "SHA256")
      @key_generator = key_generator
      @digest = digest
    end

    def digest(klass, column, value)
      value.present? && OpenSSL::HMAC.hexdigest(@digest, key_for(column), value.to_s)
    end

    def generate(klass, column)
      key = key_for(column)

      loop do
        raw = Devise.friendly_token
        enc = OpenSSL::HMAC.hexdigest(@digest, key, raw)
        break [raw, enc] unless klass.to_adapter.find_first({ column => enc })
      end
    end

    private

    def key_for(column)
      @key_generator.generate_key("Devise #{column}")
    end
  end
end

Version data entries

22 entries across 22 versions & 3 rubygems

Version Path
devise-4.4.1 lib/devise/token_generator.rb
devise-4.4.0 lib/devise/token_generator.rb