diff --git a/src/main/java/org/codelibs/fess/taglib/FessFunctions.java b/src/main/java/org/codelibs/fess/taglib/FessFunctions.java index b663d008d..a609a0747 100644 --- a/src/main/java/org/codelibs/fess/taglib/FessFunctions.java +++ b/src/main/java/org/codelibs/fess/taglib/FessFunctions.java @@ -74,6 +74,9 @@ public class FessFunctions { private static final String PDF_DATE = "pdf_date"; + private static final Pattern EMAIL_ADDRESS_PATTERN = Pattern.compile("[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}", + Pattern.CASE_INSENSITIVE); + private static LoadingCache resourceHashCache = CacheBuilder.newBuilder().maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES).build(new CacheLoader() { @Override @@ -419,4 +422,11 @@ public class FessFunctions { .map(user -> user.hasRoles(roles) || user.hasRoles(ComponentUtil.getFessConfig().getAuthenticationAdminRolesAsArray())) .orElse(false); } + + public static String maskEmail(final String value) { + if (value == null) { + return StringUtil.EMPTY; + } + return EMAIL_ADDRESS_PATTERN.matcher(value).replaceAll("******@****.***"); + } } diff --git a/src/main/webapp/WEB-INF/fe.tld b/src/main/webapp/WEB-INF/fe.tld index 561a57848..e8c7bb659 100644 --- a/src/main/webapp/WEB-INF/fe.tld +++ b/src/main/webapp/WEB-INF/fe.tld @@ -258,6 +258,14 @@ ${fe:formatCode("L", "prettyprint", doc.mimetype, doc.content_description)} + + Mask e-mail address. + maskEmail + org.codelibs.fess.taglib.FessFunctions + java.lang.String maskEmail(java.lang.String) + ${fe:maskEmail(doc.content_description)} + + Get a message from properties files. message diff --git a/src/test/java/org/codelibs/fess/taglib/FessFunctionsTest.java b/src/test/java/org/codelibs/fess/taglib/FessFunctionsTest.java index be5a45afd..acc01d3f0 100644 --- a/src/test/java/org/codelibs/fess/taglib/FessFunctionsTest.java +++ b/src/test/java/org/codelibs/fess/taglib/FessFunctionsTest.java @@ -115,6 +115,33 @@ public class FessFunctionsTest extends UnitFessTestCase { code = "aaa\nL10:\nL11:ccc"; value = FessFunctions.formatCode("L", "prettyprint", "text/plain", code); assertEquals("
\nccc
", value); + } + public void test_maskEmail() { + String value; + + value = FessFunctions.maskEmail(null); + assertEquals("", value); + + value = FessFunctions.maskEmail(""); + assertEquals("", value); + + value = FessFunctions.maskEmail("aaa bbb ccc"); + assertEquals("aaa bbb ccc", value); + + value = FessFunctions.maskEmail("aaa@bbb.ccc"); + assertEquals("******@****.***", value); + + value = FessFunctions.maskEmail("111.aaa@bbb.ccc"); + assertEquals("******@****.***", value); + + value = FessFunctions.maskEmail("111 aaa+@bbb.ccc 222"); + assertEquals("111 ******@****.*** 222", value); + + value = FessFunctions.maskEmail("あaaa@bbb.ccc1"); + assertEquals("あ******@****.***1", value); + + value = FessFunctions.maskEmail(""); + assertEquals("<******@****.***>", value); } }