]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifUserAdmin.java
Improve LDIF user admin.
[lgpl/argeo-commons.git] / org.argeo.security.core / src / org / argeo / osgi / useradmin / LdifUserAdmin.java
index 0f0c3b657a10ac4c9f8e3b2a9dad76499f640c10..4613ef5289fbb331ecc61e8d982c93c6d3e41c87 100644 (file)
@@ -12,7 +12,6 @@ import java.util.List;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
-import javax.naming.InvalidNameException;
 import javax.naming.NamingEnumeration;
 import javax.naming.directory.Attributes;
 import javax.naming.ldap.LdapName;
@@ -21,7 +20,6 @@ import javax.transaction.TransactionManager;
 import org.apache.commons.io.IOUtils;
 import org.osgi.framework.Filter;
 import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
 
 /**
  * A user admin based on a LDIF files. Requires a {@link TransactionManager} and
@@ -42,8 +40,6 @@ public class LdifUserAdmin extends AbstractUserDirectory {
        public LdifUserAdmin(InputStream in) {
                super(new Hashtable<String, Object>());
                load(in);
-               setReadOnly(true);
-               setUri(null);
        }
 
        private static Dictionary<String, Object> fromUri(String uri, String baseDn) {
@@ -67,8 +63,12 @@ public class LdifUserAdmin extends AbstractUserDirectory {
        }
 
        public void save() {
-               if (getUri() == null || isReadOnly())
-                       throw new UserDirectoryException("Cannot save LDIF user admin");
+               if (getUri() == null)
+                       throw new UserDirectoryException(
+                                       "Cannot save LDIF user admin: no URI is set");
+               if (isReadOnly())
+                       throw new UserDirectoryException("Cannot save LDIF user admin: "
+                                       + getUri() + " is read-only");
                try (FileOutputStream out = new FileOutputStream(new File(getUri()))) {
                        save(out);
                } catch (IOException e) {
@@ -155,23 +155,12 @@ public class LdifUserAdmin extends AbstractUserDirectory {
        }
 
        @Override
-       protected List<DirectoryGroup> getDirectGroups(User user) {
-               LdapName dn;
-               if (user instanceof LdifUser)
-                       dn = ((LdifUser) user).getDn();
-               else
-                       try {
-                               dn = new LdapName(user.getName());
-                       } catch (InvalidNameException e) {
-                               throw new UserDirectoryException("Badly formatted user name "
-                                               + user.getName(), e);
-                       }
-
-               List<DirectoryGroup> directGroups = new ArrayList<DirectoryGroup>();
+       protected List<LdapName> getDirectGroups(LdapName dn) {
+               List<LdapName> directGroups = new ArrayList<LdapName>();
                for (LdapName name : groups.keySet()) {
                        DirectoryGroup group = groups.get(name);
                        if (group.getMemberNames().contains(dn))
-                               directGroups.add(group);
+                               directGroups.add(group.getDn());
                }
                return directGroups;
        }