X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=app%2Fmodels%2Fuser.rb;fp=app%2Fmodels%2Fuser.rb;h=c58f344365a216a820e1994d130f18602f225bbf;hb=942d6c5b97e90c2c9036d1ec776ca98584e5be8f;hp=0000000000000000000000000000000000000000;hpb=128ba7d3b10ef93d000a3f6105c09129bf84b991;p=depot.git diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 0000000..c58f344 --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,55 @@ +require 'digest/sha1' + +class User < ActiveRecord::Base + validates_presence_of :name + validates_uniqueness_of :name + + attr_accessor :password_confirmation + validates_confirmation_of :password + + validate :password_non_blank + + def password + @password + end + + def password=(passwd) + @password = passwd + return if passwd.blank? + create_new_salt + self.hashed_password = User.encrypted_password(self.password, self.salt) + end + + def self.authenticate(name, password) + user = self.find_by_name(name) + if user + expected_password = encrypted_password(password, user.salt) + if user.hashed_password != expected_password + user = nil + end + end + user + end + + def after_destroy + if User.count.zero? + raise "Can't delete last user" + end + end + +private + + def password_non_blank + errors.add(:password, "Missing password" ) if hashed_password.blank? + end + + def self.encrypted_password(password, salt) + string_to_hash = password + 'wibble' + salt + Digest::SHA1.hexdigest string_to_hash + end + + def create_new_salt + self.salt = self.object_id.to_s + rand.to_s + end + +end