From 74f69b2ef06c73e3818570dbe3ae208d05facc61 Mon Sep 17 00:00:00 2001 From: N Smith Date: Tue, 29 Nov 2011 15:07:26 +0000 Subject: [PATCH] ALF-11136, External invitation links now support non-ASCII characters in usernames. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@32392 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/invitation/site/InviteSender.java | 5 ++-- .../NameBasedUserNameGenerator.java | 15 +++++++++-- .../NameBasedUserNameGeneratorTest.java | 26 ++++++++++++++++++- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/source/java/org/alfresco/repo/invitation/site/InviteSender.java b/source/java/org/alfresco/repo/invitation/site/InviteSender.java index 32bbaf94dd..bd71983312 100644 --- a/source/java/org/alfresco/repo/invitation/site/InviteSender.java +++ b/source/java/org/alfresco/repo/invitation/site/InviteSender.java @@ -39,7 +39,6 @@ import java.util.Set; import org.alfresco.model.ContentModel; import org.alfresco.repo.action.executer.MailActionExecuter; -import org.alfresco.repo.admin.SysAdminParams; import org.alfresco.repo.i18n.MessageService; import org.alfresco.repo.model.Repository; import org.alfresco.service.ServiceRegistry; @@ -92,7 +91,7 @@ public class InviteSender private final Repository repository; private final MessageService messageService; private final FileFolderService fileFolderService; - private final SysAdminParams sysAdminParams; +// private final SysAdminParams sysAdminParams; private final RepoAdminService repoAdminService; private final NamespaceService namespaceService; @@ -104,7 +103,7 @@ public class InviteSender this.searchService = services.getSearchService(); this.siteService = services.getSiteService(); this.fileFolderService = services.getFileFolderService(); - this.sysAdminParams = services.getSysAdminParams(); +// this.sysAdminParams = services.getSysAdminParams(); this.repoAdminService = services.getRepoAdminService(); this.namespaceService = services.getNamespaceService(); this.repository = repository; diff --git a/source/java/org/alfresco/repo/security/authentication/NameBasedUserNameGenerator.java b/source/java/org/alfresco/repo/security/authentication/NameBasedUserNameGenerator.java index 76d5496213..9ed2269050 100644 --- a/source/java/org/alfresco/repo/security/authentication/NameBasedUserNameGenerator.java +++ b/source/java/org/alfresco/repo/security/authentication/NameBasedUserNameGenerator.java @@ -18,6 +18,8 @@ */ package org.alfresco.repo.security.authentication; +import java.text.Normalizer; + import org.apache.commons.lang.RandomStringUtils; /** @@ -79,8 +81,8 @@ public class NameBasedUserNameGenerator implements UserNameGenerator userName = pattern .replace("%i%", initial) - .replace("%firstName%", firstName.toLowerCase()) - .replace("%lastName%", lastName.toLowerCase()) + .replace("%firstName%", cleanseName(firstName)) + .replace("%lastName%", cleanseName(lastName)) .replace("%emailAddress%", emailAddress.toLowerCase()); if(seed > 0) @@ -98,4 +100,13 @@ public class NameBasedUserNameGenerator implements UserNameGenerator return userName; } + + private String cleanseName(String name) + { + // Replace whitespace with _ + String result= name.trim().toLowerCase().replaceAll("\\s+", "_"); + + // Remove accents from characters and strips out non-alphanumeric chars. + return Normalizer.normalize(result, Normalizer.Form.NFD).replaceAll("[^a-zA-z0-9_]+", ""); + } } diff --git a/source/java/org/alfresco/repo/security/authentication/NameBasedUserNameGeneratorTest.java b/source/java/org/alfresco/repo/security/authentication/NameBasedUserNameGeneratorTest.java index f83ecb2865..21e9e1e87d 100644 --- a/source/java/org/alfresco/repo/security/authentication/NameBasedUserNameGeneratorTest.java +++ b/source/java/org/alfresco/repo/security/authentication/NameBasedUserNameGeneratorTest.java @@ -44,7 +44,7 @@ public class NameBasedUserNameGeneratorTest extends TestCase // should generate buffy_summers@sunnydale.com generator.setNamePattern("%emailAddress%"); userName = generator.generateUserName(firstName, lastName, emailAddress, 0); - assertEquals("", (emailAddress).toLowerCase(), userName); + assertEquals(emailAddress.toLowerCase(), userName); // should generate buffy_s123 userName = generator.generateUserName(firstName, lastName, emailAddress, 1); @@ -62,4 +62,28 @@ public class NameBasedUserNameGeneratorTest extends TestCase } + public void testGenerateWhitespaceNames() throws Exception + { + NameBasedUserNameGenerator generator = new NameBasedUserNameGenerator(); + generator.setUserNameLength(10); + generator.setNamePattern("%firstName%_%lastName%"); + String lastName = "bar"; + assertEquals("f_oo_bar", generator.generateUserName(" f oo ", lastName, "", 0)); + assertEquals("f_o_o_bar", generator.generateUserName("f o o", lastName, "", 0)); + assertEquals("f_o_o_bar", generator.generateUserName("f\to\t o", lastName, "", 0)); + assertEquals("f_o_o_bar", generator.generateUserName("f\no \no", lastName, "", 0)); + assertEquals("f_o_o_bar", generator.generateUserName("f\ro\r\no", lastName, "", 0)); + } + + public void testAccentedCharsInNames() throws Exception + { + NameBasedUserNameGenerator generator = new NameBasedUserNameGenerator(); + generator.setUserNameLength(10); + generator.setNamePattern("%firstName%_%lastName%"); + String firstName = "Çüéâäà çêëèï"; + String lastName = "îìÄÅÉæÆô öòû"; + + String username = generator.generateUserName(firstName, lastName, "", 0); + assertEquals("cueaaa_ceeei_iiaaeo_oou", username); + } }