Show More
Commit Description:
fixed user confirmation bug...
Commit Description:
fixed user confirmation bug
git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@305 6386c4cd-e34a-4fa8-8920-d93eb39b512e
References:
File last commit:
Show/Diff file:
Action:
app/controllers/users_controller.rb
| 116 lines
| 2.9 KiB
| text/x-ruby
| RubyLexer
|
|
r158 | require 'tmail' | ||
require 'net/smtp' | ||||
|
r157 | |||
|
r0 | class UsersController < ApplicationController | ||
|
r13 | |||
|
r158 | before_filter :authenticate, :except => [:new, :register, :confirm] | ||
|
r13 | |||
verify :method => :post, :only => [:chg_passwd], | ||||
:redirect_to => { :action => :index } | ||||
|
r18 | in_place_edit_for :user, :alias_for_editing | ||
in_place_edit_for :user, :email_for_editing | ||||
|
r13 | |||
def index | ||||
|
r156 | if !Configuration['system.user_setting_enabled'] | ||
redirect_to :controller => 'main', :action => 'list' | ||||
else | ||||
@user = User.find(session[:user_id]) | ||||
end | ||||
|
r13 | end | ||
def chg_passwd | ||||
user = User.find(session[:user_id]) | ||||
user.password = params[:passwd] | ||||
user.password_confirmation = params[:passwd_verify] | ||||
if user.save | ||||
flash[:notice] = 'password changed' | ||||
else | ||||
flash[:notice] = 'Error: password changing failed' | ||||
end | ||||
redirect_to :action => 'index' | ||||
end | ||||
|
r157 | def new | ||
@user = User.new | ||||
render :action => 'new', :layout => 'empty' | ||||
end | ||||
def register | ||||
@user = User.new(params[:user]) | ||||
@user.password_confirmation = @user.password = User.random_password | ||||
@user.activated = false | ||||
if (@user.valid?) and (@user.save) | ||||
|
r158 | if send_confirmation_email(@user) | ||
render :action => 'new_splash', :layout => 'empty' | ||||
else | ||||
render :action => 'email_error', :layout => 'empty' | ||||
end | ||||
|
r157 | else | ||
@user.errors.add_to_base("Email cannot be blank") if @user.email=='' | ||||
render :action => 'new', :layout => 'empty' | ||||
end | ||||
end | ||||
|
r158 | def confirm | ||
login = params[:login] | ||||
key = params[:activation] | ||||
|
r160 | @user = User.find_by_login(login) | ||
if (@user) and (@user.verify_activation_key(key)) | ||||
if @user.valid? # check uniquenss of email | ||||
@user.activated = true | ||||
@user.save | ||||
|
r158 | @result = :successful | ||
else | ||||
@result = :email_used | ||||
end | ||||
else | ||||
@result = :failed | ||||
end | ||||
render :action => 'confirm', :layout => 'empty' | ||||
end | ||||
|
r157 | protected | ||
def send_confirmation_email(user) | ||||
|
r158 | contest_name = Configuration['contest.name'] | ||
activation_url = url_for(:action => 'confirm', | ||||
:login => user.login, | ||||
:activation => user.activation_key) | ||||
home_url = url_for(:controller => 'main', :action => 'index') | ||||
mail = TMail::Mail.new | ||||
mail.to = user.email | ||||
mail.from = Configuration['system.online_registration.from'] | ||||
mail.subject = "[#{contest_name}] Confirmation" | ||||
mail.body = <<-EOF | ||||
Hello #{user.full_name}, | ||||
You have registered for #{contest_name} (#{home_url}). | ||||
Your login is: #{user.login} | ||||
Your password is: #{user.password} | ||||
Please follow the link: | ||||
#{activation_url} | ||||
to activate your user account. | ||||
If you did not register, please ignore this e-mail. | ||||
Thanks! | ||||
EOF | ||||
smtp_server = Configuration['system.online_registration.smtp'] | ||||
begin | ||||
Net::SMTP.start(smtp_server) do |smtp| | ||||
smtp.send_message(mail.to_s, mail.from, mail.to) | ||||
end | ||||
result = true | ||||
rescue | ||||
result = false | ||||
end | ||||
return result | ||||
|
r157 | end | ||
|
r0 | end | ||