Explorar el Código

Merge remote-tracking branch 'origin/master' into angular

James Albright hace 8 años
padre
commit
1d31804d5f

+ 34 - 9
src/main/java/password/pwm/http/servlet/peoplesearch/PeopleSearchDataReader.java

@@ -42,7 +42,11 @@ import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.http.PwmRequest;
 import password.pwm.i18n.Display;
-import password.pwm.ldap.*;
+import password.pwm.ldap.LdapPermissionTester;
+import password.pwm.ldap.LdapUserDataReader;
+import password.pwm.ldap.UserDataReader;
+import password.pwm.ldap.UserSearchEngine;
+import password.pwm.ldap.UserStatusReader;
 import password.pwm.svc.cache.CacheKey;
 import password.pwm.svc.cache.CachePolicy;
 import password.pwm.svc.stats.Statistic;
@@ -52,15 +56,22 @@ import password.pwm.util.LocaleHelper;
 import password.pwm.util.TimeDuration;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.macro.MacroMachine;
-import password.pwm.ws.server.RestResultBean;
 
-import javax.naming.directory.SearchResult;
 import javax.servlet.ServletException;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.Serializable;
 import java.net.URLConnection;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
 
 public class PeopleSearchDataReader {
     final private static PwmLogger LOGGER = PwmLogger.forClass(PeopleSearchDataReader.class);
@@ -74,10 +85,11 @@ public class PeopleSearchDataReader {
     }
 
     public SearchResultBean makeSearchResultBean(
-            final String searchData
+            final String searchData,
+            final boolean includeDisplayName
     )
             throws PwmUnrecoverableException, ChaiUnavailableException {
-        final CacheKey cacheKey = makeCacheKey(SearchResultBean.class.getSimpleName(), searchData);
+        final CacheKey cacheKey = makeCacheKey(SearchResultBean.class.getSimpleName(), searchData + "|" + includeDisplayName);
 
         { // try to serve from cache first
             final String cachedOutput = pwmRequest.getPwmApplication().getCacheService().get(cacheKey);
@@ -92,7 +104,7 @@ public class PeopleSearchDataReader {
         }
 
         // if not in cache, build results from ldap
-        final SearchResultBean searchResultBean = makeSearchResultsImpl(pwmRequest, searchData);
+        final SearchResultBean searchResultBean = makeSearchResultsImpl(pwmRequest, searchData, includeDisplayName);
         searchResultBean.setFromCache(false);
         StatisticsManager.incrementStat(pwmRequest, Statistic.PEOPLESEARCH_SEARCHES);
         storeDataInCache(pwmRequest.getPwmApplication(), cacheKey, searchResultBean);
@@ -582,7 +594,8 @@ public class PeopleSearchDataReader {
 
     private SearchResultBean makeSearchResultsImpl(
             final PwmRequest pwmRequest,
-            final String username
+            final String username,
+            final boolean includeDisplayName
     )
             throws ChaiUnavailableException, PwmUnrecoverableException
     {
@@ -622,12 +635,24 @@ public class PeopleSearchDataReader {
             throw new PwmUnrecoverableException(errorInformation);
         }
 
+        final List<Map<String,Object>> resultOutput = new ArrayList<>(results.resultsAsJsonOutput(pwmRequest.getPwmApplication(),null));
+        if (includeDisplayName) {
+            for (Map<String,Object> map : resultOutput) {
+                final String userKey = (String)map.get("userKey");
+                if (userKey != null) {
+                    final UserIdentity userIdentity = UserIdentity.fromKey(userKey, pwmRequest.getPwmApplication());
+                    final String displayValue = figureDisplaynameValue(pwmRequest, userIdentity);
+                    map.put("_displayName",displayValue);
+                }
+            }
+        }
+
         final TimeDuration searchDuration = TimeDuration.fromCurrent(startTime);
         LOGGER.trace(pwmRequest.getPwmSession(), "finished rest peoplesearch search in " +
                 searchDuration.asCompactString() + " not using cache, size=" + results.getResults().size());
 
         final SearchResultBean searchResultBean = new SearchResultBean();
-        searchResultBean.setSearchResults(new ArrayList<>(results.resultsAsJsonOutput(pwmRequest.getPwmApplication(),null)));
+        searchResultBean.setSearchResults(resultOutput);
         searchResultBean.setSizeExceeded(sizeExceeded);
         final String aboutMessage = LocaleHelper.getLocalizedMessage(
                 pwmRequest.getLocale(),

+ 14 - 5
src/main/java/password/pwm/http/servlet/peoplesearch/PeopleSearchServlet.java

@@ -184,10 +184,11 @@ public class PeopleSearchServlet extends AbstractPwmServlet {
         final Map<String, String> valueMap = JsonUtil.deserializeStringMap(bodyString);
 
         final String username = Validator.sanitizeInputValue(pwmRequest.getConfig(), valueMap.get("username"), 1024);
+        final boolean includeDisplayName = pwmRequest.readParameterAsBoolean("includeDisplayName");
 
         // if not in cache, build results from ldap
         final PeopleSearchDataReader peopleSearchDataReader = new PeopleSearchDataReader(pwmRequest);
-        final SearchResultBean searchResultBean = peopleSearchDataReader.makeSearchResultBean(username);
+        final SearchResultBean searchResultBean = peopleSearchDataReader.makeSearchResultBean(username, includeDisplayName);
         searchResultBean.setFromCache(false);
         final RestResultBean restResultBean = new RestResultBean(searchResultBean);
         pwmRequest.outputJsonResult(restResultBean);
@@ -210,11 +211,19 @@ public class PeopleSearchServlet extends AbstractPwmServlet {
         if (requestInputMap == null) {
             return;
         }
-        final String userKey = requestInputMap.get(PARAM_USERKEY);
-        if (userKey == null || userKey.isEmpty()) {
-            return;
+
+        final UserIdentity userIdentity;
+        {
+            final String userKey = requestInputMap.get(PARAM_USERKEY);
+            if (userKey == null || userKey.isEmpty()) {
+                userIdentity = pwmRequest.getUserInfoIfLoggedIn();
+                if (userIdentity == null) {
+                    return;
+                }
+            } else {
+                userIdentity = UserIdentity.fromObfuscatedKey(userKey, pwmRequest.getPwmApplication());
+            }
         }
-        final UserIdentity userIdentity = UserIdentity.fromObfuscatedKey(userKey, pwmRequest.getPwmApplication());
 
         try {
             final PeopleSearchDataReader peopleSearchDataReader = new PeopleSearchDataReader(pwmRequest);

+ 4 - 3
src/main/java/password/pwm/http/servlet/peoplesearch/SearchResultBean.java

@@ -25,18 +25,19 @@ package password.pwm.http.servlet.peoplesearch;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 class SearchResultBean implements Serializable {
-    private List searchResults = new ArrayList<>();
+    private List<Map<String,Object>> searchResults = new ArrayList<>();
     private boolean sizeExceeded;
     private String aboutResultMessage;
     private boolean fromCache;
 
-    public List getSearchResults() {
+    public List<Map<String,Object>> getSearchResults() {
         return searchResults;
     }
 
-    public void setSearchResults(List searchResults) {
+    public void setSearchResults(List<Map<String,Object>> searchResults) {
         this.searchResults = searchResults;
     }