X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fauth%2FCmsUserManagerImpl.java;h=36ae6e6d6612d4ea4c673e0077a1017626b5f785;hb=4012bedd8870634488b307d2233590fb1226e5d4;hp=dfb0a56a27a554691706907b22f014f22a63ff23;hpb=a2cb5d55f5d0e44d18fd1a2f5256111ad9fa0015;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 dfb0a56a2..36ae6e6d6 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 @@ -32,6 +32,7 @@ import org.argeo.osgi.useradmin.AggregatingUserAdmin; import org.argeo.osgi.useradmin.TokenUtils; import org.argeo.osgi.useradmin.UserDirectory; import org.argeo.util.directory.DirectoryConf; +import org.argeo.util.directory.HierarchyUnit; import org.argeo.util.directory.ldap.SharedSecret; import org.argeo.util.naming.LdapAttrs; import org.argeo.util.naming.NamingUtils; @@ -62,6 +63,9 @@ public class CmsUserManagerImpl implements CmsUserManager { // private Map serviceProperties; private WorkTransaction userTransaction; + private final String[] knownProps = { LdapAttrs.cn.name(), LdapAttrs.sn.name(), LdapAttrs.givenName.name(), + LdapAttrs.uid.name() }; + // private Map> userDirectories = Collections // .synchronizedMap(new LinkedHashMap<>()); @@ -124,9 +128,6 @@ public class CmsUserManagerImpl implements CmsUserManager { return false; } - private final String[] knownProps = { LdapAttrs.cn.name(), LdapAttrs.sn.name(), LdapAttrs.givenName.name(), - LdapAttrs.uid.name() }; - public Set listUsersInGroup(String groupDn, String filter) { Group group = (Group) userAdmin.getRole(groupDn); if (group == null) @@ -205,6 +206,37 @@ public class CmsUserManagerImpl implements CmsUserManager { return buildDistinguishedName(localId, getDefaultDomainName(), type); } + /* + * EDITION + */ + @Override + public User createUser(String username, Map properties, Map credentials) { + try { + userTransaction.begin(); + User user = (User) userAdmin.createRole(username, Role.USER); + if (properties != null) { + for (String key : properties.keySet()) + user.getProperties().put(key, properties.get(key)); + } + if (credentials != null) { + for (String key : credentials.keySet()) + user.getCredentials().put(key, credentials.get(key)); + } + userTransaction.commit(); + return user; + } catch (Exception e) { + try { + userTransaction.rollback(); + } catch (Exception e1) { + log.error("Could not roll back", e1); + } + if (e instanceof RuntimeException) + throw (RuntimeException) e; + else + throw new RuntimeException("Cannot create user " + username, e); + } + } + @Override public String getDefaultDomainName() { Map dns = getKnownBaseDns(true); @@ -215,27 +247,6 @@ 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(); for (UserDirectory userDirectory : userDirectories) { @@ -462,6 +473,27 @@ public class CmsUserManagerImpl implements CmsUserManager { return possible.lastEntry().getValue(); } + public HierarchyUnit createHierarchyUnit(UserDirectory directory, String path) { + HierarchyUnit hi = directory.getHierarchyUnit(path); + if (hi != null) + return hi; + try { + userTransaction.begin(); + HierarchyUnit hierarchyUnit = directory.createHierarchyUnit(path); + userTransaction.commit(); + return hierarchyUnit; + } catch (Exception e1) { + try { + if (!userTransaction.isNoTransactionStatus()) + userTransaction.rollback(); + } catch (Exception e2) { + if (log.isTraceEnabled()) + log.trace("Cannot rollback transaction", e2); + } + throw new RuntimeException("Cannot create hierarchy unit " + path + " in directory " + directory, e1); + } + } + // public User createUserFromPerson(Node person) { // String email = JcrUtils.get(person, LdapAttrs.mail.property()); // String dn = buildDefaultDN(email, Role.USER);