summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Davis <edavis@littlestreamsoftware.com>2009-02-11 19:07:12 +0000
committerEric Davis <edavis@littlestreamsoftware.com>2009-02-11 19:07:12 +0000
commit0310f43126ac8a8a7e14c8c3a09118b34ed6ff2f (patch)
treefaa9815334b14724c0ea4c9b9bf0a7f2077209a4
parent896e64b759aee595766969799bb2169e65a46cd6 (diff)
downloadredmine-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.rb22
-rw-r--r--app/models/user.rb12
-rw-r--r--test/unit/user_test.rb7
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