X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.e4%2Fsrc%2Forg%2Fargeo%2Fcms%2Fe4%2Fusers%2FUserAdminWrapper.java;h=60d232abac0a690f095753bb2b3900ad0343cc46;hb=2b6597a096ac21375aa83f86d1f750061b20387c;hp=951dd2415892dc92539bf188b50e2b4f1fd8fb4b;hpb=5b3108fe285bca50565b58b63fa4feddc96c0765;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.e4/src/org/argeo/cms/e4/users/UserAdminWrapper.java b/org.argeo.cms.e4/src/org/argeo/cms/e4/users/UserAdminWrapper.java index 951dd2415..60d232aba 100644 --- a/org.argeo.cms.e4/src/org/argeo/cms/e4/users/UserAdminWrapper.java +++ b/org.argeo.cms.e4/src/org/argeo/cms/e4/users/UserAdminWrapper.java @@ -2,12 +2,11 @@ package org.argeo.cms.e4.users; import java.util.ArrayList; import java.util.Collections; -import java.util.Dictionary; import java.util.HashMap; +import java.util.Hashtable; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.TreeSet; import javax.transaction.Status; import javax.transaction.UserTransaction; @@ -15,6 +14,7 @@ import javax.transaction.UserTransaction; import org.argeo.api.NodeConstants; import org.argeo.cms.CmsException; import org.argeo.osgi.useradmin.UserAdminConf; +import org.argeo.osgi.useradmin.UserDirectory; import org.osgi.service.useradmin.UserAdmin; import org.osgi.service.useradmin.UserAdminEvent; import org.osgi.service.useradmin.UserAdminListener; @@ -24,7 +24,9 @@ public class UserAdminWrapper { private UserAdmin userAdmin; // private ServiceReference userAdminServiceReference; - private Set uris; +// private Set uris; + private Map> userDirectories = Collections + .synchronizedMap(new LinkedHashMap<>()); private UserTransaction userTransaction; // First effort to simplify UX while managing users and groups @@ -89,21 +91,34 @@ public class UserAdminWrapper { public Map getKnownBaseDns(boolean onlyWritable) { Map dns = new HashMap(); - for (String uri : uris) { - if (!uri.startsWith("/")) - continue; - Dictionary props = UserAdminConf.uriAsProperties(uri); - String readOnly = UserAdminConf.readOnly.getValue(props); - String baseDn = UserAdminConf.baseDn.getValue(props); + for (UserDirectory userDirectory : userDirectories.keySet()) { + Boolean readOnly = userDirectory.isReadOnly(); + String baseDn = userDirectory.getBaseDn().toString(); - if (onlyWritable && "true".equals(readOnly)) + if (onlyWritable && readOnly) continue; if (baseDn.equalsIgnoreCase(NodeConstants.ROLES_BASEDN)) continue; if (baseDn.equalsIgnoreCase(NodeConstants.TOKENS_BASEDN)) continue; - dns.put(baseDn, uri); + dns.put(baseDn, UserAdminConf.propertiesAsUri(userDirectories.get(userDirectory)).toString()); + } +// for (String uri : uris) { +// if (!uri.startsWith("/")) +// continue; +// Dictionary props = UserAdminConf.uriAsProperties(uri); +// String readOnly = UserAdminConf.readOnly.getValue(props); +// String baseDn = UserAdminConf.baseDn.getValue(props); +// +// if (onlyWritable && "true".equals(readOnly)) +// continue; +// if (baseDn.equalsIgnoreCase(NodeConstants.ROLES_BASEDN)) +// continue; +// if (baseDn.equalsIgnoreCase(NodeConstants.TOKENS_BASEDN)) +// continue; +// dns.put(baseDn, uri); +// } return dns; } @@ -118,13 +133,21 @@ public class UserAdminWrapper { /* DEPENDENCY INJECTION */ public void setUserAdmin(UserAdmin userAdmin, Map properties) { this.userAdmin = userAdmin; - this.uris = Collections.unmodifiableSortedSet(new TreeSet<>(properties.keySet())); +// this.uris = Collections.unmodifiableSortedSet(new TreeSet<>(properties.keySet())); } public void setUserTransaction(UserTransaction userTransaction) { this.userTransaction = userTransaction; } + public void addUserDirectory(UserDirectory userDirectory, Map properties) { + userDirectories.put(userDirectory, new Hashtable<>(properties)); + } + + public void removeUserDirectory(UserDirectory userDirectory, Map properties) { + userDirectories.remove(userDirectory); + } + // public void setUserAdminServiceReference( // ServiceReference userAdminServiceReference) { // this.userAdminServiceReference = userAdminServiceReference;