YanFrp/src/main/java/top/octopusyan/config/TextValidate.java

186 lines
6.6 KiB
Java

package top.octopusyan.config;
import com.jfoenix.validation.RegexValidator;
import com.jfoenix.validation.RequiredFieldValidator;
import com.jfoenix.validation.StringLengthValidator;
import com.jfoenix.validation.base.ValidatorBase;
import top.octopusyan.model.ProxySetupModel;
import top.octopusyan.utils.DomainUtil;
import java.util.Objects;
import java.util.regex.Pattern;
/**
* @author : octopus yan
* @email : octopus_yan@foxmail.com
* @description : JFX文本校验
* @create : 2022-4-2 17:03
*/
public class TextValidate {
// /**
// * 账号格式错误
// */
// public static ValidatorBase AccountFail = new ValidatorBase() {
// @Override
// protected void eval() {
// setMessage("账号格式错误");
// hasErrors.set(true);
// }
// };
/**
* 账号不能为空
*/
public static RequiredFieldValidator AccoountRequired = new RequiredFieldValidator("账号不能为空!");
/**
* 账号格式
*/
public static RegexValidator AccoountValidator = new RegexValidator("账号格式有误!");
/**
* 密码不能为空
*/
public static RequiredFieldValidator PasswordRequired = new RequiredFieldValidator("密码不能为空!");
/**
* 邮箱地址格式验证
*/
public static RegexValidator EmailFormat = new RegexValidator("邮箱地址格式错误");
/**
* 域名为空检查
*/
public static RequiredFieldValidator DomainRequired = new RequiredFieldValidator("域名不能为空!");
/**
* 访问密码为空检查
*/
public static RequiredFieldValidator p2pPwdRequired = new RequiredFieldValidator("访问密码不能为空!");
/**
* 访问服务名为空检查
*/
public static RequiredFieldValidator p2pServerNameRequired = new RequiredFieldValidator("访问服务名称不能为空!");
/**
* 端口为空检查
*/
public static RequiredFieldValidator PortRequired = new RequiredFieldValidator("端口不能为空");
/**
* 端口格式检查
*/
public static final RegexValidator PortFormat = new RegexValidator("端口格式错误");
/**
* IP为空检查
*/
public static RequiredFieldValidator IpRequired = new RequiredFieldValidator("本地IP不能为空");
/**
* http访问用户名格式检查
*/
public static final RegexValidator HttpUserFormat = new RegexValidator("用户名格式错误");
/**
* http访问密码格式检查
*/
public static final RegexValidator HttpPwdFormat = new RegexValidator("密码格式错误");
/**
* http访问密码格式检查
*/
public static final RegexValidator P2pPwdFormat = new RegexValidator("密码格式错误");
/**
* IP格式检查
*/
public static final RegexValidator IpFormat = new RegexValidator("本地IP格式错误");
static {
EmailFormat.setRegexPattern("^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$");
AccoountValidator.setRegexPattern("^[a-zA-Z0-9_-]*$");
PortFormat.setRegexPattern("^([0-9]|[1-9]\\d{1,3}|[1-5]\\d{4}|6[0-4]\\d{4}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5])$");
IpFormat.setRegexPattern("^(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\" +
".(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])$");
HttpUserFormat.setRegexPattern("^[a-zA-Z0-9_-]*$");
HttpPwdFormat.setRegexPattern("^[a-zA-Z0-9_-]*$");
P2pPwdFormat.setRegexPattern("^[a-zA-Z0-9_-]{3,18}$");
}
/**
* 文本长度校验
* <p/> message > name + "长度有误"
*/
public static StringLengthValidator getLengthValidator(String name, int length) {
return new StringLengthValidator(name + "长度有误", length);
}
/**
* 文本长度校验
* <p/> message > name + "长度有误,应在" + min + "到" + max + "之间"
*/
public static RegexValidator getLengthValidator(int min, int max, String name) {
String message = name + "长度有误,应在" + min + "" + max + "之间";
RegexValidator validator = new RegexValidator(message);
validator.setRegexPattern("[a-zA-Z0-9_-]{" + min + "," + max + "}$");
return validator;
}
/**
* 域名格式检查
*/
public static ValidatorBase domainFormatValidator(ProxySetupModel model) {
return new ValidatorBase("域名格式错误,支持数字字母下划线") {
@Override
protected void eval() {
if (!DomainUtil.isCustomize(model.get())) {
if (ProxyConfig.isHttp(model)) {
// http / https
boolean matches = Pattern.compile("^[a-zA-Z0-9_-]{3,18}$").matcher(model.getDomain()).matches();
hasErrors.set(!matches);
} else {
// tcp / udp
hasErrors.set(false);
}
} else {
boolean matches = Pattern.compile("^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$")
.matcher(model.getDomain() + model.getDomainSuffix()).matches();
hasErrors.set(!matches);
}
}
};
}
/**
* 域名格式检查
*/
public static ValidatorBase domainLengthValidator(ProxySetupModel model) {
return new RegexValidator("子域名长度不小于3个字符") {
@Override
protected void eval() {
setRegexPattern("^[a-zA-Z0-9_-]{3,18}$");
if (ProxyConfig.isHttp(model) && !DomainUtil.isCustomize(model.get())) {
super.eval();
} else {
hasErrors.set(false);
}
}
};
}
/**
* 自定义域名解析检查
*/
public static ValidatorBase domainAddressValidator(ProxySetupModel model) {
return new ValidatorBase("请输入您的域名,并解析至: " + ProxyConfig.getServerIP(model.getServer())) {
@Override
protected void eval() {
if (!DomainUtil.isCustomize(model.get()))
hasErrors.set(false);
else
hasErrors.set(
!Objects.equals(
ProxyConfig.getServerIP(model.getServer()),
DomainUtil.getDomainAddress(model.getDomain())
)
);
}
};
}
}