diff --git a/src/main/java/org/gcube/accounting/datamodel/validators/ValidIPValidator.java b/src/main/java/org/gcube/accounting/datamodel/validators/ValidIPValidator.java index 7d917eb..ba4e95c 100644 --- a/src/main/java/org/gcube/accounting/datamodel/validators/ValidIPValidator.java +++ b/src/main/java/org/gcube/accounting/datamodel/validators/ValidIPValidator.java @@ -1,18 +1,51 @@ package org.gcube.accounting.datamodel.validators; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.common.validator.annotations.FieldValidator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ValidIPValidator implements FieldValidator{ - + + private static Logger logger = LoggerFactory.getLogger(ValidIPValidator.class); + public Class annotation() { return ValidTime.class; } + private static Pattern IPV4_PATTERN = null; + private static Pattern IPV6_PATTERN = null; + + private static final String ipv4Regex = "(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])"; + private static final String ipv6Regex = "([0-9a-f]{1,4}:){7}([0-9a-f]){1,4}"; + + static { + try { + IPV4_PATTERN = Pattern.compile(ipv4Regex, + Pattern.CASE_INSENSITIVE); + IPV6_PATTERN = Pattern.compile(ipv6Regex, + Pattern.CASE_INSENSITIVE); + } catch(Exception e) { + logger.error("Unable to compile pattern", e.getCause()); + } + } + + protected static boolean isIpAddress(String ipAddress) { + Matcher ipV4Matcher = IPV4_PATTERN.matcher(ipAddress); + if (ipV4Matcher.matches()) { + return true; + } + + Matcher ipV6Matcher = IPV6_PATTERN.matcher(ipAddress); + return ipV6Matcher.matches(); + } + public boolean isValid(Object toValidate) { if(toValidate instanceof String){ - // TODO Validate it - return true; + return isIpAddress((String) toValidate); } return false; }