Author: tmortagne
Date: 2008-02-15 11:24:10 +0100 (Fri, 15 Feb 2008)
New Revision: 7748
Added:
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/plugin/ldap/
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfigTest.java
Modified:
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfig.java
Log:
XWIKI-1079:
* Modify the groups mapping configuration format to be able to store it in
XWikiPreferences (to be able to set differents LDAP for each wikis)
* Add new LDAP parameters to XWikiPreferences class updtate
* Add XWikiLDAPConfig unit tests
Modified:
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
===================================================================
--- xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
2008-02-15 02:48:51 UTC (rev 7747)
+++ xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
2008-02-15 10:24:10 UTC (rev 7748)
@@ -2529,6 +2529,27 @@
needsUpdate |=
bclass.addTextField("documentBundles", "Internationalization
Document Bundles", 60);
+ // LDAP
+ needsUpdate |= bclass.addBooleanField("ldap", "Ldap", "yesno");
+ needsUpdate |= bclass.addTextField("ldap_server", "Ldap server
adress", 60);
+ needsUpdate |= bclass.addNumberField("ldap_port", "Ldap server port",
5, "int");
+ needsUpdate |= bclass.addTextField("ldap_bind_DN", "Ldap login
matching", 60);
+ needsUpdate |= bclass.addTextField("ldap_bind_pass", "Ldap password
matching", 60);
+ needsUpdate |= bclass.addTextField("ldap_user_group", "Ldap group
filter", 60);
+ needsUpdate |= bclass.addTextField("ldap_base_DN", "Ldap base DN", 60);
+ needsUpdate |= bclass.addTextField("ldap_UID_attr", "Ldap base DN",
60);
+ needsUpdate |= bclass.addTextField("ldap_fields_mapping", "Ldap user
fiels mapping", 60);
+ needsUpdate |=
+ bclass.addBooleanField("ldap_update_user", "Update user from
LDAP", "yesno");
+ needsUpdate |= bclass.addTextField("group_mapping", "Ldap groups
mapping", 80);
+ needsUpdate |=
+ bclass.addNumberField("ldap_groupcache_expiration", "LDAP groups
members cache", 10,
+ "long");
+ needsUpdate |=
+ bclass.addStaticListField("ldap_mode_group_sync", "LDAP groups
sync mode",
+ "always|create");
+ needsUpdate |= bclass.addBooleanField("ldap_trylocal", "Try local
login", "yesno");
+
if (((BooleanClass)
bclass.get("showLeftPanels")).getDisplayType().equals("checkbox")) {
((BooleanClass)
bclass.get("showLeftPanels")).setDisplayType("yesno");
((BooleanClass)
bclass.get("showRightPanels")).setDisplayType("yesno");
Modified:
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfig.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfig.java
2008-02-15 02:48:51 UTC (rev 7747)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfig.java
2008-02-15 10:24:10 UTC (rev 7748)
@@ -1,6 +1,5 @@
package com.xpn.xwiki.plugin.ldap;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -20,7 +19,7 @@
/**
* LDAP properties names suffix in xwiki.cfg.
*/
- public static final String CFG_LDAP_SUFFIX = "ldap_";
+ public static final String CFG_LDAP_SUFFIX = "xwiki.authentication.ldap.";
/**
* LDAP port property name in xwiki.cfg.
@@ -28,14 +27,9 @@
public static final String CFG_LDAP_PORT = CFG_LDAP_SUFFIX + "port";
/**
- * LDAP group mapping properties names suffix in xwiki.cfg.
- */
- public static final String CFG_LDAP_GROUPMAPPING_SUFFIX = CFG_LDAP_PORT +
"group_mapping_";
-
- /**
* LDAP properties names suffix in XWikiPreferences.
*/
- public static final String PREF_LDAP_SUFFIX = "xwiki.authentication.ldap.";
+ public static final String PREF_LDAP_SUFFIX = "ldap_";
/**
* LDAP port property name in XWikiPreferences.
@@ -68,26 +62,11 @@
private static XWikiLDAPConfig instance;
/**
- * The mapping between XWiki users and LDAP users.
- */
- private Map groupMappings;
-
- /**
- * The mapping between XWiki users attributes and LDAP users attributes.
- */
- private Map userMappings;
-
- /**
- * The name of users attributes.
- */
- private List userAttributeList = new ArrayList();
-
- /**
* Protected constructor. Use [EMAIL PROTECTED] #getInstance()}.
*/
private XWikiLDAPConfig()
{
-
+
}
/**
@@ -124,8 +103,7 @@
if (param == null || "".equals(param)) {
try {
- param =
- context.getWiki().Param(cfgName);
+ param = context.getWiki().Param(cfgName);
} catch (Exception e) {
// ignore
}
@@ -137,7 +115,7 @@
return param;
}
-
+
/**
* First try to retrieve value from XWiki Preferences and then from
xwiki.cfg Syntax ldap_*name*
* (for XWiki Preferences) will be changed to ldap.*name* for xwiki.cfg.
@@ -174,9 +152,9 @@
int port;
try {
- port = context.getWiki().getXWikiPreferenceAsInt(CFG_LDAP_PORT,
context);
+ port = context.getWiki().getXWikiPreferenceAsInt(PREF_LDAP_PORT,
context);
} catch (Exception e) {
- port = (int) context.getWiki().ParamAsLong(PREF_LDAP_PORT, 0);
+ port = (int) context.getWiki().ParamAsLong(CFG_LDAP_PORT, 0);
}
return port;
@@ -190,36 +168,32 @@
*/
public Map getGroupMappings(XWikiContext context)
{
- if (this.groupMappings == null) {
- this.groupMappings = new HashMap();
+ Map groupMappings = new HashMap();
- int pos = 1;
- String grouplistmapping =
- getLDAPParam(CFG_LDAP_GROUPMAPPING_SUFFIX + pos, "", context);
- while (grouplistmapping != null && grouplistmapping.length() > 0) {
- int splitt = grouplistmapping.indexOf('=');
+ String param = getLDAPParam("ldap_group_mapping", "", context);
- if (splitt < 1) {
- LOG.error("Error parsing ldap_group_mapping attribute in
xwiki.cfg: "
- + grouplistmapping);
- } else {
- String xwikigroup = grouplistmapping.substring(0, splitt);
- String ldapgroup = grouplistmapping.substring(splitt + 1);
+ String[] mappingTable = param.split("\\|");
- this.groupMappings.put(ldapgroup, xwikigroup);
+ for (int i = 0; i < mappingTable.length; ++i) {
+ String mapping = mappingTable[i].trim();
- if (LOG.isDebugEnabled()) {
- LOG.debug("Groupmapping found: " + xwikigroup + " " +
ldapgroup);
- }
- }
+ int splitIndex = mapping.indexOf('=');
- ++pos;
- grouplistmapping =
- getLDAPParam(CFG_LDAP_GROUPMAPPING_SUFFIX + pos, null,
context);
+ if (splitIndex < 1) {
+ LOG.error("Error parsing ldap_group_mapping attribute: " +
mapping);
+ } else {
+ String xwikigroup = mapping.substring(0, splitIndex);
+ String ldapgroup = mapping.substring(splitIndex + 1);
+
+ groupMappings.put(ldapgroup, xwikigroup);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Groupmapping found: " + xwikigroup + " " +
ldapgroup);
+ }
}
}
- return this.groupMappings;
+ return groupMappings;
}
/**
@@ -231,40 +205,34 @@
*/
public Map getUserMappings(List attrListToFill, XWikiContext context)
{
- if (this.userMappings == null) {
- this.userMappings = new HashMap();
+ Map userMappings = new HashMap();
- String ldapFieldMapping = getLDAPParam("ldap_fields_mapping",
null, context);
+ String ldapFieldMapping = getLDAPParam("ldap_fields_mapping", null,
context);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Ready to create user from LDAP with fields " +
ldapFieldMapping);
- }
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Ready to create user from LDAP with fields " +
ldapFieldMapping);
+ }
- if (ldapFieldMapping != null && ldapFieldMapping.length() > 0) {
- String[] fields = ldapFieldMapping.split(USERMAPPING_SEP);
+ if (ldapFieldMapping != null && ldapFieldMapping.length() > 0) {
+ String[] fields = ldapFieldMapping.split(USERMAPPING_SEP);
- for (int j = 0; j < fields.length; j++) {
- String[] field =
fields[j].split(USERMAPPING_XWIKI_LDAP_LINK);
- if (2 == field.length) {
- String xwikiattr = field[0].replace(" ", "");
- String ldapattr = field[1].replace(" ", "");
+ for (int j = 0; j < fields.length; j++) {
+ String[] field = fields[j].split(USERMAPPING_XWIKI_LDAP_LINK);
+ if (2 == field.length) {
+ String xwikiattr = field[0].replace(" ", "");
+ String ldapattr = field[1].replace(" ", "");
- this.userMappings.put(ldapattr, xwikiattr);
+ userMappings.put(ldapattr, xwikiattr);
- this.userAttributeList.add(ldapattr);
- } else {
- LOG.error("Error parsing ldap_fields_mapping attribute
in xwiki.cfg: "
- + fields[j]);
- }
+ attrListToFill.add(ldapattr);
+ } else {
+ LOG.error("Error parsing ldap_fields_mapping attribute in
xwiki.cfg: "
+ + fields[j]);
}
}
}
- if (attrListToFill != null) {
- attrListToFill.addAll(this.userAttributeList);
- }
-
- return this.userMappings;
+ return userMappings;
}
/**
Added:
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfigTest.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfigTest.java
(rev 0)
+++
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfigTest.java
2008-02-15 10:24:10 UTC (rev 7748)
@@ -0,0 +1,215 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package com.xpn.xwiki.plugin.ldap;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+
+import org.jmock.cglib.MockObjectTestCase;
+
+import com.xpn.xwiki.XWiki;
+import com.xpn.xwiki.XWikiConfig;
+import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.XWikiException;
+import com.xpn.xwiki.web.XWikiEngineContext;
+
+/**
+ * Test [EMAIL PROTECTED] XWikiLDAPConfig};
+ *
+ * @version $Id: $
+ */
+public class XWikiLDAPConfigTest extends MockObjectTestCase
+{
+ private XWikiContext prefContext;
+
+ private XWikiContext cfgContext;
+
+ private static final Map PREFERENCES = new HashMap();
+
+ private static final XWikiConfig CONFIG = new XWikiConfig();
+
+ private static final Map RESULT_CFG_USERMAPPING = new Hashtable();
+ private static final Map RESULT_PREF_USERMAPPING = new Hashtable();
+
+ private static final Map RESULT_CFG_GROUPMAPPING = new Hashtable();
+ private static final Map RESULT_PREF_GROUPMAPPING = new Hashtable();
+
+ private static void addProperty(String prefName, String cfgName, String
prefValue,
+ String cfgValue)
+ {
+ PREFERENCES.put(prefName, prefValue);
+ CONFIG.setProperty(cfgName, cfgValue);
+ }
+
+ static {
+ CONFIG.setProperty("xwiki.authentication.ldap.authclass",
+ "com.xpn.xwiki.user.impl.LDAP.LDAPAuthServiceImpl");
+
+ addProperty("ldap", "xwiki.authentication.ldap", "0", "1");
+ addProperty("ldap_server", "xwiki.authentication.ldap.server",
"localhost", "127.0.0.1");
+ addProperty("ldap_port", "xwiki.authentication.ldap.port", "10000",
"11111");
+ addProperty("ldap_check_level",
"xwiki.authentication.ldap.check_level", "0", "1");
+ addProperty("ldap_base_DN", "xwiki.authentication.ldap.base_DN",
"o=sevenSeas",
+ "o=sevenSeas2");
+ addProperty("ldap_bind_DN", "xwiki.authentication.ldap.bind_DN",
+ "cn={0},ou=people,o=sevenSeas", "cn={0},ou=people,o=sevenSeas2");
+ addProperty("ldap_bind_pass", "xwiki.authentication.ldap.bind_pass",
"{1}", "{1}2");
+ addProperty("ldap_UID_attr", "xwiki.authentication.ldap.UID_attr",
"uid", "uid2");
+ addProperty("ldap_groupcache_expiration",
+ "xwiki.authentication.ldap.groupcache_expiration", "10000",
"11111");
+ addProperty("ldap_user_group", "xwiki.authentication.ldap.user_group",
"0", "1");
+ addProperty("ldap_validate_password",
"xwiki.authentication.ldap.validate_password", "1",
+ "0");
+ addProperty("ldap_update_user",
"xwiki.authentication.ldap.update_user", "0", "1");
+ addProperty("ldap_trylocal", "xwiki.authentication.ldap.trylocal",
"0", "1");
+ addProperty("ldap_mode_group_sync",
"xwiki.authentication.ldap.mode_group_sync",
+ "always", "create");
+
+ addProperty("ldap_fields_mapping",
"xwiki.authentication.ldap.fields_mapping",
+ "name=uid,last_name=sn", "name=uid2,last_name=sn2");
+
+ RESULT_PREF_USERMAPPING.put("uid", "name");
+ RESULT_PREF_USERMAPPING.put("sn", "last_name");
+ RESULT_CFG_USERMAPPING.put("uid2", "name");
+ RESULT_CFG_USERMAPPING.put("sn2", "last_name");
+
+ addProperty("ldap_group_mapping",
"xwiki.authentication.ldap.group_mapping",
+ "XWiki.XWikiAdminGroup=cn=HMS
Toto,ou=crews,ou=groups,o=sevenSeas|XWiki.XWikiAdminGroup=cn=HMS
Titi,ou=crews,ou=groups,o=sevenSeas",
+ "XWiki.XWikiAdminGroup=cn=HMS
Toto,ou=crews,ou=groups,o=sevenSeas2|XWiki.XWikiAdminGroup=cn=HMS
Titi,ou=crews,ou=groups,o=sevenSeas2");
+
+ RESULT_PREF_GROUPMAPPING.put("cn=HMS
Toto,ou=crews,ou=groups,o=sevenSeas", "XWiki.XWikiAdminGroup");
+ RESULT_PREF_GROUPMAPPING.put("cn=HMS
Titi,ou=crews,ou=groups,o=sevenSeas", "XWiki.XWikiAdminGroup");
+ RESULT_CFG_GROUPMAPPING.put("cn=HMS
Toto,ou=crews,ou=groups,o=sevenSeas2", "XWiki.XWikiAdminGroup");
+ RESULT_CFG_GROUPMAPPING.put("cn=HMS
Titi,ou=crews,ou=groups,o=sevenSeas2", "XWiki.XWikiAdminGroup");
+ }
+
+ protected void setUp() throws XWikiException
+ {
+ this.prefContext = new XWikiContext();
+
+ new XWiki(new XWikiConfig(), this.prefContext)
+ {
+ public void initXWiki(XWikiConfig config, XWikiContext context,
+ XWikiEngineContext engine_context, boolean noupdate) throws
XWikiException
+ {
+ context.setWiki(this);
+ setConfig(config);
+ }
+
+ public String getXWikiPreference(String prefname, String
default_value,
+ XWikiContext context)
+ {
+ return PREFERENCES.get(prefname).toString();
+ }
+ };
+
+ this.cfgContext = new XWikiContext();
+
+ new XWiki(CONFIG, this.cfgContext)
+ {
+ public void initXWiki(XWikiConfig config, XWikiContext context,
+ XWikiEngineContext engine_context, boolean noupdate) throws
XWikiException
+ {
+ context.setWiki(this);
+ setConfig(config);
+ }
+
+ public String getXWikiPreference(String prefname, String
default_value,
+ XWikiContext context)
+ {
+ return default_value;
+ }
+ };
+ }
+
+ //
///////////////////////////////////////////////////////////////////////////////////////:
+ // Tests
+
+ public void testGetLDAPParam1()
+ {
+ assertEquals("0", XWikiLDAPConfig.getInstance().getLDAPParam("ldap",
+ "xwiki.authentication.ldap", null, prefContext));
+ assertEquals("1", XWikiLDAPConfig.getInstance().getLDAPParam("ldap",
+ "xwiki.authentication.ldap", null, cfgContext));
+ }
+
+ public void testGetLDAPParam2()
+ {
+ assertEquals("localhost",
XWikiLDAPConfig.getInstance().getLDAPParam("ldap_server", null,
+ prefContext));
+ assertEquals("127.0.0.1",
XWikiLDAPConfig.getInstance().getLDAPParam("ldap_server", null,
+ cfgContext));
+ }
+
+ public void testIsLDAPEnabled()
+ {
+ assertEquals(false,
XWikiLDAPConfig.getInstance().isLDAPEnabled(prefContext));
+ assertEquals(true,
XWikiLDAPConfig.getInstance().isLDAPEnabled(cfgContext));
+ }
+
+ public void testGetLDAPPort()
+ {
+ assertEquals(10000,
XWikiLDAPConfig.getInstance().getLDAPPort(prefContext));
+ assertEquals(11111,
XWikiLDAPConfig.getInstance().getLDAPPort(cfgContext));
+ }
+
+ public void testGetGroupMappings()
+ {
+ Map prefMapping =
XWikiLDAPConfig.getInstance().getGroupMappings(prefContext);
+
+ assertEquals(RESULT_PREF_GROUPMAPPING, prefMapping);
+
+ Map cfgMapping =
XWikiLDAPConfig.getInstance().getGroupMappings(cfgContext);
+
+ assertEquals(RESULT_CFG_GROUPMAPPING, cfgMapping);
+ }
+
+ public void testGetUserMappings()
+ {
+ List prefAttrList = new ArrayList();
+
+ Map prefMapping =
XWikiLDAPConfig.getInstance().getUserMappings(prefAttrList, prefContext);
+
+ assertEquals("uid", (String) prefAttrList.get(0));
+ assertEquals("sn", (String) prefAttrList.get(1));
+
+ assertEquals(RESULT_PREF_USERMAPPING, prefMapping);
+
+ // ///
+
+ List cfgAttrList = new ArrayList();
+
+ Map cfgMapping =
XWikiLDAPConfig.getInstance().getUserMappings(cfgAttrList, cfgContext);
+
+ assertEquals("uid2", (String) cfgAttrList.get(0));
+ assertEquals("sn2", (String) cfgAttrList.get(1));
+
+ assertEquals(RESULT_CFG_USERMAPPING, cfgMapping);
+ }
+
+ public void testGetCacheExpiration()
+ {
+ assertEquals(10000,
XWikiLDAPConfig.getInstance().getCacheExpiration(prefContext));
+ assertEquals(11111,
XWikiLDAPConfig.getInstance().getCacheExpiration(cfgContext));
+ }
+}
Property changes on:
xwiki-platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfigTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications