X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FAggregatingUserAdmin.java;h=ca1fa338bab58e785dbda260e8431f908c1bd811;hb=eb4324be6ac9cdff15828a21ee7d3f6ca2f19fb9;hp=bee513546cdd25a0f0adad343d07b2857ca8cab7;hpb=9f729eeb8255a9d800ad2506735dda8cc215a135;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/osgi/useradmin/AggregatingUserAdmin.java b/org.argeo.util/src/org/argeo/osgi/useradmin/AggregatingUserAdmin.java index bee513546..ca1fa338b 100644 --- a/org.argeo.util/src/org/argeo/osgi/useradmin/AggregatingUserAdmin.java +++ b/org.argeo.util/src/org/argeo/osgi/useradmin/AggregatingUserAdmin.java @@ -1,5 +1,7 @@ package org.argeo.osgi.useradmin; +import static org.argeo.osgi.useradmin.AbstractUserDirectory.toLdapName; + import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -7,6 +9,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeSet; import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; @@ -31,6 +34,7 @@ public class AggregatingUserAdmin implements UserAdmin { private AbstractUserDirectory tokens = null; private Map businessRoles = new HashMap(); + // TODO rather use an empty constructor and an init method public AggregatingUserAdmin(String systemRolesBaseDn, String tokensBaseDn) { try { this.systemRolesBaseDn = new LdapName(systemRolesBaseDn); @@ -74,9 +78,9 @@ public class AggregatingUserAdmin implements UserAdmin { public User getUser(String key, String value) { List res = new ArrayList(); for (UserAdmin userAdmin : businessRoles.values()) { - User u = userAdmin.getUser(key, value); - if (u != null) - res.add(u); + User u = userAdmin.getUser(key, value); + if (u != null) + res.add(u); } // Note: node roles cannot contain users, so it is not searched return res.size() == 1 ? res.get(0) : null; @@ -152,15 +156,19 @@ public class AggregatingUserAdmin implements UserAdmin { // // USER ADMIN AGGREGATOR // - protected void addUserDirectory(AbstractUserDirectory userDirectory) { - LdapName baseDn = userDirectory.getBaseDn(); - if (isSystemRolesBaseDn(baseDn)) { + protected void addUserDirectory(UserDirectory ud) { + if (!(ud instanceof AbstractUserDirectory)) + throw new IllegalArgumentException("Only " + AbstractUserDirectory.class.getName() + " is supported"); + AbstractUserDirectory userDirectory = (AbstractUserDirectory) ud; + String basePath = userDirectory.getContext(); + if (isSystemRolesBaseDn(basePath)) { this.systemRoles = userDirectory; systemRoles.setExternalRoles(this); - } else if (isTokensBaseDn(baseDn)) { + } else if (isTokensBaseDn(basePath)) { this.tokens = userDirectory; tokens.setExternalRoles(this); } else { + LdapName baseDn = toLdapName(basePath); if (businessRoles.containsKey(baseDn)) throw new UserDirectoryException("There is already a user admin for " + baseDn); businessRoles.put(baseDn, userDirectory); @@ -170,20 +178,9 @@ public class AggregatingUserAdmin implements UserAdmin { } /** Called after a new user directory has been added */ - protected void postAdd(AbstractUserDirectory userDirectory) { + protected void postAdd(UserDirectory userDirectory) { } -// private UserAdmin findUserAdmin(User user) { -// if (user == null) -// throw new IllegalArgumentException("User should not be null"); -// AbstractUserDirectory userAdmin = findUserAdmin(user.getName()); -// if (user instanceof DirectoryUser) { -// return userAdmin; -// } else { -// return userAdmin.scope(user); -// } -// } - private AbstractUserDirectory findUserAdmin(String name) { try { return findUserAdmin(new LdapName(name)); @@ -222,12 +219,12 @@ public class AggregatingUserAdmin implements UserAdmin { return res.get(0); } - protected boolean isSystemRolesBaseDn(LdapName baseDn) { - return baseDn.equals(systemRolesBaseDn); + protected boolean isSystemRolesBaseDn(String basePath) { + return toLdapName(basePath).equals(systemRolesBaseDn); } - protected boolean isTokensBaseDn(LdapName baseDn) { - return tokensBaseDn != null && baseDn.equals(tokensBaseDn); + protected boolean isTokensBaseDn(String basePath) { + return tokensBaseDn != null && toLdapName(basePath).equals(tokensBaseDn); } // protected Dictionary currentState() { @@ -257,9 +254,10 @@ public class AggregatingUserAdmin implements UserAdmin { userDirectory.destroy(); } - protected void removeUserDirectory(LdapName baseDn) { - if (isSystemRolesBaseDn(baseDn)) + protected void removeUserDirectory(String basePath) { + if (isSystemRolesBaseDn(basePath)) throw new UserDirectoryException("System roles cannot be removed "); + LdapName baseDn = toLdapName(basePath); if (!businessRoles.containsKey(baseDn)) throw new UserDirectoryException("No user directory registered for " + baseDn); AbstractUserDirectory userDirectory = businessRoles.remove(baseDn); @@ -270,7 +268,12 @@ public class AggregatingUserAdmin implements UserAdmin { * Called before each user directory is destroyed, so that additional actions * can be performed. */ - protected void preDestroy(AbstractUserDirectory userDirectory) { + protected void preDestroy(UserDirectory userDirectory) { } + public Set getUserDirectories() { + TreeSet res = new TreeSet<>((o1, o2) -> o1.getContext().compareTo(o2.getContext())); + res.addAll(businessRoles.values()); + return res; + } }