X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=inline;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeUserAdmin.java;h=40e23541ba0ad46b3c444acfd586a094c3a4d9d0;hb=6e6286a551d04ee0993dc7930bd9744f7c9df10e;hp=f00c3c769f5ef00c6a4b37f0518bacb6f9d3b6bb;hpb=810aecacb19916bade7e4bcfcbbb54c301f672df;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 f00c3c769..40e23541b 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 @@ -34,11 +34,10 @@ 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.cms.CmsException; +import org.argeo.api.NodeConstants; import org.argeo.cms.internal.http.client.HttpCredentialProvider; import org.argeo.cms.internal.http.client.SpnegoAuthScheme; import org.argeo.naming.DnsBrowser; -import org.argeo.node.NodeConstants; import org.argeo.osgi.useradmin.AbstractUserDirectory; import org.argeo.osgi.useradmin.AggregatingUserAdmin; import org.argeo.osgi.useradmin.LdapUserAdmin; @@ -53,8 +52,6 @@ import org.ietf.jgss.GSSName; import org.ietf.jgss.Oid; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.ServiceRegistration; import org.osgi.service.cm.ConfigurationException; import org.osgi.service.cm.ManagedServiceFactory; import org.osgi.service.useradmin.Authorization; @@ -67,12 +64,12 @@ import org.osgi.util.tracker.ServiceTracker; */ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactory, KernelConstants { private final static Log log = LogFactory.getLog(NodeUserAdmin.class); - private final BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext(); +// private final BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext(); // OSGi private Map pidToBaseDn = new HashMap<>(); - private Map> pidToServiceRegs = new HashMap<>(); - private ServiceRegistration userAdminReg; +// private Map> pidToServiceRegs = new HashMap<>(); +// private ServiceRegistration userAdminReg; // JTA private final ServiceTracker tmTracker; @@ -83,12 +80,17 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor private GSSCredential acceptorCredentials; private boolean singleUser = false; - private boolean systemRolesAvailable = false; - - public NodeUserAdmin(String systemRolesBaseDn) { - super(systemRolesBaseDn); - tmTracker = new ServiceTracker<>(bc, TransactionManager.class, null); - tmTracker.open(); +// private boolean systemRolesAvailable = false; + + public NodeUserAdmin(String systemRolesBaseDn, String tokensBaseDn) { + super(systemRolesBaseDn, tokensBaseDn); + BundleContext bc = Activator.getBundleContext(); + if (bc != null) { + tmTracker = new ServiceTracker<>(bc, TransactionManager.class, null); + tmTracker.open(); + } else { + tmTracker = null; + } } @Override @@ -102,7 +104,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor } else u = new URI(uri); } catch (URISyntaxException e) { - throw new CmsException("Badly formatted URI " + uri, e); + throw new IllegalArgumentException("Badly formatted URI " + uri, e); } // Create @@ -115,7 +117,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor userDirectory = new OsUserDirectory(u, properties); singleUser = true; } else { - throw new CmsException("Unsupported scheme " + u.getScheme()); + throw new IllegalArgumentException("Unsupported scheme " + u.getScheme()); } Object realm = userDirectory.getProperties().get(UserAdminConf.realm.name()); addUserDirectory(userDirectory); @@ -127,36 +129,46 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor if (isSystemRolesBaseDn(baseDn)) regProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE); regProps.put(UserAdminConf.baseDn.name(), baseDn); - ServiceRegistration reg = bc.registerService(UserDirectory.class, userDirectory, regProps); + // ServiceRegistration reg = + // bc.registerService(UserDirectory.class, userDirectory, regProps); + Activator.registerService(UserDirectory.class, userDirectory, regProps); pidToBaseDn.put(pid, baseDn); - pidToServiceRegs.put(pid, reg); + // pidToServiceRegs.put(pid, reg); if (log.isDebugEnabled()) log.debug("User directory " + userDirectory.getBaseDn() + " [" + u.getScheme() + "] enabled." + (realm != null ? " " + realm + " realm." : "")); - 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 userAdminregProps = currentState(); + if (isSystemRolesBaseDn(baseDn)) { + // publishes only when system roles are available + Dictionary userAdminregProps = new Hashtable<>(); userAdminregProps.put(NodeConstants.CN, NodeConstants.DEFAULT); userAdminregProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE); - userAdminReg = bc.registerService(UserAdmin.class, this, userAdminregProps); + Activator.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 userAdminregProps = currentState(); +// userAdminregProps.put(NodeConstants.CN, NodeConstants.DEFAULT); +// userAdminregProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE); +// userAdminReg = bc.registerService(UserAdmin.class, this, userAdminregProps); +// } } @Override public void deleted(String pid) { - assert pidToServiceRegs.get(pid) != null; + // assert pidToServiceRegs.get(pid) != null; assert pidToBaseDn.get(pid) != null; - pidToServiceRegs.remove(pid).unregister(); + // pidToServiceRegs.remove(pid).unregister(); LdapName baseDn = pidToBaseDn.remove(pid); removeUserDirectory(baseDn); } @@ -177,9 +189,9 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor protected void postAdd(AbstractUserDirectory userDirectory) { // JTA - TransactionManager tm = tmTracker.getService(); + TransactionManager tm = tmTracker != null ? tmTracker.getService() : null; if (tm == null) - throw new CmsException("A JTA transaction manager must be available."); + throw new IllegalStateException("A JTA transaction manager must be available."); userDirectory.setTransactionManager(tm); // if (tmTracker.getService() instanceof BitronixTransactionManager) // EhCacheXAResourceProducer.registerXAResource(cacheName, userDirectory.getXaResource()); @@ -203,7 +215,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor nodeLc.login(); acceptorCredentials = logInAsAcceptor(nodeLc.getSubject(), servicePrincipal); } catch (LoginException e) { - throw new CmsException("Cannot log in kernel", e); + throw new IllegalStateException("Cannot log in kernel", e); } } } @@ -248,7 +260,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor boolean consistentIp = localhost.getHostAddress().equals(ipfromDns); String kerberosDomain = dnsBrowser.getRecord("_kerberos." + dnsZone, "TXT"); if (consistentIp && kerberosDomain != null && kerberosDomain.equals(realm) && Files.exists(nodeKeyTab)) { - return NodeHttp.DEFAULT_SERVICE + "/" + hostname + "@" + kerberosDomain; + return KernelConstants.DEFAULT_KERBEROS_SERVICE + "/" + hostname + "@" + kerberosDomain; } else return null; } catch (Exception e) { @@ -289,7 +301,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor log.debug("GSS acceptor configured for " + krb5Principal); return serverCredentials; } catch (Exception gsse) { - throw new CmsException("Cannot create acceptor credentials for " + krb5Principal, gsse); + throw new IllegalStateException("Cannot create acceptor credentials for " + krb5Principal, gsse); } }