You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by sh...@apache.org on 2022/05/06 08:21:35 UTC

[unomi] branch master updated: UNOMI-563 : do not allow to save schema with invalid name (#410)

This is an automated email from the ASF dual-hosted git repository.

shuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/master by this push:
     new 7fb9f17b1 UNOMI-563 : do not allow to save schema with invalid name (#410)
7fb9f17b1 is described below

commit 7fb9f17b1f8e70047416d702a28db4ad223db52e
Author: jsinovassin <58...@users.noreply.github.com>
AuthorDate: Fri May 6 10:21:31 2022 +0200

    UNOMI-563 : do not allow to save schema with invalid name (#410)
    
    * UNOMI-563 : do not allow to save schema with invalid name
    
    * fix object name in tests
---
 .../src/test/java/org/apache/unomi/itests/JSONSchemaIT.java | 13 ++++++++++---
 .../src/test/resources/schemas/events/dummy-event-type.json |  2 +-
 .../test/resources/schemas/events/float-property-type.json  |  6 +++---
 .../resources/schemas/events/negative-test-event-type.json  |  6 +++---
 .../src/test/resources/schemas/events/test-event-type.json  |  4 ++--
 .../events/{test-event-type.json => test-invalid-name.json} |  6 +++---
 itests/src/test/resources/schemas/events/test-invalid.json  |  2 +-
 .../schemas/extension/extension-test-event-example.json     |  2 +-
 .../unomi/services/impl/schemas/SchemaServiceImpl.java      |  6 ++++++
 9 files changed, 30 insertions(+), 17 deletions(-)

diff --git a/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java b/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java
index 371903852..5b14aa7c0 100644
--- a/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java
@@ -72,7 +72,7 @@ public class JSONSchemaIT extends BaseIT {
 
     @After
     public void tearDown() {
-        schemaService.deleteSchema("https://unomi.apache.org/schemas/json/events/test-event-type/1-0-0");
+        schemaService.deleteSchema("https://unomi.apache.org/schemas/json/events/testEventType/1-0-0");
         schemaService.deleteExtension("extension-test-event-1");
     }
 
@@ -112,7 +112,7 @@ public class JSONSchemaIT extends BaseIT {
                 DEFAULT_TRYING_TRIES);
 
         String encodedString = Base64.getEncoder()
-                .encodeToString("https://unomi.apache.org/schemas/json/events/test-event-type/1-0-0".getBytes());
+                .encodeToString("https://unomi.apache.org/schemas/json/events/testEventType/1-0-0".getBytes());
         CloseableHttpResponse response = delete(JSONSCHEMA_URL + "/" + encodedString);
         assertEquals("Invalid response code", 204, response.getStatusLine().getStatusCode());
 
@@ -130,6 +130,13 @@ public class JSONSchemaIT extends BaseIT {
         }
     }
 
+    @Test
+    public void testSaveSchemaWithInvalidName() throws IOException {
+        assertTrue("JSON schema list should be empty", persistenceService.getAllItems(UnomiJSONSchema.class).isEmpty());
+        try (CloseableHttpResponse response = post(JSONSCHEMA_URL, "schemas/events/test-invalid-name.json", ContentType.TEXT_PLAIN)) {
+            assertEquals("Save should have failed", 500, response.getStatusLine().getStatusCode());
+        }
+    }
     @Test
     public void testGetJsonSchemaExtensionsMetadatas() throws InterruptedException {
         List jsonSchemaExtensions = get(JSONSCHEMAEXTENSION_URL, List.class);
@@ -169,7 +176,7 @@ public class JSONSchemaIT extends BaseIT {
         CloseableHttpResponse response = delete(JSONSCHEMAEXTENSION_URL + "/extension-test-event-1");
         assertEquals("Invalid response code", 204, response.getStatusLine().getStatusCode());
 
-        keepTrying("wait for empty list of schemas extensions", () -> get(JSONSCHEMA_URL, List.class), List::isEmpty,
+        keepTrying("wait for empty list of schemas extensions", () -> get(JSONSCHEMAEXTENSION_URL, List.class), List::isEmpty,
                 DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
     }
 
diff --git a/itests/src/test/resources/schemas/events/dummy-event-type.json b/itests/src/test/resources/schemas/events/dummy-event-type.json
index 59f439abf..e17ce633f 100644
--- a/itests/src/test/resources/schemas/events/dummy-event-type.json
+++ b/itests/src/test/resources/schemas/events/dummy-event-type.json
@@ -3,7 +3,7 @@
   "$schema": "https://json-schema.org/draft/2019-09/schema",
   "self": {
     "vendor": "org.apache.unomi",
-    "name": "events/dummy_event_type",
+    "name": "dummy_event_type",
     "format": "jsonschema",
     "target": "events",
     "version": "1-0-0"
diff --git a/itests/src/test/resources/schemas/events/float-property-type.json b/itests/src/test/resources/schemas/events/float-property-type.json
index 92374e5a4..93bb3f8ea 100644
--- a/itests/src/test/resources/schemas/events/float-property-type.json
+++ b/itests/src/test/resources/schemas/events/float-property-type.json
@@ -1,10 +1,10 @@
 {
-  "$id": "https://unomi.apache.org/schemas/json/events/float-property-type/1-0-0",
+  "$id": "https://unomi.apache.org/schemas/json/events/floatPropertyType/1-0-0",
   "$schema": "https://json-schema.org/draft/2019-09/schema",
   "self":{
     "vendor":"org.apache.unomi",
     "target" : "events",
-    "name":"float-property-type",
+    "name":"floatPropertyType",
     "format":"jsonschema",
     "version":"1-0-0"
   },
@@ -20,4 +20,4 @@
       "additionalProperties": false
     }
   }
-}
\ No newline at end of file
+}
diff --git a/itests/src/test/resources/schemas/events/negative-test-event-type.json b/itests/src/test/resources/schemas/events/negative-test-event-type.json
index fe4d29914..5508a5e99 100644
--- a/itests/src/test/resources/schemas/events/negative-test-event-type.json
+++ b/itests/src/test/resources/schemas/events/negative-test-event-type.json
@@ -1,13 +1,13 @@
 {
-  "$id": "https://unomi.apache.org/schemas/json/events/negative-test-event-type/1-0-0",
+  "$id": "https://unomi.apache.org/schemas/json/events/negativeTestEventType/1-0-0",
   "$schema": "https://json-schema.org/draft/2019-09/schema",
   "self":{
     "vendor":"org.apache.unomi",
-    "name":"events/negative-test-event-type",
+    "name":"negativeTestEventType",
     "format":"jsonschema",
     "version":"1-0-0"
   },
   "title": "TestEvent",
   "type": "object",
   "allOf": [{ "$ref": "https://unomi.apache.org/schemas/json/event/1-0-0" }]
-}
\ No newline at end of file
+}
diff --git a/itests/src/test/resources/schemas/events/test-event-type.json b/itests/src/test/resources/schemas/events/test-event-type.json
index 99ba3f8ff..8d5a928a2 100644
--- a/itests/src/test/resources/schemas/events/test-event-type.json
+++ b/itests/src/test/resources/schemas/events/test-event-type.json
@@ -1,9 +1,9 @@
 {
-  "$id": "https://unomi.apache.org/schemas/json/events/test-event-type/1-0-0",
+  "$id": "https://unomi.apache.org/schemas/json/events/testEventType/1-0-0",
   "$schema": "https://json-schema.org/draft/2019-09/schema",
   "self":{
     "vendor":"org.apache.unomi",
-    "name":"events/test-event-type",
+    "name":"testEventType",
     "format":"jsonschema",
     "target":"events",
     "version":"1-0-0"
diff --git a/itests/src/test/resources/schemas/events/test-event-type.json b/itests/src/test/resources/schemas/events/test-invalid-name.json
similarity index 66%
copy from itests/src/test/resources/schemas/events/test-event-type.json
copy to itests/src/test/resources/schemas/events/test-invalid-name.json
index 99ba3f8ff..5712c5ed5 100644
--- a/itests/src/test/resources/schemas/events/test-event-type.json
+++ b/itests/src/test/resources/schemas/events/test-invalid-name.json
@@ -1,14 +1,14 @@
 {
-  "$id": "https://unomi.apache.org/schemas/json/events/test-event-type/1-0-0",
+  "$id": "https://unomi.apache.org/schemas/json/events/invalidName/1-0-0",
   "$schema": "https://json-schema.org/draft/2019-09/schema",
   "self":{
     "vendor":"org.apache.unomi",
-    "name":"events/test-event-type",
+    "name":"events/invalidName",
     "format":"jsonschema",
     "target":"events",
     "version":"1-0-0"
   },
-  "title": "TestEvent",
+  "title": "invalidNameEvent",
   "type": "object",
   "allOf": [{ "$ref": "https://unomi.apache.org/schemas/json/event/1-0-0" }]
 }
diff --git a/itests/src/test/resources/schemas/events/test-invalid.json b/itests/src/test/resources/schemas/events/test-invalid.json
index 794a77c42..82aa7664b 100644
--- a/itests/src/test/resources/schemas/events/test-invalid.json
+++ b/itests/src/test/resources/schemas/events/test-invalid.json
@@ -2,7 +2,7 @@
   "$schema": "https://json-schema.org/draft/2019-09/schema",
   "self":{
     "vendor":"org.apache.unomi",
-    "name":"events/invalid",
+    "name":"invalid",
     "format":"jsonschema",
     "version":"1-0-0"
   },
diff --git a/itests/src/test/resources/schemas/extension/extension-test-event-example.json b/itests/src/test/resources/schemas/extension/extension-test-event-example.json
index b68e5e116..e03feccd8 100644
--- a/itests/src/test/resources/schemas/extension/extension-test-event-example.json
+++ b/itests/src/test/resources/schemas/extension/extension-test-event-example.json
@@ -3,7 +3,7 @@
   "schemaId": "https://unomi.apache.org/schemas/json/events/test-event-type/1-0-0",
   "description": "An event for example",
   "name": "Name of the event",
-  "priority": "10",
+  "priority": 10,
   "extension": {
     "allOf": [
       {
diff --git a/services/src/main/java/org/apache/unomi/services/impl/schemas/SchemaServiceImpl.java b/services/src/main/java/org/apache/unomi/services/impl/schemas/SchemaServiceImpl.java
index dc6a339b9..56d70f29c 100644
--- a/services/src/main/java/org/apache/unomi/services/impl/schemas/SchemaServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/impl/schemas/SchemaServiceImpl.java
@@ -147,6 +147,12 @@ public class SchemaServiceImpl implements SchemaService {
     @Override
     public void saveSchema(String schema) {
         JsonSchema jsonSchema = jsonSchemaFactory.getSchema(schema);
+        if (jsonSchema.getSchemaNode().at("/self/target").asText().equals("events") && !jsonSchema.getSchemaNode().at("/self/name").asText()
+                .matches("[_A-Za-z][_0-9A-Za-z]*")) {
+            throw new IllegalArgumentException(
+                    "The \"/self/name\" value should match the following regular expression [_A-Za-z][_0-9A-Za-z]* for the Json schema on"
+                            + " events");
+        }
         if (predefinedUnomiJSONSchemaById.get(jsonSchema.getSchemaNode().get("$id").asText()) == null) {
             persistenceService.save(buildUnomiJsonSchema(schema));
             JSONSchema localSchema = buildJSONSchema(jsonSchema);