diff --git a/confluence-xml/pom.xml b/confluence-xml/pom.xml index 095ded06..8eeacb76 100644 --- a/confluence-xml/pom.xml +++ b/confluence-xml/pom.xml @@ -51,6 +51,11 @@ true + + org.apache.commons + commons-lang3 + 3.20.0 + org.apache.commons commons-compress @@ -171,6 +176,11 @@ + + org.xwiki.contrib.user-common + user-common-formatter + 1.0.0-SNAPSHOT + diff --git a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/ConfluenceConverter.java b/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/ConfluenceConverter.java index 6a4e23ea..bb22bfc9 100644 --- a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/ConfluenceConverter.java +++ b/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/ConfluenceConverter.java @@ -31,6 +31,7 @@ import org.apache.commons.configuration2.ex.ConfigurationException; import org.apache.commons.lang3.StringUtils; +import org.contrib.xwiki.usercommon.formatter.UserFormatterFactory; import org.slf4j.Logger; import org.slf4j.Marker; import org.slf4j.MarkerFactory; @@ -135,6 +136,9 @@ public class ConfluenceConverter implements ConfluenceFilterReferenceConverter @Inject private Provider componentManagerProvider; + @Inject + private UserFormatterFactory userFormatterFactory; + /** * @param name the name to validate * @return the validated name @@ -198,7 +202,7 @@ public String toGroupReferenceName(String groupName) return groupName; } - return UsernameCleaner.format(format, Map.of("group", groupName)); + return userFormatterFactory.create(Map.of("group", groupName)).format(format); } /** @@ -240,7 +244,7 @@ public String convertUserNameToReferenceName(String userName) return FORBIDDEN_USER_CHARACTERS.matcher(userName).replaceAll("_"); } - return UsernameCleaner.format(userFormat, Map.of("username", userName)); + return userFormatterFactory.create(Map.of("username", userName)).format(userFormat); } /** diff --git a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/UsernameCleaner.java b/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/UsernameCleaner.java deleted file mode 100644 index 3c2eb560..00000000 --- a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/input/UsernameCleaner.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * See the NOTICE file distributed with this work for additional - * information regarding copyright ownership. - * - * This is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this software; if not, write to the Free - * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA, or see the FSF site: http://www.fsf.org. - */ -package org.xwiki.contrib.confluence.filter.internal.input; - -import org.apache.commons.lang3.RegExUtils; -import org.apache.commons.text.StringSubstitutor; - -import java.util.HashMap; -import java.util.Map; - -/** - * Clean usernames. Adapted from ldap-authenticator (DefaultLDAPDocumentHelper.java). - */ -final class UsernameCleaner -{ - private UsernameCleaner() - { - // empty - } - - private static String clean(String str) - { - return RegExUtils.removePattern(str, "[\\.\\:\\s,@\\^\\/]"); - } - - private static void putVariable(Map map, String key, String value) - { - if (value != null) { - map.put(key, value); - - map.put(key + ".lowerCase", value.toLowerCase()); - map.put(key + "._lowerCase", value.toLowerCase()); - map.put(key + ".upperCase", value.toUpperCase()); - map.put(key + "._upperCase", value.toUpperCase()); - - String cleanValue = clean(value); - map.put(key + ".clean", cleanValue); - map.put(key + "._clean", cleanValue); - map.put(key + ".clean.lowerCase", cleanValue.toLowerCase()); - map.put(key + "._clean._lowerCase", cleanValue.toLowerCase()); - map.put(key + ".clean.upperCase", cleanValue.toUpperCase()); - map.put(key + "._clean._upperCase", cleanValue.toUpperCase()); - } - } - - private static Map createFormatMap(Map variables) - { - Map formatMap = new HashMap<>(); - for (Map.Entry variable : variables.entrySet()) { - putVariable(formatMap, variable.getKey(), variable.getValue()); - } - return formatMap; - } - - private static String formatSubject(StringSubstitutor substitutor, String format) - { - return substitutor.replace(format); - } - - static String format(String format, Map variables) - { - return formatSubject(new StringSubstitutor(createFormatMap(variables)), format); - } -} diff --git a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/macros/ImgMacroConverter.java b/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/macros/ImgMacroConverter.java index 3b093130..7a95b75d 100644 --- a/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/macros/ImgMacroConverter.java +++ b/confluence-xml/src/main/java/org/xwiki/contrib/confluence/filter/internal/macros/ImgMacroConverter.java @@ -19,7 +19,6 @@ */ package org.xwiki.contrib.confluence.filter.internal.macros; import java.util.Collections; -import java.util.HashMap; import java.util.Map; import java.util.TreeMap; diff --git a/confluence-xml/src/test/java/org/xwiki/contrib/confluence/filter/internal/input/DefaultLinkMapperTest.java b/confluence-xml/src/test/java/org/xwiki/contrib/confluence/filter/internal/input/DefaultLinkMapperTest.java index d630a100..525f4758 100644 --- a/confluence-xml/src/test/java/org/xwiki/contrib/confluence/filter/internal/input/DefaultLinkMapperTest.java +++ b/confluence-xml/src/test/java/org/xwiki/contrib/confluence/filter/internal/input/DefaultLinkMapperTest.java @@ -22,6 +22,9 @@ import com.xpn.xwiki.XWiki; import com.xpn.xwiki.XWikiContext; import com.xpn.xwiki.test.reference.ReferenceComponentList; + +import org.contrib.xwiki.usercommon.formatter.internal.DefaultUserFormatter; +import org.contrib.xwiki.usercommon.formatter.internal.DefaultUserFormatterFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -70,6 +73,8 @@ @ComponentList({ DefaultConfluenceInputContext.class, ConfluenceXMLPackage.class, + DefaultUserFormatter.class, + DefaultUserFormatterFactory.class, ConfluenceConverter.class }) @ComponentTest