require 'securerandom' require 'digest/sha1' require 'debci/db' module Debci class Key < ActiveRecord::Base attr_accessor :key before_create do |key| key.key = SecureRandom.uuid key.encrypted_key = key.class.encrypt(key.key) end def self.reset!(username) self.find_by(user: username)&.destroy self.create!(user: username) end def self.authenticate(key) entry = self.find_by(encrypted_key: encrypt(key)) entry && entry.user || nil end # Since the key being encrypt is random, there is no point is using salts # to protect against rainbow tables. So let's just use a good old SHA1 # hash. def self.encrypt(key) Digest::SHA1.hexdigest(key) end end end