]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/internal/auth/CmsUserManagerImpl.java
Remove dependency to JTA
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / auth / CmsUserManagerImpl.java
index 869dbb23c9a2e76989091de5432563a56687ac8e..5753decf9ed2c565d5f011795371e99620b9154d 100644 (file)
@@ -8,33 +8,34 @@ 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;
 import java.util.UUID;
 
-import javax.jcr.Node;
 import javax.naming.InvalidNameException;
 import javax.naming.ldap.LdapName;
 import javax.security.auth.Subject;
-import javax.transaction.Status;
-import javax.transaction.UserTransaction;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.argeo.api.NodeConstants;
 import org.argeo.cms.CmsUserManager;
 import org.argeo.cms.auth.CurrentUser;
 import org.argeo.cms.auth.UserAdminUtils;
-import org.argeo.jcr.JcrUtils;
 import org.argeo.naming.LdapAttrs;
 import org.argeo.naming.NamingUtils;
 import org.argeo.naming.SharedSecret;
-import org.argeo.node.NodeConstants;
+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.osgi.framework.InvalidSyntaxException;
 import org.osgi.service.useradmin.Authorization;
 import org.osgi.service.useradmin.Group;
@@ -58,8 +59,11 @@ public class CmsUserManagerImpl implements CmsUserManager {
        private final static Log log = LogFactory.getLog(CmsUserManagerImpl.class);
 
        private UserAdmin userAdmin;
-       private Map<String, String> serviceProperties;
-       private UserTransaction userTransaction;
+//     private Map<String, String> serviceProperties;
+       private WorkTransaction userTransaction;
+
+       private Map<UserDirectory, Hashtable<String, String>> userDirectories = Collections
+                       .synchronizedMap(new LinkedHashMap<>());
 
        @Override
        public String getMyMail() {
@@ -201,23 +205,41 @@ public class CmsUserManagerImpl implements CmsUserManager {
                                        + dns.keySet().toString() + ". Unable to chose a default one.");
        }
 
+//     public Map<String, String> getKnownBaseDns(boolean onlyWritable) {
+//             Map<String, String> dns = new HashMap<String, String>();
+//             String[] propertyKeys = serviceProperties.keySet().toArray(new String[serviceProperties.size()]);
+//             for (String uri : propertyKeys) {
+//                     if (!uri.startsWith("/"))
+//                             continue;
+//                     Dictionary<String, ?> 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<String, String> getKnownBaseDns(boolean onlyWritable) {
                Map<String, String> dns = new HashMap<String, String>();
-               String[] propertyKeys = serviceProperties.keySet().toArray(new String[serviceProperties.size()]);
-               for (String uri : propertyKeys) {
-                       if (!uri.startsWith("/"))
-                               continue;
-                       Dictionary<String, ?> 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;
        }
@@ -328,7 +350,7 @@ public class CmsUserManagerImpl implements CmsUserManager {
                        return tokenStr;
                } catch (Exception e1) {
                        try {
-                               if (userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION)
+                               if (!userTransaction.isNoTransactionStatus())
                                        userTransaction.rollback();
                        } catch (Exception e2) {
                                if (log.isTraceEnabled())
@@ -351,7 +373,7 @@ public class CmsUserManagerImpl implements CmsUserManager {
                                log.debug("Token " + token + " expired.");
                } catch (Exception e1) {
                        try {
-                               if (userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION)
+                               if (!userTransaction.isNoTransactionStatus())
                                        userTransaction.rollback();
                        } catch (Exception e2) {
                                if (log.isTraceEnabled())
@@ -400,7 +422,7 @@ public class CmsUserManagerImpl implements CmsUserManager {
                        userTransaction.commit();
                } catch (Exception e1) {
                        try {
-                               if (userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION)
+                               if (!userTransaction.isNoTransactionStatus())
                                        userTransaction.rollback();
                        } catch (Exception e2) {
                                if (log.isTraceEnabled())
@@ -410,52 +432,61 @@ public class CmsUserManagerImpl implements CmsUserManager {
                }
        }
 
-       public User createUserFromPerson(Node person) {
-               String email = JcrUtils.get(person, LdapAttrs.mail.property());
-               String dn = buildDefaultDN(email, Role.USER);
-               User user;
-               try {
-                       userTransaction.begin();
-                       user = (User) userAdmin.createRole(dn, Role.USER);
-                       Dictionary<String, Object> userProperties = user.getProperties();
-                       String name = JcrUtils.get(person, LdapAttrs.displayName.property());
-                       userProperties.put(LdapAttrs.cn.name(), name);
-                       userProperties.put(LdapAttrs.displayName.name(), name);
-                       String givenName = JcrUtils.get(person, LdapAttrs.givenName.property());
-                       String surname = JcrUtils.get(person, LdapAttrs.sn.property());
-                       userProperties.put(LdapAttrs.givenName.name(), givenName);
-                       userProperties.put(LdapAttrs.sn.name(), surname);
-                       userProperties.put(LdapAttrs.mail.name(), email.toLowerCase());
-                       userTransaction.commit();
-               } 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", e);
-               }
-               return user;
-       }
+//     public User createUserFromPerson(Node person) {
+//             String email = JcrUtils.get(person, LdapAttrs.mail.property());
+//             String dn = buildDefaultDN(email, Role.USER);
+//             User user;
+//             try {
+//                     userTransaction.begin();
+//                     user = (User) userAdmin.createRole(dn, Role.USER);
+//                     Dictionary<String, Object> userProperties = user.getProperties();
+//                     String name = JcrUtils.get(person, LdapAttrs.displayName.property());
+//                     userProperties.put(LdapAttrs.cn.name(), name);
+//                     userProperties.put(LdapAttrs.displayName.name(), name);
+//                     String givenName = JcrUtils.get(person, LdapAttrs.givenName.property());
+//                     String surname = JcrUtils.get(person, LdapAttrs.sn.property());
+//                     userProperties.put(LdapAttrs.givenName.name(), givenName);
+//                     userProperties.put(LdapAttrs.sn.name(), surname);
+//                     userProperties.put(LdapAttrs.mail.name(), email.toLowerCase());
+//                     userTransaction.commit();
+//             } 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", e);
+//             }
+//             return user;
+//     }
 
        public UserAdmin getUserAdmin() {
                return userAdmin;
        }
 
-       public UserTransaction getUserTransaction() {
-               return userTransaction;
-       }
+//     public UserTransaction getUserTransaction() {
+//             return userTransaction;
+//     }
 
        /* DEPENDENCY INJECTION */
-       public void setUserAdmin(UserAdmin userAdmin, Map<String, String> serviceProperties) {
+       public void setUserAdmin(UserAdmin userAdmin) {
                this.userAdmin = userAdmin;
-               this.serviceProperties = serviceProperties;
+//             this.serviceProperties = serviceProperties;
        }
 
-       public void setUserTransaction(UserTransaction userTransaction) {
+       public void setUserTransaction(WorkTransaction userTransaction) {
                this.userTransaction = userTransaction;
        }
+
+       public void addUserDirectory(UserDirectory userDirectory, Map<String, String> properties) {
+               userDirectories.put(userDirectory, new Hashtable<>(properties));
+       }
+
+       public void removeUserDirectory(UserDirectory userDirectory, Map<String, String> properties) {
+               userDirectories.remove(userDirectory);
+       }
+
 }