diff --git a/src/core/operations/Jq.mjs b/src/core/operations/Jq.mjs index c1e02b34..bc502957 100644 --- a/src/core/operations/Jq.mjs +++ b/src/core/operations/Jq.mjs @@ -30,7 +30,12 @@ class Jq extends Operation { name: "Query", type: "string", value: "" - } + }, + { + name: "Raw", + type: "boolean", + value: false + }, ]; } @@ -40,7 +45,7 @@ class Jq extends Operation { * @returns {string} */ run(input, args) { - const [query] = args; + const [query, raw] = args; let result; try { @@ -48,8 +53,11 @@ class Jq extends Operation { } catch (err) { throw new OperationError(`Invalid jq expression: ${err.message}`); } - - return JSON.stringify(result); + if (raw && typeof result === "string") { + return result; + } else { + return JSON.stringify(result); + } } } diff --git a/tests/operations/tests/Jq.mjs b/tests/operations/tests/Jq.mjs new file mode 100644 index 00000000..a2435450 --- /dev/null +++ b/tests/operations/tests/Jq.mjs @@ -0,0 +1,32 @@ +/** + * Jq tests. + * + * @author rtpt-romankarwacik [roman.karwacik@redteam-pentesting.de] + * + */ +import TestRegister from "../../lib/TestRegister.mjs"; + +TestRegister.addTests([ + { + name: "Get raw JSON Property", + input: '{"data": "testString\\u0000"}', + expectedOutput: "testString\u0000", + recipeConfig: [ + { + op: "Jq", + args: [".data", true], + }, + ], + }, + { + name: "Get JSON Property", + input: '{"data": "testString\\u0000"}', + expectedOutput: "\"testString\\u0000\"", + recipeConfig: [ + { + op: "Jq", + args: [".data", false], + }, + ], + }, +]);