X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FAggregatingUserAdmin.java;h=5613c28484ac4dff444505d5b96f3e1ab6e74434;hb=a0a4cc2c5657faec904e2de279efa4a165d59ac8;hp=c274ed97e581c934515d11adce2bf19b82e2661a;hpb=a8e6930465a0cdeece0a80dacc03a0518dc14dff;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 c274ed97e..5613c2848 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; @@ -75,9 +77,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; @@ -153,15 +155,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.getBasePath(); + 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); @@ -171,20 +177,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)); @@ -223,12 +218,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() { @@ -258,9 +253,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); @@ -271,7 +267,7 @@ 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) { } }