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/SearchThenBindStrategy.java |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/authz/SearchThenBindStrategy.java b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/authz/SearchThenBindStrategy.java
index c0f1d00..c2a1d76 100644
--- a/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/authz/SearchThenBindStrategy.java
+++ b/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/authz/SearchThenBindStrategy.java
@@ -35,7 +35,7 @@
 import org.forgerock.util.promise.Promise;
 
 /** Bind using the result of a search request computed from the current request/context. */
-public final class SearchThenBindStrategy implements AuthenticationStrategy {
+final class SearchThenBindStrategy implements AuthenticationStrategy {
     private final ConnectionFactory searchConnectionFactory;
     private final ConnectionFactory bindConnectionFactory;
 
@@ -70,7 +70,7 @@
 
     @Override
     public Promise<SecurityContext, LdapException> authenticate(final String username, final String password,
-            final Context parentContext, final AtomicReference<Connection> authenticatedConnectionHolder) {
+            final Context parentContext) {
         final AtomicReference<Connection> searchConnectionHolder = new AtomicReference<>();
         return searchConnectionFactory
                 .getConnectionAsync()
@@ -90,11 +90,12 @@
                     @Override
                     public Promise<SecurityContext, LdapException> apply(final SearchResultEntry searchResult)
                             throws LdapException {
+                        final AtomicReference<Connection> bindConnectionHolder = new AtomicReference<>();
                         return bindConnectionFactory
                                 .getConnectionAsync()
-                                .thenAsync(
-                                        doSimpleBind(authenticatedConnectionHolder, parentContext, username,
-                                                searchResult.getName(), password));
+                                .thenAsync(doSimpleBind(bindConnectionHolder, parentContext, username,
+                                                        searchResult.getName(), password))
+                                .thenFinally(close(bindConnectionHolder));
                     }
                 });
     }

--
Gitblit v1.10.0