Search in sources :

Example 1 with DuplicateMode

use of password.pwm.config.option.DuplicateMode in project pwm by pwm-project.

the class UserSearchEngine method performSingleUserSearch.

public UserIdentity performSingleUserSearch(final SearchConfiguration searchConfiguration, final SessionLabel sessionLabel) throws PwmUnrecoverableException, PwmOperationalException {
    final long startTime = System.currentTimeMillis();
    final DuplicateMode dupeMode = pwmApplication.getConfig().readSettingAsEnum(PwmSetting.LDAP_DUPLICATE_MODE, DuplicateMode.class);
    final int searchCount = (dupeMode == DuplicateMode.FIRST_ALL) ? 1 : 2;
    final Map<UserIdentity, Map<String, String>> searchResults = performMultiUserSearch(searchConfiguration, searchCount, Collections.emptyList(), sessionLabel);
    final List<UserIdentity> results = searchResults == null ? Collections.emptyList() : new ArrayList<>(searchResults.keySet());
    if (results.isEmpty()) {
        final String errorMessage;
        if (searchConfiguration.getUsername() != null && searchConfiguration.getUsername().length() > 0) {
            errorMessage = "an ldap user for username value '" + searchConfiguration.getUsername() + "' was not found";
        } else {
            errorMessage = "an ldap user was not found";
        }
        throw new PwmOperationalException(new ErrorInformation(PwmError.ERROR_CANT_MATCH_USER, errorMessage));
    } else if (results.size() == 1) {
        final String userDN = results.get(0).getUserDN();
        LOGGER.debug(sessionLabel, "found userDN: " + userDN + " (" + TimeDuration.fromCurrent(startTime).asCompactString() + ")");
        return results.get(0);
    }
    if (dupeMode == DuplicateMode.FIRST_PROFILE) {
        final String profile1 = results.get(0).getLdapProfileID();
        final String profile2 = results.get(1).getLdapProfileID();
        final boolean sameProfile = (profile1 == null && profile2 == null) || (profile1 != null && profile1.equals(profile2));
        if (sameProfile) {
            final String errorMessage = "multiple user matches in single profile";
            throw new PwmOperationalException(new ErrorInformation(PwmError.ERROR_CANT_MATCH_USER, errorMessage));
        }
        LOGGER.trace(sessionLabel, "found multiple matches, but will use first match since second match" + " is in a different profile and dupeMode is set to " + DuplicateMode.FIRST_PROFILE);
        return results.get(0);
    }
    final String errorMessage = "multiple user matches found";
    throw new PwmOperationalException(new ErrorInformation(PwmError.ERROR_CANT_MATCH_USER, errorMessage));
}
Also used : ErrorInformation(password.pwm.error.ErrorInformation) UserIdentity(password.pwm.bean.UserIdentity) Map(java.util.Map) LinkedHashMap(java.util.LinkedHashMap) TreeMap(java.util.TreeMap) DuplicateMode(password.pwm.config.option.DuplicateMode) PwmOperationalException(password.pwm.error.PwmOperationalException)

Aggregations

LinkedHashMap (java.util.LinkedHashMap)1 Map (java.util.Map)1 TreeMap (java.util.TreeMap)1 UserIdentity (password.pwm.bean.UserIdentity)1 DuplicateMode (password.pwm.config.option.DuplicateMode)1 ErrorInformation (password.pwm.error.ErrorInformation)1 PwmOperationalException (password.pwm.error.PwmOperationalException)1