Skip to content
Snippets Groups Projects
Commit f268712e authored by srosse's avatar srosse
Browse files

OO-809: fix the wrong equals for non-mysql database in findIdentiesByEmail...

OO-809: fix the wrong equals for non-mysql database in findIdentiesByEmail (patch 1 of S. Clemenz), add unit tests
parent d6c006d7
No related branches found
No related tags found
No related merge requests found
...@@ -25,7 +25,6 @@ import java.util.ArrayList; ...@@ -25,7 +25,6 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
...@@ -204,14 +203,16 @@ public class UserManagerImpl extends UserManager { ...@@ -204,14 +203,16 @@ public class UserManagerImpl extends UserManager {
@Override @Override
public List<Identity> findIdentitiesByEmail(List<String> emailList) { public List<Identity> findIdentitiesByEmail(List<String> emailList) {
List<String> emails = new ArrayList<String>(emailList); List<String> emails = new ArrayList<String>(emailList);
for(Iterator<String> emailIt=emails.iterator(); emailIt.hasNext(); ) { for (int i=0; i<emails.size(); i++) {
String email = emailIt.next(); String email = emails.get(i).toLowerCase();
if (!MailHelper.isValidEmailAddress(email)) { if (!MailHelper.isValidEmailAddress(email)) {
emailIt.remove(); emails.remove(i);
logWarn("Invalid email address: " + email, null); logWarn("Invalid email address: " + email, null);
} }
else {
emails.set(i, email);
}
} }
if(emails.isEmpty()) { if(emails.isEmpty()) {
return Collections.emptyList(); return Collections.emptyList();
} }
...@@ -225,7 +226,7 @@ public class UserManagerImpl extends UserManager { ...@@ -225,7 +226,7 @@ public class UserManagerImpl extends UserManager {
if(mysql) { if(mysql) {
emailSb.append(" user.properties['").append(UserConstants.EMAIL).append("'] in (:emails) "); emailSb.append(" user.properties['").append(UserConstants.EMAIL).append("'] in (:emails) ");
} else { } else {
emailSb.append(" lower(user.properties['").append(UserConstants.EMAIL).append("']) = lower(:emails)"); emailSb.append(" lower(user.properties['").append(UserConstants.EMAIL).append("']) in (:emails)");
} }
List<Identity> identities = dbInstance.getCurrentEntityManager() List<Identity> identities = dbInstance.getCurrentEntityManager()
...@@ -237,7 +238,7 @@ public class UserManagerImpl extends UserManager { ...@@ -237,7 +238,7 @@ public class UserManagerImpl extends UserManager {
if(mysql) { if(mysql) {
institutionalSb.append(" user.properties['").append(UserConstants.INSTITUTIONALEMAIL).append("'] in (:emails) "); institutionalSb.append(" user.properties['").append(UserConstants.INSTITUTIONALEMAIL).append("'] in (:emails) ");
} else { } else {
institutionalSb.append(" lower(user.properties['").append(UserConstants.INSTITUTIONALEMAIL).append("']) = lower(:emails)"); institutionalSb.append(" lower(user.properties['").append(UserConstants.INSTITUTIONALEMAIL).append("']) in (:emails)");
} }
if(!identities.isEmpty()) { if(!identities.isEmpty()) {
institutionalSb.append(" and identity not in (:identities) "); institutionalSb.append(" and identity not in (:identities) ");
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
*/ */
package org.olat.user; package org.olat.user;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
...@@ -31,6 +32,7 @@ import org.olat.basesecurity.BaseSecurityModule; ...@@ -31,6 +32,7 @@ import org.olat.basesecurity.BaseSecurityModule;
import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.DB;
import org.olat.core.id.Identity; import org.olat.core.id.Identity;
import org.olat.core.id.User; import org.olat.core.id.User;
import org.olat.core.id.UserConstants;
import org.olat.core.util.Encoder; import org.olat.core.util.Encoder;
import org.olat.test.OlatTestCase; import org.olat.test.OlatTestCase;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -51,13 +53,38 @@ public class UserManagerTest extends OlatTestCase { ...@@ -51,13 +53,38 @@ public class UserManagerTest extends OlatTestCase {
@Autowired @Autowired
private BaseSecurity securityManager; private BaseSecurity securityManager;
@Test @Test
public void findIdentitiesByEmail() { public void findIdentityByEmail_email() {
//create a user //create a user
String name = "createid-" + UUID.randomUUID().toString(); Identity id = createUser(UUID.randomUUID().toString());
String email = name + "@frentix.com"; dbInstance.commitAndCloseSession();
User user = userManager.createUser("first" + name, "last" + name, email);
Identity identity = securityManager.createAndPersistIdentityAndUser(name, user, BaseSecurityModule.getDefaultAuthProviderIdentifier(), name, Encoder.encrypt("secret")); //get the identity by email
String email = id.getUser().getProperty(UserConstants.EMAIL, null);
Identity foundIdentity = userManager.findIdentityByEmail(email);
Assert.assertNotNull(foundIdentity);
Assert.assertEquals(id, foundIdentity);
}
@Test
public void findIdentityByEmail_institutionalEmail() {
//create a user
Identity id = createUser(UUID.randomUUID().toString());
dbInstance.commitAndCloseSession();
//get the identity by email
String email = id.getUser().getProperty(UserConstants.INSTITUTIONALEMAIL, null);
Identity foundIdentity = userManager.findIdentityByEmail(email);
Assert.assertNotNull(foundIdentity);
Assert.assertEquals(id, foundIdentity);
}
@Test
public void findIdentitiesByEmail_email() {
//create a user
Identity id1 = createUser(UUID.randomUUID().toString());
Identity id2 = createUser(UUID.randomUUID().toString());
dbInstance.commitAndCloseSession(); dbInstance.commitAndCloseSession();
//get empty (must survive) //get empty (must survive)
...@@ -65,11 +92,45 @@ public class UserManagerTest extends OlatTestCase { ...@@ -65,11 +92,45 @@ public class UserManagerTest extends OlatTestCase {
Assert.assertNotNull(emptyIdentities); Assert.assertNotNull(emptyIdentities);
Assert.assertTrue(emptyIdentities.isEmpty()); Assert.assertTrue(emptyIdentities.isEmpty());
//get the identity //get the identities by emails
List<Identity> identities = userManager.findIdentitiesByEmail(Collections.singletonList(email)); List<String> emails = new ArrayList<String>();
emails.add(id1.getUser().getProperty(UserConstants.EMAIL, null));
emails.add(id2.getUser().getProperty(UserConstants.EMAIL, null));
List<Identity> identities = userManager.findIdentitiesByEmail(emails);
Assert.assertNotNull(identities); Assert.assertNotNull(identities);
Assert.assertEquals(1, identities.size()); Assert.assertEquals(2, identities.size());
Assert.assertTrue(identities.contains(identity)); Assert.assertTrue(identities.contains(id1));
Assert.assertTrue(identities.contains(id2));
} }
@Test
public void findIdentitiesByEmail_institutionalEmail() {
//create a user
Identity id1 = createUser(UUID.randomUUID().toString());
Identity id2 = createUser(UUID.randomUUID().toString());
dbInstance.commitAndCloseSession();
//get the identities by emails
List<String> emails = new ArrayList<String>();
emails.add(id1.getUser().getProperty(UserConstants.INSTITUTIONALEMAIL, null));
emails.add(id2.getUser().getProperty(UserConstants.INSTITUTIONALEMAIL, null));
List<Identity> identities = userManager.findIdentitiesByEmail(emails);
Assert.assertNotNull(identities);
Assert.assertEquals(2, identities.size());
Assert.assertTrue(identities.contains(id1));
Assert.assertTrue(identities.contains(id2));
}
private Identity createUser(String uuid) {
String name = "createid-" + uuid;
String email = name + "@frentix.com";
String institutEmail = name + "@openolat.com";
User user = userManager.createUser("first" + name, "last" + name, email);
user.setProperty(UserConstants.INSTITUTIONALEMAIL, institutEmail);
Identity identity = securityManager.createAndPersistIdentityAndUser(name, user, BaseSecurityModule.getDefaultAuthProviderIdentifier(), name, Encoder.encrypt("secret"));
Assert.assertNotNull(identity);
return identity;
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment