From bb8572a36403634c5fbc122d54c94e1d51bac2eb Mon Sep 17 00:00:00 2001 From: Jacob Blanco <46789421+jacoblanco@users.noreply.github.com> Date: Thu, 20 Jun 2019 15:35:22 +0200 Subject: [PATCH] fix LDAP hydration with multi-value email field (#862) --- src/Ldap/LdapUserHydrator.php | 4 ++++ tests/Ldap/LdapUserHydratorTest.php | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Ldap/LdapUserHydrator.php b/src/Ldap/LdapUserHydrator.php index af84ac63..3099eab0 100644 --- a/src/Ldap/LdapUserHydrator.php +++ b/src/Ldap/LdapUserHydrator.php @@ -63,6 +63,10 @@ class LdapUserHydrator $this->hydrateUserWithAttributesMap($user, $ldapEntry, $attributeMap); + if (is_array($user->getEmail())) { + $user->setEmail($user->getEmail()[0]); + } + if (null === $user->getEmail()) { $user->setEmail($user->getUsername()); } diff --git a/tests/Ldap/LdapUserHydratorTest.php b/tests/Ldap/LdapUserHydratorTest.php index 314b2c87..1165ad1e 100644 --- a/tests/Ldap/LdapUserHydratorTest.php +++ b/tests/Ldap/LdapUserHydratorTest.php @@ -93,6 +93,7 @@ class LdapUserHydratorTest extends TestCase 'usernameAttribute' => 'foo', 'attributes' => [ ['ldap_attr' => 'uid', 'user_method' => 'setUsername'], + ['ldap_attr' => 'email', 'user_method' => 'setEmail'], ['ldap_attr' => 'foo', 'user_method' => 'setAlias'], ['ldap_attr' => 'bar', 'user_method' => 'setTitle'], ['ldap_attr' => 'xxxxxxxx', 'user_method' => 'setAvatar'], @@ -103,6 +104,7 @@ class LdapUserHydratorTest extends TestCase $ldapEntry = [ 'uid' => ['Karl-Heinz'], + 'email' => [['karl-heinz@example.com', 'foo@example.com', 'bar@example.com']], 'blub' => ['dfsdfsdf'], 'foo' => ['bar'], 'bar' => ['foo'], @@ -119,7 +121,7 @@ class LdapUserHydratorTest extends TestCase self::assertEquals('bar', $user->getAlias()); self::assertEquals('foo', $user->getTitle()); self::assertEquals('https://www.example.com', $user->getAvatar()); - self::assertEquals('Karl-Heinz', $user->getEmail()); + self::assertEquals('karl-heinz@example.com', $user->getEmail()); // make sure that the password was resetted in hydrate $pwdCheck = clone $user;