Show More
Commit Description:
MERGED 308:HEAD from http://theory.cpe.ku.ac.th/grader/web/branches/ytopc08-2/, removed some registration info...
Commit Description:
MERGED 308:HEAD from http://theory.cpe.ku.ac.th/grader/web/branches/ytopc08-2/, removed some registration info git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@359 6386c4cd-e34a-4fa8-8920-d93eb39b512e
File last commit:
Show/Diff file:
Action:
app/controllers/users_controller.rb | 124 lines | 3.5 KiB | text/x-ruby | RubyLexer |
require 'tmail'
require 'net/smtp'
class UsersController < ApplicationController
before_filter :authenticate, :except => [:new, :register, :confirm]
before_filter :verify_online_registration, :only => [:new, :register]
verify :method => :post, :only => [:chg_passwd],
:redirect_to => { :action => :index }
#in_place_edit_for :user, :alias_for_editing
#in_place_edit_for :user, :email_for_editing
def index
if !Configuration['system.user_setting_enabled']
redirect_to :controller => 'main', :action => 'list'
else
@user = User.find(session[:user_id])
end
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
def new
@user = User.new
render :action => 'new', :layout => 'empty'
end
def register
if(params[:cancel])
redirect_to :controller => 'main', :action => 'login'
return
end
@user = User.new(params[:user])
@user.password_confirmation = @user.password = User.random_password
@user.activated = false
if (@user.valid?) and (@user.save)
if send_confirmation_email(@user)
render :action => 'new_splash', :layout => 'empty'
else
@admin_email = Configuration['system.admin_email']
render :action => 'email_error', :layout => 'empty'
end
else
@user.errors.add_to_base("Email cannot be blank") if @user.email==''
render :action => 'new', :layout => 'empty'
end
end
def confirm
login = params[:login]
key = params[:activation]
@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
@result = :successful
else
@result = :email_used
end
else
@result = :failed
end
render :action => 'confirm', :layout => 'empty'
end
protected
def verify_online_registration
if !Configuration['system.online_registration']
redirect_to :controller => 'main', :action => 'login'
end
end
def send_confirmation_email(user)
contest_name = Configuration['contest.name']
admin_email = Configuration['system.admin_email']
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 = t('registration.email_body', {
:full_name => user.full_name,
:contest_name => contest_name,
:login => user.login,
:password => user.password,
:activation_url => activation_url,
:admin_email => admin_email
})
logger.info mail.body
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
end
end