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;
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;
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;
* 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
// private ServiceRegistration<UserAdmin> userAdminReg;
// JTA
- private final ServiceTracker<TransactionManager, TransactionManager> tmTracker;
+ private final ServiceTracker<WorkControl, WorkControl> tmTracker;
// private final String cacheName = UserDirectory.class.getName();
// GSS API
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<WorkControl> 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;
// OSGi
LdapName baseDn = userDirectory.getBaseDn();
- Dictionary<String, Object> regProps = new Hashtable<>();
+ Hashtable<String, Object> regProps = new Hashtable<>();
regProps.put(Constants.SERVICE_PID, pid);
if (isSystemRolesBaseDn(baseDn))
regProps.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE);
// ServiceRegistration<UserDirectory> 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);
if (isSystemRolesBaseDn(baseDn)) {
// publishes only when system roles are available
Dictionary<String, Object> 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);
}
@Override
protected void addAbstractSystemRoles(Authorization rawAuthorization, Set<String> 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());
}
};
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) {