Use dynamic user and group base
authorBruno Sinou <bsinou@argeo.org>
Tue, 1 Dec 2015 14:20:06 +0000 (14:20 +0000)
committerBruno Sinou <bsinou@argeo.org>
Tue, 1 Dec 2015 14:20:06 +0000 (14:20 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@8660 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UiAdminUtils.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java
org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java

index 71633072d58b61f936b2441dc3733c098ab9fa94..45a82c7ba6869c10915be9c8ed16c553ed0b2ef8 100644 (file)
@@ -92,7 +92,7 @@ public class UiAdminUtils {
                        int i = 0;
                        loop: while (i < rdns.size()) {
                                Rdn currrRdn = rdns.get(i);
-                               if (!"dc".equals(currrRdn.getType()))
+                               if (!LdifName.dc.name().equals(currrRdn.getType()))
                                        break loop;
                                else {
                                        String currVal = (String) currrRdn.getValue();
index 2cd3eab213d620bb6527354216b3c6aa488a2736..cfad78007914d6b24f363aaf5ad7a0150a1770c5 100644 (file)
@@ -2,7 +2,9 @@ package org.argeo.security.ui.admin.internal;
 
 import java.util.ArrayList;
 import java.util.Dictionary;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.transaction.Status;
 import javax.transaction.UserTransaction;
@@ -69,8 +71,8 @@ public class UserAdminWrapper {
                this.userAdminServiceReference = userAdminServiceReference;
        }
 
-       public List<String> getKnownBaseDns(boolean onlyWritable) {
-               List<String> dns = new ArrayList<String>();
+       public Map<String, String> getKnownBaseDns(boolean onlyWritable) {
+               Map<String, String> dns = new HashMap<String, String>();
                for (String uri : userAdminServiceReference.getPropertyKeys()) {
                        if (!uri.startsWith("/"))
                                continue;
@@ -82,11 +84,11 @@ public class UserAdminWrapper {
                                continue;
                        if (baseDn.equalsIgnoreCase(AuthConstants.ROLES_BASEDN))
                                continue;
-                       dns.add(baseDn);
+                       dns.put(baseDn, uri);
                }
                return dns;
        }
-
+       
        /* DEPENDENCY INJECTION */
        public void setUserAdmin(UserAdmin userAdmin) {
                this.userAdmin = userAdmin;
index bc90a46d7a9b77a6dc669046b782cfd5d038e4bc..5943c0c963a28fbb2d1cc6f53255db3b2f4b8d57 100644 (file)
 package org.argeo.security.ui.admin.internal.commands;
 
 import java.util.Dictionary;
-import java.util.List;
+import java.util.Map;
 
 import org.argeo.ArgeoException;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
 import org.argeo.jcr.ArgeoNames;
 import org.argeo.osgi.useradmin.LdifName;
+import org.argeo.osgi.useradmin.UserAdminConf;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
 import org.argeo.security.ui.admin.internal.UiAdminUtils;
 import org.argeo.security.ui.admin.internal.UserAdminWrapper;
@@ -205,20 +206,32 @@ public class NewGroup extends AbstractHandler {
                        }
                }
 
+               private Map<String, String> getDns() {
+                       return userAdminWrapper.getKnownBaseDns(true);
+               }
+
                private String getDn(String cn) {
-                       return "cn=" + cn + ",ou=groups," + baseDnCmb.getText();
+                       Map<String, String> dns = getDns();
+                       String bdn = baseDnCmb.getText();
+                       if (EclipseUiUtils.notEmpty(bdn)) {
+                               Dictionary<String, ?> props = UserAdminConf.uriAsProperties(dns
+                                               .get(bdn));
+                               String dn = LdifName.cn.name()+"=" + cn + ","
+                                               + UserAdminConf.groupBase.getValue(props) + "," + bdn;
+                               return dn;
+                       }
+                       return null;
                }
 
                private void initialiseDnCmb(Combo combo) {
-                       List<String> dns = userAdminWrapper.getKnownBaseDns(true);
+                       Map<String, String> dns = userAdminWrapper.getKnownBaseDns(true);
                        if (dns.isEmpty())
                                throw new ArgeoException(
-                                               "No writable base dn found. Cannot create user");
-                       combo.setItems(dns.toArray(new String[0]));
+                                               "No writable base dn found. Cannot create group");
+                       combo.setItems(dns.keySet().toArray(new String[0]));
                        if (dns.size() == 1)
                                combo.select(0);
                }
-
        }
 
        private Combo createGridLC(Composite parent, String label) {
index 6d853c91946406d3ffa63fc0c04c11c72402f4ce..16e444dc5b91ac686ece74bcf86ae687358e5a2e 100644 (file)
@@ -17,6 +17,7 @@ package org.argeo.security.ui.admin.internal.commands;
 
 import java.util.Dictionary;
 import java.util.List;
+import java.util.Map;
 
 import javax.naming.InvalidNameException;
 import javax.naming.ldap.LdapName;
@@ -27,6 +28,7 @@ import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
 import org.argeo.jcr.ArgeoNames;
 import org.argeo.osgi.useradmin.LdifName;
+import org.argeo.osgi.useradmin.UserAdminConf;
 import org.argeo.security.ui.admin.SecurityAdminPlugin;
 import org.argeo.security.ui.admin.internal.UiAdminUtils;
 import org.argeo.security.ui.admin.internal.UserAdminWrapper;
@@ -267,16 +269,29 @@ public class NewUser extends AbstractHandler {
 
                }
 
+               private Map<String, String> getDns() {
+                       return userAdminWrapper.getKnownBaseDns(true);
+               }
+
                private String getDn(String uid) {
-                       return "uid=" + uid + ",ou=users," + baseDnCmb.getText();
+                       Map<String, String> dns = getDns();
+                       String bdn = baseDnCmb.getText();
+                       if (EclipseUiUtils.notEmpty(bdn)) {
+                               Dictionary<String, ?> props = UserAdminConf.uriAsProperties(dns
+                                               .get(bdn));
+                               String dn = LdifName.uid.name() + "=" + uid + ","
+                                               + UserAdminConf.userBase.getValue(props) + "," + bdn;
+                               return dn;
+                       }
+                       return null;
                }
 
                private void initialiseDnCmb(Combo combo) {
-                       List<String> dns = userAdminWrapper.getKnownBaseDns(true);
+                       Map<String, String> dns = userAdminWrapper.getKnownBaseDns(true);
                        if (dns.isEmpty())
                                throw new ArgeoException(
                                                "No writable base dn found. Cannot create user");
-                       combo.setItems(dns.toArray(new String[0]));
+                       combo.setItems(dns.keySet().toArray(new String[0]));
                        if (dns.size() == 1)
                                combo.select(0);
                }