X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeUserAdmin.java;h=17daa3e14ae15b33f8af32f1dfe6560a9c6c04cb;hb=b71546ddc74d6ca49d252806aafd491c75dfe1fb;hp=1a9817450ed427deee762ed39f0866d1d6a3942c;hpb=043d226a5504a212eb5673c3ed4441c1167724d7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java index 1a9817450..17daa3e14 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java @@ -25,19 +25,21 @@ import javax.security.auth.callback.UnsupportedCallbackException; import javax.security.auth.kerberos.KerberosPrincipal; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; -import javax.transaction.TransactionManager; import org.apache.commons.httpclient.auth.AuthPolicy; import org.apache.commons.httpclient.auth.CredentialsProvider; import org.apache.commons.httpclient.params.DefaultHttpParams; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.commons.httpclient.params.HttpParams; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.api.NodeConstants; +import org.argeo.api.cms.CmsAuth; +import org.argeo.api.cms.CmsConstants; +import org.argeo.api.cms.CmsLog; +import org.argeo.cms.CmsUserManager; +import org.argeo.cms.internal.auth.CmsUserManagerImpl; import org.argeo.cms.internal.http.client.HttpCredentialProvider; import org.argeo.cms.internal.http.client.SpnegoAuthScheme; -import org.argeo.naming.DnsBrowser; +import org.argeo.osgi.transaction.WorkControl; +import org.argeo.osgi.transaction.WorkTransaction; import org.argeo.osgi.useradmin.AbstractUserDirectory; import org.argeo.osgi.useradmin.AggregatingUserAdmin; import org.argeo.osgi.useradmin.LdapUserAdmin; @@ -45,6 +47,7 @@ import org.argeo.osgi.useradmin.LdifUserAdmin; import org.argeo.osgi.useradmin.OsUserDirectory; import org.argeo.osgi.useradmin.UserAdminConf; import org.argeo.osgi.useradmin.UserDirectory; +import org.argeo.util.naming.DnsBrowser; import org.ietf.jgss.GSSCredential; import org.ietf.jgss.GSSException; import org.ietf.jgss.GSSManager; @@ -52,6 +55,7 @@ import org.ietf.jgss.GSSName; import org.ietf.jgss.Oid; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; +import org.osgi.framework.ServiceReference; import org.osgi.service.cm.ConfigurationException; import org.osgi.service.cm.ManagedServiceFactory; import org.osgi.service.useradmin.Authorization; @@ -63,7 +67,7 @@ import org.osgi.util.tracker.ServiceTracker; * roles. */ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactory, KernelConstants { - private final static Log log = LogFactory.getLog(NodeUserAdmin.class); + private final static CmsLog log = CmsLog.getLog(NodeUserAdmin.class); // private final BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext(); // OSGi @@ -72,7 +76,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor // private ServiceRegistration userAdminReg; // JTA - private final ServiceTracker tmTracker; + private final ServiceTracker tmTracker; // private final String cacheName = UserDirectory.class.getName(); // GSS API @@ -82,11 +86,25 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor private boolean singleUser = false; // private boolean systemRolesAvailable = false; + CmsUserManagerImpl userManager; + public NodeUserAdmin(String systemRolesBaseDn, String tokensBaseDn) { super(systemRolesBaseDn, tokensBaseDn); BundleContext bc = Activator.getBundleContext(); if (bc != null) { - tmTracker = new ServiceTracker<>(bc, TransactionManager.class, null); + tmTracker = new ServiceTracker<>(bc, WorkControl.class, null) { + + @Override + public WorkControl addingService(ServiceReference reference) { + WorkControl workControl = super.addingService(reference); + userManager = new CmsUserManagerImpl(); + userManager.setUserAdmin(NodeUserAdmin.this); + // FIXME make it more robust + userManager.setUserTransaction((WorkTransaction) workControl); + bc.registerService(CmsUserManager.class, userManager, null); + return workControl; + } + }; tmTracker.open(); } else { tmTracker = null; @@ -128,7 +146,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor // OSGi LdapName baseDn = userDirectory.getBaseDn(); - Dictionary regProps = new Hashtable<>(); + Hashtable regProps = new Hashtable<>(); regProps.put(Constants.SERVICE_PID, pid); if (isSystemRolesBaseDn(baseDn)) regProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE); @@ -136,6 +154,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor // ServiceRegistration reg = // bc.registerService(UserDirectory.class, userDirectory, regProps); Activator.registerService(UserDirectory.class, userDirectory, regProps); + userManager.addUserDirectory(userDirectory, regProps); pidToBaseDn.put(pid, baseDn); // pidToServiceRegs.put(pid, reg); @@ -147,7 +166,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor if (isSystemRolesBaseDn(baseDn)) { // publishes only when system roles are available Dictionary userAdminregProps = new Hashtable<>(); - userAdminregProps.put(NodeConstants.CN, NodeConstants.DEFAULT); + userAdminregProps.put(CmsConstants.CN, CmsConstants.DEFAULT); userAdminregProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE); Activator.registerService(UserAdmin.class, this, userAdminregProps); } @@ -186,18 +205,18 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor @Override protected void addAbstractSystemRoles(Authorization rawAuthorization, Set sysRoles) { if (rawAuthorization.getName() == null) { - sysRoles.add(NodeConstants.ROLE_ANONYMOUS); + sysRoles.add(CmsConstants.ROLE_ANONYMOUS); } else { - sysRoles.add(NodeConstants.ROLE_USER); + sysRoles.add(CmsConstants.ROLE_USER); } } protected void postAdd(AbstractUserDirectory userDirectory) { // JTA - TransactionManager tm = tmTracker != null ? tmTracker.getService() : null; + WorkControl tm = tmTracker != null ? tmTracker.getService() : null; if (tm == null) throw new IllegalStateException("A JTA transaction manager must be available."); - userDirectory.setTransactionManager(tm); + userDirectory.setTransactionControl(tm); // if (tmTracker.getService() instanceof BitronixTransactionManager) // EhCacheXAResourceProducer.registerXAResource(cacheName, userDirectory.getXaResource()); @@ -216,7 +235,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor } }; try { - LoginContext nodeLc = new LoginContext(NodeConstants.LOGIN_CONTEXT_NODE, callbackHandler); + LoginContext nodeLc = new LoginContext(CmsAuth.LOGIN_CONTEXT_NODE, callbackHandler); nodeLc.login(); acceptorCredentials = logInAsAcceptor(nodeLc.getSubject(), servicePrincipal); } catch (LoginException e) {