/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt * or http://forgerock.org/license/CDDLv1.0.html. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at legal-notices/CDDLv1_0.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2009-2010 Sun Microsystems, Inc. * Portions Copyright 2011-2014 ForgeRock AS. */ package com.forgerock.opendj.cli; import java.util.concurrent.atomic.AtomicReference; import org.forgerock.opendj.ldap.AbstractConnectionWrapper; import org.forgerock.opendj.ldap.Connection; import org.forgerock.opendj.ldap.ConnectionFactory; import org.forgerock.opendj.ldap.LdapException; import org.forgerock.opendj.ldap.FutureResult; import org.forgerock.opendj.ldap.IntermediateResponseHandler; import org.forgerock.opendj.ldap.requests.BindRequest; import org.forgerock.opendj.ldap.responses.BindResult; import org.forgerock.util.Reject; import org.forgerock.util.promise.AsyncFunction; import org.forgerock.util.promise.FailureHandler; import org.forgerock.util.promise.Function; import org.forgerock.util.promise.Promise; import org.forgerock.util.promise.SuccessHandler; import static org.forgerock.util.Utils.*; /** * An authenticated connection factory can be used to create pre-authenticated * connections to a Directory Server. *
* The connections returned by an authenticated connection factory support all * operations with the exception of Bind requests. Attempts to perform a Bind * will result in an {@code UnsupportedOperationException}. *
* In addition, the returned connections support retrieval of the * {@code BindResult} returned from the initial Bind request, or last rebind. *
* Support for connection re-authentication is provided through the * {@link #setRebindAllowed} method which, if set to {@code true}, causes * subsequent connections created using the factory to support the * {@code rebind} method. *
* If the Bind request fails for some reason (e.g. invalid credentials), then
* the connection attempt will fail and an {@link LdapException} will be thrown.
*/
public final class AuthenticatedConnectionFactory implements ConnectionFactory {
/**
* An authenticated connection supports all operations except Bind
* operations.
*/
public static final class AuthenticatedConnection extends AbstractConnectionWrapper
* Rebind requests are invoked using the connection's {@code rebind} method
* which will throw an {@code UnsupportedOperationException} if rebinds are
* not supported (the default).
*
* @return allowRebinds {@code true} if the {@code rebind} operation is to
* be supported, otherwise {@code false}.
*/
boolean isRebindAllowed() {
return allowRebinds;
}
/**
* Specifies whether or not rebind requests are to be supported by
* connections created by this authenticated connection factory.
*
* Rebind requests are invoked using the connection's {@code rebind} method
* which will throw an {@code UnsupportedOperationException} if rebinds are
* not supported (the default).
*
* @param allowRebinds
* {@code true} if the {@code rebind} operation is to be
* supported, otherwise {@code false}.
* @return A reference to this connection factory.
*/
AuthenticatedConnectionFactory setRebindAllowed(final boolean allowRebinds) {
this.allowRebinds = allowRebinds;
return this;
}
/**
* Returns the string representation of this authenticated connection factory.
*
* @return The string representation of this authenticated connection factory.
*/
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
builder.append("AuthenticatedConnectionFactory(");
builder.append(parentFactory);
builder.append(')');
return builder.toString();
}
}