diff --git a/src/main/java/uk/gov/hmcts/ccd/domain/types/EmailValidator.java b/src/main/java/uk/gov/hmcts/ccd/domain/types/EmailValidator.java index c3c5d361c8..de997fd283 100644 --- a/src/main/java/uk/gov/hmcts/ccd/domain/types/EmailValidator.java +++ b/src/main/java/uk/gov/hmcts/ccd/domain/types/EmailValidator.java @@ -5,8 +5,6 @@ import javax.inject.Named; import javax.inject.Singleton; -import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; import java.util.Collections; import java.util.List; @@ -19,6 +17,8 @@ public class EmailValidator implements BaseTypeValidator { static final String TYPE_ID = "Email"; + private static final String EMAIL_REGEX = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"; + @Override public BaseType getType() { return BaseType.get(TYPE_ID); @@ -61,6 +61,12 @@ public List validate(final String dataFieldId, ); } + if (!checkRegex(EMAIL_REGEX, value)) { + return Collections.singletonList( + new ValidationResult(REGEX_GUIDANCE, dataFieldId) + ); + } + if (!isValidEmailAddress(value)) { return Collections.singletonList(new ValidationResult(value + " is not a valid Email address", dataFieldId)); @@ -70,11 +76,6 @@ public List validate(final String dataFieldId, } private boolean isValidEmailAddress(final String email) { - try { - new InternetAddress(email).validate(); - return true; - } catch (AddressException ex) { - return false; - } + return org.apache.commons.validator.routines.EmailValidator.getInstance().isValid(email); } } diff --git a/src/test/java/uk/gov/hmcts/ccd/domain/types/EmailValidatorTest.java b/src/test/java/uk/gov/hmcts/ccd/domain/types/EmailValidatorTest.java index 7414e870b7..4fce43cbb6 100644 --- a/src/test/java/uk/gov/hmcts/ccd/domain/types/EmailValidatorTest.java +++ b/src/test/java/uk/gov/hmcts/ccd/domain/types/EmailValidatorTest.java @@ -59,29 +59,24 @@ void validEmail() { assertEquals(0, result01.size(), result01.toString()); final List result02 = validator.validate(FIELD_ID, - NODE_FACTORY.textNode("test@test"), + NODE_FACTORY.textNode("test@test.org"), caseFieldDefinition); assertEquals(0, result02.size(), result02.toString()); final List result03 = validator.validate(FIELD_ID, - NODE_FACTORY.textNode("test@test.org"), + NODE_FACTORY.textNode("test@test.org.uk"), caseFieldDefinition); - assertEquals(0, result03.size(), result01.toString()); + assertEquals(0, result03.size(), result03.toString()); final List result04 = validator.validate(FIELD_ID, - NODE_FACTORY.textNode("test@test.org.uk"), + NODE_FACTORY.textNode("test.test@test.com"), caseFieldDefinition); assertEquals(0, result04.size(), result04.toString()); final List result05 = validator.validate(FIELD_ID, - NODE_FACTORY.textNode("test.test@test.com"), - caseFieldDefinition); - assertEquals(0, result05.size(), result05.toString()); - - final List result06 = validator.validate(FIELD_ID, NODE_FACTORY.textNode("test_test@test.xxx"), caseFieldDefinition); - assertEquals(0, result06.size(), result06.toString()); + assertEquals(0, result05.size(), result05.toString()); } @Test @@ -94,12 +89,63 @@ void invalidEmail() { final List result02 = validator.validate(FIELD_ID, NODE_FACTORY.textNode("test.com"), caseFieldDefinition); - assertEquals(1, result01.size(), result02.toString()); + assertEquals(1, result02.size(), result02.toString()); final List result03 = validator.validate(FIELD_ID, NODE_FACTORY.textNode("test@test@test"), caseFieldDefinition); assertEquals(1, result03.size(), result03.toString()); + + final List result04 = validator.validate(FIELD_ID, + NODE_FACTORY.textNode("test@test"), + caseFieldDefinition); + assertEquals(1, result04.size(), result04.toString()); + + final List result05 = validator.validate(FIELD_ID, + NODE_FACTORY.textNode(" result06 = validator.validate(FIELD_ID, + NODE_FACTORY.textNode("a@a.a>"), + caseFieldDefinition); + assertEquals(1, result06.size(), result06.toString()); + + // Email address ending in comma + final List result07 = validator.validate(FIELD_ID, + NODE_FACTORY.textNode("a@a.a,"), + caseFieldDefinition); + assertEquals(1, result07.size(), result07.toString()); + + final List result08 = validator.validate(FIELD_ID, + NODE_FACTORY.textNode("a@a.a and b@b.b"), + caseFieldDefinition); + assertEquals(1, result08.size(), result08.toString()); + + final List result09 = validator.validate(FIELD_ID, + NODE_FACTORY.textNode("a@a.a AND b@b.b"), + caseFieldDefinition); + assertEquals(1, result09.size(), result09.toString()); + + final List result10 = validator.validate(FIELD_ID, + NODE_FACTORY.textNode("abc?ca@ae.com"), + caseFieldDefinition); + assertEquals(1, result10.size(), result10.toString()); + + final List result11 = validator.validate(FIELD_ID, + NODE_FACTORY.textNode("abc*abc@ae.com"), + caseFieldDefinition); + assertEquals(1, result11.size(), result11.toString()); + + final List result12 = validator.validate(FIELD_ID, + NODE_FACTORY.textNode("abcabc@ae.com_"), + caseFieldDefinition); + assertEquals(1, result12.size(), result12.toString()); + + final List result13 = validator.validate(FIELD_ID, + NODE_FACTORY.textNode("abcabc@ae.com-"), + caseFieldDefinition); + assertEquals(1, result13.size(), result13.toString()); } @Test