/* See LICENSE for licensing and NOTICE for copyright. */ package org.ldaptive.auth; import java.util.Arrays; import org.ldaptive.Connection; import org.ldaptive.ConnectionFactory; import org.ldaptive.ConnectionFactoryManager; import org.ldaptive.LdapException; import org.ldaptive.SearchOperation; import org.ldaptive.SearchResult; /** * Looks up the LDAP entry associated with a user. If a connection factory is configured it will be used to perform the * search for user. The connection will be opened and closed for each resolution. If no connection factory is configured * the search will occur using the connection that the bind was attempted on. * * @author Middleware Services */ public class SearchEntryResolver extends AbstractSearchEntryResolver implements ConnectionFactoryManager { /** Connection factory. */ private ConnectionFactory factory; /** Default constructor. */ public SearchEntryResolver() {} /** * Creates a new search entry resolver. * * @param cf connection factory */ public SearchEntryResolver(final ConnectionFactory cf) { setConnectionFactory(cf); } @Override public ConnectionFactory getConnectionFactory() { return factory; } @Override public void setConnectionFactory(final ConnectionFactory cf) { factory = cf; } @Override public SearchResult performLdapSearch( final AuthenticationCriteria criteria, final AuthenticationHandlerResponse response) throws LdapException { if (factory == null) { final SearchOperation op = createSearchOperation(response.getConnection()); return op.execute(createSearchRequest(criteria)).getResult(); } else { try (Connection factoryConn = factory.getConnection()) { factoryConn.open(); final SearchOperation op = createSearchOperation(factoryConn); return op.execute(createSearchRequest(criteria)).getResult(); } } } @Override public String toString() { return String.format( "[%s@%d::factory=%s, baseDn=%s, userFilter=%s, " + "userFilterParameters=%s, allowMultipleEntries=%s, " + "subtreeSearch=%s, derefAliases=%s, referralHandler=%s, " + "searchEntryHandlers=%s]", getClass().getName(), hashCode(), factory, getBaseDn(), getUserFilter(), Arrays.toString(getUserFilterParameters()), getAllowMultipleEntries(), getSubtreeSearch(), getDerefAliases(), getReferralHandler(), Arrays.toString(getSearchEntryHandlers())); } }