X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fauth%2FCmsUserManagerImpl.java;h=dfb0a56a27a554691706907b22f014f22a63ff23;hb=a61a938100ef882c56104e4eb4ea18f7c786c3bc;hp=e6a305685e4920115e63478b6e3c4b623a4663ea;hpb=99bca5f6b71c24837c23cf2a9bb944e09dca3dea;p=lgpl%2Fargeo-commons.git 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 e6a305685..dfb0a56a2 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,12 +8,9 @@ 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.NavigableMap; @@ -31,13 +28,14 @@ import org.argeo.api.cms.CmsLog; import org.argeo.cms.CmsUserManager; import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.auth.UserAdminUtils; -import org.argeo.osgi.transaction.WorkTransaction; +import org.argeo.osgi.useradmin.AggregatingUserAdmin; import org.argeo.osgi.useradmin.TokenUtils; -import org.argeo.osgi.useradmin.UserAdminConf; import org.argeo.osgi.useradmin.UserDirectory; +import org.argeo.util.directory.DirectoryConf; +import org.argeo.util.directory.ldap.SharedSecret; import org.argeo.util.naming.LdapAttrs; import org.argeo.util.naming.NamingUtils; -import org.argeo.util.naming.SharedSecret; +import org.argeo.util.transaction.WorkTransaction; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.useradmin.Authorization; import org.osgi.service.useradmin.Group; @@ -64,8 +62,18 @@ public class CmsUserManagerImpl implements CmsUserManager { // private Map serviceProperties; private WorkTransaction userTransaction; - private Map> userDirectories = Collections - .synchronizedMap(new LinkedHashMap<>()); +// private Map> userDirectories = Collections +// .synchronizedMap(new LinkedHashMap<>()); + + private Set userDirectories = new HashSet<>(); + + public void start() { + log.debug(() -> "CMS user manager available"); + } + + public void stop() { + + } @Override public String getMyMail() { @@ -230,9 +238,9 @@ public class CmsUserManagerImpl implements CmsUserManager { public Map getKnownBaseDns(boolean onlyWritable) { Map dns = new HashMap(); - for (UserDirectory userDirectory : userDirectories.keySet()) { + for (UserDirectory userDirectory : userDirectories) { Boolean readOnly = userDirectory.isReadOnly(); - String baseDn = userDirectory.getGlobalId(); + String baseDn = userDirectory.getContext(); if (onlyWritable && readOnly) continue; @@ -240,26 +248,26 @@ public class CmsUserManagerImpl implements CmsUserManager { continue; if (baseDn.equalsIgnoreCase(CmsConstants.TOKENS_BASEDN)) continue; - dns.put(baseDn, UserAdminConf.propertiesAsUri(userDirectories.get(userDirectory)).toString()); + dns.put(baseDn, DirectoryConf.propertiesAsUri(userDirectory.getProperties()).toString()); } return dns; } public Set getUserDirectories() { - TreeSet res = new TreeSet<>((o1, o2) -> o1.getGlobalId().compareTo(o2.getGlobalId())); - res.addAll(userDirectories.keySet()); + TreeSet res = new TreeSet<>((o1, o2) -> o1.getContext().compareTo(o2.getContext())); + res.addAll(userDirectories); return res; } public String buildDistinguishedName(String localId, String baseDn, int type) { Map dns = getKnownBaseDns(true); - Dictionary props = UserAdminConf.uriAsProperties(dns.get(baseDn)); + Dictionary props = DirectoryConf.uriAsProperties(dns.get(baseDn)); String dn = null; if (Role.GROUP == type) - dn = LdapAttrs.cn.name() + "=" + localId + "," + UserAdminConf.groupBase.getValue(props) + "," + baseDn; + dn = LdapAttrs.cn.name() + "=" + localId + "," + DirectoryConf.groupBase.getValue(props) + "," + baseDn; else if (Role.USER == type) - dn = LdapAttrs.uid.name() + "=" + localId + "," + UserAdminConf.userBase.getValue(props) + "," + baseDn; + dn = LdapAttrs.uid.name() + "=" + localId + "," + DirectoryConf.userBase.getValue(props) + "," + baseDn; else throw new IllegalStateException("Unknown role type. " + "Cannot deduce dn for " + localId); return dn; @@ -441,12 +449,12 @@ public class CmsUserManagerImpl implements CmsUserManager { } @Override - public UserDirectory getUserDirectory(User user) { + public UserDirectory getDirectory(Role user) { String name = user.getName(); NavigableMap possible = new TreeMap<>(); - for (UserDirectory userDirectory : userDirectories.keySet()) { - if (name.endsWith(userDirectory.getGlobalId())) { - possible.put(userDirectory.getGlobalId(), userDirectory); + for (UserDirectory userDirectory : userDirectories) { + if (name.endsWith(userDirectory.getContext())) { + possible.put(userDirectory.getContext(), userDirectory); } } if (possible.size() == 0) @@ -496,6 +504,13 @@ public class CmsUserManagerImpl implements CmsUserManager { /* DEPENDENCY INJECTION */ public void setUserAdmin(UserAdmin userAdmin) { this.userAdmin = userAdmin; + + if (userAdmin instanceof AggregatingUserAdmin) { + userDirectories = ((AggregatingUserAdmin) userAdmin).getUserDirectories(); + } else { + throw new IllegalArgumentException("Only " + AggregatingUserAdmin.class.getName() + " is supported."); + } + // this.serviceProperties = serviceProperties; } @@ -503,12 +518,12 @@ public class CmsUserManagerImpl implements CmsUserManager { 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 addUserDirectory(UserDirectory userDirectory, Map properties) { +// userDirectories.put(userDirectory, new Hashtable<>(properties)); +// } +// +// public void removeUserDirectory(UserDirectory userDirectory, Map properties) { +// userDirectories.remove(userDirectory); +// } }