Description:
MERGED bug fix on user password recovery from ytopc branch (change set 402:403) git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@404 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r191:976e2beba418 - - 1 file changed: 2 inserted, 1 deleted

@@ -52,133 +52,134
52 end
52 end
53 @user = User.new(params[:user])
53 @user = User.new(params[:user])
54 @user.password_confirmation = @user.password = User.random_password
54 @user.password_confirmation = @user.password = User.random_password
55 @user.activated = false
55 @user.activated = false
56 if (@user.valid?) and (@user.save)
56 if (@user.valid?) and (@user.save)
57 if send_confirmation_email(@user)
57 if send_confirmation_email(@user)
58 render :action => 'new_splash', :layout => 'empty'
58 render :action => 'new_splash', :layout => 'empty'
59 else
59 else
60 @admin_email = Configuration['system.admin_email']
60 @admin_email = Configuration['system.admin_email']
61 render :action => 'email_error', :layout => 'empty'
61 render :action => 'email_error', :layout => 'empty'
62 end
62 end
63 else
63 else
64 @user.errors.add_to_base("Email cannot be blank") if @user.email==''
64 @user.errors.add_to_base("Email cannot be blank") if @user.email==''
65 render :action => 'new', :layout => 'empty'
65 render :action => 'new', :layout => 'empty'
66 end
66 end
67 end
67 end
68
68
69 def confirm
69 def confirm
70 login = params[:login]
70 login = params[:login]
71 key = params[:activation]
71 key = params[:activation]
72 @user = User.find_by_login(login)
72 @user = User.find_by_login(login)
73 if (@user) and (@user.verify_activation_key(key))
73 if (@user) and (@user.verify_activation_key(key))
74 if @user.valid? # check uniquenss of email
74 if @user.valid? # check uniquenss of email
75 @user.activated = true
75 @user.activated = true
76 @user.save
76 @user.save
77 @result = :successful
77 @result = :successful
78 else
78 else
79 @result = :email_used
79 @result = :email_used
80 end
80 end
81 else
81 else
82 @result = :failed
82 @result = :failed
83 end
83 end
84 render :action => 'confirm', :layout => 'empty'
84 render :action => 'confirm', :layout => 'empty'
85 end
85 end
86
86
87 def forget
87 def forget
88 render :action => 'forget', :layout => 'empty'
88 render :action => 'forget', :layout => 'empty'
89 end
89 end
90
90
91 def retrieve_password
91 def retrieve_password
92 email = params[:email]
92 email = params[:email]
93 user = User.find_by_email(email)
93 user = User.find_by_email(email)
94 if user
94 if user
95 last_updated_time = user.updated_at || user.created_at || (Time.now.gmtime - 1.hour)
95 last_updated_time = user.updated_at || user.created_at || (Time.now.gmtime - 1.hour)
96 if last_updated_time > Time.now.gmtime - 5.minutes
96 if last_updated_time > Time.now.gmtime - 5.minutes
97 flash[:notice] = 'The account has recently created or new password has recently been requested. Please wait for 5 minutes'
97 flash[:notice] = 'The account has recently created or new password has recently been requested. Please wait for 5 minutes'
98 else
98 else
99 user.password = user.password_confirmation = User.random_password
99 user.password = user.password_confirmation = User.random_password
100 + user.save
100 send_new_password_email(user)
101 send_new_password_email(user)
101 flash[:notice] = 'New password has been mailed to you.'
102 flash[:notice] = 'New password has been mailed to you.'
102 end
103 end
103 else
104 else
104 flash[:notice] = I18n.t 'registration.password_retrieval.no_email'
105 flash[:notice] = I18n.t 'registration.password_retrieval.no_email'
105 end
106 end
106 redirect_to :action => 'forget'
107 redirect_to :action => 'forget'
107 end
108 end
108
109
109 protected
110 protected
110
111
111 def verify_online_registration
112 def verify_online_registration
112 if !Configuration['system.online_registration']
113 if !Configuration['system.online_registration']
113 redirect_to :controller => 'main', :action => 'login'
114 redirect_to :controller => 'main', :action => 'login'
114 end
115 end
115 end
116 end
116
117
117 def send_confirmation_email(user)
118 def send_confirmation_email(user)
118 contest_name = Configuration['contest.name']
119 contest_name = Configuration['contest.name']
119 admin_email = Configuration['system.admin_email']
120 admin_email = Configuration['system.admin_email']
120 activation_url = url_for(:action => 'confirm',
121 activation_url = url_for(:action => 'confirm',
121 :login => user.login,
122 :login => user.login,
122 :activation => user.activation_key)
123 :activation => user.activation_key)
123 home_url = url_for(:controller => 'main', :action => 'index')
124 home_url = url_for(:controller => 'main', :action => 'index')
124 mail = TMail::Mail.new
125 mail = TMail::Mail.new
125 mail.to = user.email
126 mail.to = user.email
126 mail.from = Configuration['system.online_registration.from']
127 mail.from = Configuration['system.online_registration.from']
127 mail.subject = "[#{contest_name}] Confirmation"
128 mail.subject = "[#{contest_name}] Confirmation"
128 mail.body = t('registration.email_body', {
129 mail.body = t('registration.email_body', {
129 :full_name => user.full_name,
130 :full_name => user.full_name,
130 :contest_name => contest_name,
131 :contest_name => contest_name,
131 :login => user.login,
132 :login => user.login,
132 :password => user.password,
133 :password => user.password,
133 :activation_url => activation_url,
134 :activation_url => activation_url,
134 :admin_email => admin_email
135 :admin_email => admin_email
135 })
136 })
136
137
137 logger.info mail.body
138 logger.info mail.body
138
139
139 smtp_server = Configuration['system.online_registration.smtp']
140 smtp_server = Configuration['system.online_registration.smtp']
140
141
141 begin
142 begin
142 Net::SMTP.start(smtp_server) do |smtp|
143 Net::SMTP.start(smtp_server) do |smtp|
143 smtp.send_message(mail.to_s, mail.from, mail.to)
144 smtp.send_message(mail.to_s, mail.from, mail.to)
144 end
145 end
145 result = true
146 result = true
146 rescue
147 rescue
147 result = false
148 result = false
148 end
149 end
149
150
150 return result
151 return result
151 end
152 end
152
153
153 def send_new_password_email(user)
154 def send_new_password_email(user)
154 contest_name = Configuration['contest.name']
155 contest_name = Configuration['contest.name']
155 admin_email = Configuration['system.admin_email']
156 admin_email = Configuration['system.admin_email']
156 mail = TMail::Mail.new
157 mail = TMail::Mail.new
157 mail.to = user.email
158 mail.to = user.email
158 mail.from = Configuration['system.online_registration.from']
159 mail.from = Configuration['system.online_registration.from']
159 - mail.subject = "[#{contest_name}] Confirmation"
160 + mail.subject = "[#{contest_name}] Password recovery"
160 mail.body = t('registration.password_retrieval.email_body', {
161 mail.body = t('registration.password_retrieval.email_body', {
161 :full_name => user.full_name,
162 :full_name => user.full_name,
162 :contest_name => contest_name,
163 :contest_name => contest_name,
163 :login => user.login,
164 :login => user.login,
164 :password => user.password,
165 :password => user.password,
165 :admin_email => admin_email
166 :admin_email => admin_email
166 })
167 })
167
168
168 logger.info mail.body
169 logger.info mail.body
169
170
170 smtp_server = Configuration['system.online_registration.smtp']
171 smtp_server = Configuration['system.online_registration.smtp']
171
172
172 begin
173 begin
173 Net::SMTP.start(smtp_server) do |smtp|
174 Net::SMTP.start(smtp_server) do |smtp|
174 smtp.send_message(mail.to_s, mail.from, mail.to)
175 smtp.send_message(mail.to_s, mail.from, mail.to)
175 end
176 end
176 result = true
177 result = true
177 rescue
178 rescue
178 result = false
179 result = false
179 end
180 end
180
181
181 return result
182 return result
182 end
183 end
183
184
184 end
185 end
You need to be logged in to leave comments. Login now