class Negroni::TokenGenerator
Generates a secure token.
Public Class Methods
new(key_generator = nil, digest = 'SHA256', secret_key: nil)
click to toggle source
Creates a new token generator.
@param key_generator [ActiveSupport::CachingKeyGenerator] the generator @param digest [String, Symbol] The digest to use. Must be a stringified version of an OpenSSL::Digest subclass. Default: `SHA256`.
# File lib/negroni/token_generator.rb, line 13 def initialize(key_generator = nil, digest = 'SHA256', secret_key: nil) @key_generator = if secret_key ActiveSupport::CachingKeyGenerator.new( ActiveSupport::KeyGenerator.new(secret_key) ) elsif key_generator key_generator else raise ArgumentError, 'Unexpected arguments!' end @digest = digest end
Public Instance Methods
digest(_klass, column, value)
click to toggle source
Digest a key.
@param _klass [Class] the class for which to digest the value. @param column [String] the column name to digest. @param value [#to_s] the value to digest.
@return [String] the digested value.
# File lib/negroni/token_generator.rb, line 33 def digest(_klass, column, value) return unless value.present? OpenSSL::HMAC.hexdigest(@digest, key_for(column), value.to_s) end
generate(klass, column)
click to toggle source
Generate a key.
@param klass [Class] the class for which to generate the key. @param column [String] the column name to generate a key for.
# File lib/negroni/token_generator.rb, line 42 def generate(klass, column) key = key_for(column) loop do raw = Negroni.friendly_token enc = OpenSSL::HMAC.hexdigest(@digest, key, raw) break [raw, enc] unless klass.to_adapter.find_first(column => enc) end end
Private Instance Methods
key_for(column)
click to toggle source
# File lib/negroni/token_generator.rb, line 54 def key_for(column) @key_generator.generate_key "Negroni #{column}" end