Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'digest/md5'
- class User < ActiveRecord::Base
- belongs_to(:group)
- attr_protected(:id, :password_hash, :password_salt)
- validates_presence_of(:login, :password, :email,
- :message => 'Bitte wähle mind. einen Benutzernamen, eine email Adresse und ein Passwort!')
- validates_uniqueness_of(:login,
- :message => 'Dieser Benutzername ist bereits vergeben!')
- validates_length_of(:password, :within => 4..40,
- :message => 'Bitte wähle ein Passwort mit mind. 4 Zeichen!')
- validates_length_of(:login, :within => 3..40,
- :message => 'Bitte wähle einen Benutzernamen mit mind. 3 Zeichen!')
- validates_confirmation_of(:password,
- :message => 'Diese Passwörter stimmen nicht überein!')
- validates_format_of(:email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,
- :message => "Keine gültige email Adresse!")
- public
- def password=(pass)
- @password = pass
- self.password_salt = Digest::MD5.hexdigest(User.random_string(8))
- self.password_hash = User.encrypt_password(@password, self.password_salt)
- end
- def self.login(login, password)
- login_user = User.find(:first, :conditions => ["login = ?", login], :limit => 1)
- return false if login_user.nil?
- return false unless User.encrypt_password(password, login_user[:password_salt]) == login_user[:password_hash]
- login_user[:password] = password
- login_user[:previous_login_time] = login_user[:last_login_time]
- login_user[:previous_login_ip] = login_user[:last_login_ip]
- login_user.save
- login_user[:password] = nil
- return login_user
- end
- def self.authenticate(login, password)
- login_user = User.find(:first, :conditions => ["login = ?", login], :limit => 1)
- return false if login_user.nil?
- return false unless User.encrypt_password(password, login_user[:password_salt]) == login_user[:password_hash]
- return login_user
- end
- def group=(group)
- if String == group.class
- self.group_id = Group.find_by_name(group, :limit => 1).id
- elsif Fixnum == group.class
- self.group_id = group
- end
- end
- private
- def self.encrypt_password(password,password_salt)
- Digest::MD5.hexdigest(password+password_salt)
- end
- def self.random_string(len)
- chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
- newpass = ""
- 1.upto(len) { |i| newpass << chars[rand(chars.size-1)] }
- return newpass
- end
- end
Add Comment
Please, Sign In to add comment