diff options
author | Eric Davis <edavis@littlestreamsoftware.com> | 2009-02-11 19:07:28 +0000 |
---|---|---|
committer | Eric Davis <edavis@littlestreamsoftware.com> | 2009-02-11 19:07:28 +0000 |
commit | 8194cfaf8690e09766120eb6517ca1b1c8cdc6e0 (patch) | |
tree | b33b2ffe1925621771433b420b7502f4ec514c43 | |
parent | 876fb69271edf6b5d7fe15fc68ee49e246d38f19 (diff) | |
download | redmine-8194cfaf8690e09766120eb6517ca1b1c8cdc6e0.tar.gz redmine-8194cfaf8690e09766120eb6517ca1b1c8cdc6e0.zip |
Added user setup needed based on the system's registration settings
* Copied the register action's chunk of code used to setup the account
based on Setting.self_registration
* Extracted method for when onthefly_creation_failed
* Added tests to confirm the behavior
#699
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2446 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/controllers/account_controller.rb | 48 | ||||
-rw-r--r-- | test/functional/account_controller_test.rb | 23 |
2 files changed, 64 insertions, 7 deletions
diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 09c11927c..c29942f4a 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -122,6 +122,7 @@ class AccountController < ApplicationController else @user.login = params[:user][:login] @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] + # TODO: Duplicated in open_id_authenticate action. A good sized refactoring would be good here case Setting.self_registration when '1' # Email activation @@ -205,14 +206,40 @@ private user.mail = registration['email'] unless registration['email'].nil? user.firstname, user.lastname = registration['fullname'].split(' ') unless registration['fullname'].nil? user.random_password - if user.save - successful_authentication(user) + user.status = User::STATUS_REGISTERED + + # TODO: Duplicated in register action. A good sized refactoring would be good here + case Setting.self_registration + when '1' + # Email activation + token = Token.new(:user => user, :action => "register") + if user.save and token.save + Mailer.deliver_register(token) + flash[:notice] = l(:notice_account_register_done) + redirect_to :action => 'login' + else + onthefly_creation_failed(user, {:login => user.login, :identity_url => identity_url }) + end + when '3' + # Automatic activation + user.status = User::STATUS_ACTIVE + if user.save + flash[:notice] = l(:notice_account_activated) + successful_authentication(user) + else + onthefly_creation_failed(user, {:login => user.login, :identity_url => identity_url }) + end else - # Onthefly creation failed, display the registration form to fill/fix attributes - @user = user - session[:auth_source_registration] = {:login => user.login, :identity_url => identity_url } - render :action => 'register' - end + # Manual activation by the administrator + if user.save + # Sends an email to the administrators + Mailer.deliver_account_activation_request(user) + flash[:notice] = l(:notice_account_pending) + redirect_to :action => 'login' + else + onthefly_creation_failed(user, {:login => user.login, :identity_url => identity_url }) + end + end else # Existing record successful_authentication(user) @@ -232,4 +259,11 @@ private redirect_back_or_default :controller => 'my', :action => 'page' end + # Onthefly creation failed, display the registration form to fill/fix attributes + def onthefly_creation_failed(user, auth_source_options = { }) + @user = user + session[:auth_source_registration] = auth_source_options unless auth_source_options.empty? + render :action => 'register' + end + end diff --git a/test/functional/account_controller_test.rb b/test/functional/account_controller_test.rb index e262b3716..c665d3192 100644 --- a/test/functional/account_controller_test.rb +++ b/test/functional/account_controller_test.rb @@ -65,11 +65,13 @@ class AccountControllerTest < Test::Unit::TestCase end def test_login_with_openid + Setting.self_registration = '3' post :login, :openid_url => 'http://openid.example.com/good_user' assert_redirected_to 'my/page' end def test_login_with_openid_with_new_user_created + Setting.self_registration = '3' post :login, :openid_url => 'http://openid.example.com/good_user' assert_redirected_to 'my/page' user = User.find_by_login('cool_user') @@ -78,7 +80,28 @@ class AccountControllerTest < Test::Unit::TestCase assert_equal 'User', user.lastname end + def test_login_with_openid_with_new_user_created_with_email_activation_should_have_a_token + Setting.self_registration = '1' + post :login, :openid_url => 'http://openid.example.com/good_user' + assert_redirected_to 'login' + user = User.find_by_login('cool_user') + assert user + + token = Token.find_by_user_id_and_action(user.id, 'register') + assert token + end + + def test_login_with_openid_with_new_user_created_with_manual_activation + Setting.self_registration = '2' + post :login, :openid_url => 'http://openid.example.com/good_user' + assert_redirected_to 'login' + user = User.find_by_login('cool_user') + assert user + assert_equal User::STATUS_REGISTERED, user.status + end + def test_login_with_openid_with_new_user_with_conflict_should_register + Setting.self_registration = '3' existing_user = User.new(:firstname => 'Cool', :lastname => 'User', :mail => 'user@somedomain.com') existing_user.login = 'cool_user' assert existing_user.save! |