various fixes
[rails.git] / app / models / user.rb
1 require 'digest/md5'
2
3 class User < ActiveRecord::Base
4   has_many :traces
5
6   validates_confirmation_of :pass_crypt, :message => 'Password must match the confirmation password'
7   validates_uniqueness_of :display_name
8   validates_uniqueness_of :email
9   validates_length_of :pass_crypt, :minimum => 8
10   validates_length_of :display_name, :minimum => 3
11   validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
12
13   def set_defaults
14     self.creation_time = Time.now
15     self.timeout = Time.now
16     self.token = make_token()
17   end
18   
19   def pass_crypt=(str) 
20     write_attribute("pass_crypt", Digest::MD5.hexdigest(str)) 
21   end 
22
23   def pass_crypt_confirmation=(str) 
24     write_attribute("pass_crypt_confirm", Digest::MD5.hexdigest(str)) 
25   end 
26
27   def self.authenticate(email, passwd) 
28     find_first([ "email = ? AND pass_crypt =?", email, Digest::MD5.hexdigest(passwd) ])
29   end 
30   
31   private
32   def make_token
33     chars = 'abcdefghijklmnopqrtuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
34     confirmstring = ''
35
36     30.times do
37       confirmstring += chars[(rand * chars.length).to_i].chr
38     end
39
40     return confirmstring
41   end
42
43 end