From db65d4b281f3b806265ccc0a34009f42a693645c Mon Sep 17 00:00:00 2001 From: Ark2307 Date: Mon, 20 Jan 2025 11:56:38 +0530 Subject: [PATCH] Adding query params support via payload keys in configs --- .../java/com/akto/testing/ApiExecutor.java | 7 ++++ .../src/main/java/com/akto/testing/Utils.java | 40 ++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/libs/utils/src/main/java/com/akto/testing/ApiExecutor.java b/libs/utils/src/main/java/com/akto/testing/ApiExecutor.java index 7cff79d19d..146bc73e24 100644 --- a/libs/utils/src/main/java/com/akto/testing/ApiExecutor.java +++ b/libs/utils/src/main/java/com/akto/testing/ApiExecutor.java @@ -424,6 +424,13 @@ private static void calculateFinalRequestFromAdvancedSettings(OriginalHttpReques payloadConditions.getOrDefault(TestEditorEnums.NonTerminalExecutorDataOperands.ADD_BODY_PARAM.name(), emptyList), payloadConditions.getOrDefault(TestEditorEnums.TerminalExecutorDataOperands.DELETE_BODY_PARAM.name(), emptyList) ); + + // modify query params as well from payload conditions only, not handling query conditions separately for now + Utils.modifyQueryOperations(originalHttpRequest, + payloadConditions.getOrDefault(TestEditorEnums.NonTerminalExecutorDataOperands.MODIFY_BODY_PARAM.name(), emptyList), + emptyList, + payloadConditions.getOrDefault(TestEditorEnums.TerminalExecutorDataOperands.DELETE_BODY_PARAM.name(), emptyList) + ); } private static void calculateHashAndAddAuth(OriginalHttpRequest originalHttpRequest, boolean executeScript) { diff --git a/libs/utils/src/main/java/com/akto/testing/Utils.java b/libs/utils/src/main/java/com/akto/testing/Utils.java index ce56941405..7d9fceea60 100644 --- a/libs/utils/src/main/java/com/akto/testing/Utils.java +++ b/libs/utils/src/main/java/com/akto/testing/Utils.java @@ -463,5 +463,43 @@ public static void modifyHeaderOperations(OriginalHttpRequest httpRequest, List< } - + + public static void modifyQueryOperations(OriginalHttpRequest httpRequest, List modifyOperations, List addOperations, List deleteOperations){ + + // since this is being used with payload conditions, we are not supporting any add operations, operations are done only on existing query keys + + String query = httpRequest.getQueryParams(); + if(query == null || query.isEmpty()){ + return ; + } + + BasicDBObject queryParamObj = RequestTemplate.getQueryJSON(httpRequest.getUrl() + "?" + query); + + if(!modifyOperations.isEmpty()){ + for(ConditionsType condition : modifyOperations){ + if(queryParamObj.containsKey(condition.getKey())){ + queryParamObj.put(condition.getKey(), condition.getValue()); + } + } + } + + + if(!deleteOperations.isEmpty()){ + for(ConditionsType condition : deleteOperations){ + if(queryParamObj.containsKey(condition.getKey())){ + queryParamObj.remove(condition.getKey()); + } + } + } + + String queryParams = ""; + for (String key: queryParamObj.keySet()) { + queryParams += (key + "=" + queryParamObj.get(key) + "&"); + } + if (queryParams.length() > 0) { + queryParams = queryParams.substring(0, queryParams.length() - 1); + } + + httpRequest.setQueryParams(queryParams); + } }