From 8194cfaf8690e09766120eb6517ca1b1c8cdc6e0 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 11 Feb 2009 19:07:28 +0000 Subject: [PATCH] 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 --- app/controllers/account_controller.rb | 48 ++++++++++++++++++---- 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!