Readd internal wildcard domain handling

This commit is contained in:
RaphiMC 2024-04-20 21:59:31 +02:00
parent 43732f22e3
commit 0c04ac45d9
No known key found for this signature in database
GPG Key ID: 0F6BB0657A03AC94
4 changed files with 63 additions and 14 deletions

View File

@ -44,6 +44,7 @@ public class Options {
public static SocketAddress BIND_ADDRESS;
public static SocketAddress CONNECT_ADDRESS;
public static ProtocolVersion PROTOCOL_VERSION;
public static boolean OPENAUTHMOD_AUTH;
public static boolean ONLINE_MODE;
public static boolean BETACRAFT_AUTH;
public static Account MC_ACCOUNT;
@ -55,6 +56,7 @@ public class Options {
public static int COMPRESSION_THRESHOLD = 256;
public static boolean SRV_MODE;
public static boolean INTERNAL_SRV_MODE;
public static String RESOURCE_PACK_URL;
public static boolean SERVER_HAPROXY_PROTOCOL;
public static boolean LEGACY_CLIENT_PASSTHROUGH;
@ -76,6 +78,7 @@ public class Options {
final OptionSpec<String> connectAddress = parser.acceptsAll(asList("connect_address", "target_ip", "ca", "a"), "The address of the target server").withRequiredArg().ofType(String.class).required();
final OptionSpec<ProtocolVersion> version = parser.acceptsAll(asList("version", "v"), "The version of the target server").withRequiredArg().withValuesConvertedBy(new ProtocolVersionConverter()).required();
final OptionSpec<Void> srvMode = parser.acceptsAll(asList("srv_mode", "srv", "s"), "Enable srv mode");
final OptionSpec<Void> iSrvMode = parser.acceptsAll(asList("internal_srv_mode", "isrv"), "Enable internal srv mode").availableUnless(srvMode);
final OptionSpec<Void> proxyOnlineMode = parser.acceptsAll(asList("online_mode", "om", "o"), "Enable proxy online mode");
final OptionSpec<Integer> compressionThreshold = parser.acceptsAll(asList("compression_threshold", "ct", "c"), "The threshold for packet compression").withRequiredArg().ofType(Integer.class).defaultsTo(COMPRESSION_THRESHOLD);
final OptionSpec<Void> openAuthModAuth = parser.acceptsAll(asList("openauthmod_auth", "oam_auth"), "Use OpenAuthMod for joining online mode servers");
@ -103,6 +106,8 @@ public class Options {
BIND_ADDRESS = AddressUtil.parse(options.valueOf(bindAddress), null);
CONNECT_ADDRESS = AddressUtil.parse(options.valueOf(connectAddress), PROTOCOL_VERSION);
SRV_MODE = options.has(srvMode);
INTERNAL_SRV_MODE = options.has(iSrvMode);
OPENAUTHMOD_AUTH = options.has(openAuthModAuth);
ONLINE_MODE = options.has(proxyOnlineMode);
COMPRESSION_THRESHOLD = options.valueOf(compressionThreshold);
if (options.has(guiAccountIndex)) {
@ -164,10 +169,11 @@ public class Options {
config.setChatSigning(CHAT_SIGNING);
config.setCompressionThreshold(COMPRESSION_THRESHOLD);
config.setResourcePackUrl(RESOURCE_PACK_URL);
config.setSrvMode(SRV_MODE);
config.setWildcardDomainHandling(SRV_MODE ? ViaProxyConfig.WildcardDomainHandling.PUBLIC : INTERNAL_SRV_MODE ? ViaProxyConfig.WildcardDomainHandling.INTERNAL : ViaProxyConfig.WildcardDomainHandling.NONE);
config.setAllowBetaPinging(ALLOW_BETA_PINGING);
config.setIgnoreProtocolTranslationErrors(IGNORE_PACKET_TRANSLATION_ERRORS);
config.setAllowLegacyClientPassthrough(LEGACY_CLIENT_PASSTHROUGH);
config.setAuthMethod(OPENAUTHMOD_AUTH ? ViaProxyConfig.AuthMethod.OPENAUTHMOD : ViaProxyConfig.AuthMethod.NONE);
}
public static void loadFromConfig(final ViaProxyConfig config) {
@ -185,7 +191,8 @@ public class Options {
IGNORE_PACKET_TRANSLATION_ERRORS = config.shouldIgnoreProtocolTranslationErrors();
LEGACY_CLIENT_PASSTHROUGH = config.shouldAllowLegacyClientPassthrough();
RESOURCE_PACK_URL = config.getResourcePackUrl();
SRV_MODE = config.isSrvMode();
SRV_MODE = config.getWildcardDomainHandling() == ViaProxyConfig.WildcardDomainHandling.PUBLIC;
INTERNAL_SRV_MODE = config.getWildcardDomainHandling() == ViaProxyConfig.WildcardDomainHandling.INTERNAL;
}
}

View File

@ -53,7 +53,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
private boolean ignoreProtocolTranslationErrors;
private boolean allowLegacyClientPassthrough;
private String resourcePackUrl;
private boolean srvMode;
private WildcardDomainHandling wildcardDomainHandling;
public ViaProxyConfig(final File configFile) {
super(configFile);
@ -103,7 +103,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
this.ignoreProtocolTranslationErrors = this.getBoolean("ignore-protocol-translation-errors", false);
this.allowLegacyClientPassthrough = this.getBoolean("allow-legacy-client-passthrough", false);
this.resourcePackUrl = this.getString("resource-pack-url", "");
this.srvMode = this.getBoolean("srv-mode", false);
this.wildcardDomainHandling = WildcardDomainHandling.byName(this.getString("wildcard-domain-handling", "none"));
}
@Override
@ -265,13 +265,13 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
this.set("resource-pack-url", resourcePackUrl);
}
public boolean isSrvMode() {
return this.srvMode;
public WildcardDomainHandling getWildcardDomainHandling() {
return this.wildcardDomainHandling;
}
public void setSrvMode(final boolean srvMode) {
this.srvMode = srvMode;
this.set("srv-mode", srvMode);
public void setWildcardDomainHandling(final WildcardDomainHandling wildcardDomainHandling) {
this.wildcardDomainHandling = wildcardDomainHandling;
this.set("wildcard-domain-handling", wildcardDomainHandling.name().toLowerCase(Locale.ROOT));
}
public enum AuthMethod {
@ -311,4 +311,31 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
}
public enum WildcardDomainHandling {
/**
* No wildcard domain handling
*/
NONE,
/**
* Public wildcard domain handling
*/
PUBLIC,
/**
* Iternal wildcard domain handling
*/
INTERNAL;
public static WildcardDomainHandling byName(String name) {
for (WildcardDomainHandling mode : values()) {
if (mode.name().equalsIgnoreCase(name)) {
return mode;
}
}
return NONE;
}
}
}

View File

@ -35,6 +35,7 @@ import net.raphimc.viaproxy.plugins.events.PreConnectEvent;
import net.raphimc.viaproxy.plugins.events.Proxy2ServerHandlerCreationEvent;
import net.raphimc.viaproxy.plugins.events.ProxySessionCreationEvent;
import net.raphimc.viaproxy.protocoltranslator.ProtocolTranslator;
import net.raphimc.viaproxy.protocoltranslator.viaproxy.ViaProxyConfig;
import net.raphimc.viaproxy.proxy.packethandler.*;
import net.raphimc.viaproxy.proxy.proxy2server.Proxy2ServerChannelInitializer;
import net.raphimc.viaproxy.proxy.proxy2server.Proxy2ServerHandler;
@ -125,7 +126,7 @@ public class Client2ProxyHandler extends SimpleChannelInboundHandler<IPacket> {
ProtocolVersion serverVersion = ViaProxy.getConfig().getTargetVersion();
String classicMpPass = ViaProxy.getConfig().getAccount() instanceof ClassicAccount classicAccount ? classicAccount.getMppass() : null;
if (ViaProxy.getConfig().isSrvMode()) {
if (ViaProxy.getConfig().getWildcardDomainHandling() == ViaProxyConfig.WildcardDomainHandling.PUBLIC) {
try {
if (handshakeParts[0].toLowerCase().contains(".viaproxy.")) {
handshakeParts[0] = handshakeParts[0].substring(0, handshakeParts[0].toLowerCase().lastIndexOf(".viaproxy."));
@ -146,7 +147,19 @@ public class Client2ProxyHandler extends SimpleChannelInboundHandler<IPacket> {
final int connectPort = arrayHelper.getInteger(arrayHelper.getLength() - 2);
serverAddress = AddressUtil.parse(connectIP + ":" + connectPort, serverVersion);
} catch (CloseAndReturn e) {
this.proxyConnection.kickClient("§cWrong SRV syntax! §6Please use:\n§7ip_port_version.viaproxy.hostname");
this.proxyConnection.kickClient("§cWrong wildcard syntax! §6Please use:\n§7address_port_version.viaproxy.hostname");
}
} else if (ViaProxy.getConfig().getWildcardDomainHandling() == ViaProxyConfig.WildcardDomainHandling.INTERNAL) {
final ArrayHelper arrayHelper = ArrayHelper.instanceOf(handshakeParts[0].split("\7"));
final String versionString = arrayHelper.get(1);
serverVersion = ProtocolVersion.getClosest(versionString);
if (serverVersion == null) {
serverVersion = ProtocolVersion.getClosest(versionString.replace("-", " "));
}
if (serverVersion == null) throw CloseAndReturn.INSTANCE;
serverAddress = AddressUtil.parse(arrayHelper.get(0), serverVersion);
if (arrayHelper.isIndexValid(2)) {
classicMpPass = arrayHelper.getString(2);
}
}

View File

@ -56,9 +56,11 @@ allow-legacy-client-passthrough: false
# Example: http://example.com/resourcepack.zip
resource-pack-url: ""
#
# Allows players to specify the target server address and protocol in their client.
# Example: viaversion.com_25565_1.8.x.viaproxy.127.0.0.1.nip.io
srv-mode: false
# Allows clients to specify a target server and version using wildcard domains.
# none: No wildcard domain handling.
# public: Public wildcard domain handling. Intended for usage by external clients. (Example: address_port_version.viaproxy.127.0.0.1.nip.io)
# internal: Internal wildcard domain handling. Intended for local usage by custom clients. (Example: address:port\7version\7classic-mppass)
wildcard-domain-handling: "none"
#
# Configuration version. Do not change this.
config-version: 1