module Authlogic module ActsAsAuthentic # This module is responsible for transitioning existing applications from the restful_authentication plugin. module RestfulAuthentication def self.included(klass) klass.class_eval do extend Config include InstanceMethods end end module Config # Switching an existing app to Authlogic from restful_authentication? No problem, just set this true and your users won't know # anything changed. From your database perspective nothing will change at all. Authlogic will continue to encrypt passwords # just like restful_authentication, so your app won't skip a beat. Although, might consider transitioning your users to a newer # and stronger algorithm. Checkout the transition_from_restful_authentication option. # # * Default: false # * Accepts: Boolean def act_like_restful_authentication(value = nil) r = rw_config(:act_like_restful_authentication, value, false) set_restful_authentication_config if value r end alias_method :act_like_restful_authentication=, :act_like_restful_authentication # This works just like act_like_restful_authentication except that it will start transitioning your users to the algorithm you # specify with the crypto provider option. The next time they log in it will resave their password with the new algorithm # and any new record will use the new algorithm as well. Make sure to update your users table if you are using the default # migration since it will set crypted_password and salt columns to a maximum width of 40 characters which is not enough. def transition_from_restful_authentication(value = nil) r = rw_config(:transition_from_restful_authentication, value, false) set_restful_authentication_config if value r end alias_method :transition_from_restful_authentication=, :transition_from_restful_authentication private def set_restful_authentication_config crypto_provider_key = act_like_restful_authentication ? :crypto_provider : :transition_from_crypto_providers self.send("#{crypto_provider_key}=", CryptoProviders::Sha1) if !defined?(::REST_AUTH_SITE_KEY) || ::REST_AUTH_SITE_KEY.nil? class_eval("::REST_AUTH_SITE_KEY = ''") if !defined?(::REST_AUTH_SITE_KEY) CryptoProviders::Sha1.stretches = 1 end end end module InstanceMethods private def act_like_restful_authentication? self.class.act_like_restful_authentication == true end def transition_from_restful_authentication? self.class.transition_from_restful_authentication == true end end end end end