From e8cde1a194240c0469f7e8b21ef12fa2aeb6f78f Mon Sep 17 00:00:00 2001 From: Malena Casas Date: Thu, 23 Jan 2025 15:33:24 -0300 Subject: [PATCH 1/3] Improve the parse of Arg argument in Command, so it can receive list, integers and texts --- .../com/wazuh/commandmanager/model/Args.java | 51 +++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java b/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java index 1cd8ced7..43cc32e4 100644 --- a/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java +++ b/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java @@ -16,16 +16,21 @@ */ package com.wazuh.commandmanager.model; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.opensearch.core.xcontent.ToXContentObject; import org.opensearch.core.xcontent.XContentBuilder; import org.opensearch.core.xcontent.XContentParser; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; /** Handles the command.action.args object */ public class Args implements ToXContentObject { + private static final Logger log = LogManager.getLogger(Args.class); public static final String ARGS = "args"; private final Map args; @@ -54,10 +59,50 @@ public Args(Map args) { */ public static Args parse(XContentParser parser) throws IOException { Map args = new HashMap<>(); + + String fieldName = ""; + List list = null; + boolean isList = false; + while (parser.nextToken() != XContentParser.Token.END_OBJECT) { - String fieldName = parser.currentName(); - parser.nextToken(); - args.put(fieldName, parser.objectText()); + XContentParser.Token actualToken = parser.currentToken(); + switch (actualToken) { + case FIELD_NAME: + fieldName = parser.currentName(); + break; + case START_ARRAY: + list = new ArrayList<>(); + isList = true; + break; + case VALUE_STRING: + if (isList) { + list.add(parser.objectText()); + } else { + args.put(fieldName, parser.objectText()); + } + break; + case VALUE_NUMBER: + if (isList) { + list.add(parser.numberValue()); + } else { + args.put(fieldName, parser.numberValue()); + } + break; + case VALUE_NULL: + if (isList) { + list.add(""); + } else { + args.put(fieldName, ""); + } + break; + case END_ARRAY: + args.put(fieldName, list); + list = null; + isList = false; + break; + default: + break; + } } return new Args(args); } From 5c70fab797309dca645cac2d590b05876ee5f9a4 Mon Sep 17 00:00:00 2001 From: Malena Casas Date: Thu, 23 Jan 2025 15:42:24 -0300 Subject: [PATCH 2/3] Delete unused log elements --- .../src/main/java/com/wazuh/commandmanager/model/Args.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java b/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java index 43cc32e4..de5c0f2b 100644 --- a/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java +++ b/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java @@ -16,8 +16,6 @@ */ package com.wazuh.commandmanager.model; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.opensearch.core.xcontent.ToXContentObject; import org.opensearch.core.xcontent.XContentBuilder; import org.opensearch.core.xcontent.XContentParser; @@ -30,7 +28,6 @@ /** Handles the command.action.args object */ public class Args implements ToXContentObject { - private static final Logger log = LogManager.getLogger(Args.class); public static final String ARGS = "args"; private final Map args; From 27e0d5a635ec51718b44183537d87ab13ed19cfc Mon Sep 17 00:00:00 2001 From: Alex Ruiz Date: Fri, 24 Jan 2025 13:24:11 +0100 Subject: [PATCH 3/3] Parse nested objects in command.action.args --- .../java/com/wazuh/commandmanager/model/Args.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java b/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java index de5c0f2b..ac797ca5 100644 --- a/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java +++ b/plugins/command-manager/src/main/java/com/wazuh/commandmanager/model/Args.java @@ -97,6 +97,9 @@ public static Args parse(XContentParser parser) throws IOException { list = null; isList = false; break; + case START_OBJECT: + args.put(fieldName, Args.parse(parser).getArgs()); + break; default: break; } @@ -104,6 +107,15 @@ public static Args parse(XContentParser parser) throws IOException { return new Args(args); } + /** + * Required for the parsing of nested objects. + * + * @return internal args map. + */ + public Map getArgs() { + return this.args; + } + /** * Builds an Args XContentBuilder. Iterates over the args map adding key-value pairs *