]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.core/src/org/argeo/osgi/useradmin/LdapUserAdmin.java
Fix URI when using default LDIF
[lgpl/argeo-commons.git] / org.argeo.security.core / src / org / argeo / osgi / useradmin / LdapUserAdmin.java
index 23a31fc87f18fc0452b78f993361bc849d7f4fc0..1dc4df981840e0608a8e89c5006cb9a9ec6d4afe 100644 (file)
@@ -18,13 +18,17 @@ import javax.naming.directory.SearchControls;
 import javax.naming.directory.SearchResult;
 import javax.naming.ldap.InitialLdapContext;
 import javax.naming.ldap.LdapName;
+import javax.transaction.TransactionManager;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.ArgeoException;
 import org.osgi.framework.Filter;
-import org.osgi.service.useradmin.User;
 
+/**
+ * A user admin based on a LDAP server. Requires a {@link TransactionManager}
+ * and an open transaction for write access.
+ */
 public class LdapUserAdmin extends AbstractUserDirectory {
        private final static Log log = LogFactory.getLog(LdapUserAdmin.class);
 
@@ -145,36 +149,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() + ","
@@ -182,12 +156,12 @@ public class LdapUserAdmin extends AbstractUserDirectory {
        }
 
        @Override
-       protected List<DirectoryGroup> getDirectGroups(User user) {
-               List<DirectoryGroup> directGroups = new ArrayList<DirectoryGroup>();
+       protected List<LdapName> getDirectGroups(LdapName dn) {
+               List<LdapName> directGroups = new ArrayList<LdapName>();
                try {
                        String searchFilter = "(&(" + objectClass + "="
                                        + getGroupObjectClass() + ")(" + getMemberAttributeId()
-                                       + "=" + user.getName() + "))";
+                                       + "=" + dn + "))";
 
                        SearchControls searchControls = new SearchControls();
                        searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
@@ -199,19 +173,17 @@ public class LdapUserAdmin extends AbstractUserDirectory {
                        while (results.hasMoreElements()) {
                                SearchResult searchResult = (SearchResult) results
                                                .nextElement();
-                               LdifGroup group = new LdifGroup(this, toDn(searchBase,
-                                               searchResult), searchResult.getAttributes());
-                               directGroups.add(group);
+                               directGroups.add(toDn(searchBase, searchResult));
                        }
                        return directGroups;
                } catch (Exception e) {
-                       throw new ArgeoException("Cannot populate direct members of "
-                                       + user, e);
+                       throw new ArgeoException("Cannot populate direct members of " + dn,
+                                       e);
                }
        }
 
        @Override
-       protected void prepare(WorkingCopy wc) {
+       protected void prepare(UserDirectoryWorkingCopy wc) {
                try {
                        getLdapContext().reconnect(getLdapContext().getConnectControls());
                        // delete
@@ -242,7 +214,7 @@ public class LdapUserAdmin extends AbstractUserDirectory {
        }
 
        @Override
-       protected void commit(WorkingCopy wc) {
+       protected void commit(UserDirectoryWorkingCopy wc) {
                try {
                        // delete
                        for (LdapName dn : wc.getDeletedUsers().keySet()) {
@@ -265,7 +237,7 @@ public class LdapUserAdmin extends AbstractUserDirectory {
        }
 
        @Override
-       protected void rollback(WorkingCopy wc) {
+       protected void rollback(UserDirectoryWorkingCopy wc) {
                // prepare not impacting
        }