/*
|
* The contents of this file are subject to the terms of the Common Development and
|
* Distribution License (the License). You may not use this file except in compliance with the
|
* License.
|
*
|
* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
|
* specific language governing permission and limitations under the License.
|
*
|
* When distributing Covered Software, include this CDDL Header Notice in each file and include
|
* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
|
* Header, with the fields enclosed by brackets [] replaced by your own identifying
|
* information: "Portions copyright [year] [name of copyright owner]".
|
*
|
* Copyright 2013 ForgeRock AS.
|
*/
|
package org.forgerock.opendj.rest2ldap;
|
|
import static org.forgerock.opendj.rest2ldap.Utils.ensureNotNull;
|
import static org.forgerock.opendj.rest2ldap.Utils.i18n;
|
|
import org.forgerock.json.fluent.JsonValue;
|
import org.forgerock.json.resource.Context;
|
import org.forgerock.json.resource.InternalServerErrorException;
|
import org.forgerock.json.resource.PersistenceConfig;
|
import org.forgerock.json.resource.ResourceException;
|
import org.forgerock.opendj.ldap.Connection;
|
|
/**
|
* A {@link Context} containing a cached pre-authenticated LDAP connection which
|
* should be re-used for performing subsequent LDAP operations. The LDAP
|
* connection is typically acquired while perform authentication in an HTTP
|
* servlet filter. It is the responsibility of the component which acquired the
|
* connection to release once processing has completed.
|
*/
|
public final class AuthenticatedConnectionContext extends Context {
|
/*
|
* TODO: this context does not support persistence because there is no
|
* obvious way to restore the connection. We could just persist the context
|
* and restore it as null, and let rest2ldap switch to using the factory +
|
* proxied authz.
|
*/
|
private final Connection connection;
|
|
/**
|
* Creates a new pre-authenticated cached LDAP connection context having the
|
* provided parent and an ID automatically generated using
|
* {@code UUID.randomUUID()}.
|
*
|
* @param parent
|
* The parent context.
|
* @param connection
|
* The cached pre-authenticated LDAP connection which should be
|
* re-used for subsequent LDAP operations.
|
*/
|
public AuthenticatedConnectionContext(final Context parent, final Connection connection) {
|
super(ensureNotNull(parent));
|
this.connection = connection;
|
}
|
|
/**
|
* Creates a new pre-authenticated cached LDAP connection context having the
|
* provided ID and parent.
|
*
|
* @param id
|
* The context ID.
|
* @param parent
|
* The parent context.
|
* @param connection
|
* The cached pre-authenticated LDAP connection which should be
|
* re-used for subsequent LDAP operations.
|
*/
|
public AuthenticatedConnectionContext(final String id, final Context parent,
|
final Connection connection) {
|
super(id, ensureNotNull(parent));
|
this.connection = connection;
|
}
|
|
/**
|
* Restore from JSON representation.
|
*
|
* @param savedContext
|
* The JSON representation from which this context's attributes
|
* should be parsed.
|
* @param config
|
* The persistence configuration.
|
* @throws ResourceException
|
* If the JSON representation could not be parsed.
|
*/
|
AuthenticatedConnectionContext(final JsonValue savedContext, final PersistenceConfig config)
|
throws ResourceException {
|
super(savedContext, config);
|
throw new InternalServerErrorException(i18n("Cached LDAP connections cannot be restored"));
|
}
|
|
/**
|
* {@inheritDoc}
|
*/
|
@Override
|
protected void saveToJson(final JsonValue savedContext, final PersistenceConfig config)
|
throws ResourceException {
|
super.saveToJson(savedContext, config);
|
throw new InternalServerErrorException(i18n("Cached LDAP connections cannot be persisted"));
|
}
|
|
/**
|
* Returns the cached pre-authenticated LDAP connection which should be
|
* re-used for subsequent LDAP operations.
|
*
|
* @return The cached pre-authenticated LDAP connection which should be
|
* re-used for subsequent LDAP operations.
|
*/
|
Connection getConnection() {
|
return connection;
|
}
|
}
|