r128 - in trunk: faxtomail-persistence/src/main/xmi faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment
Author: echatellier Date: 2014-06-03 17:42:28 +0200 (Tue, 03 Jun 2014) New Revision: 128 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/128 Log: refs #4662: Import des utilisateurs et groupes depuis le serveur LDAP Added: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/LdapServiceTest.java Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo =================================================================== (Binary files differ) Modified: trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java =================================================================== --- trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java 2014-06-03 07:31:14 UTC (rev 127) +++ trunk/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/LdapService.java 2014-06-03 15:42:28 UTC (rev 128) @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.List; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -52,23 +53,58 @@ // ldapsearch -h ldap.codelutin.home -b "ou=People,DC=codelutin,DC=home" "objectClass=posixGroup" // ldapsearch -h ldap.codelutin.home -b "ou=People,DC=codelutin,DC=home" "objectClass=account" - String baseDN = "ou=People,DC=codelutin,DC=home"; - String filter = "(objectClass=account)"; + String[] baseDNs = { + "OU=Utilisateurs,OU=Faber,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + "OU=OU Informatique,OU=France-Fermetures,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + // OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net + "OU=Utilisateurs,OU=Carros,OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + "OU=Utilisateurs,OU=Checy,OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + "OU=Utilisateurs,OU=Guipry,OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + "OU=Utilisateurs,OU=LeRheu,OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + "OU=Utilisateurs,OU=Luzech,OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + "OU=Utilisateurs,OU=MaisonAlfort,OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + "OU=Utilisateurs,OU=Mauguio,OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + "OU=Utilisateurs,OU=Migennes,OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + "OU=Utilisateurs,OU=Nomades,OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net", + "OU=Utilisateurs,OU=RocheToirin,OU=Franciaflex,OU=Utilisateurs,OU=Mac-Groupe,DC=mac-groupe,DC=net" + }; + String filter = "(objectClass=user)"; + LDAPConnection connection = null; try { connection = getLDAPConnection(); if (connection.isConnected()) { - SearchResult searchResult = connection.search(baseDN, SearchScope.ONE, filter); - - List<SearchResultEntry> searchEntries = searchResult.getSearchEntries(); - for (SearchResultEntry searchEntry : searchEntries) { - LdapUser user = new LdapUser(); - user.setLogin(searchEntry.getAttributeValue("uid")); - user.setLogin(searchEntry.getAttributeValue("uid")); - user.setLogin(searchEntry.getAttributeValue("uid")); + for (String baseDN : baseDNs) { + SearchResult searchResult = connection.search(baseDN, SearchScope.ONE, filter); - results.add(user); + List<SearchResultEntry> searchEntries = searchResult.getSearchEntries(); + for (SearchResultEntry searchEntry : searchEntries) { + LdapUser user = new LdapUser(); + user.setLogin(searchEntry.getAttributeValue("userPrincipalName")); + + // Parse name + String fullName = searchEntry.getAttributeValue("name"); + if (fullName.indexOf(' ') != -1) { + String lastName = fullName.substring(0, fullName.indexOf(' ')); + String firstName = fullName.substring(fullName.indexOf(' ') + 1); + user.setFirstName(firstName); + user.setLastName(lastName); + } else { + user.setFirstName(""); + user.setLastName(fullName); + } + + // parse groups + String[] groups = searchEntry.getAttributeValues("memberOf"); + if (ArrayUtils.isNotEmpty(groups)) { + for (String group : groups) { + user.addGroup(group); + } + } + + results.add(user); + } } } } catch (LDAPException ex) { @@ -121,9 +157,13 @@ Collection<String> groups = ldapUser.getGroups(); user.clearFaxToMailUserGroup(); for (String group : groups) { - FaxToMailUserGroup userGroup = faxToMailUserGroupDao.forNameEquals(group).findUniqueOrNull(); + String groupPath = getGroupFullPath(group); + String groupName = StringUtils.substringAfterLast(groupPath, "/"); + FaxToMailUserGroup userGroup = faxToMailUserGroupDao.forNameEquals(groupName).findUniqueOrNull(); if (userGroup == null) { - userGroup = faxToMailUserGroupDao.create(FaxToMailUserGroup.PROPERTY_NAME, group); + userGroup = faxToMailUserGroupDao.create( + FaxToMailUserGroup.PROPERTY_NAME, groupName, + FaxToMailUserGroup.PROPERTY_FULL_PATH, groupPath); } user.addFaxToMailUserGroup(userGroup); } @@ -135,7 +175,24 @@ faxtomailUserDao.create(user); } } - + getPersistenceContext().commit(); } + + /** + * Transform group CN to group path. + * + * Example: + * CN=Tout Franciaflex,OU=Listes de distribution,OU=Comptes Spéciaux,OU=Mac-Groupe,DC=mac-groupe,DC=net + * net/mac-groupe/Mac-Groupe/Comptes Spéciaux/Listes de distribution/Tout Franciaflex + * + * @param groupCN + * @return + */ + protected String getGroupFullPath(String groupCN) { + String[] part = groupCN.split(","); + ArrayUtils.reverse(part); + String result = StringUtils.join(part, '/'); + return result; + } } Added: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/LdapServiceTest.java =================================================================== --- trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/LdapServiceTest.java (rev 0) +++ trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/LdapServiceTest.java 2014-06-03 15:42:28 UTC (rev 128) @@ -0,0 +1,42 @@ +package com.franciaflex.faxtomail.services.service; + +import java.io.IOException; +import java.util.Collection; +import java.util.HashSet; + +import org.apache.commons.lang3.StringUtils; +import org.junit.Assume; +import org.junit.Before; +import org.junit.Test; + +import com.franciaflex.faxtomail.FaxToMailConfigurationOption; +import com.franciaflex.faxtomail.services.service.ldap.LdapUser; + +public class LdapServiceTest extends AbstractFaxToMailServiceTest { + + protected LdapService ldapService; + + @Before + public void setUp() throws IOException { + ldapService = newService(LdapService.class); + + // n'effectue pas les tests si la connexion n'est pas possible + Assume.assumeTrue(StringUtils.isNotBlank(getApplicationConfig().getLdapHost())); + } + + @Test + public void testGetUsers() { + + Collection<LdapUser> ldapUsers = ldapService.getAllLdapUsers(); + Collection<String> groups = new HashSet<>(); + int user = 0; + for (LdapUser ldapUser : ldapUsers) { + System.out.println("User : " + ldapUser.getLogin()); + for (String group : ldapUser.getGroups()) { + groups.add(group); + } + user++; + } + System.out.println(String.format("%d users, %d groups", user, groups.size())); + } +} Property changes on: trunk/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/LdapServiceTest.java ___________________________________________________________________ Added: svn:eol-style + native Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java 2014-06-03 07:31:14 UTC (rev 127) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIHandler.java 2014-06-03 15:42:28 UTC (rev 128) @@ -32,11 +32,14 @@ import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; + import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; + import org.apache.commons.collections4.CollectionUtils; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; +import org.nuiton.util.DesktopUtil; import org.nuiton.util.FileUtil; import java.awt.Component; @@ -181,7 +184,7 @@ getModel().fireAttachmentOpened(attachment, true); File file = attachment.getOriginalFile().getFile(); - Desktop desktop = FaxToMailUIUtil.getDesktopForBrowse(); + Desktop desktop = FaxToMailUIUtil.getDesktopForOpen(); try { desktop.open(file); } catch (IOException e) {
participants (1)
-
echatellier@users.forge.codelutin.com