From c8475650536be29f130d5b4aaed5b8d9064922fe Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 15 Feb 2013 17:56:16 +0000
Subject: [PATCH] OPENDJ-757: Add Rest2LDAP gateway Servlet
---
opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java | 138 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 136 insertions(+), 2 deletions(-)
diff --git a/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java b/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java
index c02ff3b..909830d 100644
--- a/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java
+++ b/opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/Rest2LDAP.java
@@ -25,6 +25,7 @@
import java.util.List;
import java.util.Set;
+import org.forgerock.json.fluent.JsonValue;
import org.forgerock.json.resource.BadRequestException;
import org.forgerock.json.resource.CollectionResourceProvider;
import org.forgerock.json.resource.ResourceException;
@@ -56,7 +57,7 @@
private final List<Attribute> additionalLDAPAttributes = new LinkedList<Attribute>();
private DN baseDN; // TODO: support template variables.
private ConnectionFactory factory;
- private final Filter falseFilter = Filter.present("1.1");
+ private Filter falseFilter = Filter.present("1.1");
private MVCCStrategy mvccStrategy;
private NameStrategy nameStrategy;
private ReadOnUpdatePolicy readOnUpdatePolicy = USE_READ_ENTRY_CONTROLS;
@@ -132,7 +133,7 @@
* @return A reference to this builder.
*/
public Builder falseFilter(final Filter filter) {
- this.trueFilter = ensureNotNull(filter);
+ this.falseFilter = ensureNotNull(filter);
return this;
}
@@ -345,6 +346,139 @@
return new Builder();
}
+ /**
+ * Creates a new builder from the provided JSON configuration. See the
+ * documentation of {@link #valueOf(JsonValue)} for a detailed specification
+ * of the JSON configuration.
+ *
+ * @param configuration
+ * The JSON configuration.
+ * @return A new builder from the provided JSON configuration.
+ * @throws IllegalArgumentException
+ * If the configuration is invalid.
+ */
+ public static Builder builder(final JsonValue configuration) throws IllegalArgumentException {
+ final Builder builder = builder();
+
+ return builder;
+ }
+
+ /**
+ * Creates a new REST 2 LDAP resource provider from the provided JSON
+ * configuration. The configuration should look like this, excluding the
+ * C-like comments:
+ *
+ * <pre>
+ * {
+ * // The primary data center, must contain at least one LDAP server.
+ * "primaryLDAPServers" : [
+ * {
+ * "hostname" : "host1.example.com",
+ * "port" : 389
+ * },
+ * {
+ * "hostname" : "host2.example.com",
+ * "port" : 389
+ * },
+ * ],
+ *
+ * // The optional secondary (fail-over) data center.
+ * "secondaryLDAPServers" : [
+ * {
+ * "hostname" : "host3.example.com",
+ * "port" : 389
+ * },
+ * {
+ * "hostname" : "host4.example.com",
+ * "port" : 389
+ * },
+ * ],
+ *
+ * // SSL/TLS configuration (optional and TBD).
+ * "useSSL" : {
+ * // Elect to use StartTLS instead of SSL.
+ * "useStartTLS" : true,
+ * ...
+ * },
+ *
+ * // Authentication configuration (mandatory and TBD).
+ * "authentication" : {
+ * ...
+ * },
+ *
+ * // Additional options (all are optional).
+ * "options" : {
+ * "trueFilter" : "(objectClass=*)",
+ * "falseFilter" : "(1.1=*)",
+ * },
+ *
+ * // The base DN beneath which LDAP entries are to be found.
+ * "baseDN" : "ou=people,dc=example,dc=com",
+ *
+ * // The mechanism which should be used for read resources during updates, must be
+ * // one of "disabled", "useReadEntryControls", or "useSearch".
+ * "readOnUpdatePolicy" : "useReadEntryControls",
+ *
+ * // Additional LDAP attributes which should be included with entries during add (create) operations.
+ * "additionalLDAPAttributes" : [
+ * {
+ * "type" : "objectClass",
+ * "values" : [
+ * "top",
+ * "person"
+ * ]
+ * }
+ * ],
+ *
+ * // The strategy which should be used for deriving LDAP entry names from JSON resources.
+ * "namingStrategy" : {
+ * // Option 1) the RDN and resource ID are both derived from a single user attribute in the entry.
+ * "strategy" : "clientDNNaming",
+ * "dnAttribute" : "uid"
+ *
+ * // Option 2) the RDN and resource ID are derived from separate user attributes in the entry.
+ * "strategy" : "clientNaming",
+ * "dnAttribute" : "uid",
+ * "idAttribute" : "mail"
+ *
+ * // Option 3) the RDN and is derived from a user attribute and the resource ID from an operational
+ * // attribute in the entry.
+ * "strategy" : "serverNaming",
+ * "dnAttribute" : "uid",
+ * "idAttribute" : "entryUUID"
+ * },
+ *
+ * // The attribute which will be used for performing MVCC.
+ * "etagAttribute" : "etag",
+ *
+ * // The JSON to LDAP attribute mappings.
+ * "attributes" : [
+ * "schemas" : { "constant" : [ "urn:scim:schemas:core:1.0" ] },
+ * "id" : { "simple" : { "ldapAttribute" : "uid", "isSingleValued" : true, "isRequired" : true, "writability" : "createOnly" } },
+ * "rev" : { "simple" : { "ldapAttribute" : "etag", "isSingleValued" : true, "writability" : "readOnly" } },
+ * "userName" : { "simple" : { "ldapAttribute" : "mail", "isSingleValued" : true, "writability" : "readOnly" } },
+ * "displayName" : { "simple" : { "ldapAttribute" : "cn", "isSingleValued" : true, "isRequired" : true } },
+ * "name" : { "object" : [
+ * "givenName" : { "simple" : { "ldapAttribute" : "givenName", "isSingleValued" : true } },
+ * "familyName" : { "simple" : { "ldapAttribute" : "sn", "isSingleValued" : true, "isRequired" : true } },
+ * ],
+ * ...
+ * ]
+ * }
+ * </pre>
+ *
+ * @param configuration
+ * The JSON configuration.
+ * @return A new REST 2 LDAP resource provider configured using the provided
+ * JSON configuration.
+ * @throws IllegalArgumentException
+ * If the configuration is invalid.
+ */
+ public static CollectionResourceProvider valueOf(final JsonValue configuration)
+ throws IllegalArgumentException {
+ return builder(configuration).build();
+ }
+
public static AttributeMapper constant(final Object value) {
return new JSONConstantAttributeMapper(value);
}
--
Gitblit v1.10.0