diff options
author | Eric Davis <edavis@littlestreamsoftware.com> | 2009-02-11 19:07:12 +0000 |
---|---|---|
committer | Eric Davis <edavis@littlestreamsoftware.com> | 2009-02-11 19:07:12 +0000 |
commit | 0310f43126ac8a8a7e14c8c3a09118b34ed6ff2f (patch) | |
tree | faa9815334b14724c0ea4c9b9bf0a7f2077209a4 | |
parent | 896e64b759aee595766969799bb2169e65a46cd6 (diff) | |
download | redmine-0310f43126ac8a8a7e14c8c3a09118b34ed6ff2f.tar.gz redmine-0310f43126ac8a8a7e14c8c3a09118b34ed6ff2f.zip |
Hooked up on the fly OpenID user creation.
* Use OpenID registration fields for the user.
* Generate a random password when a user is created.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2443 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/controllers/account_controller.rb | 22 | ||||
-rw-r--r-- | app/models/user.rb | 12 | ||||
-rw-r--r-- | test/unit/user_test.rb | 7 |
3 files changed, 30 insertions, 11 deletions
diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 2e280dac9..cdbca5927 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -196,25 +196,25 @@ private def open_id_authenticate(openid_url) - user = nil authenticate_with_open_id(openid_url, :required => [:nickname, :fullname, :email], :return_to => signin_url) do |result, identity_url, registration| if result.successful? user = User.find_or_initialize_by_identity_url(identity_url) if user.new_record? # Create on the fly - # TODO: name user.login = registration['nickname'] user.mail = registration['email'] - user.save - end - - user.reload - if user.new_record? - # 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' + user.firstname, user.lastname = registration['fullname'].split(' ') + user.random_password + if user.save + successful_authentication(user) + 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 else + # Existing record successful_authentication(user) end end diff --git a/app/models/user.rb b/app/models/user.rb index 0005c85d1..b35c1a815 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -138,6 +138,18 @@ class User < ActiveRecord::Base def check_password?(clear_password) User.hash_password(clear_password) == self.hashed_password end + + # Generate and set a random password. Useful for automated user creation + # Based on Token#generate_token_value + # + def random_password + chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a + password = '' + 40.times { |i| password << chars[rand(chars.size-1)] } + self.password = password + self.password_confirmation = password + self + end def pref self.preference ||= UserPreference.new(:user => self) diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index e8500623a..54f15b69f 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -177,4 +177,11 @@ class UserTest < Test::Unit::TestCase assert_not_nil u assert_equal 'jsmith@somenet.foo', u.mail end + + def test_random_password + u = User.new + u.random_password + assert !u.password.blank? + assert !u.password_confirmation.blank? + end end |