From bd9eb5b766a77b8961c40541f53f53213ddf7bf5 Mon Sep 17 00:00:00 2001
From: Felix Sidokhine <felix.sidokhine@randstad.ca>
Date: Mon, 11 May 2020 12:32:30 +0300
Subject: [PATCH] fully functional AD and LDAP modules

---
 .../java/net/jami/jams/ad/connector/ADConnector.java  |  2 +-
 .../jams/ad/connector/service/UserProfileService.java | 11 ++++++++---
 .../main/java/net/jami/datastore/main/DataStore.java  |  2 +-
 .../common/authentication/AuthenticationSource.java   |  2 +-
 .../src/main/java/net/jami/jams/server/Server.java    | 10 +++++-----
 .../net/jami/jams/ldap/connector/LDAPConnector.java   |  2 +-
 .../ldap/connector/service/UserProfileService.java    | 10 +++++++---
 7 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java b/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java
index 0b270ced..29df5c55 100644
--- a/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java
+++ b/ad-connector/src/main/java/net/jami/jams/ad/connector/ADConnector.java
@@ -67,7 +67,7 @@ public class ADConnector implements AuthenticationSource {
     }
 
     @Override
-    public UserProfile getUserProfile(String queryString, String field) {
+    public UserProfile[] getUserProfile(String queryString, String field) {
         return userProfileService.getUserProfile(queryString,field);
     }
 
diff --git a/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java b/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java
index c686d807..1bac115c 100644
--- a/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java
+++ b/ad-connector/src/main/java/net/jami/jams/ad/connector/service/UserProfileService.java
@@ -32,8 +32,9 @@ public class UserProfileService {
         fieldMap.put("o","Organization");
     }
 
-    public UserProfile getUserProfile(String queryString, String field){
+    public UserProfile[] getUserProfile(String queryString, String field){
         Endpoint endpoint = ADConnector.getConnection();
+        UserProfile[] profiles = null;
         try{
             QueryRequest queryRequest = buildRequest(endpoint);
             Sentence sentence = null;
@@ -51,8 +52,12 @@ public class UserProfileService {
             try(Connector connector = new Connector(queryRequest)) {
                 queryResponse = connector.execute();
             }
-            List<Field> fields = queryResponse.getAll().stream().map(EntityResponse::getValue).collect(Collectors.toList()).get(0);
-            return profileFromResponse(fields);
+            List<List<Field>> results = queryResponse.getAll().stream().map(EntityResponse::getValue).collect(Collectors.toList());
+            if(results.size() > 0) profiles = new UserProfile[results.size()];
+            for(int i=0;i< profiles.length; i++){
+                profiles[i] = profileFromResponse(results.get(i));
+            }
+            return profiles;
         }
         catch (Exception e){
             log.error("Could not find entity with specified parameters.");
diff --git a/datastore/src/main/java/net/jami/datastore/main/DataStore.java b/datastore/src/main/java/net/jami/datastore/main/DataStore.java
index c8acdbe6..76ecca92 100644
--- a/datastore/src/main/java/net/jami/datastore/main/DataStore.java
+++ b/datastore/src/main/java/net/jami/datastore/main/DataStore.java
@@ -47,7 +47,7 @@ public class DataStore implements AuthenticationSource {
     }
 
     @Override
-    public UserProfile getUserProfile(String queryString, String field) {
+    public UserProfile[] getUserProfile(String queryString, String field) {
         return null;
     }
 
diff --git a/jams-common/src/main/java/net/jami/jams/common/authentication/AuthenticationSource.java b/jams-common/src/main/java/net/jami/jams/common/authentication/AuthenticationSource.java
index d2c95a25..ab1e1b5c 100644
--- a/jams-common/src/main/java/net/jami/jams/common/authentication/AuthenticationSource.java
+++ b/jams-common/src/main/java/net/jami/jams/common/authentication/AuthenticationSource.java
@@ -6,7 +6,7 @@ import net.jami.jams.common.objects.user.UserProfile;
 public interface AuthenticationSource {
 
     boolean createUser(User user);
-    UserProfile getUserProfile(String queryString, String field);
+    UserProfile[] getUserProfile(String queryString, String field);
     boolean authenticate(String username, String password);
     AuthenticationSourceInfo getInfo();
     boolean testConfiguration(String configuration);
diff --git a/jams-server/src/main/java/net/jami/jams/server/Server.java b/jams-server/src/main/java/net/jami/jams/server/Server.java
index ecb00bbb..49c01881 100644
--- a/jams-server/src/main/java/net/jami/jams/server/Server.java
+++ b/jams-server/src/main/java/net/jami/jams/server/Server.java
@@ -57,12 +57,12 @@ public class Server {
         try {
             InputStream path;
             ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-            path = classLoader.getResourceAsStream("ldapconfig.json");
-            userAuthenticationModule.attachLDAPAuthSource(new String(path.readAllBytes()));
-            UserProfile userProfile = userAuthenticationModule.getAuthenticationSources()
-                    .get(new AuthModuleKey("savoirfairelinux", AuthenticationSourceType.LDAP))
+            path = classLoader.getResourceAsStream("adsampleconfig.json");
+            userAuthenticationModule.attachADAuthSource(new String(path.readAllBytes()));
+            UserProfile[] userProfile = userAuthenticationModule.getAuthenticationSources()
+                    .get(new AuthModuleKey("SAVOIRFAIRELINU", AuthenticationSourceType.AD))
                     .getUserProfile("Sidokhine","FULL_TEXT_NAME");
-            System.out.println(userProfile);
+            System.out.println(userProfile[0]);
         } catch (Exception e) {
             log.error("Could not load and inject active directory connector with error: " + e.toString());
         }
diff --git a/ldap-connector/src/main/java/net/jami/jams/ldap/connector/LDAPConnector.java b/ldap-connector/src/main/java/net/jami/jams/ldap/connector/LDAPConnector.java
index 19421286..a1d38090 100644
--- a/ldap-connector/src/main/java/net/jami/jams/ldap/connector/LDAPConnector.java
+++ b/ldap-connector/src/main/java/net/jami/jams/ldap/connector/LDAPConnector.java
@@ -45,7 +45,7 @@ public class LDAPConnector implements AuthenticationSource {
     }
 
     @Override
-    public UserProfile getUserProfile(String queryString, String field) {
+    public UserProfile[] getUserProfile(String queryString, String field) {
         return userProfileService.getUserProfile(queryString,field);
     }
 
diff --git a/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java b/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java
index faff16aa..1f1f0471 100644
--- a/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java
+++ b/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java
@@ -29,7 +29,8 @@ public class UserProfileService {
         this.connectionFactory = connectionFactory;
     }
 
-    public UserProfile getUserProfile(String queryString, String field){
+    public UserProfile[] getUserProfile(String queryString, String field){
+        UserProfile[] profiles = null;
         Connection connection = null;
         try {
             connection = connectionFactory.getConnection();
@@ -37,8 +38,11 @@ public class UserProfileService {
                 connection.open();
                 SearchOperation search = new SearchOperation(connectionFactory);
                 SearchResponse res = search.execute(buildRequest(queryString,field));
-                if (res.getEntries().size() > 0) return profileFromResponse(res.getEntry());
-                return null;
+                if (res.getEntries().size() > 0) profiles = new UserProfile[res.getEntries().size()];
+                for(int i=0; i< profiles.length; i++){
+                    profiles[i] = profileFromResponse(res.getEntry());
+                }
+                return profiles;
             } catch (Exception e) {
                 log.error("Could not search LDAP directory with error " + e.toString());
                 return null;
-- 
GitLab