X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifUser.java;h=a20ad85c11fbc9a65e24e3a3921aae5a5a8a0f67;hb=4672ec9d1071dffc7c591f623898d32a31637d04;hp=552bfdc8da8bfbeaac3d20c608abbb64e2d2d63d;hpb=99bca5f6b71c24837c23cf2a9bb944e09dca3dea;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUser.java b/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUser.java index 552bfdc8d..a20ad85c1 100644 --- a/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUser.java +++ b/org.argeo.util/src/org/argeo/osgi/useradmin/LdifUser.java @@ -10,10 +10,8 @@ import java.util.Base64; import java.util.Collections; import java.util.Dictionary; import java.util.Enumeration; -import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.Set; import java.util.StringJoiner; import javax.naming.NamingEnumeration; @@ -23,13 +21,13 @@ import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.ldap.LdapName; -import org.argeo.util.naming.AuthPassword; import org.argeo.util.naming.LdapAttrs; import org.argeo.util.naming.LdapObjs; import org.argeo.util.naming.SharedSecret; +import org.argeo.util.naming.ldap.AuthPassword; /** Directory user implementation */ -class LdifUser implements DirectoryUser { +abstract class LdifUser implements DirectoryUser { private final AbstractUserDirectory userAdmin; private final LdapName dn; @@ -197,9 +195,9 @@ class LdifUser implements DirectoryUser { protected synchronized void startEditing() { if (frozen) - throw new UserDirectoryException("Cannot edit frozen view"); + throw new IllegalStateException("Cannot edit frozen view"); if (getUserAdmin().isReadOnly()) - throw new UserDirectoryException("User directory is read-only"); + throw new IllegalStateException("User directory is read-only"); assert getModifiedAttributes() == null; getWc().startEditing(this); // modifiedAttributes = (Attributes) publishedAttributes.clone(); @@ -209,9 +207,9 @@ class LdifUser implements DirectoryUser { publishedAttributes = modifiedAttributes; } - public DirectoryUser getPublished() { - return new LdifUser(userAdmin, dn, publishedAttributes, true); - } +// public DirectoryUser getPublished() { +// return new LdifUser(userAdmin, dn, publishedAttributes, true); +// } @Override public int hashCode() { @@ -243,21 +241,23 @@ class LdifUser implements DirectoryUser { private final List attrFilter; private final Boolean includeFilter; - public AttributeDictionary(Boolean includeFilter) { + public AttributeDictionary(Boolean credentials) { this.attrFilter = userAdmin.getCredentialAttributeIds(); - this.includeFilter = includeFilter; + this.includeFilter = credentials; try { NamingEnumeration ids = getAttributes().getIDs(); while (ids.hasMore()) { String id = ids.next(); - if (includeFilter && attrFilter.contains(id)) + if (credentials && attrFilter.contains(id)) effectiveKeys.add(id); - else if (!includeFilter && !attrFilter.contains(id)) + else if (!credentials && !attrFilter.contains(id)) effectiveKeys.add(id); } } catch (NamingException e) { - throw new UserDirectoryException("Cannot initialise attribute dictionary", e); + throw new IllegalStateException("Cannot initialise attribute dictionary", e); } + if (!credentials) + effectiveKeys.add(LdapAttrs.objectClasses.name()); } @Override @@ -297,7 +297,8 @@ class LdifUser implements DirectoryUser { @Override public Object get(Object key) { try { - Attribute attr = getAttributes().get(key.toString()); + Attribute attr = !key.equals(LdapAttrs.objectClasses.name()) ? getAttributes().get(key.toString()) + : getAttributes().get(LdapAttrs.objectClass.name()); if (attr == null) return null; Object value = attr.get(); @@ -310,7 +311,7 @@ class LdifUser implements DirectoryUser { if (attr.size() == 1) return value; // special case for object class - if (attr.getID().equals(LdapAttrs.objectClass.name())) { + if (key.equals(LdapAttrs.objectClass.name())) { // TODO support multiple object classes NamingEnumeration en = attr.getAll(); String first = null; @@ -382,7 +383,7 @@ class LdifUser implements DirectoryUser { else return null; } catch (NamingException e) { - throw new UserDirectoryException("Cannot get value for attribute " + key, e); + throw new IllegalStateException("Cannot get value for attribute " + key, e); } } @@ -404,7 +405,7 @@ class LdifUser implements DirectoryUser { else return null; } catch (NamingException e) { - throw new UserDirectoryException("Cannot remove attribute " + key, e); + throw new IllegalStateException("Cannot remove attribute " + key, e); } } } @@ -426,4 +427,11 @@ class LdifUser implements DirectoryUser { return ch >= 32 && ch < 127; } + static class LdifPerson extends LdifUser implements Person { + + public LdifPerson(AbstractUserDirectory userAdmin, LdapName dn, Attributes attributes) { + super(userAdmin, dn, attributes); + } + + } }