From 05028d14d8ec63e28c187b93faa23b6ba9894ef4 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Mon, 8 Jan 2024 13:59:39 -0700 Subject: [PATCH] Allow using single star for parts of domains in virtual host config --- .../common/config/PluginSettings.java | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/xyz/jpenilla/minimotd/common/config/PluginSettings.java b/common/src/main/java/xyz/jpenilla/minimotd/common/config/PluginSettings.java index 61159ac..1f7fbf0 100644 --- a/common/src/main/java/xyz/jpenilla/minimotd/common/config/PluginSettings.java +++ b/common/src/main/java/xyz/jpenilla/minimotd/common/config/PluginSettings.java @@ -64,8 +64,36 @@ public boolean virtualHostTestMode() { return this.virtualHostTestMode; } - public @Nullable String findConfigStringForHost(final @NonNull String host) { - return this.virtualHostConfigs.get(host.toLowerCase(Locale.ENGLISH)); + public @Nullable String findConfigStringForHost(@NonNull String host) { + host = host.toLowerCase(Locale.ENGLISH); + + final @Nullable String exactMatch = this.virtualHostConfigs.get(host); + if (exactMatch != null) { + return exactMatch; + } + + configs: + for (final Map.Entry e : this.virtualHostConfigs.entrySet()) { + final String key = e.getKey(); + final String configName = e.getValue(); + if (!key.contains("*")) { + continue; + } + final String[] splitKey = key.split("\\."); + final String[] splitHost = host.split("\\."); + if (splitKey.length != splitHost.length) { + continue; + } + for (int i = 0; i < splitHost.length; i++) { + final String keyPart = splitKey[i]; + if (!keyPart.equals(splitHost[i]) && !keyPart.equals("*")) { + continue configs; + } + } + return configName; + } + + return null; } }