From 4ef0f42fc840d89891c843f9840e5f2ab2675036 Mon Sep 17 00:00:00 2001
From: Felix Sidokhine <felix.sidokhine@savoirfairelinux.com>
Date: Sun, 30 Aug 2020 12:34:35 +0300
Subject: [PATCH] fixed issue with missing annotation, cleaned up imports,
 added missing methods, added config to Device response

Change-Id: I0a9d4fe5d5c08b3bfc83531ca020aa2f2170b765
---
 .../net/jami/datastore/dao/DeviceDao.java     |  1 -
 .../java/net/jami/datastore/dao/JwtDao.java   |  4 --
 .../net/jami/datastore/dao/SystemDao.java     |  1 -
 .../jami/datastore/dao/UserProfileDao.java    |  2 -
 .../net/jami/datastore/main/DataStore.java    | 11 ++++-
 .../java/net/jami/datastore/dao/DAOTest.java  |  3 --
 .../common/annotations/PackageScanner.java    |  1 -
 .../ScopedServletAnnotationScanner.java       |  5 ++-
 .../responses/DeviceRegistrationResponse.java | 40 ++++++++++++++++++-
 .../jami/jams/common/objects/user/Group.java  |  3 --
 .../jami/jams/common/objects/user/Policy.java |  4 --
 .../jams/common/objects/user/PolicyData.java  | 26 ++++++++++++
 .../jami/jams/common/objects/user/User.java   |  1 +
 .../common/objects/user/UserGroupMapping.java |  6 ---
 .../jams/common/objects/user/UserProfile.java |  1 -
 .../common/objects/contacts/ContactTest.java  |  2 -
 .../java/net/jami/jams/server/Server.java     |  1 -
 .../jami/jams/server/core/TomcatLauncher.java |  1 -
 .../core/workflows/AddUserToGroupFlow.java    |  7 ----
 .../core/workflows/RegisterDeviceFlow.java    |  5 ++-
 .../directory/DirectoryEntryServlet.java      | 32 +++++++--------
 .../api/admin/group/GroupServlet.java         |  9 ++---
 .../api/admin/group/PolicyServlet.java        |  3 +-
 .../api/admin/update/UpdateServlet.java       |  2 -
 .../auth/directory/DirectoryEntryServlet.java | 19 +++++++++
 .../directory/SearchDirectoryServlet.java     |  7 ++--
 .../servlets/api/auth/user/UserServlet.java   |  1 -
 .../api/install/InstallLastStepServlet.java   |  1 -
 .../server/servlets/filters/CorsFilter.java   | 13 ------
 .../servlets/general/ServerStatusServlet.java |  1 -
 .../jams/server/update/UpdateInterface.java   |  1 -
 .../connector/service/UserProfileService.java |  4 --
 32 files changed, 125 insertions(+), 93 deletions(-)
 create mode 100644 jams-common/src/main/java/net/jami/jams/common/objects/user/PolicyData.java

diff --git a/datastore/src/main/java/net/jami/datastore/dao/DeviceDao.java b/datastore/src/main/java/net/jami/datastore/dao/DeviceDao.java
index 88fb2fce..8b2ff85b 100644
--- a/datastore/src/main/java/net/jami/datastore/dao/DeviceDao.java
+++ b/datastore/src/main/java/net/jami/datastore/dao/DeviceDao.java
@@ -30,7 +30,6 @@ import net.jami.jams.common.dao.connectivity.SQLConnection;
 import net.jami.jams.common.objects.devices.Device;
 
 import java.sql.PreparedStatement;
-import java.sql.SQLException;
 
 @Slf4j
 public class DeviceDao extends AbstractDao<Device> {
diff --git a/datastore/src/main/java/net/jami/datastore/dao/JwtDao.java b/datastore/src/main/java/net/jami/datastore/dao/JwtDao.java
index f989d057..33b0b0b7 100644
--- a/datastore/src/main/java/net/jami/datastore/dao/JwtDao.java
+++ b/datastore/src/main/java/net/jami/datastore/dao/JwtDao.java
@@ -25,12 +25,8 @@ package net.jami.datastore.dao;
 
 import com.nimbusds.jwt.SignedJWT;
 import lombok.extern.slf4j.Slf4j;
-import net.jami.datastore.main.DataStore;
 import net.jami.jams.common.dao.StatementList;
-import net.jami.jams.common.dao.connectivity.SQLConnection;
 
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
 import java.util.List;
 
 @Slf4j
diff --git a/datastore/src/main/java/net/jami/datastore/dao/SystemDao.java b/datastore/src/main/java/net/jami/datastore/dao/SystemDao.java
index 99becf31..65f7d7b8 100644
--- a/datastore/src/main/java/net/jami/datastore/dao/SystemDao.java
+++ b/datastore/src/main/java/net/jami/datastore/dao/SystemDao.java
@@ -30,7 +30,6 @@ import net.jami.jams.common.dao.connectivity.SQLConnection;
 import net.jami.jams.common.objects.system.SystemAccount;
 
 import java.sql.PreparedStatement;
-import java.sql.SQLException;
 
 @Slf4j
 public class SystemDao extends AbstractDao<SystemAccount> {
diff --git a/datastore/src/main/java/net/jami/datastore/dao/UserProfileDao.java b/datastore/src/main/java/net/jami/datastore/dao/UserProfileDao.java
index 9e278045..56d06de6 100644
--- a/datastore/src/main/java/net/jami/datastore/dao/UserProfileDao.java
+++ b/datastore/src/main/java/net/jami/datastore/dao/UserProfileDao.java
@@ -25,13 +25,11 @@ package net.jami.datastore.dao;
 
 import lombok.extern.slf4j.Slf4j;
 import net.jami.datastore.main.DataStore;
-import net.jami.jams.common.dao.StatementElement;
 import net.jami.jams.common.dao.StatementList;
 import net.jami.jams.common.dao.connectivity.SQLConnection;
 import net.jami.jams.common.objects.user.UserProfile;
 
 import java.sql.PreparedStatement;
-import java.sql.SQLException;
 
 @Slf4j
 public class UserProfileDao extends AbstractDao<UserProfile> {
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 fb1c51c8..f0a5cb48 100644
--- a/datastore/src/main/java/net/jami/datastore/main/DataStore.java
+++ b/datastore/src/main/java/net/jami/datastore/main/DataStore.java
@@ -24,7 +24,15 @@ package net.jami.datastore.main;
 
 import lombok.Getter;
 import lombok.Setter;
-import net.jami.datastore.dao.*;
+import net.jami.datastore.dao.ContactDao;
+import net.jami.datastore.dao.DeviceDao;
+import net.jami.datastore.dao.GroupDao;
+import net.jami.datastore.dao.JwtDao;
+import net.jami.datastore.dao.PolicyDao;
+import net.jami.datastore.dao.SystemDao;
+import net.jami.datastore.dao.UserDao;
+import net.jami.datastore.dao.UserGroupMappingsDao;
+import net.jami.datastore.dao.UserProfileDao;
 import net.jami.jams.common.authentication.AuthenticationSource;
 import net.jami.jams.common.authentication.AuthenticationSourceInfo;
 import net.jami.jams.common.authentication.AuthenticationSourceType;
@@ -35,7 +43,6 @@ import net.jami.jams.common.objects.user.User;
 import net.jami.jams.common.objects.user.UserProfile;
 import org.flywaydb.core.Flyway;
 
-import java.util.Arrays;
 import java.util.List;
 
 @Getter
diff --git a/datastore/src/test/java/net/jami/datastore/dao/DAOTest.java b/datastore/src/test/java/net/jami/datastore/dao/DAOTest.java
index 3902fa90..de5eeff8 100644
--- a/datastore/src/test/java/net/jami/datastore/dao/DAOTest.java
+++ b/datastore/src/test/java/net/jami/datastore/dao/DAOTest.java
@@ -22,7 +22,6 @@
 */
 package net.jami.datastore.dao;
 
-import com.jsoniter.JsonIterator;
 import net.jami.datastore.main.DataStore;
 import net.jami.jams.common.authentication.AuthenticationSourceType;
 import net.jami.jams.common.dao.StatementElement;
@@ -31,13 +30,11 @@ import net.jami.jams.common.objects.devices.Device;
 import net.jami.jams.common.objects.user.AccessLevel;
 import net.jami.jams.common.objects.user.User;
 import net.jami.jams.common.utils.X509Utils;
-import org.flywaydb.core.Flyway;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
 import java.io.InputStream;
-import java.util.ArrayList;
 
 class DAOTest {
 
diff --git a/jams-common/src/main/java/net/jami/jams/common/annotations/PackageScanner.java b/jams-common/src/main/java/net/jami/jams/common/annotations/PackageScanner.java
index 6e680edc..5204358e 100644
--- a/jams-common/src/main/java/net/jami/jams/common/annotations/PackageScanner.java
+++ b/jams-common/src/main/java/net/jami/jams/common/annotations/PackageScanner.java
@@ -25,7 +25,6 @@ package net.jami.jams.common.annotations;
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
diff --git a/jams-common/src/main/java/net/jami/jams/common/annotations/ScopedServletAnnotationScanner.java b/jams-common/src/main/java/net/jami/jams/common/annotations/ScopedServletAnnotationScanner.java
index 22af00b8..cd2eef11 100644
--- a/jams-common/src/main/java/net/jami/jams/common/annotations/ScopedServletAnnotationScanner.java
+++ b/jams-common/src/main/java/net/jami/jams/common/annotations/ScopedServletAnnotationScanner.java
@@ -22,12 +22,15 @@
 */
 package net.jami.jams.common.annotations;
 
-import javassist.*;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.CtMethod;
 import javassist.bytecode.AnnotationsAttribute;
 import javassist.bytecode.AttributeInfo;
 import javassist.bytecode.MethodInfo;
 import javassist.bytecode.annotation.Annotation;
 import lombok.extern.slf4j.Slf4j;
+
 import java.util.ArrayList;
 
 @Slf4j
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/responses/DeviceRegistrationResponse.java b/jams-common/src/main/java/net/jami/jams/common/objects/responses/DeviceRegistrationResponse.java
index aa0f9bb4..29533cc0 100644
--- a/jams-common/src/main/java/net/jami/jams/common/objects/responses/DeviceRegistrationResponse.java
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/responses/DeviceRegistrationResponse.java
@@ -22,8 +22,10 @@
 */
 package net.jami.jams.common.objects.responses;
 
+import com.jsoniter.JsonIterator;
 import lombok.Getter;
 import lombok.Setter;
+import net.jami.jams.common.objects.user.PolicyData;
 import net.jami.jams.common.utils.X509Utils;
 
 import java.security.cert.X509Certificate;
@@ -38,7 +40,23 @@ public class DeviceRegistrationResponse {
     private String deviceReceipt;
     private String receiptSignature;
     private String userPhoto;
-    private String policy;
+    //Backward compatibility fix so all the fields are included here.
+    private Boolean allowPeersFromHistory;
+    private Boolean allowPeersFromTrusted;
+    private Boolean proxyEnabled;
+    private String  dhtProxyListUrl;
+    private String  proxyServer;
+    private Boolean accountPublish;
+    private Boolean autoAnswer;
+    private String  turnServer;
+    private String  turnServerUserName;
+    private String  turnServerPassword;
+    private Boolean videoEnabled;
+    private Boolean turnEnabled;
+    private Boolean allowPeersFromContact;
+    private Boolean accountDiscovery;
+    private Boolean peerDiscovery;
+    private Boolean upnpEnabled;
 
     public void setCertificateChain(X509Certificate[] certificateChain){
         StringBuilder stringBuilder = new StringBuilder();
@@ -50,5 +68,25 @@ public class DeviceRegistrationResponse {
         this.certificateChain = stringBuilder.toString();
     }
 
+    public void setPolicyData(String policyData){
+        PolicyData policy = JsonIterator.deserialize(policyData,PolicyData.class);
+        this.allowPeersFromHistory = policy.getAllowPeersFromHistory();
+        this.allowPeersFromTrusted = policy.getAllowPeersFromTrusted();
+        this.proxyEnabled = policy.getProxyEnabled();
+        this.dhtProxyListUrl = policy.getDhtProxyListUrl();
+        this.proxyServer = policy.getProxyServer();
+        this.accountPublish = policy.getAccountPublish();
+        this.autoAnswer = policy.getAutoAnswer();
+        this.turnServer = policy.getTurnServer();
+        this.turnServerUserName = policy.getTurnServerUserName();
+        this.turnServerPassword = policy.getTurnServerPassword();
+        this.videoEnabled = policy.getVideoEnabled();
+        this.turnEnabled = policy.getTurnEnabled();
+        this.allowPeersFromContact = policy.getAllowPeersFromContact();
+        this.accountDiscovery = policy.getAccountDiscovery();
+        this.peerDiscovery = policy.getPeerDiscovery();
+        this.upnpEnabled = policy.getUpnpEnabled();
+    }
+
 
 }
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/user/Group.java b/jams-common/src/main/java/net/jami/jams/common/objects/user/Group.java
index e01e18c4..0bd5a5d8 100644
--- a/jams-common/src/main/java/net/jami/jams/common/objects/user/Group.java
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/user/Group.java
@@ -4,10 +4,7 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
-import net.jami.jams.common.authentication.AuthenticationSourceType;
-import net.jami.jams.common.objects.roots.X509Entity;
 import net.jami.jams.common.serialization.database.DatabaseObject;
-import net.jami.jams.common.utils.X509Utils;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/user/Policy.java b/jams-common/src/main/java/net/jami/jams/common/objects/user/Policy.java
index 6f9c9226..b25f79e3 100644
--- a/jams-common/src/main/java/net/jami/jams/common/objects/user/Policy.java
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/user/Policy.java
@@ -4,11 +4,7 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
-import net.jami.jams.common.objects.roots.X509Entity;
 import net.jami.jams.common.serialization.database.DatabaseObject;
-import net.minidev.json.JSONArray;
-import net.minidev.json.JSONObject;
-import net.minidev.json.parser.JSONParser;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/user/PolicyData.java b/jams-common/src/main/java/net/jami/jams/common/objects/user/PolicyData.java
new file mode 100644
index 00000000..7198e403
--- /dev/null
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/user/PolicyData.java
@@ -0,0 +1,26 @@
+package net.jami.jams.common.objects.user;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class PolicyData {
+
+    private Boolean allowPeersFromHistory;
+    private Boolean allowPeersFromTrusted;
+    private Boolean proxyEnabled;
+    private String  dhtProxyListUrl;
+    private String proxyServer;
+    private Boolean accountPublish;
+    private Boolean autoAnswer;
+    private String turnServer;
+    private String turnServerUserName;
+    private String turnServerPassword;
+    private Boolean videoEnabled;
+    private Boolean turnEnabled;
+    private Boolean allowPeersFromContact;
+    private Boolean accountDiscovery;
+    private Boolean peerDiscovery;
+    private Boolean upnpEnabled;
+}
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/user/User.java b/jams-common/src/main/java/net/jami/jams/common/objects/user/User.java
index 0fe93e3d..b7404ce2 100644
--- a/jams-common/src/main/java/net/jami/jams/common/objects/user/User.java
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/user/User.java
@@ -31,6 +31,7 @@ import net.jami.jams.common.objects.roots.BlockchainEntity;
 import net.jami.jams.common.objects.roots.X509Entity;
 import net.jami.jams.common.serialization.database.DatabaseObject;
 import net.jami.jams.common.utils.X509Utils;
+
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/user/UserGroupMapping.java b/jams-common/src/main/java/net/jami/jams/common/objects/user/UserGroupMapping.java
index c09db112..15162888 100644
--- a/jams-common/src/main/java/net/jami/jams/common/objects/user/UserGroupMapping.java
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/user/UserGroupMapping.java
@@ -1,19 +1,13 @@
 package net.jami.jams.common.objects.user;
 
-import com.jsoniter.JsonIterator;
-import com.jsoniter.output.JsonStream;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import net.jami.jams.common.serialization.database.DatabaseObject;
-import net.minidev.json.JSONArray;
-import net.minidev.json.JSONObject;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
-import java.util.Arrays;
-import java.util.List;
 
 @AllArgsConstructor
 @NoArgsConstructor
diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java b/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java
index be3f1321..3ed4f1dd 100644
--- a/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java
+++ b/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java
@@ -22,7 +22,6 @@
 */
 package net.jami.jams.common.objects.user;
 
-import com.jsoniter.JsonIterator;
 import com.jsoniter.annotation.JsonIgnore;
 import com.jsoniter.output.JsonStream;
 import ezvcard.Ezvcard;
diff --git a/jams-common/src/test/java/net/jami/jams/common/objects/contacts/ContactTest.java b/jams-common/src/test/java/net/jami/jams/common/objects/contacts/ContactTest.java
index 88ac4ae8..a2a84931 100644
--- a/jams-common/src/test/java/net/jami/jams/common/objects/contacts/ContactTest.java
+++ b/jams-common/src/test/java/net/jami/jams/common/objects/contacts/ContactTest.java
@@ -12,8 +12,6 @@ import org.junit.jupiter.api.Test;
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.junit.jupiter.api.Assertions.*;
-
 class ContactTest {
 
     @BeforeAll
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 450f1a39..32c29703 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
@@ -32,7 +32,6 @@ import net.jami.jams.common.authentication.local.LocalAuthSettings;
 import net.jami.jams.common.authmodule.AuthenticationModule;
 import net.jami.jams.common.cryptoengineapi.CertificateAuthority;
 import net.jami.jams.common.jami.NameServer;
-import net.jami.jams.common.serialization.JsoniterRegistry;
 import net.jami.jams.common.server.ServerSettings;
 import net.jami.jams.common.utils.LibraryLoader;
 import net.jami.jams.nameserver.LocalNameServer;
diff --git a/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java b/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java
index 0f3e9783..b91bbb1e 100644
--- a/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java
+++ b/jams-server/src/main/java/net/jami/jams/server/core/TomcatLauncher.java
@@ -28,7 +28,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.catalina.WebResourceRoot;
 import org.apache.catalina.connector.Connector;
 import org.apache.catalina.core.StandardContext;
-import org.apache.catalina.filters.CorsFilter;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.webresources.DirResourceSet;
 import org.apache.catalina.webresources.JarResourceSet;
diff --git a/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java b/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java
index f3dae339..cd154ff9 100644
--- a/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java
+++ b/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java
@@ -1,20 +1,13 @@
 package net.jami.jams.server.core.workflows;
 
-
 import lombok.extern.slf4j.Slf4j;
-import net.jami.jams.common.authentication.AuthenticationSource;
-import net.jami.jams.common.authmodule.AuthModuleKey;
 import net.jami.jams.common.dao.StatementElement;
 import net.jami.jams.common.dao.StatementList;
-import net.jami.jams.common.objects.user.Group;
-import net.jami.jams.common.objects.user.User;
 import net.jami.jams.common.objects.user.UserGroupMapping;
 import net.jami.jams.common.objects.user.UserProfile;
-import net.minidev.json.JSONArray;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 import static net.jami.jams.server.Server.dataStore;
 import static net.jami.jams.server.Server.userAuthenticationModule;
diff --git a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java
index 0b1ce55a..b1f4a5e2 100644
--- a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java
+++ b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java
@@ -22,6 +22,7 @@
 */
 package net.jami.jams.server.core.workflows;
 
+import com.jsoniter.JsonIterator;
 import lombok.extern.slf4j.Slf4j;
 import net.jami.jams.common.authmodule.AuthModuleKey;
 import net.jami.jams.common.dao.StatementElement;
@@ -29,8 +30,8 @@ import net.jami.jams.common.dao.StatementList;
 import net.jami.jams.common.objects.devices.Device;
 import net.jami.jams.common.objects.requests.DeviceRegistrationRequest;
 import net.jami.jams.common.objects.responses.DeviceRegistrationResponse;
-import net.jami.jams.common.objects.user.Group;
 import net.jami.jams.common.objects.user.Policy;
+import net.jami.jams.common.objects.user.PolicyData;
 import net.jami.jams.common.objects.user.User;
 import net.jami.jams.common.objects.user.UserProfile;
 import net.jami.jams.dht.DeviceReceiptGenerator;
@@ -74,7 +75,7 @@ public class RegisterDeviceFlow {
                 StatementList statementList1 = new StatementList();
                 statementList1.addStatement(st);
                 Policy policy = dataStore.getPolicyDao().getObjects(statementList1).get(0);
-                response.setPolicy(policy.getPolicyData());
+                response.setPolicyData(policy.getPolicyData());
             });
             //We need to set the device receipt....
             String[] devReceipt = DeviceReceiptGenerator.generateReceipt(user.getPrivateKey(), user.getCertificate().getPublicKey(),
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java
index 2e77ff26..929d42a8 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/directory/DirectoryEntryServlet.java
@@ -45,8 +45,8 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Scanner;
 
-import static net.jami.jams.server.Server.userAuthenticationModule;
 import static net.jami.jams.server.Server.dataStore;
+import static net.jami.jams.server.Server.userAuthenticationModule;
 
 @Slf4j
 @WebServlet("/api/admin/directory/entry")
@@ -84,25 +84,21 @@ public class DirectoryEntryServlet extends HttpServlet {
     }
 
     @Override
-    protected void doPut(HttpServletRequest req, HttpServletResponse resp) {
+    @ScopedServletMethod(securityGroups = {AccessLevel.ADMIN})
+    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException {
         //Update a user's profile.
-        try{
-            //Check if he is AD/LDAP - then return a 500, because we can't update those profile datas.
-            UserProfile userProfile = JsonIterator.deserialize(req.getInputStream().readAllBytes(), UserProfile.class);
-            StatementList select = new StatementList();
-            StatementElement st = new StatementElement("username","=",userProfile.getUsername(),"");
-            select.addStatement(st);
-            if(dataStore.getUserDao().getObjects(select).get(0).getUserType() != AuthenticationSourceType.LOCAL){
-                resp.sendError(500,"The user is not a local user, therefore we cannot change his data!");
-                return;
-            }
-            if(dataStore.updateUserProfile(userProfile))
-                resp.setStatus(200);
-            else resp.sendError(500,"could not update the users's profile information");
-        }
-        catch(Exception e){
-            System.out.println(e);
+        //Check if he is AD/LDAP - then return a 500, because we can't update those profile datas.
+        UserProfile userProfile = JsonIterator.deserialize(req.getInputStream().readAllBytes(), UserProfile.class);
+        StatementList select = new StatementList();
+        StatementElement st = new StatementElement("username","=",userProfile.getUsername(),"");
+        select.addStatement(st);
+        if(dataStore.getUserDao().getObjects(select).get(0).getUserType() != AuthenticationSourceType.LOCAL){
+            resp.sendError(500,"The user is not a local user, therefore we cannot change his data!");
+            return;
         }
+        if(dataStore.updateUserProfile(userProfile))
+            resp.setStatus(200);
+        else resp.sendError(500,"could not update the users's profile information");
 
     }
 
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java
index efb4509a..d171bebc 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java
@@ -11,16 +11,15 @@ import net.jami.jams.common.annotations.JsonContent;
 import net.jami.jams.common.annotations.ScopedServletMethod;
 import net.jami.jams.common.dao.StatementElement;
 import net.jami.jams.common.dao.StatementList;
-import net.jami.jams.common.objects.user.*;
-import net.jami.jams.common.serialization.tomcat.TomcatCustomErrorHandler;
+import net.jami.jams.common.objects.user.AccessLevel;
+import net.jami.jams.common.objects.user.Group;
+import net.jami.jams.common.objects.user.UserGroupMapping;
+import net.jami.jams.common.objects.user.UserProfile;
 import net.jami.jams.server.core.workflows.AddUserToGroupFlow;
-import net.jami.jams.server.core.workflows.RegisterDeviceFlow;
-import net.jami.jams.common.annotations.JsonContent;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.UUID;
 import java.util.stream.Collectors;
 
 import static net.jami.jams.server.Server.dataStore;
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyServlet.java
index a97ecb99..916050ce 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/PolicyServlet.java
@@ -10,7 +10,8 @@ import net.jami.jams.common.annotations.JsonContent;
 import net.jami.jams.common.annotations.ScopedServletMethod;
 import net.jami.jams.common.dao.StatementElement;
 import net.jami.jams.common.dao.StatementList;
-import net.jami.jams.common.objects.user.*;
+import net.jami.jams.common.objects.user.AccessLevel;
+import net.jami.jams.common.objects.user.Policy;
 import org.json.JSONObject;
 
 import java.io.IOException;
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/update/UpdateServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/update/UpdateServlet.java
index e6ffcf3e..12419d10 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/update/UpdateServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/update/UpdateServlet.java
@@ -28,12 +28,10 @@ import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
-import net.jami.jams.ca.JamsCA;
 import net.jami.jams.common.annotations.JsonContent;
 import net.jami.jams.common.annotations.ScopedServletMethod;
 import net.jami.jams.common.objects.user.AccessLevel;
 import net.jami.jams.common.updater.FullSystemStatusResponse;
-import net.jami.jams.server.Server;
 
 import java.io.IOException;
 
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/DirectoryEntryServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/DirectoryEntryServlet.java
index aa73eaf5..735bb96a 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/DirectoryEntryServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/DirectoryEntryServlet.java
@@ -30,12 +30,16 @@ import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import net.jami.jams.common.authentication.AuthenticationSourceType;
 import net.jami.jams.common.authmodule.AuthModuleKey;
+import net.jami.jams.common.dao.StatementElement;
+import net.jami.jams.common.dao.StatementList;
+import net.jami.jams.common.objects.user.User;
 import net.jami.jams.common.objects.user.UserProfile;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+import static net.jami.jams.server.Server.dataStore;
 import static net.jami.jams.server.Server.userAuthenticationModule;
 
 //This is an endpoint to manipulate directory entry-data, this make sense only for local setups.
@@ -191,6 +195,21 @@ public class DirectoryEntryServlet extends HttpServlet {
      */
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        if(req.getParameter("jamiId") != null){
+            StatementList statementList = new StatementList();
+            StatementElement statementElement = new StatementElement("jamiId","=",req.getParameter("jamiId"),null);
+            statementList.addStatement(statementElement);
+            User user = dataStore.getUserDao().getObjects(statementList).get(0);
+            List<UserProfile> userProfiles = new ArrayList<>();
+            userAuthenticationModule.getAuthSources().forEach((k, v) -> {
+                userProfiles.addAll(v.searchUserProfiles(user.getUsername(), "LOGON_NAME"));
+            });
+            if(req.getParameter("format") != null && req.getParameter("format").equals("vcard")){
+                resp.getOutputStream().write(userProfiles.get(0).getAsVCard().getBytes());
+            }
+            else resp.getOutputStream().write(JsonStream.serialize(userProfiles.get(0)).getBytes());
+            return;
+        }
         if (req.getParameter("directory") != null && req.getParameter("directoryType") != null) {
             List<UserProfile> profiles = userAuthenticationModule.getAuthSources()
                     .get(new AuthModuleKey(req.getParameter("directory"), AuthenticationSourceType.fromString(req.getParameter("directoryType"))))
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java
index 89309eb7..b63f692d 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java
@@ -28,17 +28,18 @@ import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
+import net.jami.jams.common.annotations.JsonContent;
 import net.jami.jams.common.dao.StatementElement;
 import net.jami.jams.common.dao.StatementList;
 import net.jami.jams.common.objects.user.AccessLevel;
 import net.jami.jams.common.objects.user.User;
-import net.jami.jams.common.annotations.JsonContent;
 import net.jami.jams.common.objects.user.UserGroupMapping;
 import net.jami.jams.common.objects.user.UserProfile;
 
 import java.io.IOException;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 import static net.jami.jams.server.Server.dataStore;
 import static net.jami.jams.server.Server.nameServer;
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/user/UserServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/user/UserServlet.java
index 39baf1f0..c732284e 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/user/UserServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/user/UserServlet.java
@@ -34,7 +34,6 @@ import net.jami.jams.common.dao.StatementElement;
 import net.jami.jams.common.dao.StatementList;
 import net.jami.jams.common.objects.user.AccessLevel;
 import net.jami.jams.common.objects.user.User;
-import net.jami.jams.common.utils.PasswordGenerator;
 
 import java.io.IOException;
 
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/install/InstallLastStepServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/install/InstallLastStepServlet.java
index 86a07e90..7a3ae218 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/install/InstallLastStepServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/install/InstallLastStepServlet.java
@@ -27,7 +27,6 @@ import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
-import net.jami.jams.ca.JamsCA;
 import net.jami.jams.common.annotations.JsonContent;
 import net.jami.jams.common.annotations.ScopedServletMethod;
 import net.jami.jams.common.objects.user.AccessLevel;
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/CorsFilter.java b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/CorsFilter.java
index a4f0fe0d..9325a9a0 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/CorsFilter.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/CorsFilter.java
@@ -1,21 +1,8 @@
 package net.jami.jams.server.servlets.filters;
 
-import jakarta.servlet.FilterConfig;
-import jakarta.servlet.ServletContext;
-import jakarta.servlet.ServletException;
 import jakarta.servlet.annotation.WebFilter;
 import jakarta.servlet.annotation.WebInitParam;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-
 @WebFilter(urlPatterns = {"*"}, initParams={@WebInitParam(name = "cors.allowed.origins",value = "*")})
 public class CorsFilter extends org.apache.catalina.filters.CorsFilter {
 }
diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/general/ServerStatusServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/general/ServerStatusServlet.java
index de608648..8bcc524f 100644
--- a/jams-server/src/main/java/net/jami/jams/server/servlets/general/ServerStatusServlet.java
+++ b/jams-server/src/main/java/net/jami/jams/server/servlets/general/ServerStatusServlet.java
@@ -27,7 +27,6 @@ import jakarta.servlet.annotation.WebServlet;
 import jakarta.servlet.http.HttpServlet;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
-import net.jami.jams.ca.JamsCA;
 import net.jami.jams.common.annotations.JsonContent;
 import net.jami.jams.server.Server;
 
diff --git a/jams-server/src/main/java/net/jami/jams/server/update/UpdateInterface.java b/jams-server/src/main/java/net/jami/jams/server/update/UpdateInterface.java
index 1a10e5d4..e54e92ed 100644
--- a/jams-server/src/main/java/net/jami/jams/server/update/UpdateInterface.java
+++ b/jams-server/src/main/java/net/jami/jams/server/update/UpdateInterface.java
@@ -6,7 +6,6 @@ import org.zeromq.SocketType;
 import org.zeromq.ZMQ;
 
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.logging.Logger;
 
 @Getter
 @Setter
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 854944b0..553d7096 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
@@ -32,11 +32,7 @@ import org.ldaptive.SearchOperation;
 import org.ldaptive.SearchRequest;
 import org.ldaptive.SearchResponse;
 
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
 
-- 
GitLab