From b4c4c47379e740b494a4a759df07c7b09a7649fa Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 14 Sep 2020 12:30:57 +0200 Subject: [PATCH] Fix regression with registration of user directories. --- org.argeo.cms/OSGI-INF/cmsUserManager.xml | 1 + .../cms/internal/auth/CmsUserManagerImpl.java | 58 +++++++++++++++---- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/org.argeo.cms/OSGI-INF/cmsUserManager.xml b/org.argeo.cms/OSGI-INF/cmsUserManager.xml index c7e3826fe..045c9609a 100644 --- a/org.argeo.cms/OSGI-INF/cmsUserManager.xml +++ b/org.argeo.cms/OSGI-INF/cmsUserManager.xml @@ -6,4 +6,5 @@ + \ No newline at end of file diff --git a/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsUserManagerImpl.java b/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsUserManagerImpl.java index d9b8f42d1..e64a6ad93 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsUserManagerImpl.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsUserManagerImpl.java @@ -8,9 +8,12 @@ import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Dictionary; import java.util.HashMap; import java.util.HashSet; +import java.util.Hashtable; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -35,6 +38,7 @@ import org.argeo.naming.NamingUtils; import org.argeo.naming.SharedSecret; import org.argeo.osgi.useradmin.TokenUtils; import org.argeo.osgi.useradmin.UserAdminConf; +import org.argeo.osgi.useradmin.UserDirectory; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.useradmin.Authorization; import org.osgi.service.useradmin.Group; @@ -58,9 +62,12 @@ public class CmsUserManagerImpl implements CmsUserManager { private final static Log log = LogFactory.getLog(CmsUserManagerImpl.class); private UserAdmin userAdmin; - private Map serviceProperties; +// private Map serviceProperties; private UserTransaction userTransaction; + private Map> userDirectories = Collections + .synchronizedMap(new LinkedHashMap<>()); + @Override public String getMyMail() { return getUserMail(CurrentUser.getUsername()); @@ -201,23 +208,41 @@ public class CmsUserManagerImpl implements CmsUserManager { + dns.keySet().toString() + ". Unable to chose a default one."); } +// public Map getKnownBaseDns(boolean onlyWritable) { +// Map dns = new HashMap(); +// String[] propertyKeys = serviceProperties.keySet().toArray(new String[serviceProperties.size()]); +// for (String uri : propertyKeys) { +// 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; +// } + public Map getKnownBaseDns(boolean onlyWritable) { Map dns = new HashMap(); - String[] propertyKeys = serviceProperties.keySet().toArray(new String[serviceProperties.size()]); - for (String uri : propertyKeys) { - 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()); + } return dns; } @@ -450,12 +475,21 @@ public class CmsUserManagerImpl implements CmsUserManager { } /* DEPENDENCY INJECTION */ - public void setUserAdmin(UserAdmin userAdmin, Map serviceProperties) { + public void setUserAdmin(UserAdmin userAdmin) { this.userAdmin = userAdmin; - this.serviceProperties = serviceProperties; +// this.serviceProperties = serviceProperties; } 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); + } + } -- 2.30.2