diff --git a/app/models/auth_source_ldap.rb b/app/models/auth_source_ldap.rb index 0a535507..d2a7e704 100644 --- a/app/models/auth_source_ldap.rb +++ b/app/models/auth_source_ldap.rb @@ -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 diff --git a/app/models/user.rb b/app/models/user.rb index 8a69fda0..2387e583 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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 diff --git a/test/integration/account_test.rb b/test/integration/account_test.rb index f82e681b..8307702e 100644 --- a/test/integration/account_test.rb +++ b/test/integration/account_test.rb @@ -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 diff --git a/test/unit/auth_source_ldap_test.rb b/test/unit/auth_source_ldap_test.rb index f78d6452..885272c1 100644 --- a/test/unit/auth_source_ldap_test.rb +++ b/test/unit/auth_source_ldap_test.rb @@ -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]