This is an automated email from the ASF dual-hosted git repository.
dgriffon 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 3b19d3932 UNOMI-811: change log message for invalid event + add debug
information on invalid event type. (#652)
3b19d3932 is described below
commit 3b19d39320134f0a887d5c43253e29d43c5363a5
Author: David Griffon <[email protected]>
AuthorDate: Mon Dec 18 09:57:53 2023 +0100
UNOMI-811: change log message for invalid event + add debug information on
invalid event type. (#652)
---
.../unomi/schema/impl/SchemaServiceImpl.java | 1 +
.../deserializers/ContextRequestDeserializer.java | 13 ++-------
.../EventsCollectorRequestDeserializer.java | 9 ++-----
.../java/org/apache/unomi/utils/HttpUtils.java | 31 +++++++++++++++++++---
4 files changed, 33 insertions(+), 21 deletions(-)
diff --git
a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java
b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java
index ca54fd243..437274c76 100644
---
a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java
+++
b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java
@@ -139,6 +139,7 @@ public class SchemaServiceImpl implements SchemaService {
}
}
} catch (ValidationException e) {
+ logger.debug("Validation error : {}", e.getMessage());
Set<ValidationError> errors =
buildCustomErrorMessage(e.getMessage());
String eventTypeOrErrorKey = eventType != null ? eventType :
GENERIC_ERROR_KEY;
if (errorsPerEventType.containsKey(eventTypeOrErrorKey)) {
diff --git
a/rest/src/main/java/org/apache/unomi/rest/deserializers/ContextRequestDeserializer.java
b/rest/src/main/java/org/apache/unomi/rest/deserializers/ContextRequestDeserializer.java
index 12ba8347d..4dba00ab0 100644
---
a/rest/src/main/java/org/apache/unomi/rest/deserializers/ContextRequestDeserializer.java
+++
b/rest/src/main/java/org/apache/unomi/rest/deserializers/ContextRequestDeserializer.java
@@ -23,12 +23,12 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.node.ArrayNode;
import org.apache.unomi.api.ContextRequest;
-import org.apache.unomi.api.Event;
import org.apache.unomi.api.Item;
import org.apache.unomi.api.Profile;
import org.apache.unomi.api.services.PersonalizationService;
import org.apache.unomi.rest.exception.InvalidRequestException;
import org.apache.unomi.schema.api.SchemaService;
+import org.apache.unomi.utils.HttpUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -87,16 +87,7 @@ public class ContextRequestDeserializer extends
StdDeserializer<ContextRequest>
}
final JsonNode eventsNode = node.get("events");
if (eventsNode instanceof ArrayNode) {
- ArrayNode events = (ArrayNode) eventsNode;
- List<Event> filteredEvents = new ArrayList<>();
- for (JsonNode event : events) {
- if (schemaService.isEventValid(event.toString())) {
-
filteredEvents.add(jsonParser.getCodec().treeToValue(event, Event.class));
- } else {
- logger.error("An event was rejected - switch to DEBUG log
level for more information");
- }
- }
- cr.setEvents(filteredEvents);
+ cr.setEvents(HttpUtils.filterValidEvents((ArrayNode) eventsNode,
schemaService, jsonParser));
}
final JsonNode filtersNode = node.get("filters");
if (filtersNode instanceof ArrayNode) {
diff --git
a/rest/src/main/java/org/apache/unomi/rest/deserializers/EventsCollectorRequestDeserializer.java
b/rest/src/main/java/org/apache/unomi/rest/deserializers/EventsCollectorRequestDeserializer.java
index b20d6bf07..b55e4f8c5 100644
---
a/rest/src/main/java/org/apache/unomi/rest/deserializers/EventsCollectorRequestDeserializer.java
+++
b/rest/src/main/java/org/apache/unomi/rest/deserializers/EventsCollectorRequestDeserializer.java
@@ -26,6 +26,7 @@ import org.apache.unomi.api.Event;
import org.apache.unomi.api.EventsCollectorRequest;
import org.apache.unomi.rest.exception.InvalidRequestException;
import org.apache.unomi.schema.api.SchemaService;
+import org.apache.unomi.utils.HttpUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -62,13 +63,7 @@ public class EventsCollectorRequestDeserializer extends
StdDeserializer<EventsCo
List<Event> filteredEvents = new ArrayList<>();
final JsonNode eventsNode = node.get("events");
if (eventsNode instanceof ArrayNode) {
- for (JsonNode event : eventsNode) {
- if (schemaService.isEventValid(event.toString())) {
-
filteredEvents.add(jsonParser.getCodec().treeToValue(event, Event.class));
- } else {
- logger.error("An event was rejected - switch to DEBUG log
level for more information");
- }
- }
+ filteredEvents.addAll(HttpUtils.filterValidEvents((ArrayNode)
eventsNode, schemaService, jsonParser));
}
EventsCollectorRequest eventsCollectorRequest = new
EventsCollectorRequest();
final JsonNode sessionId = node.get("sessionId");
diff --git a/rest/src/main/java/org/apache/unomi/utils/HttpUtils.java
b/rest/src/main/java/org/apache/unomi/utils/HttpUtils.java
index 678f3f0d4..87572eb22 100644
--- a/rest/src/main/java/org/apache/unomi/utils/HttpUtils.java
+++ b/rest/src/main/java/org/apache/unomi/utils/HttpUtils.java
@@ -17,24 +17,36 @@
package org.apache.unomi.utils;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
import org.apache.commons.lang3.StringUtils;
+import org.apache.unomi.api.Event;
import org.apache.unomi.api.Profile;
import org.apache.unomi.api.services.ConfigSharingService;
+import org.apache.unomi.schema.api.SchemaService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.List;
/**
* This is duplicate of the class from the wab bundle, the original file will
be removed once endpoints forwarded
*/
public class HttpUtils {
+ private static final Logger logger =
LoggerFactory.getLogger(HttpUtils.class);
private static final int MAX_COOKIE_AGE_IN_SECONDS = 60 * 60 * 24 * 365;
// 1 year
/**
* Utility to dump request info for a given http request.
+ *
* @param httpServletRequest request to dump
* @return the info as a String
*/
@@ -87,21 +99,34 @@ public class HttpUtils {
/**
* Return the cookie string for the given profile
* We can't use the build in NewCookie jax-rs object as it does not
support the SameSite value.
- * @param profile to parse
+ *
+ * @param profile to parse
* @param configSharingService shared config location.
* @return the cookie string to set in the header.
*/
public static String getProfileCookieString(Profile profile,
ConfigSharingService configSharingService, boolean isSecure) {
final String profileIdCookieDomain = (String)
configSharingService.getProperty("profileIdCookieDomain");
final String profileIdCookieName = (String)
configSharingService.getProperty("profileIdCookieName");
- final Integer profileIdCookieMaxAgeInSeconds = (Integer)
configSharingService.getProperty("profileIdCookieMaxAgeInSeconds") ;
+ final Integer profileIdCookieMaxAgeInSeconds = (Integer)
configSharingService.getProperty("profileIdCookieMaxAgeInSeconds");
final Boolean profileIdCookieHttpOnly = (Boolean)
configSharingService.getProperty("profileIdCookieHttpOnly");
return profileIdCookieName + "=" + profile.getItemId() +
"; Path=/" +
"; Max-Age=" + profileIdCookieMaxAgeInSeconds +
- (StringUtils.isNotBlank(profileIdCookieDomain) ? ("; Domain="
+ profileIdCookieDomain) : "") +
+ (StringUtils.isNotBlank(profileIdCookieDomain) ? ("; Domain="
+ profileIdCookieDomain) : "") +
"; SameSite=Lax" +
(isSecure ? "; Secure" : "") +
(profileIdCookieHttpOnly ? "; HttpOnly" : "");
}
+
+ public static List<Event> filterValidEvents(ArrayNode eventsNode,
SchemaService schemaService, JsonParser jsonParser) throws
JsonProcessingException {
+ List<Event> filteredEvents = new ArrayList<>();
+ for (JsonNode event : eventsNode) {
+ if (schemaService.isEventValid(event.toString())) {
+ filteredEvents.add(jsonParser.getCodec().treeToValue(event,
Event.class));
+ } else {
+ logger.error("An event was rejected - switch to DEBUG log
level for more information OR test the payload of your event against the
\"validateEvent\" endpoint.");
+ }
+ }
+ return filteredEvents;
+ }
}