From 6338d85d3f970dd0eb8845693ddad90a93b99d03 Mon Sep 17 00:00:00 2001 From: mbaudier Date: Mon, 6 Nov 2017 10:07:34 +0100 Subject: [PATCH] Simplify simple user admin configurations --- .../argeo/cms/internal/kernel/FirstInit.java | 14 +++++----- .../cms/internal/kernel/NodeUserAdmin.java | 8 ++++-- .../osgi/useradmin/AbstractUserDirectory.java | 27 ++++++++++++------- .../argeo/osgi/useradmin/LdapUserAdmin.java | 2 +- .../argeo/osgi/useradmin/LdifUserAdmin.java | 10 +++++-- .../argeo/osgi/useradmin/UserAdminConf.java | 3 ++- 6 files changed, 42 insertions(+), 22 deletions(-) diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/FirstInit.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/FirstInit.java index 1c7cb1497..7406b67e4 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/FirstInit.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/FirstInit.java @@ -100,7 +100,8 @@ class FirstInit { String nodeRolesUri = getFrameworkProp(NodeConstants.ROLES_URI); String baseNodeRoleDn = NodeConstants.ROLES_BASEDN; if (nodeRolesUri == null) { - File nodeRolesFile = new File(nodeBaseDir, baseNodeRoleDn + ".ldif"); + nodeRolesUri = baseNodeRoleDn + ".ldif"; + File nodeRolesFile = new File(nodeBaseDir, nodeRolesUri); if (!nodeRolesFile.exists()) try { FileUtils.copyInputStreamToFile(getClass().getResourceAsStream(baseNodeRoleDn + ".ldif"), @@ -108,7 +109,7 @@ class FirstInit { } catch (IOException e) { throw new CmsException("Cannot copy demo resource", e); } - nodeRolesUri = nodeRolesFile.toURI().toString(); + // nodeRolesUri = nodeRolesFile.toURI().toString(); } uris.add(nodeRolesUri); @@ -116,7 +117,8 @@ class FirstInit { String userAdminUris = getFrameworkProp(NodeConstants.USERADMIN_URIS); if (userAdminUris == null) { String demoBaseDn = "dc=example,dc=com"; - File businessRolesFile = new File(nodeBaseDir, demoBaseDn + ".ldif"); + userAdminUris = demoBaseDn + ".ldif"; + File businessRolesFile = new File(nodeBaseDir, userAdminUris); if (!businessRolesFile.exists()) try { FileUtils.copyInputStreamToFile(getClass().getResourceAsStream(demoBaseDn + ".ldif"), @@ -124,7 +126,7 @@ class FirstInit { } catch (IOException e) { throw new CmsException("Cannot copy demo resource", e); } - userAdminUris = businessRolesFile.toURI().toString(); + // userAdminUris = businessRolesFile.toURI().toString(); log.warn("## DEV Using dummy base DN " + demoBaseDn); // TODO downgrade security level } @@ -142,8 +144,8 @@ class FirstInit { if (uri.startsWith("/") || uri.startsWith("./") || uri.startsWith("../")) u = new File(uri).getCanonicalFile().toURI(); else if (!uri.contains("/")) { - u = KernelUtils.getOsgiInstanceUri(KernelConstants.DIR_NODE + '/' + uri); - // u = new URI(nodeBaseDir.toURI() + uri); + // u = KernelUtils.getOsgiInstanceUri(KernelConstants.DIR_NODE + '/' + uri); + u = new URI(uri); } else throw new CmsException("Cannot interpret " + uri + " as an uri"); } else if (u.getScheme().equals("file")) { 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 caadadefa..8410b3958 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 @@ -95,14 +95,18 @@ 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); + : new LdifUserAdmin(u, properties); Object realm = userDirectory.getProperties().get(UserAdminConf.realm.name()); addUserDirectory(userDirectory); diff --git a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java index 081d9e1fa..e4b25ae81 100644 --- a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java +++ b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java @@ -67,22 +67,27 @@ public abstract class AbstractUserDirectory implements UserAdmin, UserDirectory private TransactionManager transactionManager; private WcXaResource xaResource = new WcXaResource(this); - public AbstractUserDirectory(Dictionary props) { + public AbstractUserDirectory(URI uriArg, Dictionary props) { properties = new Hashtable(); for (Enumeration keys = props.keys(); keys.hasMoreElements();) { String key = keys.nextElement(); properties.put(key, props.get(key)); } - String uriStr = UserAdminConf.uri.getValue(properties); - if (uriStr == null) - uri = null; - else - try { - uri = new URI(uriStr); - } catch (URISyntaxException e) { - throw new UserDirectoryException("Badly formatted URI " + uriStr, e); - } + if (uriArg != null) { + uri = uriArg; + // uri from properties is ignored + } else { + String uriStr = UserAdminConf.uri.getValue(properties); + if (uriStr == null) + uri = null; + else + try { + uri = new URI(uriStr); + } catch (URISyntaxException e) { + throw new UserDirectoryException("Badly formatted URI " + uriStr, e); + } + } userObjectClass = UserAdminConf.userObjectClass.getValue(properties); userBase = UserAdminConf.userBase.getValue(properties); @@ -410,6 +415,8 @@ public abstract class AbstractUserDirectory implements UserAdmin, UserDirectory private static boolean readOnlyDefault(URI uri) { if (uri == null) return true; + if (uri.getScheme() == null) + return false;// assume relative file to be writable if (uri.getScheme().equals("file")) { File file = new File(uri); if (file.exists()) diff --git a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/LdapUserAdmin.java b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/LdapUserAdmin.java index 7486e3ecf..494d9c2df 100644 --- a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/LdapUserAdmin.java +++ b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/LdapUserAdmin.java @@ -39,7 +39,7 @@ public class LdapUserAdmin extends AbstractUserDirectory { private InitialLdapContext initialLdapContext = null; public LdapUserAdmin(Dictionary properties) { - super(properties); + super(null, properties); try { Hashtable connEnv = new Hashtable(); connEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); diff --git a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/LdifUserAdmin.java b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/LdifUserAdmin.java index 8ec967b70..3e683b611 100644 --- a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/LdifUserAdmin.java +++ b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/LdifUserAdmin.java @@ -8,6 +8,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.net.URI; import java.util.ArrayList; import java.util.Dictionary; import java.util.HashSet; @@ -41,11 +42,16 @@ public class LdifUserAdmin extends AbstractUserDirectory { } public LdifUserAdmin(Dictionary properties) { - super(properties); + super(null, properties); } + public LdifUserAdmin(URI uri, Dictionary properties) { + super(uri, properties); + } + + @Deprecated public LdifUserAdmin(InputStream in) { - super(new Hashtable()); + super(null, new Hashtable()); load(in); } diff --git a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/UserAdminConf.java b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/UserAdminConf.java index 83cbf795c..19426b6c5 100644 --- a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/UserAdminConf.java +++ b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/UserAdminConf.java @@ -129,6 +129,7 @@ public enum UserAdminConf { scheme = u.getScheme(); } String path = u.getPath(); + // base DN String bDn = path.substring(path.lastIndexOf('/') + 1, path.length()); if (bDn.endsWith(".ldif")) bDn = bDn.substring(0, bDn.length() - ".ldif".length()); @@ -162,7 +163,7 @@ public enum UserAdminConf { res.put(Context.SECURITY_PRINCIPAL, principal); if (credentials != null) res.put(Context.SECURITY_CREDENTIALS, credentials); - if (scheme != null) { + if (scheme != null) {// relative URIs are dealt with externally URI bareUri = new URI(scheme, null, u.getHost(), u.getPort(), scheme.equals("file") ? u.getPath() : null, null, null); res.put(uri.name(), bareUri.toString()); -- 2.30.2