package org.ovirt.engine.core.common.validation;
import java.util.regex.Pattern;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.ovirt.engine.core.common.utils.ValidationUtils;
import org.ovirt.engine.core.common.validation.annotation.ValidNFSMountPoint;
/**
* Validates, that the given string is a linux mount point in the following form:
* [IP or FQDN]:/[linux/path/only/from/ASCII]
*/
public class NfsMountPointConstraint implements ConstraintValidator<ValidNFSMountPoint, String> {
private static final String FQDN =
"(?=^.{1,254}$)(^(((?!-)[a-zA-Z0-9-]{1,63}(?<!-))|((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\\.)+[a-zA-Z0-9]{2,63}))";
private static final String PATH = "\\:/(.*?/|.*?\\\\)?([^\\./|^\\.\\\\]+)(?:\\.([^\\\\]*)|)";
private static final String LINUX_MOUNT_POINT = String.format("(?:%s|%s|%s)%s",
ValidationUtils.IPV4_PATTERN_NON_EMPTY,
ValidationUtils.IPV6_FOR_URI,
FQDN,
PATH);
private static final String ASCII = "[\\p{ASCII}]*";
private static final Pattern LINUX_MOUNT_POINT_PATTERN = Pattern.compile(LINUX_MOUNT_POINT);
private static final Pattern ASCII_PATTERN = Pattern.compile(ASCII);
private static final Pattern NO_SPACE_PATTERN = Pattern.compile(ValidationUtils.NO_WHITESPACE);
@Override
public void initialize(ValidNFSMountPoint constraintAnnotation) {
}
@Override
public boolean isValid(String name, ConstraintValidatorContext context) {
return LINUX_MOUNT_POINT_PATTERN.matcher(name).matches()
&& ASCII_PATTERN.matcher(name).matches()
&& NO_SPACE_PATTERN.matcher(name).matches();
}
}