X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifUserAdmin.java;h=fa4526ac6a6084b20464964831bf8b8bdefaeee6;hb=22d5278b56823c2220709628286a5051d143863e;hp=608a1f7518edd88eae8450c6e3f2e8fccac51167;hpb=9a9418f4c0df975756de3093df71d757c72a386d;p=lgpl%2Fargeo-commons.git 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 608a1f751..fa4526ac6 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 @@ -5,10 +5,9 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.net.URI; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Dictionary; +import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -32,58 +31,35 @@ public class LdifUserAdmin extends AbstractUserDirectory { private Map> userIndexes = new LinkedHashMap>(); - // private Map> directMemberOf = new - // TreeMap>(); - - public LdifUserAdmin(String uri) { - this(uri, readOnlyDefault(uri)); - } - - public LdifUserAdmin(String uri, boolean isReadOnly) { - setReadOnly(isReadOnly); - try { - setUri(new URI(uri)); - } catch (URISyntaxException e) { - throw new UserDirectoryException("Invalid URI " + uri, e); - } - - if (!isReadOnly && !getUri().getScheme().equals("file")) - throw new UnsupportedOperationException(getUri().getScheme() - + " not supported read-write."); - + public LdifUserAdmin(String uri, String baseDn) { + this(fromUri(uri, baseDn)); } - public LdifUserAdmin(URI uri, boolean isReadOnly) { - setReadOnly(isReadOnly); - setUri(uri); - if (!isReadOnly && !getUri().getScheme().equals("file")) - throw new UnsupportedOperationException(getUri().getScheme() - + " not supported read-write."); - + public LdifUserAdmin(Dictionary properties) { + super(properties); } public LdifUserAdmin(InputStream in) { + super(new Hashtable()); load(in); setReadOnly(true); setUri(null); } - private static boolean readOnlyDefault(String uriStr) { - URI uri; - try { - uri = new URI(uriStr); - } catch (Exception e) { - throw new UserDirectoryException("Invalid URI " + uriStr, e); - } - if (uri.getScheme().equals("file")) { - File file = new File(uri); - return !file.canWrite(); - } - return true; + private static Dictionary fromUri(String uri, String baseDn) { + Hashtable res = new Hashtable(); + res.put(UserAdminProps.uri.property(), uri); + res.put(UserAdminProps.baseDn.property(), baseDn); + return res; } public void init() { try { + if (getUri().getScheme().equals("file")) { + File file = new File(getUri()); + if (!file.exists()) + return; + } load(getUri().toURL().openStream()); } catch (Exception e) { throw new UserDirectoryException("Cannot open URL " + getUri(), e); @@ -113,6 +89,7 @@ public class LdifUserAdmin extends AbstractUserDirectory { } } + @SuppressWarnings("unchecked") protected void load(InputStream in) { try { users.clear(); @@ -136,16 +113,12 @@ public class LdifUserAdmin extends AbstractUserDirectory { } } - // optimise - // for (LdifGroup group : groups.values()) - // loadMembers(group); - // indexes for (String attr : getIndexedUserProperties()) userIndexes.put(attr, new TreeMap()); for (DirectoryUser user : users.values()) { - Dictionary properties = user.getProperties(); + Dictionary properties = user.getProperties(); for (String attr : getIndexedUserProperties()) { Object value = properties.get(attr); if (value != null) { @@ -184,25 +157,7 @@ public class LdifUserAdmin extends AbstractUserDirectory { return users.containsKey(dn) || groups.containsKey(dn); } - // @Override - // public boolean removeRole(String name) { - // LdapName dn = toDn(name); - // LdifUser role = null; - // if (users.containsKey(dn)) - // role = users.remove(dn); - // else if (groups.containsKey(dn)) - // role = groups.remove(dn); - // else - // throw new UserDirectoryException("There is no role " + name); - // if (role == null) - // return false; - // for (LdifGroup group : getDirectGroups(role)) { - // group.getAttributes().get(getMemberAttributeId()) - // .remove(dn.toString()); - // } - // return true; - // } - + @SuppressWarnings("unchecked") protected List doGetRoles(Filter f) { ArrayList res = new ArrayList(); if (f == null) {