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

r405:f3f0ea35cff3 - - 1 file changed: 43 inserted, 4 deleted

@@ -1,14 +1,15
1 require 'digest/sha1'
1 require 'digest/sha1'
2 require 'net/pop'
2 require 'net/pop'
3 + require 'json'
3
4
4 class User < ActiveRecord::Base
5 class User < ActiveRecord::Base
5
6
6 has_and_belongs_to_many :roles
7 has_and_belongs_to_many :roles
7
8
8 has_many :test_requests, :order => "submitted_at DESC"
9 has_many :test_requests, :order => "submitted_at DESC"
9
10
10 has_many :messages,
11 has_many :messages,
11 :class_name => "Message",
12 :class_name => "Message",
12 :foreign_key => "sender_id",
13 :foreign_key => "sender_id",
13 :order => 'created_at DESC'
14 :order => 'created_at DESC'
14
15
@@ -53,52 +54,90
53 attr_accessor :password
54 attr_accessor :password
54
55
55 before_save :encrypt_new_password
56 before_save :encrypt_new_password
56 before_save :assign_default_site
57 before_save :assign_default_site
57 before_save :assign_default_contest
58 before_save :assign_default_contest
58
59
59 # this is for will_paginate
60 # this is for will_paginate
60 cattr_reader :per_page
61 cattr_reader :per_page
61 @@per_page = 50
62 @@per_page = 50
62
63
63 def self.authenticate(login, password)
64 def self.authenticate(login, password)
64 user = find_by_login(login)
65 user = find_by_login(login)
65 - return user if user && user.authenticated?(password)
66 + if user
66 - if user.authenticated_by_pop3?(password)
67 + return user if user.authenticated?(password)
67 - user.password = password
68 + if user.authenticated_by_cucas?(password) or user.authenticated_by_pop3?(password)
68 - return user
69 + user.password = password
70 + user.save
71 + return user
72 + end
69 end
73 end
70 end
74 end
71
75
72 def authenticated?(password)
76 def authenticated?(password)
73 if self.activated
77 if self.activated
74 hashed_password == User.encrypt(password,self.salt)
78 hashed_password == User.encrypt(password,self.salt)
75 else
79 else
76 false
80 false
77 end
81 end
78 end
82 end
79
83
80 def authenticated_by_pop3?(password)
84 def authenticated_by_pop3?(password)
81 Net::POP3.enable_ssl
85 Net::POP3.enable_ssl
82 pop = Net::POP3.new('pops.it.chula.ac.th')
86 pop = Net::POP3.new('pops.it.chula.ac.th')
83 authen = true
87 authen = true
84 begin
88 begin
85 pop.start(login, password) # (1)
89 pop.start(login, password) # (1)
86 pop.finish
90 pop.finish
87 return true
91 return true
88 rescue
92 rescue
89 return false
93 return false
90 end
94 end
91 end
95 end
92
96
97 + def authenticated_by_pop3?(password)
98 + Net::POP3.enable_ssl
99 + pop = Net::POP3.new('pops.it.chula.ac.th')
100 + authen = true
101 + begin
102 + pop.start(login, password)
103 + pop.finish
104 + return true
105 + rescue
106 + return false
107 + end
108 + end
109 +
110 + def authenticated_by_cucas?(password)
111 + url = URI.parse('https://www.cas.chula.ac.th/cas/api/?q=studentAuthenticate')
112 + appid = '41508763e340d5858c00f8c1a0f5a2bb'
113 + appsecret ='d9cbb5863091dbe186fded85722a1e31'
114 + post_args = {
115 + 'appid' => appid,
116 + 'appsecret' => appsecret,
117 + 'username' => login,
118 + 'password' => password
119 + }
120 +
121 + #simple call
122 + begin
123 + resp = Net::HTTP.post_form(url, post_args)
124 + result = JSON.parse resp.body
125 + return true if result["type"] == "beanStudent"
126 + rescue
127 + return false
128 + end
129 + return false
130 + end
131 +
93 def admin?
132 def admin?
94 self.roles.detect {|r| r.name == 'admin' }
133 self.roles.detect {|r| r.name == 'admin' }
95 end
134 end
96
135
97 def email_for_editing
136 def email_for_editing
98 if self.email==nil
137 if self.email==nil
99 "(unknown)"
138 "(unknown)"
100 elsif self.email==''
139 elsif self.email==''
101 "(blank)"
140 "(blank)"
102 else
141 else
103 self.email
142 self.email
104 end
143 end
You need to be logged in to leave comments. Login now