From deec22ed51442a4ffae8528438a47b46ec8dc710 Mon Sep 17 00:00:00 2001
From: Benoit Lavenier <benoit.lavenier@e-is.pro>
Date: Tue, 24 May 2022 09:20:50 +0200
Subject: [PATCH] [fix] Endpoint: allow '/' as path

---
 .../core/client/model/bma/Endpoints.java      |  2 +-
 .../core/client/model/bma/EndpointsTest.java  | 23 +++++++++++++++++++
 pom.xml                                       |  6 -----
 3 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java
index 21c56c53..0e5ce634 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/Endpoints.java
@@ -41,7 +41,7 @@ public class Endpoints {
     private static final Logger log = LoggerFactory.getLogger(Endpoints.class);
 
     // Path regexp (can have no starting slash - see issue https://git.duniter.org/clients/cesium-grp/cesium-plus-pod/-/issues/41)
-    public static final String PATH_REGEXP = "\\/?[^\\/\\s]+(?:\\/[^\\/\\s]+)*";
+    public static final String PATH_REGEXP = "(?:\\/|\\/?[^\\/\\s]+(?:\\/[^\\/\\s]+)*)";
     public static final String EP_END_REGEXP = "(?: ([a-z0-9_ÄŸÄž][a-z0-9-_.ÄŸÄž]*))?(?: ([0-9.]+))?(?: ([0-9a-f:]+)(?:%[a-z0-9]+)?)?(?: ([0-9]+))(?: ("+PATH_REGEXP + "))?$";
     public static final String BMA_API_REGEXP = "^BASIC_MERKLED_API" + EP_END_REGEXP;
     public static final String BMAS_API_REGEXP = "^BMAS" + EP_END_REGEXP;
diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java
index bd51f576..e0fe7018 100644
--- a/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java
+++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/model/bma/EndpointsTest.java
@@ -114,6 +114,13 @@ public class EndpointsTest {
         Assert.assertNull(ep.id);
         Assert.assertNull(ep.path);
 
+        ep = Endpoints.parse("WS2P bb5e697f node.g1cotis.fr 20901 /").orElse(null);
+        Assert.assertNotNull(ep);
+        Assert.assertEquals(ep.api, "WS2P");
+        Assert.assertEquals("bb5e697f", ep.id);
+        Assert.assertEquals("/", ep.path);
+        Assert.assertEquals(new Integer(20901), ep.port);
+
         // Parse Invalid endpoints
 
         // This must failed (missing port)
@@ -124,6 +131,22 @@ public class EndpointsTest {
         ep = Endpoints.parse("WS2P R8t2sg7w g1.ambau.ovh 443").orElse(null);
         Assert.assertNull(ep);
 
+        // Parse invalid
+        String[] errorEndpoints = new String[]{
+            "WS2P 93.8.54.71 20910", // no id
+            "GVA 77.131.240.28 [2a02:8428:471:6701:cc3e:ef7a:ef19:81f] 30901 gva", // Bad ipV6 (character '[' not need)
+            "BMAS duniter.adn.life/bma/ 443", // Bad path position
+            "BMAS duniter.adn.life/bma 443",
+            "WS2P  duniter.vincentux.fr 443 /ws2p",
+            "WS2P 93.8.54.71 20910",
+            "BMAS cloudanua.ddns.net/bma 192.168.0.46 443",
+            "WS2P 9938ae63 cloudanua.ddns.net/bma 443 /ws2p"
+        };
+        for (String epStr: errorEndpoints) {
+            ep = Endpoints.parse(epStr).orElse(null);
+            Assert.assertNull(ep);
+        }
+
     }
 
 }
diff --git a/pom.xml b/pom.xml
index 9c7d531b..4fbba270 100644
--- a/pom.xml
+++ b/pom.xml
@@ -374,12 +374,6 @@
         <groupId>org.glassfish.tyrus</groupId>
         <artifactId>tyrus-container-grizzly-client</artifactId>
         <version>${tyrus.version}</version>
-        <exclusions>
-          <exclusion>
-            <groupId>org.glassfish.tyrus</groupId>
-            <artifactId>tyrus-container-grizzly-server</artifactId>
-          </exclusion>
-        </exclusions>
       </dependency>
       <dependency>
         <groupId>org.glassfish.tyrus</groupId>
-- 
GitLab