Factorize indexed properties, thus fixing issue when creating a new user.
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 21 Sep 2015 11:59:02 +0000 (11:59 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 21 Sep 2015 11:59:02 +0000 (11:59 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@8424 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.security.core/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java
org.argeo.security.core/src/org/argeo/osgi/useradmin/LdapUserAdmin.java
org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifUserAdmin.java

index d8a3f04ff06350b9a6a73e2f266c7002b85315d3..40b58be7433fdbf2a9b879ae63aae5035978f625 100644 (file)
@@ -109,9 +109,6 @@ abstract class AbstractUserDirectory implements UserAdmin, UserDirectory {
 
        protected abstract List<DirectoryUser> doGetRoles(Filter f);
 
-       protected abstract void doGetUser(String key, String value,
-                       List<DirectoryUser> collectedUsers);
-
        public void init() {
 
        }
@@ -257,6 +254,19 @@ abstract class AbstractUserDirectory implements UserAdmin, UserDirectory {
                return null;
        }
 
+       protected void doGetUser(String key, String value,
+                       List<DirectoryUser> collectedUsers) {
+               try {
+                       Filter f = FrameworkUtil.createFilter("(&(" + objectClass + "="
+                                       + getUserObjectClass() + ")(" + key + "=" + value + "))");
+                       List<DirectoryUser> 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,
index cce1a01c4ec35cabd1b5e268c06c6cd6d38e9776..0c6d2937649431414be31b615d91b04b8837c4eb 100644 (file)
@@ -150,36 +150,6 @@ public class LdapUserAdmin extends AbstractUserDirectory {
                }
        }
 
-       @Override
-       protected void doGetUser(String key, String value,
-                       List<DirectoryUser> collectedUsers) {
-               try {
-                       String searchFilter = "(&(" + objectClass + "="
-                                       + getUserObjectClass() + ")(" + key + "=" + value + "))";
-
-                       SearchControls searchControls = new SearchControls();
-                       searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-
-                       String searchBase = getBaseDn();
-                       NamingEnumeration<SearchResult> 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() + ","
index a98422245d3a4b9d8c6034217a934325c68f8a03..0f0c3b657a10ac4c9f8e3b2a9dad76499f640c10 100644 (file)
@@ -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<LdapName, DirectoryUser> users = new TreeMap<LdapName, DirectoryUser>();
        private SortedMap<LdapName, DirectoryGroup> groups = new TreeMap<LdapName, DirectoryGroup>();
 
-       private Map<String, Map<String, DirectoryUser>> userIndexes = new LinkedHashMap<String, Map<String, DirectoryUser>>();
-
        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<String, DirectoryUser>());
-
-                       for (DirectoryUser user : users.values()) {
-                               Dictionary<String, ?> 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<DirectoryUser> collectedUsers) {
-               assert key != null;
-               DirectoryUser user = userIndexes.get(key).get(value);
-               if (user != null)
-                       collectedUsers.add(user);
-       }
-
        @Override
        protected List<DirectoryGroup> getDirectGroups(User user) {
                LdapName dn;