|
|
require 'tmail'
|
|
|
require 'net/smtp'
|
|
|
|
|
|
class UsersController < ApplicationController
|
|
|
|
|
|
before_filter :authenticate, :except => [:new, :register, :confirm]
|
|
|
|
|
|
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
|
|
|
@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
|
|
|
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 send_confirmation_email(user)
|
|
|
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
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|