From fb1c6bb0bcc61f7b13f1cfe9ad99e2b9644d87d3 Mon Sep 17 00:00:00 2001 From: Sami Mokaddem Date: Wed, 25 Oct 2023 10:52:59 +0200 Subject: [PATCH] chg: [workflow] Jinja template rendering is done automatically based on param options --- app/Controller/AppController.php | 2 +- .../logic/Module_blueprint_logic_module.php | 3 ++- .../WorkflowModules/Module_misp_module.php | 9 ++++++--- .../WorkflowModules/WorkflowBaseModule.php | 5 ++++- .../action/Module_add_eventblocklist_entry.php | 3 +-- .../Module_assign_country_from_enrichment.php | 3 +-- .../action/Module_attach_enrichment.php | 4 ++-- .../action/Module_attach_warninglist.php | 4 ++-- .../Module_attribute_comment_operation.php | 6 +++--- .../Module_attribute_ids_flag_operation.php | 3 +-- .../action/Module_enrich_event.php | 4 ++-- .../Module_event_distribution_operation.php | 3 +-- .../WorkflowModules/action/Module_push_zmq.php | 6 +++--- .../WorkflowModules/action/Module_send_mail.php | 10 ++++++---- .../action/Module_splunk_hec_export.php | 4 ++-- .../action/Module_tag_operation.php | 3 +-- .../action/Module_tag_replacement_generic.php | 3 +-- .../action/Module_telegram_send_alert.php | 7 ++++--- .../WorkflowModules/action/Module_webhook.php | 7 ++++--- .../logic/Module_distribution_if.php | 4 ++-- .../logic/Module_generic_filter_data.php | 4 ++-- .../logic/Module_generic_filter_reset.php | 4 ++-- .../WorkflowModules/logic/Module_generic_if.php | 4 ++-- .../logic/Module_organisation_if.php | 4 ++-- .../logic/Module_published_if.php | 4 ++-- .../WorkflowModules/logic/Module_tag_if.php | 4 ++-- .../logic/Module_threat_level_if.php | 6 +++--- app/View/Elements/Workflows/infoModal.ctp | 5 ++++- app/webroot/css/workflows-editor.css | 15 +++++++++++++++ .../js/workflows-editor/workflows-editor.js | 17 +++++++++++++++++ 30 files changed, 100 insertions(+), 60 deletions(-) diff --git a/app/Controller/AppController.php b/app/Controller/AppController.php index d2eaf1dd3..eb54621c5 100755 --- a/app/Controller/AppController.php +++ b/app/Controller/AppController.php @@ -33,7 +33,7 @@ class AppController extends Controller public $helpers = array('OrgImg', 'FontAwesome', 'UserName'); - private $__queryVersion = '155'; + private $__queryVersion = '156'; public $pyMispVersion = '2.4.178'; public $phpmin = '7.2'; public $phprec = '7.4'; diff --git a/app/Lib/WorkflowModules/logic/Module_blueprint_logic_module.php b/app/Lib/WorkflowModules/logic/Module_blueprint_logic_module.php index 464c610fc..9f2277b4a 100644 --- a/app/Lib/WorkflowModules/logic/Module_blueprint_logic_module.php +++ b/app/Lib/WorkflowModules/logic/Module_blueprint_logic_module.php @@ -15,7 +15,8 @@ class Module_blueprint_logic_module extends WorkflowBaseLogicModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $data = $roamingData->getData(); // Returning true will make the execution flow take the first output of this module. Otherwise, the second output will be used. return true; diff --git a/app/Model/WorkflowModules/Module_misp_module.php b/app/Model/WorkflowModules/Module_misp_module.php index 00c2c02f3..3a151571e 100644 --- a/app/Model/WorkflowModules/Module_misp_module.php +++ b/app/Model/WorkflowModules/Module_misp_module.php @@ -70,11 +70,11 @@ class Module_misp_module extends WorkflowBaseActionModule $postData['filteredItems'] = !empty($filteredItems) ? $filteredItems : $rData; } - $indexedParams = $this->getParamsWithValues($node); + $rData = $roamingData->getData(); + $indexedParams = $this->getParamsWithValues($node, $rData); $postData['params'] = Hash::combine($indexedParams, '{s}.id', '{s}.value'); - $params = $this->getParamsWithValues($node); $matchingData = []; - foreach ($params as $param) { + foreach ($indexedParams as $param) { if (!empty($param['_isHashPath'])) { $matchingData[$param['label']] = !empty($param['value']) ? $this->extractData($rData, $param['value']) : $rData; } @@ -107,6 +107,9 @@ class Module_misp_module extends WorkflowBaseActionModule } else { $param['type'] = 'input'; } + if (isset($moduleParam['jinja_supported'])) { + $param['jinja_supported'] = !empty($moduleParam['jinja_supported']); + } return $param; } } diff --git a/app/Model/WorkflowModules/WorkflowBaseModule.php b/app/Model/WorkflowModules/WorkflowBaseModule.php index 620fd4d36..66defb1bf 100644 --- a/app/Model/WorkflowModules/WorkflowBaseModule.php +++ b/app/Model/WorkflowModules/WorkflowBaseModule.php @@ -52,11 +52,14 @@ class WorkflowBaseModule return $fullIndexedParams; } - protected function getParamsWithValues($node): array + protected function getParamsWithValues(array $node, array $rData): array { $indexedParams = $this->mergeNodeConfigIntoParameters($node); foreach ($indexedParams as $id => $param) { $indexedParams[$id]['value'] = $param['value'] ?? ($param['default'] ?? ''); + if (!empty($param['jinja_supported']) && strlen($param['value']) > 0) { + $indexedParams[$id]['value'] = $this->render_jinja_template($param['value'], $rData); + } } return $indexedParams; } diff --git a/app/Model/WorkflowModules/action/Module_add_eventblocklist_entry.php b/app/Model/WorkflowModules/action/Module_add_eventblocklist_entry.php index 19fd36c35..365c31a51 100644 --- a/app/Model/WorkflowModules/action/Module_add_eventblocklist_entry.php +++ b/app/Model/WorkflowModules/action/Module_add_eventblocklist_entry.php @@ -58,9 +58,8 @@ class Module_add_eventblocklist_entry extends WorkflowBaseActionModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { - $params = $this->getParamsWithValues($node); - $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $eventUUIDExtractionPath = $params['uuid_hash_path']['value']; $eventUUID = Hash::get($rData, $eventUUIDExtractionPath); diff --git a/app/Model/WorkflowModules/action/Module_assign_country_from_enrichment.php b/app/Model/WorkflowModules/action/Module_assign_country_from_enrichment.php index 5711f70d6..6c6ff0693 100644 --- a/app/Model/WorkflowModules/action/Module_assign_country_from_enrichment.php +++ b/app/Model/WorkflowModules/action/Module_assign_country_from_enrichment.php @@ -75,9 +75,8 @@ class Module_assign_country_from_enrichment extends Module_tag_operation public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { - $params = $this->getParamsWithValues($node); - $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $user = $roamingData->getUser(); $countryExtractionPath = $params['hash_path']['value']; diff --git a/app/Model/WorkflowModules/action/Module_attach_enrichment.php b/app/Model/WorkflowModules/action/Module_attach_enrichment.php index cdf05e78d..24b22c050 100644 --- a/app/Model/WorkflowModules/action/Module_attach_enrichment.php +++ b/app/Model/WorkflowModules/action/Module_attach_enrichment.php @@ -54,7 +54,8 @@ class Module_attach_enrichment extends WorkflowBaseActionModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); if (empty($params['modules']['value'])) { $errors[] = __('No enrichmnent module selected'); return false; @@ -64,7 +65,6 @@ class Module_attach_enrichment extends WorkflowBaseActionModule $selectedModules = array_filter($params['modules']['value'], function($module) { return $module !== ''; }); - $rData = $roamingData->getData(); $event_id = $rData['Event']['id']; $options = [ 'user' => $roamingData->getUser(), diff --git a/app/Model/WorkflowModules/action/Module_attach_warninglist.php b/app/Model/WorkflowModules/action/Module_attach_warninglist.php index 260a8beec..ed7acd361 100644 --- a/app/Model/WorkflowModules/action/Module_attach_warninglist.php +++ b/app/Model/WorkflowModules/action/Module_attach_warninglist.php @@ -42,12 +42,12 @@ class Module_attach_warninglist extends WorkflowBaseActionModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); if (empty($params['warninglists']['value'])) { $errors[] = __('No warninglist module selected'); return false; } - $rData = $roamingData->getData(); $matchingItems = $this->getMatchingItemsForAttributes($node, $rData); if ($matchingItems === false) { diff --git a/app/Model/WorkflowModules/action/Module_attribute_comment_operation.php b/app/Model/WorkflowModules/action/Module_attribute_comment_operation.php index 2ec0f7ee9..9f0812217 100644 --- a/app/Model/WorkflowModules/action/Module_attribute_comment_operation.php +++ b/app/Model/WorkflowModules/action/Module_attribute_comment_operation.php @@ -25,6 +25,7 @@ class Module_attribute_comment_operation extends Module_attribute_edition_operat 'label' => __('Comment'), 'type' => 'textarea', 'placeholder' => 'Comment to be set', + 'jinja_supported' => true, ], ]; } @@ -32,9 +33,8 @@ class Module_attribute_comment_operation extends Module_attribute_edition_operat public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); - $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $user = $roamingData->getUser(); $matchingItems = $this->getMatchingItemsForAttributes($node, $rData); @@ -52,7 +52,7 @@ class Module_attribute_comment_operation extends Module_attribute_edition_operat { $currentRData = $rData; $currentRData['__currentAttribute'] = $attribute; - $renderedComment = $this->render_jinja_template($params['comment']['value'], $currentRData); + $renderedComment = $params['comment']['value']; if ($attribute['comment'] !== $params['comment']['value']) { $attribute['comment'] = $renderedComment; } diff --git a/app/Model/WorkflowModules/action/Module_attribute_ids_flag_operation.php b/app/Model/WorkflowModules/action/Module_attribute_ids_flag_operation.php index 640f927fa..4ded83044 100644 --- a/app/Model/WorkflowModules/action/Module_attribute_ids_flag_operation.php +++ b/app/Model/WorkflowModules/action/Module_attribute_ids_flag_operation.php @@ -36,9 +36,8 @@ class Module_attribute_ids_flag_operation extends Module_attribute_edition_opera public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); - $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $user = $roamingData->getUser(); $matchingItems = $this->getMatchingItemsForAttributes($node, $rData); diff --git a/app/Model/WorkflowModules/action/Module_enrich_event.php b/app/Model/WorkflowModules/action/Module_enrich_event.php index e5b277462..be95fe3ac 100644 --- a/app/Model/WorkflowModules/action/Module_enrich_event.php +++ b/app/Model/WorkflowModules/action/Module_enrich_event.php @@ -42,12 +42,12 @@ class Module_enrich_event extends WorkflowBaseActionModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); if (empty($params['modules']['value'])) { $errors[] = __('No enrichmnent module selected'); return false; } - $rData = $roamingData->getData(); $event_id = $rData['Event']['id']; $options = [ 'user' => $roamingData->getUser(), diff --git a/app/Model/WorkflowModules/action/Module_event_distribution_operation.php b/app/Model/WorkflowModules/action/Module_event_distribution_operation.php index 14057576a..25f658d06 100644 --- a/app/Model/WorkflowModules/action/Module_event_distribution_operation.php +++ b/app/Model/WorkflowModules/action/Module_event_distribution_operation.php @@ -69,9 +69,8 @@ class Module_event_distribution_operation extends WorkflowBaseModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); - $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $user = $roamingData->getUser(); $matchingItems = $this->getMatchingItemsForAttributes($node, $rData); diff --git a/app/Model/WorkflowModules/action/Module_push_zmq.php b/app/Model/WorkflowModules/action/Module_push_zmq.php index ddab32965..dd6a27c6f 100644 --- a/app/Model/WorkflowModules/action/Module_push_zmq.php +++ b/app/Model/WorkflowModules/action/Module_push_zmq.php @@ -30,10 +30,10 @@ class Module_push_zmq extends WorkflowBaseActionModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors=[]): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $path = $params['data_extraction_path']['value']; - $data = $roamingData->getData(); - $extracted = $this->extractData($data, $path); + $extracted = $this->extractData($rData, $path); if ($extracted === false) { $errors[] = __('Error while trying to extract data with path `%s`', $path); return false; diff --git a/app/Model/WorkflowModules/action/Module_send_mail.php b/app/Model/WorkflowModules/action/Module_send_mail.php index 53a03df7d..ce4189080 100644 --- a/app/Model/WorkflowModules/action/Module_send_mail.php +++ b/app/Model/WorkflowModules/action/Module_send_mail.php @@ -39,12 +39,14 @@ class Module_send_mail extends WorkflowBaseActionModule 'label' => 'Mail template subject', 'type' => 'textarea', 'placeholder' => __('The **template** will be rendered using *Jinja2*!'), + 'jinja_supported' => true, ], [ 'id' => 'mail_template_body', 'label' => 'Mail template body', 'type' => 'textarea', 'placeholder' => __('The **template** will be rendered using *Jinja2*!'), + 'jinja_supported' => true, ], ]; } @@ -60,7 +62,8 @@ class Module_send_mail extends WorkflowBaseActionModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); if (empty($params['recipients']['value'])) { $errors[] = __('No recipient set.'); return false; @@ -69,10 +72,9 @@ class Module_send_mail extends WorkflowBaseActionModule $errors[] = __('The mail template is empty.'); return false; } - $rData = $roamingData->getData(); - $renderedBody = $this->render_jinja_template($params['mail_template_body']['value'], $rData); - $renderedSubject = $this->render_jinja_template($params['mail_template_subject']['value'], $rData); + $renderedBody = $params['mail_template_body']['value']; + $renderedSubject = $params['mail_template_subject']['value']; $users = []; if (in_array('All accounts', $params['recipients']['value'])) { diff --git a/app/Model/WorkflowModules/action/Module_splunk_hec_export.php b/app/Model/WorkflowModules/action/Module_splunk_hec_export.php index 6fd3e65eb..450c15124 100644 --- a/app/Model/WorkflowModules/action/Module_splunk_hec_export.php +++ b/app/Model/WorkflowModules/action/Module_splunk_hec_export.php @@ -77,7 +77,8 @@ class Module_splunk_hec_export extends Module_webhook $errors[] = __('`Security.rest_client_enable_arbitrary_urls` is turned off'); return false; } - $params = $this->getParamsWithValues($node); + $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); if (empty($params['url']['value'])) { $errors[] = __('URL not provided.'); return false; @@ -87,7 +88,6 @@ class Module_splunk_hec_export extends Module_webhook return false; } - $rData = $roamingData->getData(); $event_without_attributes = $rData['Event']; unset($event_without_attributes['Attribute']); unset($event_without_attributes['_AttributeFlattened']); diff --git a/app/Model/WorkflowModules/action/Module_tag_operation.php b/app/Model/WorkflowModules/action/Module_tag_operation.php index 76830ee2d..09e1b60a9 100644 --- a/app/Model/WorkflowModules/action/Module_tag_operation.php +++ b/app/Model/WorkflowModules/action/Module_tag_operation.php @@ -90,9 +90,8 @@ class Module_tag_operation extends WorkflowBaseActionModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); - $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $user = $roamingData->getUser(); if ($this->filtersEnabled($node)) { diff --git a/app/Model/WorkflowModules/action/Module_tag_replacement_generic.php b/app/Model/WorkflowModules/action/Module_tag_replacement_generic.php index b4508097a..d6275fd56 100644 --- a/app/Model/WorkflowModules/action/Module_tag_replacement_generic.php +++ b/app/Model/WorkflowModules/action/Module_tag_replacement_generic.php @@ -67,9 +67,8 @@ class Module_tag_replacement_generic extends Module_tag_operation public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { - $params = $this->getParamsWithValues($node); - $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $user = $roamingData->getUser(); if ($this->filtersEnabled($node)) { diff --git a/app/Model/WorkflowModules/action/Module_telegram_send_alert.php b/app/Model/WorkflowModules/action/Module_telegram_send_alert.php index 9e3e6b46e..a68b5b34e 100644 --- a/app/Model/WorkflowModules/action/Module_telegram_send_alert.php +++ b/app/Model/WorkflowModules/action/Module_telegram_send_alert.php @@ -32,18 +32,19 @@ class Module_telegram_send_alert extends Module_webhook 'label' => 'Message Body Template', 'type' => 'textarea', 'placeholder' => __('Template redendered using Jinja2'), + 'jinja_supported' => true, ], ]; } public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool { - $params = $this->getParamsWithValues($node); - $rData = $roamingData->getData(); + $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $bot_token = $params['bot_token']['value']; $chat_id = $params['chat_id']['value']; - $message_body = $this->render_jinja_template($params['message_body_template']['value'], $rData); + $message_body = $params['message_body_template']['value']; $data = [ 'chat_id' => $chat_id, diff --git a/app/Model/WorkflowModules/action/Module_webhook.php b/app/Model/WorkflowModules/action/Module_webhook.php index 717b06326..6f7710005 100644 --- a/app/Model/WorkflowModules/action/Module_webhook.php +++ b/app/Model/WorkflowModules/action/Module_webhook.php @@ -67,6 +67,7 @@ class Module_webhook extends WorkflowBaseActionModule 'type' => 'textarea', 'default' => '', 'placeholder' => '', + 'jinja_supported' => true, ], [ 'id' => 'headers', @@ -103,16 +104,16 @@ class Module_webhook extends WorkflowBaseActionModule $errors[] = __('`Security.rest_client_enable_arbitrary_urls` is turned off'); return false; } - $params = $this->getParamsWithValues($node); + $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); if (empty($params['url']['value'])) { $errors[] = __('URL not provided.'); return false; } - $rData = $roamingData->getData(); $payload = ''; if (strlen($params['payload']['value']) > 0) { - $payload = $this->render_jinja_template($params['payload']['value'], $rData); + $payload = $params['payload']['value']; } else { $payload = $rData; } diff --git a/app/Model/WorkflowModules/logic/Module_distribution_if.php b/app/Model/WorkflowModules/logic/Module_distribution_if.php index 433ce2631..6135385f2 100644 --- a/app/Model/WorkflowModules/logic/Module_distribution_if.php +++ b/app/Model/WorkflowModules/logic/Module_distribution_if.php @@ -80,13 +80,13 @@ class Module_distribution_if extends WorkflowBaseLogicModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors=[]): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $data = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $data); $scope = $params['scope']['value']; $operator = $params['condition']['value']; $selected_distribution = $params['distribution']['value']; $selected_sharing_groups = !empty($params['sharing_group_id']['value']) ? $params['sharing_group_id']['value'] : []; - $data = $roamingData->getData(); $final_distribution = $this->__getPropagatedDistribution($data['Event']); if ($scope == 'attribute') { $final_distribution = $this->__getPropagatedDistribution( diff --git a/app/Model/WorkflowModules/logic/Module_generic_filter_data.php b/app/Model/WorkflowModules/logic/Module_generic_filter_data.php index 8324f58ed..46f2f20f4 100644 --- a/app/Model/WorkflowModules/logic/Module_generic_filter_data.php +++ b/app/Model/WorkflowModules/logic/Module_generic_filter_data.php @@ -82,7 +82,8 @@ class Module_generic_filter_data extends WorkflowFilteringLogicModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors=[]): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); $selector = $params['selector']['value']; $path = $params['hash_path']['value']; $operator = $params['operator']['value']; @@ -90,7 +91,6 @@ class Module_generic_filter_data extends WorkflowFilteringLogicModule $value_list = $params['value_list']['value']; $valueToEvaluate = $operator == 'in_or' ? $value_list : $value; $filteringLabel = $params['filtering-label']['value']; - $rData = $roamingData->getData(); $newRData = $rData; if (empty($newRData['_unfilteredData'])) { diff --git a/app/Model/WorkflowModules/logic/Module_generic_filter_reset.php b/app/Model/WorkflowModules/logic/Module_generic_filter_reset.php index decf2fd16..dd4f23bee 100644 --- a/app/Model/WorkflowModules/logic/Module_generic_filter_reset.php +++ b/app/Model/WorkflowModules/logic/Module_generic_filter_reset.php @@ -28,9 +28,9 @@ class Module_generic_filter_reset extends WorkflowFilteringLogicModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors=[]): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); - $filteringLabel = $params['filtering-label']['value']; $rData = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $rData); + $filteringLabel = $params['filtering-label']['value']; $newRData = $rData['_unfilteredData']; if (in_array($filteringLabel, array_keys($this->_genFilteringLabels()))) { diff --git a/app/Model/WorkflowModules/logic/Module_generic_if.php b/app/Model/WorkflowModules/logic/Module_generic_if.php index 4aafb778c..9aebef3a2 100644 --- a/app/Model/WorkflowModules/logic/Module_generic_if.php +++ b/app/Model/WorkflowModules/logic/Module_generic_if.php @@ -64,13 +64,13 @@ class Module_generic_if extends WorkflowBaseLogicModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors=[]): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $data = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $data); $path = $params['hash_path']['value']; $operator = $params['operator']['value']; $value = $params['value']['value']; $value_list = $params['value_list']['value']; $valueToEvaluate = $operator == 'in_or' ? $value_list : $value; - $data = $roamingData->getData(); $extracted = []; if ($operator == 'equals' || $operator == 'not_equals') { $extracted = Hash::get($data, $path, []); diff --git a/app/Model/WorkflowModules/logic/Module_organisation_if.php b/app/Model/WorkflowModules/logic/Module_organisation_if.php index ea80090ca..58c6eb0e1 100644 --- a/app/Model/WorkflowModules/logic/Module_organisation_if.php +++ b/app/Model/WorkflowModules/logic/Module_organisation_if.php @@ -60,13 +60,13 @@ class Module_organisation_if extends WorkflowBaseLogicModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors=[]): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $data = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $data); $org_type = $params['org_type']['value']; $operator = $params['condition']['value']; $selectedOrgs = !empty($params['org_id']['value']) ? $params['org_id']['value'] : []; $selectedOrgs = is_array($selectedOrgs) ? $selectedOrgs : [$selectedOrgs]; // Backward compatibility for non-multiple `org_id` - $data = $roamingData->getData(); $path = 'Event.org_id'; if ($org_type == 'orgc') { $path = 'Event.orgc_id'; diff --git a/app/Model/WorkflowModules/logic/Module_published_if.php b/app/Model/WorkflowModules/logic/Module_published_if.php index 14ce23d37..0ae5991b4 100644 --- a/app/Model/WorkflowModules/logic/Module_published_if.php +++ b/app/Model/WorkflowModules/logic/Module_published_if.php @@ -35,10 +35,10 @@ class Module_published_if extends WorkflowBaseLogicModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors=[]): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $data = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $data); $operator = $params['condition']['value']; - $data = $roamingData->getData(); $path = 'Event.published'; $is_published = !empty(Hash::get($data, $path)); $eval = $this->evaluateCondition($is_published, $operator, true); diff --git a/app/Model/WorkflowModules/logic/Module_tag_if.php b/app/Model/WorkflowModules/logic/Module_tag_if.php index b379d26de..c787a9698 100644 --- a/app/Model/WorkflowModules/logic/Module_tag_if.php +++ b/app/Model/WorkflowModules/logic/Module_tag_if.php @@ -91,7 +91,8 @@ class Module_tag_if extends WorkflowBaseLogicModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors=[]): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $data = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $data); $selectedTags = !empty($params['tags']['value']) ? $params['tags']['value'] : []; $selectedClusters = !empty($params['clusters']['value']) ? $params['clusters']['value'] : []; @@ -101,7 +102,6 @@ class Module_tag_if extends WorkflowBaseLogicModule $allSelectedTags = array_merge($selectedTags, $selectedClusters); $operator = $params['condition']['value']; $scope = $params['scope']['value']; - $data = $roamingData->getData(); $extracted = $this->__getTagFromScope($scope, $data); $eval = $this->evaluateCondition($extracted, $operator, $allSelectedTags); return !empty($eval); diff --git a/app/Model/WorkflowModules/logic/Module_threat_level_if.php b/app/Model/WorkflowModules/logic/Module_threat_level_if.php index 6b281ea03..25e7d8f52 100644 --- a/app/Model/WorkflowModules/logic/Module_threat_level_if.php +++ b/app/Model/WorkflowModules/logic/Module_threat_level_if.php @@ -50,12 +50,12 @@ class Module_threat_level_if extends WorkflowBaseLogicModule public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors=[]): bool { parent::exec($node, $roamingData, $errors); - $params = $this->getParamsWithValues($node); + $data = $roamingData->getData(); + $params = $this->getParamsWithValues($node, $data); - $operator = $params['condition']['value']; + $operator = $params['condition']['value']; $selected_threatlevel = $params['threatlevel']['value']; - $data = $roamingData->getData(); $threatlevel_id = $data['Event']['threat_level_id']; if ($operator == 'equals') { diff --git a/app/View/Elements/Workflows/infoModal.ctp b/app/View/Elements/Workflows/infoModal.ctp index 485d17860..ee9ef6cef 100644 --- a/app/View/Elements/Workflows/infoModal.ctp +++ b/app/View/Elements/Workflows/infoModal.ctp @@ -649,7 +649,10 @@ $data_passed_to_if_module = [