X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifGroup.java;h=3e9d44750b2ef333326d36cf2a971483c74b61e4;hb=25071ab6bcb2df1fa4057c2c04137f2d606772e7;hp=fbc678c52c7589e9484967d3352d48f76a7368b7;hpb=e86e3691db8b4a426a6d5fd3cf255dc82fe05fc1;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java index fbc678c52..3e9d44750 100644 --- a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java @@ -8,30 +8,25 @@ import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.ldap.LdapName; -import org.osgi.service.useradmin.Group; import org.osgi.service.useradmin.Role; -public class LdifGroup extends LdifUser implements Group { - // optimisation - List directMembers = null; +public class LdifGroup extends LdifUser implements DirectoryGroup { + private final String memberAttributeId; - private String memberAttrName = "member"; - - public LdifGroup(LdapName dn, Attributes attributes) { - super(dn, attributes); + public LdifGroup(AbstractUserDirectory userAdmin, LdapName dn, + Attributes attributes) { + super(userAdmin, dn, attributes); + memberAttributeId = userAdmin.getMemberAttributeId(); } @Override public boolean addMember(Role role) { - Attribute member = getAttributes().get(memberAttrName); + Attribute member = getAttributes().get(memberAttributeId); if (member != null) { if (member.contains(role.getName())) return false; } else - getAttributes().put(memberAttrName, role.getName()); - directMembers.add(role); - if (role instanceof LdifUser) - ((LdifUser) role).directMemberOf.add(this); + getAttributes().put(memberAttributeId, role.getName()); return true; } @@ -42,14 +37,11 @@ public class LdifGroup extends LdifUser implements Group { @Override public boolean removeMember(Role role) { - Attribute member = getAttributes().get(memberAttrName); + Attribute member = getAttributes().get(memberAttributeId); if (member != null) { if (!member.contains(role.getName())) return false; member.remove(role.getName()); - directMembers.remove(role); - if (role instanceof LdifUser) - ((LdifUser) role).directMemberOf.remove(this); return true; } else return false; @@ -57,45 +49,25 @@ public class LdifGroup extends LdifUser implements Group { @Override public Role[] getMembers() { - if (directMembers != null) - return directMembers.toArray(new Role[directMembers.size()]); - else - throw new ArgeoUserAdminException("Members have not been loaded."); - - // Attribute memberAttribute = getAttributes().get(memberAttrName); - // if (memberAttribute == null) - // return new Role[0]; - // try { - // List roles = new ArrayList(); - // NamingEnumeration values = memberAttribute.getAll(); - // while (values.hasMore()) { - // LdapName dn = new LdapName(values.next().toString()); - // roles.add(new LdifUser(dn, null)); - // } - // return roles.toArray(new Role[roles.size()]); - // } catch (Exception e) { - // throw new ArgeoUserAdminException("Cannot get members", e); - // } + List directMembers = new ArrayList(); + for (LdapName ldapName : getMemberNames()) { + Role role = getUserAdmin().getRole(ldapName.toString()); + if (role == null) { + if (getUserAdmin().getExternalRoles() != null) + role = getUserAdmin().getExternalRoles().getRole( + ldapName.toString()); + } + if (role == null) + throw new UserDirectoryException("No role found for " + + ldapName); + directMembers.add(role); + } + return directMembers.toArray(new Role[directMembers.size()]); } -// void loadMembers(LdifUserAdmin userAdmin) { -// directMembers = new ArrayList(); -// for (LdapName ldapName : getMemberNames()) { -// LdifUser role; -// if (userAdmin.groups.containsKey(ldapName)) -// role = userAdmin.groups.get(ldapName); -// else if (userAdmin.users.containsKey(ldapName)) -// role = userAdmin.users.get(ldapName); -// else -// throw new ArgeoUserAdminException("No role found for " -// + ldapName); -// role.directMemberOf.add(this); -// directMembers.add(role); -// } -// } - - List getMemberNames() { - Attribute memberAttribute = getAttributes().get(memberAttrName); + @Override + public List getMemberNames() { + Attribute memberAttribute = getAttributes().get(memberAttributeId); if (memberAttribute == null) return new ArrayList(); try { @@ -107,7 +79,7 @@ public class LdifGroup extends LdifUser implements Group { } return roles; } catch (Exception e) { - throw new ArgeoUserAdminException("Cannot get members", e); + throw new UserDirectoryException("Cannot get members", e); } } @@ -120,10 +92,4 @@ public class LdifGroup extends LdifUser implements Group { public int getType() { return GROUP; } - - public String getMemberAttrName() { - return memberAttrName; - } - - }