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