Improve tokens
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / NodeUserAdmin.java
index dc9d33a3b5fa9bcb7751fb269c288786ba003b7e..ba4ad836041ae8de7ce8093f14f3bb055a9dd0ec 100644 (file)
@@ -61,9 +61,6 @@ import org.osgi.service.useradmin.Authorization;
 import org.osgi.service.useradmin.UserAdmin;
 import org.osgi.util.tracker.ServiceTracker;
 
-import bitronix.tm.BitronixTransactionManager;
-import bitronix.tm.resource.ehcache.EhCacheXAResourceProducer;
-
 /**
  * Aggregates multiple {@link UserDirectory} and integrates them with system
  * roles.
@@ -79,16 +76,17 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
 
        // JTA
        private final ServiceTracker<TransactionManager, TransactionManager> tmTracker;
-       private final String cacheName = UserDirectory.class.getName();
+       // private final String cacheName = UserDirectory.class.getName();
 
        // GSS API
        private Path nodeKeyTab = KernelUtils.getOsgiInstancePath(KernelConstants.NODE_KEY_TAB_PATH);
        private GSSCredential acceptorCredentials;
 
        private boolean singleUser = false;
+       private boolean systemRolesAvailable = false;
 
-       public NodeUserAdmin(String systemRolesBaseDn) {
-               super(systemRolesBaseDn);
+       public NodeUserAdmin(String systemRolesBaseDn, String tokensBaseDn) {
+               super(systemRolesBaseDn, tokensBaseDn);
                tmTracker = new ServiceTracker<>(bc, TransactionManager.class, null);
                tmTracker.open();
        }
@@ -137,15 +135,21 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
                        log.debug("User directory " + userDirectory.getBaseDn() + " [" + u.getScheme() + "] enabled."
                                        + (realm != null ? " " + realm + " realm." : ""));
 
-               // if (isSystemRolesBaseDn(baseDn)) {
-               if (userAdminReg != null)
-                       userAdminReg.unregister();
-               // register self as main user admin
-               Dictionary<String, Object> userAdminregProps = currentState();
-               userAdminregProps.put(NodeConstants.CN, NodeConstants.DEFAULT);
-               userAdminregProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE);
-               userAdminReg = bc.registerService(UserAdmin.class, this, userAdminregProps);
-               // }
+               if (isSystemRolesBaseDn(baseDn))
+                       systemRolesAvailable = true;
+
+               // start publishing only when system roles are available
+               if (systemRolesAvailable) {
+                       // The list of baseDns is published as properties
+                       // TODO clients should rather reference USerDirectory services
+                       if (userAdminReg != null)
+                               userAdminReg.unregister();
+                       // register self as main user admin
+                       Dictionary<String, Object> userAdminregProps = currentState();
+                       userAdminregProps.put(NodeConstants.CN, NodeConstants.DEFAULT);
+                       userAdminregProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE);
+                       userAdminReg = bc.registerService(UserAdmin.class, this, userAdminregProps);
+               }
        }
 
        @Override
@@ -177,8 +181,8 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
                if (tm == null)
                        throw new CmsException("A JTA transaction manager must be available.");
                userDirectory.setTransactionManager(tm);
-               if (tmTracker.getService() instanceof BitronixTransactionManager)
-                       EhCacheXAResourceProducer.registerXAResource(cacheName, userDirectory.getXaResource());
+//             if (tmTracker.getService() instanceof BitronixTransactionManager)
+//                     EhCacheXAResourceProducer.registerXAResource(cacheName, userDirectory.getXaResource());
 
                Object realm = userDirectory.getProperties().get(UserAdminConf.realm.name());
                if (realm != null) {
@@ -218,8 +222,8 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
        }
 
        protected void preDestroy(AbstractUserDirectory userDirectory) {
-               if (tmTracker.getService() instanceof BitronixTransactionManager)
-                       EhCacheXAResourceProducer.unregisterXAResource(cacheName, userDirectory.getXaResource());
+//             if (tmTracker.getService() instanceof BitronixTransactionManager)
+//                     EhCacheXAResourceProducer.unregisterXAResource(cacheName, userDirectory.getXaResource());
 
                Object realm = userDirectory.getProperties().get(UserAdminConf.realm.name());
                if (realm != null) {