fix: broken LDAP

This commit is contained in:
2025-05-11 18:33:55 -05:00
parent afb62645f6
commit a628d85ef2

View File

@@ -156,7 +156,7 @@ class LdapUserProvider implements UserProviderInterface, PasswordUpgraderInterfa
$extraFields[$field] = $this->getAttributeValue($entry, $field); $extraFields[$field] = $this->getAttributeValue($entry, $field);
} }
$dbUser = $this->getDbUser($identifier); $dbUser = $this->getDbUser($identifier, $entry);
if (null === $dbUser) { if (null === $dbUser) {
$dbUser = new User(); $dbUser = new User();
@@ -164,9 +164,9 @@ class LdapUserProvider implements UserProviderInterface, PasswordUpgraderInterfa
} }
$dbUser $dbUser
->setName($entry->getAttribute($this->displayNameAttribute)[0] ?? null) ->setName( $this->getAttributeValue($entry, $this->displayNameAttribute)[0] ?? null)
->setEmail($entry->getAttribute($this->emailAttribute)[0] ?? null) ->setEmail($this->getAttributeValue($entry, $this->emailAttribute)[0] ?? null)
->setUsername($entry->getAttribute($this->usernameAttribute)[0] ?? null); ->setUsername($this->getAttributeValue($entry, $this->usernameAttribute) ?? null);
$this->userRepository->getEntityManager()->persist($dbUser); $this->userRepository->getEntityManager()->persist($dbUser);
$this->userRepository->getEntityManager()->flush(); $this->userRepository->getEntityManager()->flush();
@@ -174,13 +174,22 @@ class LdapUserProvider implements UserProviderInterface, PasswordUpgraderInterfa
return $dbUser; return $dbUser;
} }
private function getDbUser(string $identifier): ?UserInterface private function getDbUser(string $identifier, Entry $entry): ?UserInterface
{ {
if (in_array($this->uidKey, ['mail', 'email'])) { if (in_array($this->uidKey, ['mail', 'email'])) {
return $this->userRepository->findOneBy(['email' => $identifier]); $dbUser = $this->userRepository->findOneBy(['email' => $identifier]);
} else { } else {
return $this->userRepository->findOneBy(['username' => $identifier]); $dbUser = $this->userRepository->findOneBy(['username' => $identifier]);
} }
// Attempt to map LDAP user to existing user
if (null === $dbUser) {
if ($entry->hasAttribute($this->emailAttribute)) {
$dbUser = $this->userRepository->findOneBy(['email' => $this->getAttributeValue($entry, $this->emailAttribute)]);;
}
}
return $dbUser;
} }
private function getAttributeValue(Entry $entry, string $attribute): mixed private function getAttributeValue(Entry $entry, string $attribute): mixed