diff --git a/pom.xml b/pom.xml index 7cb0359..9a9d2ff 100644 --- a/pom.xml +++ b/pom.xml @@ -66,6 +66,11 @@ 3.13.2 test + + commons-validator + commons-validator + 1.7 + diff --git a/src/main/java/io/jenkins/plugins/constant/ErrorCode.java b/src/main/java/io/jenkins/plugins/constant/ErrorCode.java index d381f9a..b50f131 100644 --- a/src/main/java/io/jenkins/plugins/constant/ErrorCode.java +++ b/src/main/java/io/jenkins/plugins/constant/ErrorCode.java @@ -2,8 +2,6 @@ public abstract class ErrorCode { - public static final int GENERIC_ERROR = 0; - public static final int INVALID_EMAIL = 101; } diff --git a/src/main/java/io/jenkins/plugins/constant/PluginInfo.java b/src/main/java/io/jenkins/plugins/constant/PluginInfo.java index 21914bb..591dfcb 100644 --- a/src/main/java/io/jenkins/plugins/constant/PluginInfo.java +++ b/src/main/java/io/jenkins/plugins/constant/PluginInfo.java @@ -2,8 +2,6 @@ public class PluginInfo { - public static final String DISPLAY_NAME = "Validating Email Parameter"; - public static final String HELP_FILE = "/plugin/validating-email-parameter/help.html"; } diff --git a/src/main/java/io/jenkins/plugins/constant/Regex.java b/src/main/java/io/jenkins/plugins/constant/Regex.java deleted file mode 100644 index 23f1458..0000000 --- a/src/main/java/io/jenkins/plugins/constant/Regex.java +++ /dev/null @@ -1,17 +0,0 @@ -package io.jenkins.plugins.constant; - -public abstract class Regex -{ - - public static final String EMAIL_PATTERN = "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$"; - - public abstract static class Domain - { - - public static final String DOMAIN_PATTERN = "^[A-Za-z0-9._%+-]+@{DOMAIN_NAME}"; - - public static final String DOMAIN_NAME = "{DOMAIN_NAME}"; - - } - -} diff --git a/src/main/java/io/jenkins/plugins/util/ValidationUtils.java b/src/main/java/io/jenkins/plugins/util/ValidationUtils.java index bf3f348..e87eda8 100644 --- a/src/main/java/io/jenkins/plugins/util/ValidationUtils.java +++ b/src/main/java/io/jenkins/plugins/util/ValidationUtils.java @@ -1,12 +1,11 @@ package io.jenkins.plugins.util; import hudson.util.FormValidation; -import io.jenkins.plugins.constant.Regex; import net.sf.json.JSONObject; +import org.apache.commons.validator.routines.EmailValidator; import java.util.Arrays; import java.util.List; -import java.util.regex.Pattern; public abstract class ValidationUtils { @@ -15,27 +14,25 @@ public abstract class ValidationUtils { private static List params; /*private static Map paramMap;*/ + private static final EmailValidator emailValidator = EmailValidator.getInstance(); + + private static boolean isMailAddressInDomain(String emailAddress, String domain) { + String[] addressParts = emailAddress.split("@"); + return addressParts[addressParts.length - 1].equals(domain); + } public static JSONObject buildParameter(String domain, Boolean externalEmail, JSONObject jsonObject) { builder = new StringBuilder(); - normalizeSpace = jsonObject.getString(Key.VALUE.getValue()).trim(); - params = Arrays.asList(normalizeSpace.split(" ")); - String domainRegEx = Regex.Domain.DOMAIN_PATTERN - .replace(Regex.Domain.DOMAIN_NAME, domain); - if (!params.isEmpty()) { for (String s : params) { - - if (Pattern.matches(Regex.EMAIL_PATTERN, s)) { + if (emailValidator.isValid(s)) { if (!externalEmail) { - - if (Pattern.matches(domainRegEx, s) - && Pattern.matches(Regex.EMAIL_PATTERN, s)) { + if (isMailAddressInDomain(s, domain)) { builder.append(s).append(" "); } else { jsonObject.put(Key.IS_VALID.getValue(), false); @@ -45,169 +42,102 @@ public static JSONObject buildParameter(String domain, Boolean externalEmail, return jsonObject; } } else { - builder.append(s).append(" "); } } else if (!s.isEmpty()) { - if (!externalEmail) { - - if (Pattern.matches(domainRegEx, (s + "@" + domain))) { - - builder.append(s).append("@").append(domain).append(" "); - - } else { - jsonObject.put(Key.IS_VALID.getValue(), false); - jsonObject.put(Key.ERROR.getValue(), - "Invalid email for parameter [" + jsonObject.getString("name") - + "] expected domain : @" + domain + " specified: " + s); - return jsonObject; - } + if (emailValidator.isValid(s + "@" + domain)) { + builder.append(s).append("@").append(domain).append(" "); } else { - - if (Pattern.matches(Regex.EMAIL_PATTERN, (s + "@" + domain))) { - - builder.append(s).append("@").append(domain).append(" "); - + jsonObject.put(Key.IS_VALID.getValue(), false); + if(!externalEmail) { + jsonObject.put(Key.ERROR.getValue(), + "Invalid email for parameter [" + jsonObject.getString("name") + + "] expected domain : @" + domain + " specified: " + s); } else { - jsonObject.put(Key.IS_VALID.getValue(), false); jsonObject.put(Key.ERROR.getValue(), - "Invalid email for parameter [" + jsonObject.getString("name") - + "] Value entered does not match " - + "email pattern; specified: " + s); - return jsonObject; + "Invalid email for parameter [" + jsonObject.getString("name") + + "] Value entered does not match " + + "email pattern; specified: " + s); } + return jsonObject; } - } else if (s.isEmpty()) { - - jsonObject.put(Key.IS_VALID.getValue(), false); - jsonObject.put(Key.ERROR.getValue(), - "Invalid email for parameter [ " + jsonObject.getString("name") - + " ] Expected domain : @" + domain + " Specified: [ Email is Empty! ]"); - return jsonObject; } else { jsonObject.put(Key.IS_VALID.getValue(), false); jsonObject.put(Key.ERROR.getValue(), - "Value entered does not match email pattern; Expected domain : @" + domain - + " Specified: " + s); + "Invalid email for parameter [ " + jsonObject.getString("name") + + " ] Expected domain : @" + domain + + " Specified: [ Email is Empty! ]"); return jsonObject; } - } - jsonObject.replace(Key.VALUE.getValue(), String.valueOf(builder).trim()); - jsonObject.put(Key.IS_VALID.getValue(), true); - - return jsonObject; - } else { - jsonObject.put(Key.IS_VALID.getValue(), true); - return jsonObject; } - + jsonObject.put(Key.IS_VALID.getValue(), true); + return jsonObject; } public static String definitionParameter(String defaultValue, String domain) { builder = new StringBuilder(); - normalizeSpace = defaultValue.trim(); - params = Arrays.asList(normalizeSpace.split(" ")); if (!params.isEmpty()) { for (String value : params) { - - if (Pattern.matches(Regex.EMAIL_PATTERN, value)) { + if (emailValidator.isValid(value)) { builder.append(value).append(" "); } else if (!value.isEmpty()) { - builder.append(value).append("@").append(domain).append(" "); } else { return defaultValue; } - } - return String.valueOf(builder).trim(); } else { - return defaultValue; - } - } public static FormValidation formParameter(String domain, String value, Boolean externalEmail) { - builder = new StringBuilder(); - normalizeSpace = value.trim(); - params = Arrays.asList(normalizeSpace.split(" ")); - String domainRegEx = Regex.Domain.DOMAIN_PATTERN - .replace(Regex.Domain.DOMAIN_NAME, domain); - if (!params.isEmpty()) { for (String s : params) { - - if (Pattern.matches(Regex.EMAIL_PATTERN, s)) { - + if (emailValidator.isValid(s)) { if (!externalEmail) { - - if (Pattern.matches(domainRegEx, s) - && Pattern.matches(Regex.EMAIL_PATTERN, s)) { + if (isMailAddressInDomain(s, domain)) { builder.append(s).append(" "); } else { - return FormValidation - .error("Value entered does not match domain : " + s); + return FormValidation.error("Value entered does not match domain : " + s); } } else { - builder.append(s).append(" "); } } else if (!s.isEmpty()) { - if (!externalEmail) { - - if (Pattern.matches(domainRegEx, (s + "@" + domain))) { - - builder.append(s).append("@").append(domain).append(" "); - - } else { - return FormValidation - .error("Value entered does not match domain : " + s); - } + if (emailValidator.isValid(s + "@" + domain)) { + builder.append(s).append("@").append(domain).append(" "); } else { - - if (Pattern.matches(Regex.EMAIL_PATTERN, (s + "@" + domain))) { - - builder.append(s).append("@").append(domain).append(" "); - + if (!externalEmail) { + return FormValidation.error("Value entered does not match domain : " + s); } else { - return FormValidation - .error("Value entered does not match email address pattern : " + s); + return FormValidation.error( + "Value entered does not match email address pattern : " + s); } } - - } else if (s.isEmpty()) { - return FormValidation.warning("Email address is empty."); } else { - return FormValidation.error("Value entered does not match email pattern : " + s); + return FormValidation.warning("Email address is empty."); } - } - return FormValidation.respond(FormValidation.Kind.OK, "
Valid Email : " + builder + "
"); - } else { - return FormValidation.respond(FormValidation.Kind.OK, "
Valid Email : " + value + "
"); - } - } public enum Key { @@ -217,7 +147,7 @@ public enum Key { private final String value; - private Key(String value) { + Key(String value) { this.value = value; } diff --git a/src/test/java/io/jenkins/plugins/validation/emailparameter/EmailValidationTest.java b/src/test/java/io/jenkins/plugins/validation/emailparameter/EmailValidationTest.java index bf4bfdf..a753546 100644 --- a/src/test/java/io/jenkins/plugins/validation/emailparameter/EmailValidationTest.java +++ b/src/test/java/io/jenkins/plugins/validation/emailparameter/EmailValidationTest.java @@ -1,14 +1,13 @@ package io.jenkins.plugins.validation.emailparameter; -import io.jenkins.plugins.constant.Regex; import io.jenkins.plugins.util.MockData; import io.jenkins.plugins.util.ValidationUtils; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; +import org.apache.commons.validator.routines.EmailValidator; import java.util.Arrays; -import java.util.regex.Pattern; import static org.assertj.core.api.Assertions.assertThat; @@ -43,7 +42,7 @@ public void emailValidationTest() { private boolean accept(String param) { - return Pattern.matches(Regex.EMAIL_PATTERN, param); + return EmailValidator.getInstance().isValid(param); }