OSDN Git Service

Makes AuthSource.authenticate return a hash instead of an array.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 26 Feb 2010 09:13:12 +0000 (09:13 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 26 Feb 2010 09:13:12 +0000 (09:13 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3492 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/auth_source_ldap.rb
app/models/user.rb
test/integration/account_test.rb
test/unit/auth_source_ldap_test.rb

index 0a53550..d2a7e70 100644 (file)
@@ -35,9 +35,9 @@ class AuthSourceLdap < AuthSource
     return nil if login.blank? || password.blank?
     attrs = get_user_dn(login)
     
-    if attrs.first && attrs.first[:dn] && authenticate_dn(attrs.first[:dn], password)
+    if attrs && attrs[:dn] && authenticate_dn(attrs[:dn], password)
       logger.debug "Authentication successful for '#{login}'" if logger && logger.debug?
-      return [] << attrs.first.except(:dn)
+      return attrs.except(:dn)
     end
   rescue  Net::LDAP::LdapError => text
     raise "LdapError: " + text
@@ -73,13 +73,13 @@ class AuthSourceLdap < AuthSource
   end
 
   def get_user_attributes_from_ldap_entry(entry)
-    [
+    {
      :dn => entry.dn,
      :firstname => AuthSourceLdap.get_attr(entry, self.attr_firstname),
      :lastname => AuthSourceLdap.get_attr(entry, self.attr_lastname),
      :mail => AuthSourceLdap.get_attr(entry, self.attr_mail),
      :auth_source_id => self.id
-    ]
+    }
   end
 
   # Return the attributes needed for the LDAP search.  It will only
@@ -104,7 +104,7 @@ class AuthSourceLdap < AuthSource
     ldap_con = initialize_ldap_con(self.account, self.account_password)
     login_filter = Net::LDAP::Filter.eq( self.attr_login, login ) 
     object_filter = Net::LDAP::Filter.eq( "objectClass", "*" ) 
-    attrs = []
+    attrs = {}
     
     ldap_con.search( :base => self.base_dn, 
                      :filter => object_filter & login_filter, 
@@ -113,10 +113,10 @@ class AuthSourceLdap < AuthSource
       if onthefly_register?
         attrs = get_user_attributes_from_ldap_entry(entry)
       else
-        attrs = [:dn => entry.dn]
+        attrs = {:dn => entry.dn}
       end
 
-      logger.debug "DN found for #{login}: #{attrs.first[:dn]}" if logger && logger.debug?
+      logger.debug "DN found for #{login}: #{attrs[:dn]}" if logger && logger.debug?
     end
 
     attrs
index 8a69fda..2387e58 100644 (file)
@@ -111,7 +111,7 @@ class User < Principal
       # user is not yet registered, try to authenticate with available sources
       attrs = AuthSource.authenticate(login, password)
       if attrs
-        user = new(*attrs)
+        user = new(attrs)
         user.login = login
         user.language = Setting.default_language
         if user.save
index f82e681..8307702 100644 (file)
@@ -149,7 +149,7 @@ class AccountTest < ActionController::IntegrationTest
   def test_onthefly_registration
     # disable registration
     Setting.self_registration = '0'
-    AuthSource.expects(:authenticate).returns([:login => 'foo', :firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com', :auth_source_id => 66])
+    AuthSource.expects(:authenticate).returns({:login => 'foo', :firstname => 'Foo', :lastname => 'Smith', :mail => 'foo@bar.com', :auth_source_id => 66})
   
     post 'account/login', :username => 'foo', :password => 'bar'
     assert_redirected_to 'my/page'
@@ -163,7 +163,7 @@ class AccountTest < ActionController::IntegrationTest
   def test_onthefly_registration_with_invalid_attributes
     # disable registration
     Setting.self_registration = '0'
-    AuthSource.expects(:authenticate).returns([:login => 'foo', :lastname => 'Smith', :auth_source_id => 66])
+    AuthSource.expects(:authenticate).returns({:login => 'foo', :lastname => 'Smith', :auth_source_id => 66})
     
     post 'account/login', :username => 'foo', :password => 'bar'
     assert_response :success
index f78d645..885272c 100644 (file)
@@ -43,10 +43,8 @@ class AuthSourceLdapTest < ActiveSupport::TestCase
 
       context 'with a valid LDAP user' do
         should 'return the user attributes' do
-          response =  @auth.authenticate('example1','123456')
-          assert response.is_a?(Array), "An array was not returned"
-          assert response.first.present?, "No user data returned"
-          attributes = response.first
+          attributes =  @auth.authenticate('example1','123456')
+          assert attributes.is_a?(Hash), "An hash was not returned"
           assert_equal 'Example', attributes[:firstname]
           assert_equal 'One', attributes[:lastname]
           assert_equal 'example1@redmine.org', attributes[:mail]