Description:
remove authenticate by pop3 and cucas
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r485:b530a9de9711 - - 1 file changed: 0 inserted, 47 deleted

@@ -22,154 +22,107
22
22
23 has_one :contest_stat, :class_name => "UserContestStat", :dependent => :destroy
23 has_one :contest_stat, :class_name => "UserContestStat", :dependent => :destroy
24
24
25 belongs_to :site
25 belongs_to :site
26 belongs_to :country
26 belongs_to :country
27
27
28 has_and_belongs_to_many :contests, :uniq => true, :order => 'name'
28 has_and_belongs_to_many :contests, :uniq => true, :order => 'name'
29
29
30 scope :activated_users, :conditions => {:activated => true}
30 scope :activated_users, :conditions => {:activated => true}
31
31
32 validates_presence_of :login
32 validates_presence_of :login
33 validates_uniqueness_of :login
33 validates_uniqueness_of :login
34 validates_format_of :login, :with => /^[\_A-Za-z0-9]+$/
34 validates_format_of :login, :with => /^[\_A-Za-z0-9]+$/
35 validates_length_of :login, :within => 3..30
35 validates_length_of :login, :within => 3..30
36
36
37 validates_presence_of :full_name
37 validates_presence_of :full_name
38 validates_length_of :full_name, :minimum => 1
38 validates_length_of :full_name, :minimum => 1
39
39
40 validates_presence_of :password, :if => :password_required?
40 validates_presence_of :password, :if => :password_required?
41 validates_length_of :password, :within => 4..20, :if => :password_required?
41 validates_length_of :password, :within => 4..20, :if => :password_required?
42 validates_confirmation_of :password, :if => :password_required?
42 validates_confirmation_of :password, :if => :password_required?
43
43
44 validates_format_of :email,
44 validates_format_of :email,
45 :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
45 :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
46 :if => :email_validation?
46 :if => :email_validation?
47 validate :uniqueness_of_email_from_activated_users,
47 validate :uniqueness_of_email_from_activated_users,
48 :if => :email_validation?
48 :if => :email_validation?
49 validate :enough_time_interval_between_same_email_registrations,
49 validate :enough_time_interval_between_same_email_registrations,
50 :if => :email_validation?
50 :if => :email_validation?
51
51
52 # these are for ytopc
52 # these are for ytopc
53 # disable for now
53 # disable for now
54 #validates_presence_of :province
54 #validates_presence_of :province
55
55
56 attr_accessor :password
56 attr_accessor :password
57
57
58 before_save :encrypt_new_password
58 before_save :encrypt_new_password
59 before_save :assign_default_site
59 before_save :assign_default_site
60 before_save :assign_default_contest
60 before_save :assign_default_contest
61
61
62 # this is for will_paginate
62 # this is for will_paginate
63 cattr_reader :per_page
63 cattr_reader :per_page
64 @@per_page = 50
64 @@per_page = 50
65
65
66 def self.authenticate(login, password)
66 def self.authenticate(login, password)
67 user = find_by_login(login)
67 user = find_by_login(login)
68 if user
68 if user
69 return user if user.authenticated?(password)
69 return user if user.authenticated?(password)
70 - if user.authenticated_by_cucas?(password) or user.authenticated_by_pop3?(password)
71 - user.password = password
72 - user.save
73 - return user
74 - end
75 end
70 end
76 end
71 end
77
72
78 def authenticated?(password)
73 def authenticated?(password)
79 if self.activated
74 if self.activated
80 hashed_password == User.encrypt(password,self.salt)
75 hashed_password == User.encrypt(password,self.salt)
81 else
76 else
82 false
77 false
83 end
78 end
84 end
79 end
85
80
86 - def authenticated_by_pop3?(password)
87 - Net::POP3.enable_ssl
88 - pop = Net::POP3.new('pops.it.chula.ac.th')
89 - authen = true
90 - begin
91 - pop.start(login, password)
92 - pop.finish
93 - return true
94 - rescue
95 - return false
96 - end
97 - end
98 -
99 - def authenticated_by_cucas?(password)
100 - url = URI.parse('https://www.cas.chula.ac.th/cas/api/?q=studentAuthenticate')
101 - appid = '41508763e340d5858c00f8c1a0f5a2bb'
102 - appsecret ='d9cbb5863091dbe186fded85722a1e31'
103 - post_args = {
104 - 'appid' => appid,
105 - 'appsecret' => appsecret,
106 - 'username' => login,
107 - 'password' => password
108 - }
109 -
110 - #simple call
111 - begin
112 - http = Net::HTTP.new('www.cas.chula.ac.th', 443)
113 - http.use_ssl = true
114 - result = [ ]
115 - http.start do |http|
116 - req = Net::HTTP::Post.new('/cas/api/?q=studentAuthenticate')
117 - param = "appid=#{appid}&appsecret=#{appsecret}&username=#{login}&password=#{password}"
118 - resp = http.request(req,param)
119 - result = JSON.parse resp.body
120 - end
121 - return true if result["type"] == "beanStudent"
122 - rescue
123 - return false
124 - end
125 - return false
126 - end
127 -
128 def admin?
81 def admin?
129 self.roles.detect {|r| r.name == 'admin' }
82 self.roles.detect {|r| r.name == 'admin' }
130 end
83 end
131
84
132 def email_for_editing
85 def email_for_editing
133 if self.email==nil
86 if self.email==nil
134 "(unknown)"
87 "(unknown)"
135 elsif self.email==''
88 elsif self.email==''
136 "(blank)"
89 "(blank)"
137 else
90 else
138 self.email
91 self.email
139 end
92 end
140 end
93 end
141
94
142 def email_for_editing=(e)
95 def email_for_editing=(e)
143 self.email=e
96 self.email=e
144 end
97 end
145
98
146 def alias_for_editing
99 def alias_for_editing
147 if self.alias==nil
100 if self.alias==nil
148 "(unknown)"
101 "(unknown)"
149 elsif self.alias==''
102 elsif self.alias==''
150 "(blank)"
103 "(blank)"
151 else
104 else
152 self.alias
105 self.alias
153 end
106 end
154 end
107 end
155
108
156 def alias_for_editing=(e)
109 def alias_for_editing=(e)
157 self.alias=e
110 self.alias=e
158 end
111 end
159
112
160 def activation_key
113 def activation_key
161 if self.hashed_password==nil
114 if self.hashed_password==nil
162 encrypt_new_password
115 encrypt_new_password
163 end
116 end
164 Digest::SHA1.hexdigest(self.hashed_password)[0..7]
117 Digest::SHA1.hexdigest(self.hashed_password)[0..7]
165 end
118 end
166
119
167 def verify_activation_key(key)
120 def verify_activation_key(key)
168 key == activation_key
121 key == activation_key
169 end
122 end
170
123
171 def self.random_password(length=5)
124 def self.random_password(length=5)
172 chars = 'abcdefghjkmnopqrstuvwxyz'
125 chars = 'abcdefghjkmnopqrstuvwxyz'
173 password = ''
126 password = ''
174 length.times { password << chars[rand(chars.length - 1)] }
127 length.times { password << chars[rand(chars.length - 1)] }
175 password
128 password
You need to be logged in to leave comments. Login now