From 5b7afcc00e450bf639610f27af7a1c3a3562a020 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Thu, 19 May 2016 15:10:45 +0000
Subject: [PATCH] Rest2Ldap: Removed connection reuse, simplify authorization filtering, use factory methods, add more unit tests.

---
 opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/authz/SASLPlainStrategy.java |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/authz/SASLPlainStrategy.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/authz/SASLPlainStrategy.java
index 11d8e25..b3c9750 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/authz/SASLPlainStrategy.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/authz/SASLPlainStrategy.java
@@ -19,6 +19,7 @@
 import static org.forgerock.services.context.SecurityContext.AUTHZID_DN;
 import static org.forgerock.services.context.SecurityContext.AUTHZID_ID;
 import static org.forgerock.util.Reject.checkNotNull;
+import static org.forgerock.opendj.rest2ldap.authz.Utils.close;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -42,9 +43,8 @@
 import org.forgerock.util.Function;
 import org.forgerock.util.promise.Promise;
 
-
 /** Bind using a computed DN from a template and the current request/context. */
-public final class SASLPlainStrategy implements AuthenticationStrategy {
+final class SASLPlainStrategy implements AuthenticationStrategy {
 
     private final ConnectionFactory connectionFactory;
     private final Function<String, String, LdapException> formatter;
@@ -90,21 +90,22 @@
 
     @Override
     public Promise<SecurityContext, LdapException> authenticate(final String username, final String password,
-            final Context parentContext, final AtomicReference<Connection> authenticateConnectionHolder) {
+            final Context parentContext) {
+        final AtomicReference<Connection> connectionHolder = new AtomicReference<Connection>();
         return connectionFactory
                 .getConnectionAsync()
                 .thenAsync(new AsyncFunction<Connection, SecurityContext, LdapException>() {
                     @Override
                     public Promise<SecurityContext, LdapException> apply(Connection connection) throws LdapException {
-                        authenticateConnectionHolder.set(connection);
-                        final String authcId = formatter.apply(username);
-                        return doSASLPlainBind(connection, parentContext, username, authcId, password);
+                        connectionHolder.set(connection);
+                        return doSASLPlainBind(connection, parentContext, username, password);
                     }
-                });
+                }).thenFinally(close(connectionHolder));
     }
 
     private Promise<SecurityContext, LdapException> doSASLPlainBind(final Connection connection,
-            final Context parentContext, final String authzId, final String authcId, final String password) {
+            final Context parentContext, final String authzId, final String password) throws LdapException {
+        final String authcId = formatter.apply(authzId);
         return connection
                 .bindAsync(newPlainSASLBindRequest(authcId, password.toCharArray())
                             .addControl(AuthorizationIdentityRequestControl.newControl(true)))

--
Gitblit v1.10.0