Guest User

Untitled

a guest
Apr 13th, 2018
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.60 KB | None | 0 0
  1. require 'digest/md5'
  2.  
  3. class User < ActiveRecord::Base
  4. belongs_to(:group)
  5.  
  6. attr_protected(:id, :password_hash, :password_salt)
  7.  
  8.  
  9. validates_presence_of(:login, :password, :email,
  10. :message => 'Bitte wähle mind. einen Benutzernamen, eine email Adresse und ein Passwort!')
  11. validates_uniqueness_of(:login,
  12. :message => 'Dieser Benutzername ist bereits vergeben!')
  13. validates_length_of(:password, :within => 4..40,
  14. :message => 'Bitte wähle ein Passwort mit mind. 4 Zeichen!')
  15. validates_length_of(:login, :within => 3..40,
  16. :message => 'Bitte wähle einen Benutzernamen mit mind. 3 Zeichen!')
  17. validates_confirmation_of(:password,
  18. :message => 'Diese Passwörter stimmen nicht überein!')
  19. validates_format_of(:email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,
  20. :message => "Keine gültige email Adresse!")
  21.  
  22. public
  23.  
  24. def password=(pass)
  25. @password = pass
  26. self.password_salt = Digest::MD5.hexdigest(User.random_string(8))
  27. self.password_hash = User.encrypt_password(@password, self.password_salt)
  28. end
  29.  
  30. def self.login(login, password)
  31. login_user = User.find(:first, :conditions => ["login = ?", login], :limit => 1)
  32. return false if login_user.nil?
  33. return false unless User.encrypt_password(password, login_user[:password_salt]) == login_user[:password_hash]
  34. login_user[:password] = password
  35. login_user[:previous_login_time] = login_user[:last_login_time]
  36. login_user[:previous_login_ip] = login_user[:last_login_ip]
  37. login_user.save
  38. login_user[:password] = nil
  39. return login_user
  40. end
  41.  
  42. def self.authenticate(login, password)
  43. login_user = User.find(:first, :conditions => ["login = ?", login], :limit => 1)
  44. return false if login_user.nil?
  45. return false unless User.encrypt_password(password, login_user[:password_salt]) == login_user[:password_hash]
  46. return login_user
  47. end
  48.  
  49. def group=(group)
  50. if String == group.class
  51. self.group_id = Group.find_by_name(group, :limit => 1).id
  52. elsif Fixnum == group.class
  53. self.group_id = group
  54. end
  55. end
  56.  
  57. private
  58.  
  59. def self.encrypt_password(password,password_salt)
  60. Digest::MD5.hexdigest(password+password_salt)
  61. end
  62.  
  63. def self.random_string(len)
  64. chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
  65. newpass = ""
  66. 1.upto(len) { |i| newpass << chars[rand(chars.size-1)] }
  67. return newpass
  68. end
  69.  
  70.  
  71. end
Add Comment
Please, Sign In to add comment