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 c38cd92a9a1a6e073da157c9ad7fc7c917fe87db..39685be4b90713033f0573035de2b05579312a28 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 @@ -200,19 +200,23 @@ public class UserProfileService { public void synchronizeUsersWithAD() { log.info("Synchronizing Active Directory user profiles"); // Fetch all users from the Active Directory - List<UserProfile> profilesFromResponse = + List<UserProfile> profilesFromAD = getUserProfile("*", "LOGON_NAME", false, Optional.empty()); - // There is a use case where a user is not in the LDAP directory but is in the database. - // When this happens, we need to revoke the user from the database. - List<UserProfile> profilesFromDatabase = dataStore.getUserProfileDao().getAllUserProfile(); - for (UserProfile p : profilesFromDatabase) { - if (profilesFromResponse.stream() - .noneMatch(r -> r.getUsername().equals(p.getUsername()))) { - log.info("Revoking user " + p.getUsername() + " from the database."); - RevokeUserFlow.revokeUser(p.getUsername()); - // We also remove the user from the local_directory table to avoid duplicate - // revocations - dataStore.getUserProfileDao().deleteUserProfile(p.getUsername()); + // Do not revoke users if there is an error, the AD server could be down. + if (profilesFromAD != null) { + // There is a use case where a user is not in the AD server but is in the database. + // When this happens, we need to revoke the user from the database. + List<UserProfile> profilesFromDatabase = + dataStore.getUserProfileDao().getAllUserProfile(); + for (UserProfile p : profilesFromDatabase) { + if (profilesFromAD.stream() + .noneMatch(r -> r.getUsername().equals(p.getUsername()))) { + log.info("Revoking user " + p.getUsername() + " from the database."); + RevokeUserFlow.revokeUser(p.getUsername()); + // We also remove the user from the local_directory table to avoid duplicate + // revocations + dataStore.getUserProfileDao().deleteUserProfile(p.getUsername()); + } } } } 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 c4c9917c83c6675adae39f866f1fcda245ac9286..47c16bc2f399344432d23bb068320fdaf57028c3 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 @@ -152,16 +152,21 @@ public class UserProfileService { // Fetcg all users from the LDAP List<UserProfile> profilesFromLDAP = getUserProfile("*", "LOGON_NAME", false, Optional.empty()); - // There is a use case where a user is not in the LDAP directory but is in the database. - // When this happens, we need to revoke the user from the database. - List<UserProfile> profilesFromDatabase = dataStore.getUserProfileDao().getAllUserProfile(); - for (UserProfile p : profilesFromDatabase) { - if (profilesFromLDAP.stream().noneMatch(r -> r.getUsername().equals(p.getUsername()))) { - log.info("Revoking user " + p.getUsername() + " from the database."); - RevokeUserFlow.revokeUser(p.getUsername()); - // We also remove the user from the local_directory table to avoid duplicate - // revocations - dataStore.getUserProfileDao().deleteUserProfile(p.getUsername()); + // Do not revoke users if there is an error, the LDAP server could be down. + if (profilesFromLDAP != null) { + // There is a use case where a user is not in the LDAP server but is in the database. + // When this happens, we need to revoke the user from the database. + List<UserProfile> profilesFromDatabase = + dataStore.getUserProfileDao().getAllUserProfile(); + for (UserProfile p : profilesFromDatabase) { + if (profilesFromLDAP.stream() + .noneMatch(r -> r.getUsername().equals(p.getUsername()))) { + log.info("Revoking user " + p.getUsername() + " from the database."); + RevokeUserFlow.revokeUser(p.getUsername()); + // We also remove the user from the local_directory table to avoid duplicate + // revocations + dataStore.getUserProfileDao().deleteUserProfile(p.getUsername()); + } } } }