diff --git a/src/main/java/org/olat/basesecurity/BaseSecurity.java b/src/main/java/org/olat/basesecurity/BaseSecurity.java index eedbc943f82ad56cd93adf43ccc1622e6ff410e4..9ce13fd39fc09e409d684bf910fa3036dd752043 100644 --- a/src/main/java/org/olat/basesecurity/BaseSecurity.java +++ b/src/main/java/org/olat/basesecurity/BaseSecurity.java @@ -157,6 +157,8 @@ public interface BaseSecurity { */ public Identity findIdentityByName(String identityName); + public Identity findIdentityByNameCaseInsensitive(String identityName); + public List<Identity> findIdentitiesByName(Collection<String> identityName); /** diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java index aa88909c3b8d9b9e862b0fbae070c54e2cc6b5ee..651f1d4dd21a4fd1b0427eb32b2c3e52ee51e8c2 100644 --- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java +++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java @@ -949,6 +949,20 @@ public class BaseSecurityManager implements BaseSecurity { } return identities.get(0); } + + @Override + public Identity findIdentityByNameCaseInsensitive(String identityName) { + if (identityName == null) throw new AssertException("findIdentitybyName: name was null"); + + StringBuilder sb = new StringBuilder(); + sb.append("select ident from ").append(IdentityImpl.class.getName()).append(" as ident where lower(ident.name)=:username"); + + List<Identity> identities = DBFactory.getInstance().getCurrentEntityManager() + .createQuery(sb.toString(), Identity.class) + .setParameter("username", identityName.toLowerCase()) + .getResultList(); + return identities == null || identities.isEmpty() ? null : identities.get(0); + } /** * Custom search operation by BiWa diff --git a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java index 237a9c8306de88e9ddd17667adcb8f1099c11c5e..5d67410e46f69686471353caeb2875834ae37c50 100644 --- a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java +++ b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java @@ -437,7 +437,7 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, GenericEventListe .getOlatPropertyToLdapAttribute(LDAPConstants.LDAP_USER_IDENTIFYER))); String email = getAttributeValue(userAttributes.get(syncConfiguration.getOlatPropertyToLdapAttribute(UserConstants.EMAIL))); // Lookup user - if (securityManager.findIdentityByName(uid) != null) { + if (securityManager.findIdentityByNameCaseInsensitive(uid) != null) { log.error("Can't create user with username='" + uid + "', this username does already exist in OLAT database", null); return null; } @@ -587,8 +587,9 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, GenericEventListe * otherwise (if user exists but not managed by LDAP, error Object is * modified) */ + @Override public Identity findIdentyByLdapAuthentication(String uid, LDAPError errors) { - Identity identity = securityManager.findIdentityByName(uid); + Identity identity = securityManager.findIdentityByNameCaseInsensitive(uid); if (identity == null) { return null; } else { diff --git a/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java b/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java index a480287c3118cf1f6e86d42005dba4f638110976..26cce0367516d759dcfb9875c3e70e03f364ba9e 100644 --- a/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java +++ b/src/test/java/org/olat/basesecurity/BaseSecurityManagerTest.java @@ -171,6 +171,34 @@ public class BaseSecurityManagerTest extends OlatTestCase { Assert.assertEquals(id, foundId); } + @Test + public void findIdentityByNameCaseInsensitive() { + //create a user it + String username = "find-ME-2-" + UUID.randomUUID().toString(); + Identity id = JunitTestHelper.createAndPersistIdentityAsUser(username); + Assert.assertNotNull(id); + Assert.assertEquals(username, id.getName()); + dbInstance.commitAndCloseSession(); + + //find it + Identity foundId = securityManager.findIdentityByNameCaseInsensitive(username); + Assert.assertNotNull(foundId); + Assert.assertEquals(username, foundId.getName()); + Assert.assertEquals(id, foundId); + + //find it lower case + Identity foundLoweredId = securityManager.findIdentityByNameCaseInsensitive(username.toLowerCase()); + Assert.assertNotNull(foundLoweredId); + Assert.assertEquals(username, foundLoweredId.getName()); + Assert.assertEquals(id, foundLoweredId); + + //find it upper case + Identity foundUpperedId = securityManager.findIdentityByNameCaseInsensitive(username.toUpperCase()); + Assert.assertNotNull(foundUpperedId); + Assert.assertEquals(username, foundUpperedId.getName()); + Assert.assertEquals(id, foundUpperedId); + } + @Test public void testFindIdentityByNames() { //create a user it