X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.enterprise%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FAggregatingUserAdmin.java;h=75ca9ae884605a81ac07a219455030e5f5990172;hb=4e5217621733b3f8b9c2427a688a18c68dbc1e5d;hp=cc1dadb9bc9e0be189673a578a060fafee37a5e1;hpb=6b0d122dd322bfa1bcbb0c1f4b7551cdb325bb80;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AggregatingUserAdmin.java b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AggregatingUserAdmin.java index cc1dadb9b..75ca9ae88 100644 --- a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AggregatingUserAdmin.java +++ b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AggregatingUserAdmin.java @@ -13,7 +13,6 @@ import java.util.Set; import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; -import org.argeo.naming.LdapAttrs; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.useradmin.Authorization; import org.osgi.service.useradmin.Group; @@ -27,14 +26,20 @@ import org.osgi.service.useradmin.UserAdmin; */ public class AggregatingUserAdmin implements UserAdmin { private final LdapName systemRolesBaseDn; + private final LdapName tokensBaseDn; // DAOs private AbstractUserDirectory systemRoles = null; + private AbstractUserDirectory tokens = null; private Map businessRoles = new HashMap(); - public AggregatingUserAdmin(String systemRolesBaseDn) { + public AggregatingUserAdmin(String systemRolesBaseDn, String tokensBaseDn) { try { this.systemRolesBaseDn = new LdapName(systemRolesBaseDn); + if (tokensBaseDn != null) + this.tokensBaseDn = new LdapName(tokensBaseDn); + else + this.tokensBaseDn = null; } catch (InvalidNameException e) { throw new UserDirectoryException("Cannot initialize " + AggregatingUserAdmin.class, e); } @@ -89,7 +94,7 @@ public class AggregatingUserAdmin implements UserAdmin { String usernameToUse; String displayNameToUse; if (user instanceof Group) { - String ownerDn = (String) user.getProperties().get(LdapAttrs.owner.name()); + String ownerDn = TokenUtils.userDn((Group) user); if (ownerDn != null) {// tokens UserAdmin ownerUserAdmin = findUserAdmin(ownerDn); User ownerUser = (User) ownerUserAdmin.getRole(ownerDn); @@ -131,6 +136,9 @@ public class AggregatingUserAdmin implements UserAdmin { if (isSystemRolesBaseDn(baseDn)) { this.systemRoles = userDirectory; systemRoles.setExternalRoles(this); + } else if (isTokensBaseDn(baseDn)) { + this.tokens = userDirectory; + tokens.setExternalRoles(this); } else { if (businessRoles.containsKey(baseDn)) throw new UserDirectoryException("There is already a user admin for " + baseDn); @@ -156,6 +164,8 @@ public class AggregatingUserAdmin implements UserAdmin { private UserAdmin findUserAdmin(LdapName name) { if (name.startsWith(systemRolesBaseDn)) return systemRoles; + if (tokensBaseDn != null && name.startsWith(tokensBaseDn)) + return tokens; List res = new ArrayList(1); for (LdapName baseDn : businessRoles.keySet()) { if (name.startsWith(baseDn)) { @@ -175,6 +185,10 @@ public class AggregatingUserAdmin implements UserAdmin { return baseDn.equals(systemRolesBaseDn); } + protected boolean isTokensBaseDn(LdapName baseDn) { + return tokensBaseDn != null && baseDn.equals(tokensBaseDn); + } + protected Dictionary currentState() { Dictionary res = new Hashtable(); // res.put(NodeConstants.CN, NodeConstants.DEFAULT);