72 lines
2.0 KiB
Java
72 lines
2.0 KiB
Java
package tech.nevets.tvpn.cli.commands;
|
|
|
|
import tech.nevets.tvpn.Utils;
|
|
import tech.nevets.tvpn.cli.Command;
|
|
import tech.nevets.tvpn.wg.WireGuardJNI;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
public class InstallTunnelServiceCmd implements Command {
|
|
@Override
|
|
public void execute(String[] args) {
|
|
|
|
|
|
System.out.println("Executing InstallTunnelServiceCmd");
|
|
String path = Utils.APP_DIR + "/configurations/" + args[1] + ".conf";
|
|
System.out.println(new WireGuardJNI().installTunnel(args[1], path));
|
|
System.exit(0);
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return "/installtunnelservice";
|
|
}
|
|
|
|
@Override
|
|
public String getUsage() {
|
|
return "(/path/to/tunnel/config)";
|
|
}
|
|
|
|
@Override
|
|
public String getDescription() {
|
|
return "Creates and starts a WireGuard Tunnel Service";
|
|
}
|
|
|
|
String[] reservedNames = new String[]{
|
|
"CON", "PRN", "AUX", "NUL",
|
|
"COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9",
|
|
"LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9",
|
|
};
|
|
|
|
|
|
private boolean isReserved(String name) {
|
|
if (name.isEmpty()) {
|
|
return false;
|
|
}
|
|
for (String s : reservedNames) {
|
|
if (name.contains(s)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private static final String[] SPECIAL_CHARS = new String[]{"$", "\\", "/", ":", "*", "?", "\"", "'", "<", ">", "|", "\t", "\00"};
|
|
private boolean hasSpecialChars(String name) {
|
|
for (String s : SPECIAL_CHARS) {
|
|
if (name.contains(s)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private static final Pattern PATTERN = Pattern.compile("^[a-zA-Z0-9_=+.-]{1,32}$");
|
|
private boolean tunnelNameIsValid(String name) {
|
|
if (isReserved(name) || hasSpecialChars(name)) {
|
|
return false;
|
|
}
|
|
return PATTERN.matcher(name).hasMatch();
|
|
}
|
|
}
|