From 1b45b117740118de0e5d0185336c9962ac0738da Mon Sep 17 00:00:00 2001 From: MrGeoTech Date: Tue, 3 Jan 2023 15:41:29 -0600 Subject: [PATCH] Adding namespace and path patterns to ProtocolDefinition --- .../protocol/protocol/ProtocolDefinition.java | 3 ++ .../protocol/ProtocolDefinitionTest.kt | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java index 40538aead..c26e94f41 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java @@ -16,6 +16,7 @@ package de.bixilon.minosoft.protocol.protocol; import de.bixilon.kotlinglm.vec3.Vec3i; import de.bixilon.minosoft.data.text.formatting.color.ChatColors; import de.bixilon.minosoft.data.text.formatting.color.RGBColor; +import kotlin.text.Regex; import java.util.regex.Pattern; @@ -40,6 +41,8 @@ public final class ProtocolDefinition { public static final String DEFAULT_NAMESPACE = "minecraft"; public static final String MINOSOFT_NAMESPACE = "minosoft"; + public static final Regex ALLOWED_NAMESPACE_PATTERN = new Regex("[a-z0-9_.\\-]+"); + public static final Regex ALLOWED_PATH_PATTERN = new Regex("(?!.*//)[a-z0-9_./\\-]+"); public static final char TEXT_COMPONENT_SPECIAL_PREFIX_CHAR = '\u00A7'; public static final int DEFAULT_BUFFER_SIZE = 4096; diff --git a/src/test/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinitionTest.kt b/src/test/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinitionTest.kt index 31f8ab88d..a2b8546ed 100644 --- a/src/test/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinitionTest.kt +++ b/src/test/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinitionTest.kt @@ -36,4 +36,45 @@ internal class ProtocolDefinitionTest { fun testSectionSize() { assertEquals(ProtocolDefinition.BLOCKS_PER_SECTION, 4096) } + + /** + * @see [de.bixilon.minosoft.data.registries.ResourceLocation] + */ + @Test + fun testAllowedNamespaces() { + // Should Pass + assertEquals(ProtocolDefinition.ALLOWED_NAMESPACE_PATTERN.matches("minecraft"), true) + assertEquals(ProtocolDefinition.ALLOWED_NAMESPACE_PATTERN.matches("min1234567890craft"), true) + assertEquals(ProtocolDefinition.ALLOWED_NAMESPACE_PATTERN.matches("mine-craft"), true) + assertEquals(ProtocolDefinition.ALLOWED_NAMESPACE_PATTERN.matches("mine_craft"), true) + assertEquals(ProtocolDefinition.ALLOWED_NAMESPACE_PATTERN.matches("mine.craft"), true) + // Should Fail + assertEquals(ProtocolDefinition.ALLOWED_NAMESPACE_PATTERN.matches("MineCraft"), false) + assertEquals(ProtocolDefinition.ALLOWED_NAMESPACE_PATTERN.matches("mine craft"), false) + assertEquals(ProtocolDefinition.ALLOWED_NAMESPACE_PATTERN.matches("minecraft!"), false) + assertEquals(ProtocolDefinition.ALLOWED_NAMESPACE_PATTERN.matches("^minecraft"), false) + assertEquals(ProtocolDefinition.ALLOWED_NAMESPACE_PATTERN.matches("mine/craft"), false) + } + + /** + * @see [de.bixilon.minosoft.data.registries.ResourceLocation] + */ + @Test + fun testAllowedResourceLocationPaths() { + // Should Pass + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("minecraft"), true) + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("min1234567890craft"), true) + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("mine-craft"), true) + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("mine_craft"), true) + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("mine.craft"), true) + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("mine/craft"), true) + // Should Fail + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("MineCraft"), false) + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("mine craft"), false) + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("minecraft!"), false) + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("^minecraft"), false) + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("mine//craft"), false) + assertEquals(ProtocolDefinition.ALLOWED_PATH_PATTERN.matches("mine///craft"), false) + } + }