<%@ page import="org.jivesoftware.openfire.ldap.LdapManager" %> <%@ page import="org.jivesoftware.util.LocaleUtils" %> <%@ page import="org.jivesoftware.util.ParamUtils" %> <%@ page import="org.jivesoftware.util.CookieUtils" %> <%@ page import="org.jivesoftware.util.StringUtils" %> <%@ page import="javax.naming.ldap.LdapName" %> <%@ page import="java.util.*" %> <%@ page import="org.jivesoftware.util.cache.CacheFactory" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <% // These variables will either hold the current value as configured // in the manager, or the values that are under test or being modified, // when the end-user is performing tests / changing settings String host; int port; LdapName baseDN; LdapName alternateBaseDN; String adminDN; String adminPassword; boolean connectionPoolEnabled; boolean sslEnabled; boolean startTlsEnabled; boolean debugEnabled; boolean referralsEnabled; boolean aliasReferralsEnabled; Map xmppSettings = (Map)session.getAttribute("xmppSettings"); Map errors = new HashMap<>(); Cookie csrfCookie = CookieUtils.getCookie( request, "csrf"); String csrfParam = ParamUtils.getParameter(request, "csrf"); // Get parameters boolean save = request.getParameter("save") != null; boolean test = request.getParameter("test") != null; if ( save || test ) { if (csrfCookie == null || csrfParam == null || !csrfCookie.getValue().equals(csrfParam)) { save = false; test = false; errors.put("csrf", "CSRF Failure!"); } } csrfParam = StringUtils.randomString(15); CookieUtils.setCookie(request, response, "csrf", csrfParam, -1); pageContext.setAttribute("csrf", csrfParam); LdapManager manager = LdapManager.getInstance(); if (save || test) { host = ParamUtils.getParameter(request, "host"); if (host == null) { errors.put("host", LocaleUtils.getLocalizedString("setup.ldap.server.host_error")); } port = ParamUtils.getIntParameter(request, "port", manager.getPort()); if (port <= 0) { errors.put("port", LocaleUtils.getLocalizedString("setup.ldap.server.port_error")); } try { baseDN = new LdapName( ParamUtils.getParameter(request, "basedn") ); } catch ( Exception e ) { errors.put("baseDN", LocaleUtils.getLocalizedString("setup.ldap.server.basedn_error")); baseDN = null; } if (ParamUtils.getParameter(request, "alternatebasedn") != null) { try { alternateBaseDN = new LdapName(ParamUtils.getParameter(request, "alternatebasedn")); } catch (Exception e) { errors.put("baseDN", LocaleUtils.getLocalizedString("setup.ldap.server.alternatebasedn_error")); alternateBaseDN = null; } } else { alternateBaseDN = null; } adminDN = ParamUtils.getParameter(request, "admindn"); adminPassword = ParamUtils.getParameter(request, "adminpwd"); connectionPoolEnabled = ParamUtils.getBooleanParameter(request, "connectionpool", manager.isConnectionPoolEnabled()); sslEnabled = ParamUtils.getBooleanParameter(request, "ssl", manager.isSslEnabled()); startTlsEnabled = ParamUtils.getBooleanParameter(request, "starttls", manager.isStartTlsEnabled()); debugEnabled = ParamUtils.getBooleanParameter(request, "debug", manager.isDebugEnabled()); referralsEnabled = ParamUtils.getBooleanParameter(request, "referrals", manager.isFollowReferralsEnabled()); aliasReferralsEnabled = ParamUtils.getBooleanParameter(request, "aliasreferrals", manager.isFollowAliasReferralsEnabled()); if (errors.isEmpty()) { // Store settings in a map and keep it in the session Map settings = new HashMap<>(); settings.put("ldap.serverType", serverType); settings.put("ldap.host", host); settings.put("ldap.port", Integer.toString(port)); settings.put("ldap.baseDN", baseDN.toString()); if (alternateBaseDN != null) { settings.put("ldap.alternateBaseDN", alternateBaseDN.toString()); } else { settings.remove("ldap.alternateBaseDN"); } if (adminDN != null) { settings.put("ldap.adminDN", adminDN); } if (adminPassword != null) { settings.put("ldap.adminPassword", adminPassword); } // settings.put("ldap.connectionPoolEnabled", Boolean.toString(connectionPoolEnabled)); // Always disable connection pooling so that connections aren't left hanging open. settings.put("ldap.connectionPoolEnabled", "false"); settings.put("ldap.sslEnabled", Boolean.toString(sslEnabled)); settings.put("ldap.startTlsEnabled", Boolean.toString(startTlsEnabled)); settings.put("ldap.debugEnabled", Boolean.toString(debugEnabled)); settings.put("ldap.autoFollowReferrals", Boolean.toString(referralsEnabled)); settings.put("ldap.autoFollowAliasReferrals", Boolean.toString(aliasReferralsEnabled)); session.setAttribute("ldapSettings", settings); if (save) { // Save settings and redirect Collection hosts = new ArrayList<>(); StringTokenizer st = new StringTokenizer(host, " ,\t\n\r\f"); while (st.hasMoreTokens()) { hosts.add(st.nextToken()); } manager.setHosts(hosts); manager.setPort(port); manager.setBaseDN(baseDN); if (alternateBaseDN != null) { manager.setAlternateBaseDN(alternateBaseDN); } else { manager.setAlternateBaseDN(null); } manager.setAdminDN(adminDN); if ( adminPassword != null ) { // Only store a password if it was changed. manager.setAdminPassword( adminPassword ); } manager.setConnectionPoolEnabled(connectionPoolEnabled); manager.setSslEnabled(sslEnabled); manager.setStartTlsEnabled(startTlsEnabled); manager.setDebugEnabled(debugEnabled); manager.setFollowReferralsEnabled(referralsEnabled); manager.setFollowAliasReferralsEnabled(aliasReferralsEnabled); // Save the settings for later, if we're in setup if (xmppSettings != null) { xmppSettings.put("ldap.host", host); xmppSettings.put("ldap.port", Integer.toString(port)); xmppSettings.put("ldap.baseDN", baseDN.toString()); if (alternateBaseDN != null) { xmppSettings.put("ldap.alternateBaseDN", alternateBaseDN.toString()); } else { xmppSettings.remove("ldap.alternateBaseDN"); } xmppSettings.put("ldap.adminDN", adminDN); if ( adminPassword != null ) { // Only store a password if it was changed. xmppSettings.put( "ldap.adminPassword", adminPassword ); } xmppSettings.put("ldap.connectionPoolEnabled", Boolean.toString(connectionPoolEnabled)); xmppSettings.put("ldap.sslEnabled", Boolean.toString(sslEnabled)); xmppSettings.put("ldap.startTlsEnabled", Boolean.toString(startTlsEnabled)); xmppSettings.put("ldap.debugEnabled", Boolean.toString(debugEnabled)); xmppSettings.put("ldap.autoFollowReferrals", Boolean.toString(referralsEnabled)); xmppSettings.put("ldap.autoFollowAliasReferrals", Boolean.toString(aliasReferralsEnabled)); session.setAttribute("xmppSettings", xmppSettings); Set encryptedXmppSettings = (Set) session.getAttribute("encryptedSettings"); if (encryptedXmppSettings != null) { encryptedXmppSettings.add("ldap.adminDN"); if ( adminPassword != null ) { // Only store a password if it was changed. encryptedXmppSettings.add( "ldap.adminPassword" ); } } session.setAttribute("encryptedSettings", encryptedXmppSettings); } // Wipe caches, as modified settings might have made their content invalid. CacheFactory.clearCaches("Group", "Group Metadata Cache", "User", "VCard", "LDAP Authentication", "LDAP UserDN"); // Redirect to next step. response.sendRedirect(nextPage); return; } } } else { // See if there are already values for the variables defined. StringBuilder sb = new StringBuilder(); for (String aHost : LdapManager.getInstance().getHosts()) { sb.append(aHost).append(", "); } host = sb.toString(); if (!host.trim().isEmpty()) { host = host.substring(0, host.length() - 2); } port = manager.getPort(); baseDN = manager.getBaseDN(); alternateBaseDN = manager.getAlternateBaseDN(); adminDN = manager.getAdminDN(); connectionPoolEnabled = manager.isConnectionPoolEnabled(); sslEnabled = manager.isSslEnabled(); startTlsEnabled = manager.isStartTlsEnabled(); debugEnabled = manager.isDebugEnabled(); referralsEnabled = manager.isFollowReferralsEnabled(); aliasReferralsEnabled = manager.isFollowAliasReferralsEnabled(); } // These hold the values that are either under test, or are stored in the manager when not testing. pageContext.setAttribute("host", host); pageContext.setAttribute("port", port); pageContext.setAttribute("baseDN", baseDN); pageContext.setAttribute("alternateBaseDN", alternateBaseDN); pageContext.setAttribute("adminDN", adminDN ); // Only show password if it was set in this session (used for testing the password). if ( session.getAttribute("ldapSettings") != null ) { final Map sessionSettings = (( Map) session.getAttribute( "ldapSettings" )); if (sessionSettings.get( "ldap.adminPassword" ) != null) { pageContext.setAttribute( "adminPassword", sessionSettings.get( "ldap.adminPassword" ) ); } } pageContext.setAttribute("connectionPoolEnabled", connectionPoolEnabled ); pageContext.setAttribute("sslEnabled", sslEnabled ); pageContext.setAttribute("startTlsEnabled", startTlsEnabled ); pageContext.setAttribute("debugEnabled", debugEnabled ); pageContext.setAttribute("followReferralsEnabled", referralsEnabled ); pageContext.setAttribute("followAliasReferralsEnabled", aliasReferralsEnabled ); pageContext.setAttribute("test", test); pageContext.setAttribute("errors", errors); %> <fmt:message key="setup.ldap.title" />

:

1. 2. 3.

:


:
:// "> :
 
:
" id="jive-setup-test"> " id="jive-setup-save">