/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive;
import java.util.Arrays;
import org.ldaptive.control.RequestControl;
import org.ldaptive.sasl.SaslConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Initializes a connection by performing a bind operation. Useful if you need all connections to bind as the same
* principal.
*
* @author Middleware Services
*/
public class BindConnectionInitializer implements ConnectionInitializer
{
/** Logger for this class. */
protected final Logger logger = LoggerFactory.getLogger(getClass());
/** DN to bind as before performing operations. */
private String bindDn;
/** Credential for the bind DN. */
private Credential bindCredential;
/** Configuration for bind SASL authentication. */
private SaslConfig bindSaslConfig;
/** Bind controls. */
private RequestControl[] bindControls;
/** Default constructor. */
public BindConnectionInitializer() {}
/**
* Creates a new bind connection initializer.
*
* @param dn bind dn
* @param credential bind credential
*/
public BindConnectionInitializer(final String dn, final Credential credential)
{
setBindDn(dn);
setBindCredential(credential);
}
/**
* Returns the bind DN.
*
* @return DN to bind as
*/
public String getBindDn()
{
return bindDn;
}
/**
* Sets the bind DN to authenticate as before performing operations.
*
* @param dn to bind as
*/
public void setBindDn(final String dn)
{
logger.trace("setting bindDn: {}", dn);
bindDn = dn;
}
/**
* Returns the credential used with the bind DN.
*
* @return bind DN credential
*/
public Credential getBindCredential()
{
return bindCredential;
}
/**
* Sets the credential of the bind DN.
*
* @param credential to use with bind DN
*/
public void setBindCredential(final Credential credential)
{
logger.trace("setting bindCredential: <suppressed>");
bindCredential = credential;
}
/**
* Returns the bind sasl config.
*
* @return sasl config
*/
public SaslConfig getBindSaslConfig()
{
return bindSaslConfig;
}
/**
* Sets the bind sasl config.
*
* @param config sasl config
*/
public void setBindSaslConfig(final SaslConfig config)
{
logger.trace("setting bindSaslConfig: {}", config);
bindSaslConfig = config;
}
/**
* Returns the bind controls.
*
* @return controls
*/
public RequestControl[] getBindControls()
{
return bindControls;
}
/**
* Sets the bind controls.
*
* @param c controls to set
*/
public void setBindControls(final RequestControl... c)
{
logger.trace("setting bindControls: {}", Arrays.toString(c));
bindControls = c;
}
@Override
public Response<Void> initialize(final Connection c)
throws LdapException
{
final BindRequest request = new BindRequest();
request.setDn(bindDn);
request.setCredential(bindCredential);
request.setSaslConfig(bindSaslConfig);
request.setControls(bindControls);
final BindOperation op = new BindOperation(c);
op.setOperationExceptionHandler(null);
return op.execute(request);
}
/**
* Returns whether this connection initializer contains any configuration data.
*
* @return whether all properties are null
*/
public boolean isEmpty()
{
return bindDn == null && bindCredential == null && bindSaslConfig == null && bindControls == null;
}
@Override
public String toString()
{
return
String.format(
"[%s@%d::bindDn=%s, bindSaslConfig=%s, bindControls=%s]",
getClass().getName(),
hashCode(),
bindDn,
bindSaslConfig,
Arrays.toString(bindControls));
}
}