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

r746:1323b43e275a - - 1 file changed: 0 inserted, 48 deleted

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