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;
*/
public class AggregatingUserAdmin implements UserAdmin {
private final LdapName systemRolesBaseDn;
+ private final LdapName tokensBaseDn;
// DAOs
private AbstractUserDirectory systemRoles = null;
+ private AbstractUserDirectory tokens = null;
private Map<LdapName, AbstractUserDirectory> businessRoles = new HashMap<LdapName, AbstractUserDirectory>();
- 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);
}
Authorization rawAuthorization = userAdmin.getAuthorization(user);
String usernameToUse;
String displayNameToUse;
- if (user instanceof Group) {// tokens
- String ownerDn = (String) user.getProperties().get(LdapAttrs.owner.name());
- if (ownerDn != null) {
+ if (user instanceof Group) {
+ String ownerDn = TokenUtils.userDn((Group) user);
+ if (ownerDn != null) {// tokens
UserAdmin ownerUserAdmin = findUserAdmin(ownerDn);
User ownerUser = (User) ownerUserAdmin.getRole(ownerDn);
usernameToUse = ownerDn;
displayNameToUse = LdifAuthorization.extractDisplayName(ownerUser);
} else {
- throw new UserDirectoryException(
- "Cannot get authorization for group " + user.getName() + " without owner");
+ usernameToUse = rawAuthorization.getName();
+ displayNameToUse = rawAuthorization.toString();
}
} else {// regular users
usernameToUse = rawAuthorization.getName();
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);
private UserAdmin findUserAdmin(LdapName name) {
if (name.startsWith(systemRolesBaseDn))
return systemRoles;
+ if (tokensBaseDn != null && name.startsWith(tokensBaseDn))
+ return tokens;
List<UserAdmin> res = new ArrayList<UserAdmin>(1);
for (LdapName baseDn : businessRoles.keySet()) {
if (name.startsWith(baseDn)) {
return baseDn.equals(systemRolesBaseDn);
}
+ protected boolean isTokensBaseDn(LdapName baseDn) {
+ return tokensBaseDn != null && baseDn.equals(tokensBaseDn);
+ }
+
protected Dictionary<String, Object> currentState() {
Dictionary<String, Object> res = new Hashtable<String, Object>();
// res.put(NodeConstants.CN, NodeConstants.DEFAULT);