Sha256: e259d65c574fec7b1829fde8a294a183804ae48a964a3617ccb5a25784d3e85a

Contents?: true

Size: 1.49 KB

Versions: 1

Compression:

Stored size: 1.49 KB

Contents

class RemembranceToken < ActiveRecord::Base
  unloadable
  belongs_to :authenticatable, :polymorphic => true
  validates_presence_of :series_token
  validates_presence_of :remembrance_token
  validates_presence_of :authenticatable
  
  def value
    "#{authenticatable_type}|#{authenticatable_id}|#{series_token}|#{remembrance_token}"
  end
  
  def before_validation
    regenerate if new_record?
  end
  
  def should_equal(remembrance_token)
    @theft = self.remembrance_token != remembrance_token
  end
  
  def theft?
    @theft
  end
  
  def regenerate
    if attributes.keys.include?('series_token')
      # We need to only ever generate the series token once per record.
      self.series_token ||= Auth::Token.new.to_s
    end
    
    if attributes.keys.include?('remembrance_token')
      # We need to regenerate the auth token every time the record is saved.
      self.remembrance_token = Auth::Token.new.to_s
    end
  end
  
  class << self
    def find_by_value(value)
      authenticatable_type, authenticatable_id, series_token, remembrance_token = *value.split(/\|/)
      return nil if authenticatable_type.blank? || authenticatable_id.blank? || series_token.blank?
      
      token = RemembranceToken.find(:first, :conditions => {
                :authenticatable_type => authenticatable_type,
                :authenticatable_id => authenticatable_id,
                :series_token => series_token
              })
      token.should_equal(remembrance_token) if token
      token
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sparkly-auth-1.0.2 app/models/remembrance_token.rb