From d9e43dedc0078d2189b56c8e07e398f7bac82417 Mon Sep 17 00:00:00 2001
From: Felix Sidokhine <felix.sidokhine@randstad.ca>
Date: Mon, 11 May 2020 13:24:39 +0300
Subject: [PATCH] made field mappings configurable

---
 .../jami/jams/ad/connector/ADConnector.java   |  2 +-
 .../connector/service/UserProfileService.java | 14 +----------
 .../ActiveDirectorySettings.java              |  5 ++++
 .../authentication/ldap/LDAPSettings.java     |  3 +++
 .../src/main/resources/adsampleconfig.json    | 23 ++++++++++++++-----
 .../src/main/resources/ldapconfig.json        | 13 ++++++++++-
 .../connector/service/UserProfileService.java | 14 +----------
 7 files changed, 40 insertions(+), 34 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 29df5c55..2be71eb9 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
@@ -19,7 +19,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
 public class ADConnector implements AuthenticationSource {
 
     private static final ConcurrentLinkedQueue<Endpoint> endpoints = new ConcurrentLinkedQueue<>();
-    private static ActiveDirectorySettings settings;
+    public static ActiveDirectorySettings settings;
     private final AuthenticationService authenticationService = new AuthenticationService();
     private final UserProfileService userProfileService = new UserProfileService();
 
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 1bac115c..ee7e1ba9 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
@@ -18,19 +18,7 @@ import java.util.stream.Collectors;
 @Slf4j
 public class UserProfileService {
 
-    private static final HashMap<String,String> fieldMap = new HashMap<>();
-
-    static{
-        fieldMap.put("givenname","FirstName");
-        fieldMap.put("sn","LastName");
-        fieldMap.put("thumbnailPhoto","ProfilePicture");
-        fieldMap.put("mail","Email");
-        fieldMap.put("telephoneNumber","PhoneNumber");
-        fieldMap.put("mobile","MobileNumber");
-        fieldMap.put("facsimileTelephoneNumber","FaxNumber");
-        fieldMap.put("extensionName","PhoneNumberExtension");
-        fieldMap.put("o","Organization");
-    }
+    private static final HashMap<String,String> fieldMap = ADConnector.settings.getFieldMappings();
 
     public UserProfile[] getUserProfile(String queryString, String field){
         Endpoint endpoint = ADConnector.getConnection();
diff --git a/jams-common/src/main/java/net/jami/jams/common/authentication/activedirectory/ActiveDirectorySettings.java b/jams-common/src/main/java/net/jami/jams/common/authentication/activedirectory/ActiveDirectorySettings.java
index 55e262ba..bf1303d3 100644
--- a/jams-common/src/main/java/net/jami/jams/common/authentication/activedirectory/ActiveDirectorySettings.java
+++ b/jams-common/src/main/java/net/jami/jams/common/authentication/activedirectory/ActiveDirectorySettings.java
@@ -3,13 +3,18 @@ package net.jami.jams.common.authentication.activedirectory;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.HashMap;
+
 @Getter
 @Setter
 public class ActiveDirectorySettings {
+
     private Boolean ssl;
     private int     port;
     private String  realm;
     private String  host;
     private String  username;
     private String  password;
+    private HashMap<String,String> fieldMappings;
+
 }
diff --git a/jams-common/src/main/java/net/jami/jams/common/authentication/ldap/LDAPSettings.java b/jams-common/src/main/java/net/jami/jams/common/authentication/ldap/LDAPSettings.java
index f4fd0fc4..b4408782 100644
--- a/jams-common/src/main/java/net/jami/jams/common/authentication/ldap/LDAPSettings.java
+++ b/jams-common/src/main/java/net/jami/jams/common/authentication/ldap/LDAPSettings.java
@@ -3,6 +3,8 @@ package net.jami.jams.common.authentication.ldap;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.HashMap;
+
 @Getter
 @Setter
 public class LDAPSettings {
@@ -14,5 +16,6 @@ public class LDAPSettings {
     private String  username;
     private String  password;
     private String  usernameField;
+    private HashMap<String,String> fieldMappings;
 
 }
diff --git a/jams-server/src/main/resources/adsampleconfig.json b/jams-server/src/main/resources/adsampleconfig.json
index b6ca19bf..bbb28b99 100644
--- a/jams-server/src/main/resources/adsampleconfig.json
+++ b/jams-server/src/main/resources/adsampleconfig.json
@@ -1,10 +1,21 @@
 {
- "ssl": false,
- "port" : 389,
- "realm": "SAVOIRFAIRELINU",
- "host": "192.168.49.151",
- "username": "cn=Administrator,cn=Users,dc=savoirfairelinux,dc=net",
- "password": "abc123!"
+  "ssl": false,
+  "port": 389,
+  "realm": "SAVOIRFAIRELINU",
+  "host": "192.168.49.151",
+  "username": "cn=Administrator,cn=Users,dc=savoirfairelinux,dc=net",
+  "password": "abc123!",
+  "fieldMappings": {
+    "givenname": "FirstName",
+    "sn": "LastName",
+    "thumbnailPhoto": "ProfilePicture",
+    "mail": "Email",
+    "telephoneNumber": "PhoneNumber",
+    "mobile": "MobileNumber",
+    "facsimileTelephoneNumber": "FaxNumber",
+    "extensionName": "PhoneNumberExtension",
+    "o": "Organization"
+  }
 }
 
 
diff --git a/jams-server/src/main/resources/ldapconfig.json b/jams-server/src/main/resources/ldapconfig.json
index 54a125b2..18c12f0b 100644
--- a/jams-server/src/main/resources/ldapconfig.json
+++ b/jams-server/src/main/resources/ldapconfig.json
@@ -5,5 +5,16 @@
   "host": "ldap://annuaire.savoirfairelinux.com",
   "username": "cn=sipallow,ou=dsa,dc=savoirfairelinux,dc=net",
   "password": "Dewaaghei3Yo",
-  "usernameField": "uid"
+  "usernameField": "uid",
+  "fieldMappings": {
+    "givenName":"FirstName",
+    "sn":"LastName",
+    "jpegPhoto":"ProfilePicture",
+    "mail":"Email",
+    "telephoneNumber":"PhoneNumber",
+    "mobile":"MobileNumber",
+    "facsimileTelephoneNumber":"FaxNumber",
+    "extensionName":"PhoneNumberExtension",
+    "o":"Organization"
+  }
 }
\ No newline at end of file
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 95c2e043..68e7ebe8 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
@@ -14,21 +14,9 @@ import java.util.Iterator;
 @Slf4j
 public class UserProfileService {
 
-    private static final HashMap<String,String> fieldMap = new HashMap<>();
+    private static final HashMap<String,String> fieldMap = LDAPConnector.settings.getFieldMappings();
     private final ConnectionFactory connectionFactory;
 
-    static{
-        fieldMap.put("givenName","FirstName");
-        fieldMap.put("sn","LastName");
-        fieldMap.put("jpegPhoto","ProfilePicture");
-        fieldMap.put("mail","Email");
-        fieldMap.put("telephoneNumber","PhoneNumber");
-        fieldMap.put("mobile","MobileNumber");
-        fieldMap.put("facsimileTelephoneNumber","FaxNumber");
-        fieldMap.put("extensionName","PhoneNumberExtension");
-        fieldMap.put("o","Organization");
-    }
-
     public UserProfileService(ConnectionFactory connectionFactory) {
         this.connectionFactory = connectionFactory;
     }
-- 
GitLab