%@ page import="java.util.HashMap, java.util.Map, org.jivesoftware.admin.LdapUserProfile, org.jivesoftware.openfire.ldap.LdapManager" %> <%@ page import="org.jivesoftware.openfire.ldap.LdapUserProvider"%> <%@ page import="org.jivesoftware.openfire.user.UserProvider"%> <%@ page import="org.jivesoftware.openfire.user.UserManager" %> <%@ page import="org.jivesoftware.util.*" %> <%@ page import="java.util.Arrays" %> <%@ 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" %> <% // Get parameters String serverType = ParamUtils.getStringParameter(request, "serverType", ""); // Sanitise the serverType switch (serverType) { case "activedirectory": case "openldap": case "other": break; default: serverType = "other"; } LdapManager manager = LdapManager.getInstance(); @SuppressWarnings("unchecked") Map xmppSettings = (Map)session.getAttribute("xmppSettings"); // Determine the right default values based on the server type. String defaultUsernameField; String defaultSearchFields; String defaultSearchFilter; // First check if the http session holds data from a previous post of this page if (session.getAttribute("ldapUserSettings") != null && session.getAttribute("ldapVCardBean") != null) { @SuppressWarnings("unchecked") Map userSettings = (Map) session.getAttribute("ldapUserSettings"); defaultUsernameField = userSettings.get("ldap.usernameField"); defaultSearchFields = userSettings.get("ldap.searchFields"); defaultSearchFilter = userSettings.get("ldap.searchFilter"); vcardBean = (LdapUserProfile) session.getAttribute("ldapVCardBean"); } else { // No info in the session so try stored XML values or default ones defaultUsernameField = JiveGlobals.getProperty("ldap.usernameField"); defaultSearchFields = JiveGlobals.getProperty("ldap.searchFields"); defaultSearchFilter = JiveGlobals.getProperty("ldap.searchFilter"); vcardBean = new LdapUserProfile(); if (vcardBean.loadFromProperties()) { // Loaded from stored settings, no need to do anything else. } else if (serverType.equals("activedirectory")) { if (!vcardBean.loadFromProperties()) { // Initialize vCard mappings vcardBean.initForActiveDirectory(); } if (defaultUsernameField == null) { defaultUsernameField = "sAMAccountName"; // Initialize vCard mappings } if (defaultSearchFilter == null) { defaultSearchFilter = "(objectClass=organizationalPerson)"; } } else { if (!vcardBean.loadFromProperties()) { // Initialize vCard mappings vcardBean.initForOpenLDAP(); } if (defaultUsernameField == null) { defaultUsernameField = "uid"; } } } String usernameField = defaultUsernameField; String searchFields = defaultSearchFields; String searchFilter = defaultSearchFilter; Map errors = new HashMap<>(); Cookie csrfCookie = CookieUtils.getCookie( request, "csrf"); String csrfParam = ParamUtils.getParameter(request, "csrf"); boolean save = request.getParameter("save") != null; boolean test = request.getParameter( "test") != null; String userIndex = request.getParameter( "userIndex" ); boolean isTesting = userIndex != null; if ((save || test) && !isTesting) { 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); if (errors.isEmpty() && (save || test) && !isTesting) { usernameField = ParamUtils.getParameter(request, "usernameField"); if (usernameField == null) { errors.put("username", LocaleUtils.getLocalizedString("setup.ldap.user.username_field_error")); } searchFields = ParamUtils.getParameter(request, "searchFields"); searchFilter = ParamUtils.getParameter(request, "searchFilter"); // Set the properties to the vCard bean with the user input BeanUtils.setProperties(vcardBean, request); if (request.getParameter("storeAvatarInDB") != null) { vcardBean.setAvatarStoredInDB(true); } else { vcardBean.setAvatarStoredInDB(false); } // Store the vcard db setting for later saving. if (xmppSettings != null) { xmppSettings.put("ldap.override.avatar", vcardBean.getAvatarStoredInDB().toString()); } // Save settings and redirect. if (errors.isEmpty()) { // Save information in the session so we can use it in testing pages during setup Map settings = new HashMap<>(); settings.put("ldap.usernameField", usernameField); settings.put("ldap.searchFields", searchFields); settings.put("ldap.searchFilter", searchFilter); session.setAttribute("ldapUserSettings", settings); session.setAttribute("ldapVCardBean", vcardBean); if (save) { manager.setUsernameField(usernameField); if (searchFields != null) { final UserProvider userProvider = UserManager.getUserProvider(); if (userProvider instanceof LdapUserProvider) { // Update current instance being used ((LdapUserProvider) userProvider).setSearchFields(searchFields); } else { // Just update the property. It will be later used by LdapUserProvider JiveGlobals.setProperty("ldap.searchFields", searchFields); // Store in xmppSettings for later saving if we're in setup if (xmppSettings != null) { xmppSettings.put("ldap.searchFields", searchFields); } } } if (searchFilter != null) { manager.setSearchFilter(searchFilter); } if (serverType.equals("activedirectory")) { xmppSettings.put(LdapManager.LDAP_PAGE_SIZE.getKey(), "1000"); } // Save vCard mappings vcardBean.saveProperties(); // Enable the LDAP auth and user providers. The group provider will be enabled on the next step. JiveGlobals.setProperty("provider.user.className", "org.jivesoftware.openfire.ldap.LdapUserProvider"); JiveGlobals.setProperty("provider.auth.className", "org.jivesoftware.openfire.ldap.LdapAuthProvider"); // Store in xmppSettings for later saving if we're in setup if (xmppSettings != null) { xmppSettings.put("provider.user.className", "org.jivesoftware.openfire.ldap.LdapUserProvider"); xmppSettings.put("provider.auth.className", "org.jivesoftware.openfire.ldap.LdapAuthProvider"); } // Wipe caches, as modified settings might have made their content invalid. CacheFactory.clearCaches("Group", "Group Metadata Cache", "User", "VCard", "LDAP Authentication", "LDAP UserDN"); // Redirect response.sendRedirect(nextPage + "?serverType=" + serverType); return; } } // Save the settings for later, if we're in setup if (xmppSettings != null) { session.setAttribute("xmppSettings", xmppSettings); } } pageContext.setAttribute("serverType", serverType ); pageContext.setAttribute("usernameField", usernameField ); pageContext.setAttribute("searchFields", searchFields ); pageContext.setAttribute("searchFilter", searchFilter ); pageContext.setAttribute("vcardBean", vcardBean ); pageContext.setAttribute("meta", meta); pageContext.setAttribute("testPage", testPage); pageContext.setAttribute("currentPage", currentPage); pageContext.setAttribute("initialSetup", initialSetup); pageContext.setAttribute("test", test); pageContext.setAttribute("isTesting", isTesting); pageContext.setAttribute("userIndex", userIndex); pageContext.setAttribute("errors", errors); %> : 1. 2. 3. : "/> : "> : " id="jiveLDAPsearchfields" size="40" maxlength="250"> : " id="jiveLDAPsearchfilter" size="40" maxlength="250"> * - - - - - - - - - - - - - - - - - - - - * " id="jive-setup-test"> " id="jive-setup-save">
*