X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fauth%2FCmsUserManagerImpl.java;h=9b7a2ed423c1331bcf7c8d05dcd0fb0a03fe923c;hb=4672ec9d1071dffc7c591f623898d32a31637d04;hp=782487a9ad7b083275e3db8d65810f750d0fbdcd;hpb=a0a4cc2c5657faec904e2de279efa4a165d59ac8;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 782487a9a..9b7a2ed42 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 @@ -16,7 +16,10 @@ import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.NavigableMap; import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; import java.util.UUID; import javax.naming.InvalidNameException; @@ -28,13 +31,13 @@ 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.TokenUtils; import org.argeo.osgi.useradmin.UserAdminConf; import org.argeo.osgi.useradmin.UserDirectory; 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; @@ -229,7 +232,7 @@ public class CmsUserManagerImpl implements CmsUserManager { Map dns = new HashMap(); for (UserDirectory userDirectory : userDirectories.keySet()) { Boolean readOnly = userDirectory.isReadOnly(); - String baseDn = userDirectory.getBasePath(); + String baseDn = userDirectory.getContext(); if (onlyWritable && readOnly) continue; @@ -243,6 +246,12 @@ public class CmsUserManagerImpl implements CmsUserManager { return dns; } + public Set getUserDirectories() { + TreeSet res = new TreeSet<>((o1, o2) -> o1.getContext().compareTo(o2.getContext())); + res.addAll(userDirectories.keySet()); + return res; + } + public String buildDistinguishedName(String localId, String baseDn, int type) { Map dns = getKnownBaseDns(true); Dictionary props = UserAdminConf.uriAsProperties(dns.get(baseDn)); @@ -431,6 +440,20 @@ public class CmsUserManagerImpl implements CmsUserManager { } } + @Override + public UserDirectory getDirectory(Role user) { + String name = user.getName(); + NavigableMap possible = new TreeMap<>(); + for (UserDirectory userDirectory : userDirectories.keySet()) { + if (name.endsWith(userDirectory.getContext())) { + possible.put(userDirectory.getContext(), userDirectory); + } + } + if (possible.size() == 0) + throw new IllegalStateException("No user directory found for user " + name); + return possible.lastEntry().getValue(); + } + // public User createUserFromPerson(Node person) { // String email = JcrUtils.get(person, LdapAttrs.mail.property()); // String dn = buildDefaultDN(email, Role.USER);