From ddc39c1b3948757c83c9a89853b0ede87f46ddea Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 21 Sep 2015 11:59:02 +0000 Subject: [PATCH] Factorize indexed properties, thus fixing issue when creating a new user. git-svn-id: https://svn.argeo.org/commons/trunk@8424 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../osgi/useradmin/AbstractUserDirectory.java | 16 +++++++-- .../argeo/osgi/useradmin/LdapUserAdmin.java | 30 ----------------- .../argeo/osgi/useradmin/LdifUserAdmin.java | 33 ------------------- 3 files changed, 13 insertions(+), 66 deletions(-) diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java index d8a3f04ff..40b58be74 100644 --- a/org.argeo.security.core/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java @@ -109,9 +109,6 @@ abstract class AbstractUserDirectory implements UserAdmin, UserDirectory { protected abstract List doGetRoles(Filter f); - protected abstract void doGetUser(String key, String value, - List collectedUsers); - public void init() { } @@ -257,6 +254,19 @@ abstract class AbstractUserDirectory implements UserAdmin, UserDirectory { return null; } + protected void doGetUser(String key, String value, + List collectedUsers) { + try { + Filter f = FrameworkUtil.createFilter("(&(" + objectClass + "=" + + getUserObjectClass() + ")(" + key + "=" + value + "))"); + List users = doGetRoles(f); + collectedUsers.addAll(users); + } catch (InvalidSyntaxException e) { + throw new UserDirectoryException("Cannot get user with " + key + + "=" + value, e); + } + } + @Override public Authorization getAuthorization(User user) { return new LdifAuthorization((DirectoryUser) user, diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdapUserAdmin.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdapUserAdmin.java index cce1a01c4..0c6d29376 100644 --- a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdapUserAdmin.java +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdapUserAdmin.java @@ -150,36 +150,6 @@ public class LdapUserAdmin extends AbstractUserDirectory { } } - @Override - protected void doGetUser(String key, String value, - List collectedUsers) { - try { - String searchFilter = "(&(" + objectClass + "=" - + getUserObjectClass() + ")(" + key + "=" + value + "))"; - - SearchControls searchControls = new SearchControls(); - searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); - - String searchBase = getBaseDn(); - NamingEnumeration results = getLdapContext().search( - searchBase, searchFilter, searchControls); - - SearchResult searchResult = null; - if (results.hasMoreElements()) { - searchResult = (SearchResult) results.nextElement(); - if (results.hasMoreElements()) - searchResult = null; - } - if (searchResult != null) - collectedUsers.add(new LdifUser(this, toDn(searchBase, - searchResult), searchResult.getAttributes())); - } catch (Exception e) { - throw new UserDirectoryException("Cannot get user with " + key - + "=" + value, e); - } - - } - private LdapName toDn(String baseDn, Binding binding) throws InvalidNameException { return new LdapName(binding.isRelative() ? binding.getName() + "," diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifUserAdmin.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifUserAdmin.java index a98422245..0f0c3b657 100644 --- a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifUserAdmin.java +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifUserAdmin.java @@ -8,9 +8,7 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.Dictionary; import java.util.Hashtable; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; @@ -33,8 +31,6 @@ public class LdifUserAdmin extends AbstractUserDirectory { private SortedMap users = new TreeMap(); private SortedMap groups = new TreeMap(); - private Map> userIndexes = new LinkedHashMap>(); - public LdifUserAdmin(String uri, String baseDn) { this(fromUri(uri, baseDn)); } @@ -93,7 +89,6 @@ public class LdifUserAdmin extends AbstractUserDirectory { } } - @SuppressWarnings("unchecked") protected void load(InputStream in) { try { users.clear(); @@ -116,26 +111,6 @@ public class LdifUserAdmin extends AbstractUserDirectory { } } } - - // indexes - for (String attr : getIndexedUserProperties()) - userIndexes.put(attr, new TreeMap()); - - for (DirectoryUser user : users.values()) { - Dictionary properties = user.getProperties(); - for (String attr : getIndexedUserProperties()) { - Object value = properties.get(attr); - if (value != null) { - DirectoryUser otherUser = userIndexes.get(attr).put( - value.toString(), user); - if (otherUser != null) - throw new UserDirectoryException("User " + user - + " and user " + otherUser - + " both have property " + attr - + " set to " + value); - } - } - } } catch (Exception e) { throw new UserDirectoryException( "Cannot load user admin service from LDIF", e); @@ -179,14 +154,6 @@ public class LdifUserAdmin extends AbstractUserDirectory { return res; } - protected void doGetUser(String key, String value, - List collectedUsers) { - assert key != null; - DirectoryUser user = userIndexes.get(key).get(value); - if (user != null) - collectedUsers.add(user); - } - @Override protected List getDirectGroups(User user) { LdapName dn; -- 2.30.2