This is an automated email from the git hooks/post-receive script. New commit to branch develop-1.1.x in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 2a8b551e3b575b4e551c75ef0a7fa6228ec0948b Author: jcouteau <couteau@codelutin.com> Date: Thu Jan 28 15:43:56 2021 +0100 :bug: fixes #11159 : Erreurs dans la mise à jour LDAP --- .../services/service/LdapServiceImpl.java | 30 +++++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapServiceImpl.java b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapServiceImpl.java index f17ef29f..57caca78 100644 --- a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapServiceImpl.java +++ b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapServiceImpl.java @@ -48,6 +48,7 @@ import java.util.AbstractList; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; @@ -68,10 +69,16 @@ public class LdapServiceImpl extends FaxToMailServiceSupport implements LdapServ getApplicationConfig().getLdapUser(), getApplicationConfig().getLdapPassword()); if (connection.isConnected()) { + log.debug("Connected to LDAP"); FaxToMailUserTopiaDao faxtomailUserDao = getPersistenceContext().getFaxToMailUserDao(); FaxToMailUserGroupTopiaDao faxtomailUserGroupDao = getPersistenceContext().getFaxToMailUserGroupDao(); + if (log.isDebugEnabled()) { + log.debug("Already got " + faxtomailUserDao.findAll().size() + " users in DB"); + log.debug("Already got " + faxtomailUserGroupDao.findAll().size() + " groups in DB"); + } + // cache group DN > faxtomail user group instance Map<String, FaxToMailUserGroup> groupCache = new HashMap<>(); // cache user DN > faxtomail user instance @@ -82,6 +89,7 @@ public class LdapServiceImpl extends FaxToMailServiceSupport implements LdapServ String groupsFilter = "(objectCategory=CN=Group,CN=Schema,CN=Configuration,DC=mac-groupe,DC=net)"; SearchResult groupsResult = connection.search(groupsBaseDN, SearchScope.SUB, groupsFilter); List<SearchResultEntry> groupEntries = groupsResult.getSearchEntries(); + log.debug("Found " + groupEntries.size() + " groups"); for (SearchResultEntry groupEntry : groupEntries) { String groupDN = groupEntry.getDN(); String groupPath = getGroupCompleteName(groupDN); @@ -91,10 +99,13 @@ public class LdapServiceImpl extends FaxToMailServiceSupport implements LdapServ userGroup = faxtomailUserGroupDao.create( FaxToMailUserGroup.PROPERTY_NAME, groupName, FaxToMailUserGroup.PROPERTY_COMPLETE_NAME, groupPath); + log.debug("Create group " + groupName); } groupCache.put(groupDN, userGroup); } + log.debug("Group cache contains " + groupCache.size() + " groups"); + // get all users ( String usersBaseDN = getApplicationConfig().getLdapBaseDn(); String usersFilter = "(objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=mac-groupe,DC=net)"; @@ -102,6 +113,7 @@ public class LdapServiceImpl extends FaxToMailServiceSupport implements LdapServ // sinon au dela de 1000 resultats ca veux plus SearchResult usersResult = connection.search(usersBaseDN, SearchScope.SUB, "(objectClass=organizationalUnit)"); List<SearchResultEntry> unitEntries = usersResult.getSearchEntries(); + log.debug("Found " + unitEntries.size() + " units"); for (SearchResultEntry unitEntry : unitEntries) { if (log.isDebugEnabled()) { log.debug("Search for unit " + unitEntry.getDN()); @@ -125,28 +137,36 @@ public class LdapServiceImpl extends FaxToMailServiceSupport implements LdapServ } } + log.debug("Users cache contains " + userCache.size() + " users"); + // make remaining user and groups in database as 'hidden' List<List<FaxToMailUser>> partitionedUserCache = partition(new ArrayList<>(userCache.values()), 1990); - Collection<FaxToMailUser> usersToHide = new ArrayList<>(); + Collection<FaxToMailUser> usersToHide = new HashSet<>(faxtomailUserDao.forNotIn(partitionedUserCache.get(0))); for (List<FaxToMailUser> userCacheValues:partitionedUserCache){ - usersToHide.addAll(faxtomailUserDao.forNotIn(userCacheValues)); + usersToHide.retainAll(faxtomailUserDao.forNotIn(userCacheValues)); } + log.debug("Will hide " + usersToHide.size() + "users"); for (FaxToMailUser userToHide : usersToHide) { userToHide.setHidden(true); + log.debug("Will hide user " + userToHide.getFirstName() + " " + userToHide.getLastName() + "(" + userToHide.getLogin()+")"); faxtomailUserDao.update(userToHide); } List<List<FaxToMailUserGroup>> partitionedGroupCache = partition(new ArrayList<>(groupCache.values()), 1990); - Collection<FaxToMailUserGroup> userGroupsToHide = new ArrayList<>(); + Collection<FaxToMailUserGroup> userGroupsToHide = new HashSet<>(faxtomailUserGroupDao.forNotIn(partitionedGroupCache.get(0))); for (List<FaxToMailUserGroup> userGroupCacheValues:partitionedGroupCache){ - userGroupsToHide.addAll(faxtomailUserGroupDao.forNotIn(userGroupCacheValues)); + userGroupsToHide.retainAll(faxtomailUserGroupDao.forNotIn(userGroupCacheValues)); } + log.debug("Will hide " + userGroupsToHide.size() + "groups"); for (FaxToMailUserGroup userGroupToHide : userGroupsToHide) { userGroupToHide.setHidden(true); + log.debug("Will hide group " + userGroupToHide.getName()); faxtomailUserGroupDao.update(userGroupToHide); } getPersistenceContext().commit(); } + log.debug("LDAP update finished"); + } catch (LDAPException ex) { throw new RuntimeException("Can't connect to ldap", ex); } finally { @@ -395,6 +415,8 @@ public class LdapServiceImpl extends FaxToMailServiceSupport implements LdapServ } else { user = faxtomailUserDao.create(user); } + + log.info("Saving user " + user.getFirstName() + " " + user.getLastName() + "(" + user.getLogin()+")"); // force collection loading to force non lazy collections user.isAffectedFoldersEmpty(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.