Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 98
- Log:
Initial import of Hub, an account management application.
- Author:
- adh
- Date:
- Thu Oct 19 15:18:43 +0100 2006
- Size:
- 2145 Bytes
1 | require 'digest/sha1' |
2 | class <%= class_name %> < ActiveRecord::Base |
3 | # Virtual attribute for the unencrypted password |
4 | attr_accessor :password |
5 | |
6 | validates_presence_of :login, :email |
7 | validates_presence_of :password, :if => :password_required? |
8 | validates_presence_of :password_confirmation, :if => :password_required? |
9 | validates_length_of :password, :within => 4..40, :if => :password_required? |
10 | validates_confirmation_of :password, :if => :password_required? |
11 | validates_length_of :login, :within => 3..40 |
12 | validates_length_of :email, :within => 3..100 |
13 | validates_uniqueness_of :login, :email, :case_sensitive => false |
14 | before_save :encrypt_password |
15 | |
16 | # Authenticates a user by their login name and unencrypted password. Returns the user or nil. |
17 | def self.authenticate(login, password) |
18 | u = find_by_login(login) # need to get the salt |
19 | u && u.authenticated?(password) ? u : nil |
20 | end |
21 | |
22 | # Encrypts some data with the salt. |
23 | def self.encrypt(password, salt) |
24 | Digest::SHA1.hexdigest("--#{salt}--#{password}--") |
25 | end |
26 | |
27 | # Encrypts the password with the user salt |
28 | def encrypt(password) |
29 | self.class.encrypt(password, salt) |
30 | end |
31 | |
32 | def authenticated?(password) |
33 | crypted_password == encrypt(password) |
34 | end |
35 | |
36 | def remember_token? |
37 | remember_token_expires_at && Time.now.utc < remember_token_expires_at |
38 | end |
39 | |
40 | # These create and unset the fields required for remembering users between browser closes |
41 | def remember_me |
42 | self.remember_token_expires_at = 2.weeks.from_now.utc |
43 | self.remember_token = encrypt("#{email}--#{remember_token_expires_at}") |
44 | save(false) |
45 | end |
46 | |
47 | def forget_me |
48 | self.remember_token_expires_at = nil |
49 | self.remember_token = nil |
50 | save(false) |
51 | end |
52 | |
53 | protected |
54 | # before filter |
55 | def encrypt_password |
56 | return if password.blank? |
57 | self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--") if new_record? |
58 | self.crypted_password = encrypt(password) |
59 | end |
60 | |
61 | def password_required? |
62 | crypted_password.blank? || !password.blank? |
63 | end |
64 | end |