From: <aca...@us...> - 2007-08-06 22:08:38
|
Revision: 701 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=701&view=rev Author: acarboni Date: 2007-08-06 15:08:40 -0700 (Mon, 06 Aug 2007) Log Message: ----------- Added LDAP authentication Modified Paths: -------------- trunk/docs/changes.txt trunk/docs/lyx/server-reference.lyx trunk/gast/setup/db/Settings.ddf trunk/src/org/fao/geonet/kernel/setting/SettingManager.java trunk/src/org/fao/geonet/services/config/Set.java trunk/src/org/fao/geonet/services/login/Login.java trunk/web/geonetwork/loc/en/xml/config.xml trunk/web/geonetwork/scripts/config/model.js trunk/web/geonetwork/scripts/config/view.js trunk/web/geonetwork/xsl/xml/config.xsl Added Paths: ----------- trunk/src/org/fao/geonet/services/login/LDAPContext.java trunk/src/org/fao/geonet/services/login/LDAPUtil.java Modified: trunk/docs/changes.txt =================================================================== --- trunk/docs/changes.txt 2007-08-06 21:57:34 UTC (rev 700) +++ trunk/docs/changes.txt 2007-08-06 22:08:40 UTC (rev 701) @@ -1,5 +1,23 @@ ================================================================================ === +=== GeoNetwork 2.1.0 RC : List of changes +=== +================================================================================ + +- Added simple LDAP authentication + +-------------------------------------------------------------------------------- +--- Changes +-------------------------------------------------------------------------------- + +-------------------------------------------------------------------------------- +--- Bugs fixed +-------------------------------------------------------------------------------- + +- Fixed start-geonetwork.bat script + +================================================================================ +=== === GeoNetwork 2.1.0 beta5 : List of changes === ================================================================================ Modified: trunk/docs/lyx/server-reference.lyx =================================================================== --- trunk/docs/lyx/server-reference.lyx 2007-08-06 21:57:34 UTC (rev 700) +++ trunk/docs/lyx/server-reference.lyx 2007-08-06 22:08:40 UTC (rev 701) @@ -10641,8 +10641,10 @@ \end_deeper \begin_layout Itemize +\family sans \series bold removedMetadata +\family default \series default : This container contains settings about removed metadata. \end_layout @@ -10650,14 +10652,217 @@ \begin_deeper \begin_layout Itemize +\family sans \series bold dir +\family default \series default : This folder will contain removed metadata in MEF format. It gets populated when the user deletes a metadata using the web interface. \end_layout \end_deeper +\begin_layout Itemize + +\family sans +\series bold +ldap +\family default +\series default + : Parameters for LDAP authentication +\end_layout + +\begin_deeper +\begin_layout Itemize + +\family sans +\series bold +use +\family default +\series default + ( +\emph on +boolean +\emph default +) +\end_layout + +\begin_layout Itemize + +\family sans +\series bold +host +\family default +\series default + ( +\emph on +string +\emph default +) +\end_layout + +\begin_layout Itemize + +\family sans +\series bold +port +\family default +\series default + ( +\emph on +integer +\emph default +) +\end_layout + +\begin_layout Itemize + +\family sans +\series bold +defaultProfile +\family default +\series default + ( +\emph on +string +\emph default +) : Default GeoNetwork's profile to use when the +\family sans +profile +\family default + user attribute does not exist. +\end_layout + +\begin_layout Itemize + +\family sans +\series bold +login +\end_layout + +\begin_deeper +\begin_layout Itemize + +\family sans +\series bold +userDN +\family default +\series default + ( +\emph on +string +\emph default +) +\end_layout + +\begin_layout Itemize + +\family sans +\series bold +password +\family default +\series default + ( +\emph on +string +\emph default +) +\end_layout + +\end_deeper +\begin_layout Itemize + +\family sans +\series bold +distinguishedNames +\end_layout + +\begin_deeper +\begin_layout Itemize + +\family sans +\series bold +base +\family default +\series default + ( +\emph on +string +\emph default +) +\end_layout + +\begin_layout Itemize + +\family sans +\series bold +users +\family default +\series default + ( +\emph on +string +\emph default +) +\end_layout + +\end_deeper +\begin_layout Itemize + +\family sans +\series bold +userAttribs +\family default +\series default + : A container for user attributes present into the LDAP directory that + must be retrieved and used to create the user in GeoNetwork. +\end_layout + +\begin_deeper +\begin_layout Itemize + +\family sans +\series bold +name +\family default +\series default + ( +\emph on +string +\emph default +) +\end_layout + +\begin_layout Itemize + +\family sans +\series bold +password +\family default +\series default + ( +\emph on +string +\emph default +) +\end_layout + +\begin_layout Itemize + +\family sans +\series bold +profile +\family default +\series default + ( +\emph on +string +\emph default +) +\end_layout + +\end_deeper +\end_deeper \begin_layout Section Harvesting nodes \end_layout Modified: trunk/gast/setup/db/Settings.ddf =================================================================== --- trunk/gast/setup/db/Settings.ddf 2007-08-06 21:57:34 UTC (rev 700) +++ trunk/gast/setup/db/Settings.ddf 2007-08-06 22:08:40 UTC (rev 701) @@ -48,3 +48,21 @@ 70 1 removedMetadata 71 70 dir WEB-INF/removed + +80 1 ldap +81 80 use false +82 80 host +83 80 port +84 80 defaultProfile RegisteredUser +85 80 login +86 80 distinguishedNames +87 80 userAttribs + +90 85 userDN cn=Manager +91 85 password +100 86 base dc=fao,dc=org +101 86 users ou=people + +110 87 name cn +111 87 password userPassword +112 87 profile profile Modified: trunk/src/org/fao/geonet/kernel/setting/SettingManager.java =================================================================== --- trunk/src/org/fao/geonet/kernel/setting/SettingManager.java 2007-08-06 21:57:34 UTC (rev 700) +++ trunk/src/org/fao/geonet/kernel/setting/SettingManager.java 2007-08-06 22:08:40 UTC (rev 701) @@ -314,6 +314,30 @@ } //--------------------------------------------------------------------------- + + public boolean getValueAsBool(String path) + { + String value = getValue(path); + + if (value == null) + return false; + + return value.equals("true"); + } + + //--------------------------------------------------------------------------- + + public Integer getValueAsInt(String path) + { + String value = getValue(path); + + if (value == null || value.trim().length() == 0) + return null; + + return new Integer(value); + } + + //--------------------------------------------------------------------------- //--- //--- Private methods //--- Modified: trunk/src/org/fao/geonet/services/config/Set.java =================================================================== --- trunk/src/org/fao/geonet/services/config/Set.java 2007-08-06 21:57:34 UTC (rev 700) +++ trunk/src/org/fao/geonet/services/config/Set.java 2007-08-06 22:08:40 UTC (rev 701) @@ -86,19 +86,37 @@ { new ConfigEntry(ConfigEntry.Type.STRING, true, "site/name", "system/site/name"), new ConfigEntry(ConfigEntry.Type.STRING, false, "site/organization", "system/site/organization"), + new ConfigEntry(ConfigEntry.Type.STRING, true, "server/host", "system/server/host"), new ConfigEntry(ConfigEntry.Type.INT, false, "server/port", "system/server/port"), + new ConfigEntry(ConfigEntry.Type.STRING, true, "intranet/network", "system/intranet/network"), new ConfigEntry(ConfigEntry.Type.STRING, true, "intranet/netmask", "system/intranet/netmask"), + new ConfigEntry(ConfigEntry.Type.BOOL, true, "z3950/enable", "system/z3950/enable"), new ConfigEntry(ConfigEntry.Type.INT, false, "z3950/port", "system/z3950/port"), + new ConfigEntry(ConfigEntry.Type.BOOL, true, "proxy/use", "system/proxy/use"), new ConfigEntry(ConfigEntry.Type.STRING, false, "proxy/host", "system/proxy/host"), new ConfigEntry(ConfigEntry.Type.INT, false, "proxy/port", "system/proxy/port"), + new ConfigEntry(ConfigEntry.Type.STRING, false, "feedback/email", "system/feedback/email"), new ConfigEntry(ConfigEntry.Type.STRING, false, "feedback/mailServer/host", "system/feedback/mailServer/host"), new ConfigEntry(ConfigEntry.Type.INT, false, "feedback/mailServer/port", "system/feedback/mailServer/port"), - new ConfigEntry(ConfigEntry.Type.STRING, true, "removedMetadata/dir", "system/removedMetadata/dir") + + new ConfigEntry(ConfigEntry.Type.STRING, true, "removedMetadata/dir", "system/removedMetadata/dir"), + + new ConfigEntry(ConfigEntry.Type.BOOL, true, "ldap/use", "system/ldap/use"), + new ConfigEntry(ConfigEntry.Type.STRING, false, "ldap/host", "system/ldap/host"), + new ConfigEntry(ConfigEntry.Type.INT, false, "ldap/port", "system/ldap/port"), + new ConfigEntry(ConfigEntry.Type.STRING, true, "ldap/defaultProfile", "system/ldap/defaultProfile"), + new ConfigEntry(ConfigEntry.Type.STRING, true, "ldap/login/userDN", "system/ldap/login/userDN"), + new ConfigEntry(ConfigEntry.Type.STRING, false, "ldap/login/password", "system/ldap/login/password"), + new ConfigEntry(ConfigEntry.Type.STRING, true, "ldap/distinguishedNames/base", "system/ldap/distinguishedNames/base"), + new ConfigEntry(ConfigEntry.Type.STRING, true, "ldap/distinguishedNames/users","system/ldap/distinguishedNames/users"), + new ConfigEntry(ConfigEntry.Type.STRING, true, "ldap/userAttribs/name", "system/ldap/userAttribs/name"), + new ConfigEntry(ConfigEntry.Type.STRING, true, "ldap/userAttribs/password", "system/ldap/userAttribs/password"), + new ConfigEntry(ConfigEntry.Type.STRING, false, "ldap/userAttribs/profile", "system/ldap/userAttribs/profile") }; } Added: trunk/src/org/fao/geonet/services/login/LDAPContext.java =================================================================== --- trunk/src/org/fao/geonet/services/login/LDAPContext.java (rev 0) +++ trunk/src/org/fao/geonet/services/login/LDAPContext.java 2007-08-06 22:08:40 UTC (rev 701) @@ -0,0 +1,197 @@ +//============================================================================= +//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the +//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) +//=== and United Nations Environment Programme (UNEP) +//=== +//=== This program is free software; you can redistribute it and/or modify +//=== it under the terms of the GNU General Public License as published by +//=== the Free Software Foundation; either version 2 of the License, or (at +//=== your option) any later version. +//=== +//=== This program 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 +//=== General Public License for more details. +//=== +//=== You should have received a copy of the GNU General Public License +//=== along with this program; if not, write to the Free Software +//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +//=== +//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, +//=== Rome - Italy. email: geo...@os... +//============================================================================== + +package org.fao.geonet.services.login; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import javax.naming.NamingException; +import javax.naming.directory.DirContext; +import jeeves.utils.Log; +import org.fao.geonet.constants.Geonet; +import org.fao.geonet.kernel.setting.SettingManager; + +//============================================================================= + +class LDAPContext +{ + //-------------------------------------------------------------------------- + //--- + //--- Constructor + //--- + //-------------------------------------------------------------------------- + + public LDAPContext(SettingManager sm) + { + String prefix = "system/ldap"; + + use = sm.getValueAsBool(prefix +"/use"); + host = sm.getValue (prefix +"/host"); + port = sm.getValueAsInt (prefix +"/port"); + defProfile = sm.getValue (prefix +"/defaultProfile"); + loginUserDN = sm.getValue (prefix +"/login/userDN"); + loginPassword = sm.getValue (prefix +"/login/password"); + baseDN = sm.getValue (prefix +"/distinguishedNames/base"); + usersDN = sm.getValue (prefix +"/distinguishedNames/users"); + nameAttr = sm.getValue (prefix +"/userAttribs/name"); + passwordAttr = sm.getValue (prefix +"/userAttribs/password"); + profileAttr = sm.getValue (prefix +"/userAttribs/profile"); + + if (profileAttr.trim().length() == 0) + profileAttr = null; + + //--- init set of allowed profiles + + profiles.add("Reviewer"); + profiles.add("Editor"); + profiles.add("RegisteredUser"); + } + + //-------------------------------------------------------------------------- + //--- + //--- API methods + //--- + //-------------------------------------------------------------------------- + + public boolean isInUse() { return use; } + + //-------------------------------------------------------------------------- + + public LDAPInfo lookUp(String username, String password) + { + try + { + DirContext dc = LDAPUtil.openContext(getUrl(), loginUserDN, loginPassword); + String path = "uid="+ username +","+ usersDN +","+ baseDN; + + Map<String, ? extends List<Object>> attr = LDAPUtil.getNodeInfo(dc, path); + dc.close(); + + if (attr == null) + { + Log.info(Geonet.LDAP, "Username not found :"+ username); + return null; + } + else + { + LDAPInfo info = new LDAPInfo(); + + info.username = username; + info.password = password; + info.name = get(attr, nameAttr); + info.profile = (profileAttr == null) + ? defProfile + : get(attr, profileAttr); + + if (!password.equals(get(attr, passwordAttr))) + { + Log.info(Geonet.LDAP, "Username found but bad password :"+ username); + return null; + } + + if (!profiles.contains(info.profile)) + { + Log.info(Geonet.LDAP, "Skipping user with unknown profile"); + Log.info(Geonet.LDAP, " (C) Username :"+ info.username); + Log.info(Geonet.LDAP, " (C) Profile :"+ info.profile); + return null; + } + + return info; + } + } + catch(NamingException e) + { + Log.info(Geonet.LDAP, "Raised exception during LDAP access"); + Log.info(Geonet.LDAP, " (C) Message :"+ e.getMessage()); + return null; + } + } + + //-------------------------------------------------------------------------- + //--- + //--- Private methods + //--- + //-------------------------------------------------------------------------- + + private String getUrl() + { + return "ldap://"+ host +":" + ((port != null) ? port : "389"); + } + + //-------------------------------------------------------------------------- + + private String get(Map<String, ? extends List<Object>> attr, String name) + { + List<Object> values = attr.get(name); + + if (values == null) + { + Log.debug(Geonet.LDAP, "Attribute '"+ name +"' does not exist"); + return null; + } + + Object obj = values.get(0); + + if (obj != null) + Log.debug(Geonet.LDAP, "Attribute '"+ name +"' is of type : "+obj.getClass().getSimpleName()); + else + Log.debug(Geonet.LDAP, "Attribute '"+ name +"' is null"); + + return (obj == null) ? null : obj.toString(); + } + + //-------------------------------------------------------------------------- + //--- + //--- Variables + //--- + //-------------------------------------------------------------------------- + + private boolean use; + private String host; + private Integer port; + private String defProfile; + private String loginUserDN; + private String loginPassword; + private String baseDN; + private String usersDN; + private String nameAttr; + private String passwordAttr; + private String profileAttr; + + private HashSet<String> profiles = new HashSet<String>(); +} + +//============================================================================= + +class LDAPInfo +{ + public String username; + public String password; + public String profile; + public String name; +} + +//============================================================================= + Added: trunk/src/org/fao/geonet/services/login/LDAPUtil.java =================================================================== --- trunk/src/org/fao/geonet/services/login/LDAPUtil.java (rev 0) +++ trunk/src/org/fao/geonet/services/login/LDAPUtil.java 2007-08-06 22:08:40 UTC (rev 701) @@ -0,0 +1,130 @@ +//============================================================================= +//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the +//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) +//=== and United Nations Environment Programme (UNEP) +//=== +//=== This program is free software; you can redistribute it and/or modify +//=== it under the terms of the GNU General Public License as published by +//=== the Free Software Foundation; either version 2 of the License, or (at +//=== your option) any later version. +//=== +//=== This program 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 +//=== General Public License for more details. +//=== +//=== You should have received a copy of the GNU General Public License +//=== along with this program; if not, write to the Free Software +//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +//=== +//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, +//=== Rome - Italy. email: geo...@os... +//============================================================================== + +package org.fao.geonet.services.login; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; +import javax.naming.Context; +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; +import javax.naming.directory.Attribute; +import javax.naming.directory.Attributes; +import javax.naming.directory.DirContext; +import javax.naming.directory.InitialDirContext; +import jeeves.utils.Log; +import org.fao.geonet.constants.Geonet; + +//============================================================================= + +public class LDAPUtil +{ + //-------------------------------------------------------------------------- + //--- + //--- API methods + //--- + //-------------------------------------------------------------------------- + + public static DirContext openContext(String url, String username, String password) throws NamingException + { + try + { + Log.info(Geonet.LDAP, "Opening LDAP context on :"+ url); + + Hashtable<String,String> env = new Hashtable<String,String>(); + + env.put(Context.SECURITY_PRINCIPAL, username); + env.put(Context.SECURITY_CREDENTIALS, password); + + DirContext dc = new InitialDirContext(env); + + return (DirContext) dc.lookup(url); + } + catch(NamingException e) + { + Log.warning(Geonet.LDAP, "Cannot open context on : "+ url); + Log.warning(Geonet.LDAP, " (C) Reason : "+ e.getMessage()); + throw e; + } + } + + //-------------------------------------------------------------------------- + + public static Map<String, ? extends List<Object>> getNodeInfo(DirContext dc, + String dname) throws NamingException + { + try + { + Log.info(Geonet.LDAP, "Retrieving information for :"+ dname); + + //--- retrieve all attributes + + Attributes attrs = dc.getAttributes(dname); + + NamingEnumeration<? extends Attribute> en = attrs.getAll(); + + Map<String, ArrayList<Object>> info = new HashMap<String, ArrayList<Object>>(); + + //--- scan all attributes + + while (en.hasMore()) + { + Attribute attr = en.next(); + + String id = attr.getID(); + + //--- retrieve attrib's list of values (create it if the case) + + ArrayList<Object> values = info.get(id); + + if (values == null) + { + values = new ArrayList<Object>(); + info.put(id, values); + } + + //--- loop on all attribute's values + + NamingEnumeration valueEnum = attr.getAll(); + + while (valueEnum.hasMore()) + values.add(valueEnum.next()); + } + + return info; + } + catch(NamingException e) + { + Log.warning(Geonet.LDAP, "Cannot retrieve node info for : "+ dname); + Log.warning(Geonet.LDAP, " (C) Reason : "+ e.getMessage()); + throw e; + } + } +} + +//============================================================================= + + Modified: trunk/src/org/fao/geonet/services/login/Login.java =================================================================== --- trunk/src/org/fao/geonet/services/login/Login.java 2007-08-06 21:57:34 UTC (rev 700) +++ trunk/src/org/fao/geonet/services/login/Login.java 2007-08-06 22:08:40 UTC (rev 701) @@ -23,16 +23,18 @@ package org.fao.geonet.services.login; +import java.sql.SQLException; import java.util.List; -import java.util.Vector; import jeeves.exceptions.UserLoginEx; import jeeves.interfaces.Service; import jeeves.resources.dbms.Dbms; import jeeves.server.ServiceConfig; import jeeves.server.context.ServiceContext; import jeeves.utils.Util; +import org.fao.geonet.GeonetContext; import org.fao.geonet.constants.Geonet; import org.fao.geonet.constants.Params; +import org.fao.geonet.kernel.setting.SettingManager; import org.jdom.Element; //============================================================================= @@ -58,37 +60,85 @@ public Element exec(Element params, ServiceContext context) throws Exception { - String user = Util.getParam(params, Params.USERNAME); - String pass = Util.getParam(params, Params.PASSWORD); + String username = Util.getParam(params, Params.USERNAME); + String password = Util.getParam(params, Params.PASSWORD); + GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME); + SettingManager sm = gc.getSettingManager(); + + Dbms dbms = (Dbms) context.getResourceManager().open(Geonet.Res.MAIN_DB); + + LDAPContext lc = new LDAPContext(sm); + + if (!isAdmin(dbms, username) && lc.isInUse()) + { + LDAPInfo info = lc.lookUp(username, password); + + if (info == null) + throw new UserLoginEx(username); + + updateUser(context, dbms, info); + } + //--- attempt to load user from db - Dbms dbms = (Dbms) context.getResourceManager().open(Geonet.Res.MAIN_DB); String query = "SELECT * FROM Users WHERE username = ? AND password = ?"; - Element elUser = dbms.select(query, user,Util.scramble(pass)); + List list = dbms.select(query, username, Util.scramble(password)).getChildren(); - List list = elUser.getChildren(); - if (list.size() == 0) - throw new UserLoginEx(user); - else - { - elUser = (Element) list.get(0); + throw new UserLoginEx(username); - String sId = elUser.getChildText(Geonet.Elem.ID); - String sName = elUser.getChildText(Geonet.Elem.NAME); - String sSurname = elUser.getChildText(Geonet.Elem.SURNAME); - String sProfile = elUser.getChildText(Geonet.Elem.PROFILE); + Element user = (Element) list.get(0); - context.info("User '" + user + "' logged in."); + String sId = user.getChildText(Geonet.Elem.ID); + String sName = user.getChildText(Geonet.Elem.NAME); + String sSurname = user.getChildText(Geonet.Elem.SURNAME); + String sProfile = user.getChildText(Geonet.Elem.PROFILE); - context.getUserSession().authenticate(sId, user, sName, sSurname, sProfile); - } + context.info("User '" + user + "' logged in."); + context.getUserSession().authenticate(sId, username, sName, sSurname, sProfile); return new Element("ok"); } + + //-------------------------------------------------------------------------- + + private boolean isAdmin(Dbms dbms, String username) throws SQLException + { + String query = "SELECT id FROM Users WHERE username=? AND profile=?"; + + List list = dbms.select(query, username, "Administrator").getChildren(); + + return (list.size() != 0); + } + + //-------------------------------------------------------------------------- + + private void updateUser(ServiceContext context, Dbms dbms, LDAPInfo info) throws SQLException + { + //--- update user information into the database + + String query = "UPDATE Users SET password=?, name=?, profile=? WHERE username=?"; + + int res = dbms.execute(query, info.password, info.name, info.profile, info.username); + + //--- if the user was not found --> add it + + if (res == 0) + { + int id = context.getSerialFactory().getSerial(dbms, "Users"); + + query = "INSERT INTO Users(id, username, password, surname, name, profile) "+ + "VALUES(?,?,?,?,?,?)"; + + dbms.execute(query, id, info.username, info.password, "(LDAP)", info.name, info.profile); + } + + dbms.commit(); + } } //============================================================================= + Modified: trunk/web/geonetwork/loc/en/xml/config.xml =================================================================== --- trunk/web/geonetwork/loc/en/xml/config.xml 2007-08-06 21:57:34 UTC (rev 700) +++ trunk/web/geonetwork/loc/en/xml/config.xml 2007-08-06 22:08:40 UTC (rev 701) @@ -27,6 +27,18 @@ <removedMetadata>Removed metadata</removedMetadata> <dir>Directory</dir> + <ldap>LDAP Authentication</ldap> + <defProfile>Default profile</defProfile> + <login>Login</login> + <userDN>User DN</userDN> + <distNames>Distinguished names</distNames> + <baseDN>Base</baseDN> + <usersDN>Users</usersDN> + <userAttribs>User's attributes</userAttribs> + <name>Name</name> + <password>Password</password> + <profile>Profile</profile> + <!-- Buttons --> <save>Save</save> Modified: trunk/web/geonetwork/scripts/config/model.js =================================================================== --- trunk/web/geonetwork/scripts/config/model.js 2007-08-06 21:57:34 UTC (rev 700) +++ trunk/web/geonetwork/scripts/config/model.js 2007-08-06 22:08:40 UTC (rev 701) @@ -42,7 +42,19 @@ FEEDBACK_EMAIL : xml.evalXPath(node, 'feedback/email'), FEEDBACK_MAIL_HOST: xml.evalXPath(node, 'feedback/mailServer/host'), FEEDBACK_MAIL_PORT: xml.evalXPath(node, 'feedback/mailServer/port'), - REMOVEDMD_DIR : xml.evalXPath(node, 'removedMetadata/dir') + REMOVEDMD_DIR : xml.evalXPath(node, 'removedMetadata/dir'), + + LDAP_USE : xml.evalXPath(node, 'ldap/use'), + LDAP_HOST : xml.evalXPath(node, 'ldap/host'), + LDAP_PORT : xml.evalXPath(node, 'ldap/port'), + LDAP_DEF_PROFILE : xml.evalXPath(node, 'ldap/defaultProfile'), + LDAP_USERDN : xml.evalXPath(node, 'ldap/login/userDN'), + LDAP_PASSWORD : xml.evalXPath(node, 'ldap/login/password'), + LDAP_DN_BASE : xml.evalXPath(node, 'ldap/distinguishedNames/base'), + LDAP_DN_USERS : xml.evalXPath(node, 'ldap/distinguishedNames/users'), + LDAP_ATTR_NAME : xml.evalXPath(node, 'ldap/userAttribs/name'), + LDAP_ATTR_PASSWORD: xml.evalXPath(node, 'ldap/userAttribs/password'), + LDAP_ATTR_PROFILE : xml.evalXPath(node, 'ldap/userAttribs/profile') } this.getConfigCB(data); @@ -110,6 +122,25 @@ ' <removedMetadata>'+ ' <dir>{REMOVEDMD_DIR}</dir>'+ ' </removedMetadata>'+ +' <ldap>'+ +' <use>{LDAP_USE}</use>'+ +' <host>{LDAP_HOST}</host>'+ +' <port>{LDAP_PORT}</port>'+ +' <defaultProfile>{LDAP_DEF_PROFILE}</defaultProfile>'+ +' <login>'+ +' <userDN>{LDAP_USERDN}</userDN>'+ +' <password>{LDAP_PASSWORD}</password>'+ +' </login>'+ +' <distinguishedNames>'+ +' <base>{LDAP_DN_BASE}</base>'+ +' <users>{LDAP_DN_USERS}</users>'+ +' </distinguishedNames>'+ +' <userAttribs>'+ +' <name>{LDAP_ATTR_NAME}</name>'+ +' <password>{LDAP_ATTR_PASSWORD}</password>'+ +' <profile>{LDAP_ATTR_PROFILE}</profile>'+ +' </userAttribs>'+ +' </ldap>'+ '</config>'; //===================================================================================== Modified: trunk/web/geonetwork/scripts/config/view.js =================================================================== --- trunk/web/geonetwork/scripts/config/view.js 2007-08-06 21:57:34 UTC (rev 700) +++ trunk/web/geonetwork/scripts/config/view.js 2007-08-06 22:08:40 UTC (rev 701) @@ -33,11 +33,21 @@ { id:'proxy.host', type:'hostname' }, { id:'proxy.port', type:'integer', minValue:21, maxValue:65535, empty:true }, - { id:'removedMd.dir', type:'length', minSize :0, maxSize :200 } + { id:'removedMd.dir', type:'length', minSize :0, maxSize :200 }, + + { id:'ldap.host', type:'length', minSize :1, maxSize :200 }, + { id:'ldap.host', type:'hostname' }, + { id:'ldap.port', type:'integer', minValue:80, maxValue:65535, empty:true }, + { id:'ldap.userDN', type:'length', minSize :1, maxSize :200 }, + { id:'ldap.baseDN', type:'length', minSize :1, maxSize :200 }, + { id:'ldap.usersDN', type:'length', minSize :1, maxSize :200 }, + { id:'ldap.nameAttr', type:'length', minSize :1, maxSize :200 }, + { id:'ldap.passwordAttr', type:'length', minSize :1, maxSize :200 } ]); this.z3950Shower = new Shower('z3950.enable', 'z3950.subpanel'); this.proxyShower = new Shower('proxy.use', 'proxy.subpanel'); + this.ldapShower = new Shower('ldap.use', 'ldap.subpanel'); } //===================================================================================== @@ -72,8 +82,21 @@ $('removedMd.dir').value = data['REMOVEDMD_DIR']; + $('ldap.use') .checked = data['LDAP_USE'] == 'true'; + $('ldap.host') .value = data['LDAP_HOST']; + $('ldap.port') .value = data['LDAP_PORT']; + $('ldap.defProfile') .value = data['LDAP_DEF_PROFILE']; + $('ldap.userDN') .value = data['LDAP_USERDN']; + $('ldap.password') .value = data['LDAP_PASSWORD']; + $('ldap.baseDN') .value = data['LDAP_DN_BASE']; + $('ldap.usersDN') .value = data['LDAP_DN_USERS']; + $('ldap.nameAttr') .value = data['LDAP_ATTR_NAME']; + $('ldap.passwordAttr').value = data['LDAP_ATTR_PASSWORD']; + $('ldap.profileAttr') .value = data['LDAP_ATTR_PROFILE']; + this.z3950Shower.update(); this.proxyShower.update(); + this.ldapShower.update(); } //===================================================================================== @@ -108,7 +131,19 @@ FEEDBACK_MAIL_HOST : $('feedback.mail.host').value, FEEDBACK_MAIL_PORT : $('feedback.mail.port').value, - REMOVEDMD_DIR : $('removedMd.dir').value + REMOVEDMD_DIR : $('removedMd.dir').value, + + LDAP_USE : $('ldap.use').checked, + LDAP_HOST : $F('ldap.host'), + LDAP_PORT : $F('ldap.port'), + LDAP_DEF_PROFILE : $F('ldap.defProfile'), + LDAP_USERDN : $F('ldap.userDN'), + LDAP_PASSWORD : $F('ldap.password'), + LDAP_DN_BASE : $F('ldap.baseDN'), + LDAP_DN_USERS : $F('ldap.usersDN'), + LDAP_ATTR_NAME : $F('ldap.nameAttr'), + LDAP_ATTR_PASSWORD : $F('ldap.passwordAttr'), + LDAP_ATTR_PROFILE : $F('ldap.profileAttr') } return data; Modified: trunk/web/geonetwork/xsl/xml/config.xsl =================================================================== --- trunk/web/geonetwork/xsl/xml/config.xsl 2007-08-06 21:57:34 UTC (rev 700) +++ trunk/web/geonetwork/xsl/xml/config.xsl 2007-08-06 22:08:40 UTC (rev 701) @@ -7,13 +7,17 @@ <!-- ============================================================================================= --> <xsl:template match="/system"> - <xsl:variable name="site" select="children/site/children"/> - <xsl:variable name="server" select="children/server/children"/> - <xsl:variable name="intranet" select="children/intranet/children"/> - <xsl:variable name="z3950" select="children/z3950/children"/> - <xsl:variable name="proxy" select="children/proxy/children"/> - <xsl:variable name="feedback" select="children/feedback/children"/> - <xsl:variable name="removedMd" select="children/removedMetadata/children"/> + <xsl:variable name="site" select="children/site/children"/> + <xsl:variable name="server" select="children/server/children"/> + <xsl:variable name="intranet" select="children/intranet/children"/> + <xsl:variable name="z3950" select="children/z3950/children"/> + <xsl:variable name="proxy" select="children/proxy/children"/> + <xsl:variable name="feedback" select="children/feedback/children"/> + <xsl:variable name="removedMd" select="children/removedMetadata/children"/> + <xsl:variable name="ldap" select="children/ldap/children"/> + <xsl:variable name="ldapLogin" select="$ldap/login/children"/> + <xsl:variable name="ldapDisNam" select="$ldap/distinguishedNames/children"/> + <xsl:variable name="ldapUsrAtt" select="$ldap/userAttribs/children"/> <config> <site> @@ -53,6 +57,26 @@ <removedMetadata> <dir><xsl:value-of select="$removedMd/dir/value"/></dir> </removedMetadata> + + <ldap> + <use><xsl:value-of select="$ldap/use/value"/></use> + <host><xsl:value-of select="$ldap/host/value"/></host> + <port><xsl:value-of select="$ldap/port/value"/></port> + <defaultProfile><xsl:value-of select="$ldap/defaultProfile/value"/></defaultProfile> + <login> + <userDN><xsl:value-of select="$ldapLogin/userDN/value"/></userDN> + <password><xsl:value-of select="$ldapLogin/password/value"/></password> + </login> + <distinguishedNames> + <base><xsl:value-of select="$ldapDisNam/base/value"/></base> + <users><xsl:value-of select="$ldapDisNam/users/value"/></users> + </distinguishedNames> + <userAttribs> + <name><xsl:value-of select="$ldapUsrAtt/name/value"/></name> + <password><xsl:value-of select="$ldapUsrAtt/password/value"/></password> + <profile><xsl:value-of select="$ldapUsrAtt/profile/value"/></profile> + </userAttribs> + </ldap> </config> </xsl:template> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |