]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeUserAdmin.java
Introduce org.argeo.maintenance
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / kernel / NodeUserAdmin.java
index caadadefa8785054696476473892a90419b5262d..236585e1bd2ca1fb313c48e88f392aaf2c0f1ab8 100644 (file)
@@ -14,6 +14,7 @@ import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 
 import javax.naming.ldap.LdapName;
 import javax.security.auth.Subject;
@@ -28,14 +29,12 @@ import javax.transaction.TransactionManager;
 
 import org.apache.commons.httpclient.auth.AuthPolicy;
 import org.apache.commons.httpclient.auth.CredentialsProvider;
-import org.apache.commons.httpclient.cookie.CookiePolicy;
 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.cms.CmsException;
-import org.argeo.cms.internal.http.NodeHttp;
 import org.argeo.cms.internal.http.client.HttpCredentialProvider;
 import org.argeo.cms.internal.http.client.SpnegoAuthScheme;
 import org.argeo.naming.DnsBrowser;
@@ -44,6 +43,7 @@ import org.argeo.osgi.useradmin.AbstractUserDirectory;
 import org.argeo.osgi.useradmin.AggregatingUserAdmin;
 import org.argeo.osgi.useradmin.LdapUserAdmin;
 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.ietf.jgss.GSSCredential;
@@ -57,6 +57,7 @@ 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;
 import org.osgi.service.useradmin.UserAdmin;
 import org.osgi.util.tracker.ServiceTracker;
 
@@ -84,6 +85,8 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
        private Path nodeKeyTab = KernelUtils.getOsgiInstancePath(KernelConstants.NODE_KEY_TAB_PATH);
        private GSSCredential acceptorCredentials;
 
+       private boolean singleUser = false;
+
        public NodeUserAdmin(String systemRolesBaseDn) {
                super(systemRolesBaseDn);
                tmTracker = new ServiceTracker<>(bc, TransactionManager.class, null);
@@ -95,14 +98,27 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
                String uri = (String) properties.get(UserAdminConf.uri.name());
                URI u;
                try {
-                       u = new URI(uri);
+                       if (uri == null) {
+                               String baseDn = (String) properties.get(UserAdminConf.baseDn.name());
+                               u = KernelUtils.getOsgiInstanceUri(KernelConstants.DIR_NODE + '/' + baseDn + ".ldif");
+                       } else
+                               u = new URI(uri);
                } catch (URISyntaxException e) {
                        throw new CmsException("Badly formatted URI " + uri, e);
                }
 
                // Create
-               AbstractUserDirectory userDirectory = u.getScheme().equals("ldap") ? new LdapUserAdmin(properties)
-                               : new LdifUserAdmin(properties);
+               AbstractUserDirectory userDirectory;
+               if (UserAdminConf.SCHEME_LDAP.equals(u.getScheme())) {
+                       userDirectory = new LdapUserAdmin(properties);
+               } else if (UserAdminConf.SCHEME_FILE.equals(u.getScheme())) {
+                       userDirectory = new LdifUserAdmin(u, properties);
+               } else if (UserAdminConf.SCHEME_OS.equals(u.getScheme())) {
+                       userDirectory = new OsUserDirectory(u, properties);
+                       singleUser = true;
+               } else {
+                       throw new CmsException("Unsupported scheme " + u.getScheme());
+               }
                Object realm = userDirectory.getProperties().get(UserAdminConf.realm.name());
                addUserDirectory(userDirectory);
 
@@ -146,6 +162,15 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
                return "Node User Admin";
        }
 
+       @Override
+       protected void addAbstractSystemRoles(Authorization rawAuthorization, Set<String> sysRoles) {
+               if (rawAuthorization.getName() == null) {
+                       sysRoles.add(NodeConstants.ROLE_ANONYMOUS);
+               } else {
+                       sysRoles.add(NodeConstants.ROLE_USER);
+               }
+       }
+
        protected void postAdd(AbstractUserDirectory userDirectory) {
                // JTA
                TransactionManager tm = tmTracker.getService();
@@ -187,7 +212,7 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
                        // schemes.add(AuthPolicy.BASIC);// incompatible with Basic
                        params.setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, schemes);
                        params.setParameter(CredentialsProvider.PROVIDER, new HttpCredentialProvider());
-                       params.setParameter(HttpMethodParams.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
+                       params.setParameter(HttpMethodParams.COOKIE_POLICY, KernelConstants.COOKIE_POLICY_BROWSER_COMPATIBILITY);
                        // params.setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
                }
        }
@@ -268,6 +293,10 @@ class NodeUserAdmin extends AggregatingUserAdmin implements ManagedServiceFactor
                return acceptorCredentials;
        }
 
+       public boolean isSingleUser() {
+               return singleUser;
+       }
+
        public final static Oid KERBEROS_OID;
        static {
                try {