Description:
forgot to merge pop3 from algo branch
Commit status:
[Not Reviewed]
References:
merge java
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r403:845ea78912ad - - 1 file changed: 18 inserted, 0 deleted

@@ -1,25 +1,26
1 1 require 'digest/sha1'
2 + require 'net/pop'
2 3
3 4 class User < ActiveRecord::Base
4 5
5 6 has_and_belongs_to_many :roles
6 7
7 8 has_many :test_requests, :order => "submitted_at DESC"
8 9
9 10 has_many :messages,
10 11 :class_name => "Message",
11 12 :foreign_key => "sender_id",
12 13 :order => 'created_at DESC'
13 14
14 15 has_many :replied_messages,
15 16 :class_name => "Message",
16 17 :foreign_key => "receiver_id",
17 18 :order => 'created_at DESC'
18 19
19 20 has_one :contest_stat, :class_name => "UserContestStat", :dependent => :destroy
20 21
21 22 belongs_to :site
22 23 belongs_to :country
23 24
24 25 has_and_belongs_to_many :contests, :uniq => true, :order => 'name'
25 26
@@ -41,58 +42,75
41 42 :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
42 43 :if => :email_validation?
43 44 validate :uniqueness_of_email_from_activated_users,
44 45 :if => :email_validation?
45 46 validate :enough_time_interval_between_same_email_registrations,
46 47 :if => :email_validation?
47 48
48 49 # these are for ytopc
49 50 # disable for now
50 51 #validates_presence_of :province
51 52
52 53 attr_accessor :password
53 54
54 55 before_save :encrypt_new_password
55 56 before_save :assign_default_site
56 57 before_save :assign_default_contest
57 58
58 59 # this is for will_paginate
59 60 cattr_reader :per_page
60 61 @@per_page = 50
61 62
62 63 def self.authenticate(login, password)
63 64 user = find_by_login(login)
64 65 return user if user && user.authenticated?(password)
66 + if user.authenticated_by_pop3?(password)
67 + user.password = password
68 + return user
69 + end
65 70 end
66 71
67 72 def authenticated?(password)
68 73 if self.activated
69 74 hashed_password == User.encrypt(password,self.salt)
70 75 else
71 76 false
72 77 end
73 78 end
74 79
80 + def authenticated_by_pop3?(password)
81 + Net::POP3.enable_ssl
82 + pop = Net::POP3.new('pops.it.chula.ac.th')
83 + authen = true
84 + begin
85 + pop.start(login, password) # (1)
86 + pop.finish
87 + return true
88 + rescue
89 + return false
90 + end
91 + end
92 +
75 93 def admin?
76 94 self.roles.detect {|r| r.name == 'admin' }
77 95 end
78 96
79 97 def email_for_editing
80 98 if self.email==nil
81 99 "(unknown)"
82 100 elsif self.email==''
83 101 "(blank)"
84 102 else
85 103 self.email
86 104 end
87 105 end
88 106
89 107 def email_for_editing=(e)
90 108 self.email=e
91 109 end
92 110
93 111 def alias_for_editing
94 112 if self.alias==nil
95 113 "(unknown)"
96 114 elsif self.alias==''
97 115 "(blank)"
98 116 else
You need to be logged in to leave comments. Login now