From a256888183f0232384bd7be0c8309b4ce9889823 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Tue, 1 Dec 2015 14:20:06 +0000 Subject: [PATCH] Use dynamic user and group base git-svn-id: https://svn.argeo.org/commons/trunk@8660 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../ui/admin/internal/UiAdminUtils.java | 2 +- .../ui/admin/internal/UserAdminWrapper.java | 10 +++++--- .../ui/admin/internal/commands/NewGroup.java | 25 ++++++++++++++----- .../ui/admin/internal/commands/NewUser.java | 21 +++++++++++++--- 4 files changed, 44 insertions(+), 14 deletions(-) diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UiAdminUtils.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UiAdminUtils.java index 71633072d..45a82c7ba 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UiAdminUtils.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UiAdminUtils.java @@ -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(); diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java index 2cd3eab21..cfad78007 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java @@ -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 getKnownBaseDns(boolean onlyWritable) { - List dns = new ArrayList(); + public Map getKnownBaseDns(boolean onlyWritable) { + Map dns = new HashMap(); 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; diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java index bc90a46d7..5943c0c96 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java @@ -16,13 +16,14 @@ 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 getDns() { + return userAdminWrapper.getKnownBaseDns(true); + } + private String getDn(String cn) { - return "cn=" + cn + ",ou=groups," + baseDnCmb.getText(); + Map dns = getDns(); + String bdn = baseDnCmb.getText(); + if (EclipseUiUtils.notEmpty(bdn)) { + Dictionary 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 dns = userAdminWrapper.getKnownBaseDns(true); + Map 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) { diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java index 6d853c919..16e444dc5 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java @@ -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 getDns() { + return userAdminWrapper.getKnownBaseDns(true); + } + private String getDn(String uid) { - return "uid=" + uid + ",ou=users," + baseDnCmb.getText(); + Map dns = getDns(); + String bdn = baseDnCmb.getText(); + if (EclipseUiUtils.notEmpty(bdn)) { + Dictionary 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 dns = userAdminWrapper.getKnownBaseDns(true); + Map 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); } -- 2.30.2