Sha256: bdbc1732a92eada1abfb2f8ba027168fa14290c6fbfb5bc40f83085a1904e5ca

Contents?: true

Size: 1.78 KB

Versions: 1

Compression:

Stored size: 1.78 KB

Contents

require 'digest/sha1'
module Barjillo
  module ActAsAuthModel
    
    def self.included(model)
      model.extend(ClassMethods)
      model.send(:include , AttrAccessor)
      model.send(:include, InstanceMethods)
      model.send(:include, Callbacks)
    end


 
    module Callbacks
      def self.included(model)
        model.class_eval do
          before_save   :initialize_salt,
                        :encrypt_password
          before_create :generate_remember_token
        end
      end
    end
    
    
    module AttrAccessor
       # Hook for attr_accessor virtual attributes.
       #
       # :password
       def self.included(model)
         model.class_eval do
           attr_accessor :password
         end
       end
    end
    module InstanceMethods
      
      def authenticated?(password)
        encrypted_password == encrypt(password)
      end

      def reset_remember_token!
        generate_remember_token
        save(:validate => false)
      end
      
      def forgot_password!
        generate_confirmation_token
        save(:validate => false)
      end
      
      protected
    
      def initialize_salt
        if new_record?
          self.password_salt = Digest::SHA1.hexdigest Time.now.to_s
        end
      end
      
      def generate_remember_token  
        self.remember_token = encrypt("#{Time.now} -- #{Time.now}")
      end

 
      def encrypt_password
        self.encrypted_password = encrypt(password) unless password.blank?
      end
 
      def encrypt(password)
         Digest::SHA1.hexdigest "#{password}#{password_salt}"
      end
 

    end
 
    module ClassMethods
      def authenticate(login, password)
        return nil  unless user = find_by_login(login)
        return user if     user.authenticated?(password)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
barjillo-0.1.0 lib/barjillo/act_as_auth_model.rb