Guest User

Untitled

a guest
May 17th, 2018
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.77 KB | None | 0 0
  1. module Clearance
  2. module App
  3. module Models
  4. module User
  5. def self.included(base)
  6. base.class_eval do
  7. attr_accessor \
  8. :password,
  9. :password_confirmation,
  10. :old_password
  11.  
  12. # attr_accessible \
  13. # :email,
  14. # :password,
  15. # :password_confirmation
  16.  
  17. validates_presence_of :email, :if => :normal_user?
  18. validates_uniqueness_of :email, :if => :normal_user?
  19.  
  20. validates_presence_of :password, :if => :password_required?
  21. validates_confirmation_of :password, :if => :password_required?
  22.  
  23. before_save :initialize_salt, :if => :normal_user?
  24. before_save :encrypt_password, :if => :normal_user?
  25. before_save :generate_confirmation_code, :if => :normal_user?
  26.  
  27. extend ClassMethods
  28. include InstanceMethods
  29.  
  30. protected
  31.  
  32. include ProtectedInstanceMethods
  33.  
  34. end
  35. end
  36.  
  37. module ClassMethods
  38. def authenticate(email, password)
  39. user = find_by_email email
  40. user && user.authenticated?(password) ? user : nil
  41. end
  42. end
  43.  
  44. module InstanceMethods
  45. def authenticated?(password)
  46. crypted_password == encrypt(password)
  47. end
  48.  
  49. def encrypt(password)
  50. Digest::SHA1.hexdigest "--#{salt}--#{password}--"
  51. end
  52.  
  53. def remember_token?
  54. remember_token_expires_at && Time.now.utc < remember_token_expires_at
  55. end
  56.  
  57. def remember_me!
  58. remember_me_until 2.weeks.from_now.utc
  59. end
  60.  
  61. def remember_me_until(time)
  62. self.remember_token_expires_at= time
  63. self.remember_token = encrypt("#{email}--#{remember_token_expires_at}")
  64. save!
  65. end
  66.  
  67. def forget_me!
  68. self.remember_token_expires_at = nil
  69. self.remember_token = nil
  70. save!
  71. end
  72.  
  73. def confirm!
  74. self.confirmed = true
  75. self.confirmation_code = nil
  76. save!
  77. end
  78.  
  79. def generate_confirmation_code
  80. self.confirmation_code = Digest::SHA1.hexdigest(Time.now.to_s.split(//).sort_by {rand}.join)
  81. end
  82.  
  83. def generate_reset_password_code
  84. self.reset_password_code = Digest::SHA1.hexdigest(Time.now.to_s.split(//).sort_by {rand}.join)
  85. end
  86.  
  87. def reset_password(password_hash)
  88. if update_attributes(password_hash.slice(:password, :password_confirmation))
  89. update_attribute(:reset_password_code, nil)
  90. end
  91. end
  92.  
  93. def change_password(password_hash)
  94. if authenticated?(password_hash[:old_password])
  95. update_attributes(password_hash.slice(:password, :password_confirmation))
  96. else
  97. errors.add(:old_password, "does not match")
  98. return false
  99. end
  100. end
  101.  
  102. def facebook_user?
  103. not normal_user?
  104. end
  105.  
  106. def normal_user?
  107. self.respond_to?(:facebook_id) ? facebook_id.nil? : true
  108. end
  109. end
  110.  
  111. module ProtectedInstanceMethods
  112. def initialize_salt
  113. self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{email}--") if new_record?
  114. end
  115.  
  116. def encrypt_password
  117. return if password.blank?
  118. self.crypted_password = encrypt(password)
  119. end
  120.  
  121. def password_required?
  122. normal_user? && (crypted_password.blank? || !password.blank? || !password_confirmation.blank?)
  123. end
  124. end
  125. end
  126. end
  127. end
  128. end
Add Comment
Please, Sign In to add comment