chg: [workflow] Better integration with misp-module + few fixes

pull/8530/head
Sami Mokaddem 2022-06-01 09:24:20 +02:00
parent e802f2f92a
commit b15e03f511
No known key found for this signature in database
GPG Key ID: 164C473F627A06FA
9 changed files with 54 additions and 14 deletions

View File

@ -190,6 +190,9 @@ class WorkflowsController extends AppController
} else {
$data = $modules["blocks_{$moduleType}"];
}
if ($this->_isRest()) {
return $this->RestResponse->viewData($data, $this->response->type());
}
$this->set('data', $data);
$this->set('indexType', $moduleType);
$this->set('menuData', ['menuList' => 'workflows', 'menuItem' => 'index_module']);
@ -204,6 +207,9 @@ class WorkflowsController extends AppController
if ($module['module_type'] == 'trigger') {
$module = $this->Workflow->attachWorkflowsToTriggers($this->Auth->user(), [$module], true)[0];
}
if ($this->_isRest()) {
return $this->RestResponse->viewData($module, $this->response->type());
}
$this->set('data', $module);
$this->set('menuData', ['menuList' => 'workflows', 'menuItem' => 'view_module']);
}

View File

@ -578,7 +578,7 @@ class Workflow extends AppModel
$success = $moduleClass->exec($node, $roamingData, $errors);
} catch (Exception $e) {
$message = sprintf(__('Error while executing module: %s'), $e->getMessage());
$this->__logError($node['data']['id'], $message);
$this->logException(__('Error while executing module %s', $node['data']['id']), $e);
return false;
}
}
@ -680,7 +680,7 @@ class Workflow extends AppModel
$this->loaded_classes['logic'][$logic['id']]->disabled = $module_enabled;
});
array_walk($this->loaded_modules['action'], function (&$action) {
$module_enabled = !in_array($action['id'], ['push-zmq', 'slack-message', 'mattermost-message', 'add-tag', 'writeactions', 'enrich-event', ]);
$module_enabled = !in_array($action['id'], ['push-zmq', 'slack-message', 'mattermost-message', 'add-tag', 'writeactions', 'enrich-event', 'testaction', ]);
$action['disabled'] = $module_enabled;
$this->loaded_classes['action'][$action['id']]->disabled = $module_enabled;
});

View File

@ -26,7 +26,9 @@ class Module_misp_module extends WorkflowBaseModule
if (!empty($misp_module_config['meta']['icon'])) {
$this->icon = $misp_module_config['meta']['icon'];
}
$this->icon_class = $misp_module_config['meta']['icon_class'] ?? '';
if (!empty($misp_module_config['meta']['icon_class'])) {
$this->icon_class = $misp_module_config['meta']['icon_class'];
}
if (!empty($misp_module_config['meta']['inputs'])) {
$this->inputs = (int)$misp_module_config['meta']['inputs'];
}
@ -34,7 +36,9 @@ class Module_misp_module extends WorkflowBaseModule
$this->inputs = (int)$misp_module_config['meta']['outputs'];
}
if (!empty($misp_module_config['meta']['config'])) {
$this->params = $misp_module_config['meta']['config'];
foreach ($misp_module_config['meta']['config'] as $paramName => $moduleParam) {
$this->params[] = $this->translateParams($paramName, $moduleParam);
}
}
$this->Module = ClassRegistry::init('Module');
}
@ -44,11 +48,25 @@ class Module_misp_module extends WorkflowBaseModule
parent::exec($node, $roamingData);
$postData = ['module' => $this->name];
$postData['data'] = ['post-data' => 'test-' . time()];
$result = $this->Module->queryModuleServer($postData, false, 'Action', false);
$query = $this->Module->queryModuleServer($postData, false, 'Action', false);
if (!empty($query['error'])) {
$errors[] = $query['error'];
return false;
}
$message = [
"Got result from $this->name" => json_encode($result)
"Got result from $this->name" => JsonTool::encode($query['data'])
];
$this->push_zmq($message);
return true;
}
// FIXME: We might want to align the module config with what's currently supported
protected function translateParams($paramName, $moduleParam): array
{
$param = [];
$param['label'] = $paramName;
$param['placeholder'] = $moduleParam['value'];
$param['type'] = 'input';
return $param;
}
}

View File

@ -27,8 +27,8 @@ class Module_add_tag extends WorkflowBaseModule
public function exec(array $node, WorkflowRoamingData $roamingData, array &$errors = []): bool
{
parent::exec($node, $roamingData, $errors);
return true;
// $errors[] = __('Could not add tag!');
// return false;
// return true;
$errors[] = __('Could not add tag!');
return false;
}
}

View File

@ -20,7 +20,7 @@ class Module_mattermost_message extends WorkflowBaseModule
'type' => 'input',
'label' => 'Tag name',
'default' => 'tlp:red',
'placeholder' => __('Enter tag name')
'placeholder' => __('Enter tag name'),
],
[
'id' => 'channel_name_select',

View File

@ -1620,7 +1620,7 @@ $divider = $this->element('/genericElements/SideMenu/side_menu_divider');
));
echo $this->element('/genericElements/SideMenu/side_menu_link', array(
'element_id' => 'index_trigger',
'url' => '/workflows/triggerIndex',
'url' => '/workflows/moduleIndex',
'text' => __('List Triggers')
));
if ($isSiteAdmin) {

View File

@ -4,9 +4,10 @@
if (is_array($value) && count($value) === 1 && isset($value[0])) {
$value = $value[0];
}
$containerClassSuffix = Inflector::variable(h($field['key']));
echo sprintf(
'<div class="json_container_%s"></div>',
h($field['key'])
$containerClassSuffix
);
if (is_string($value)) {
$value = json_decode($value);
@ -14,6 +15,6 @@
?>
<script type="text/javascript">
$(document).ready(function() {
$('.json_container_<?php echo h($field['key']);?>').html(syntaxHighlightJson(<?php echo json_encode($value); ?>, 4));
$('.json_container_<?= $containerClassSuffix ?>').html(syntaxHighlightJson(<?php echo json_encode($value); ?>, 4));
});
</script>

View File

@ -9,6 +9,7 @@ if ($data['module_type'] == 'trigger') {
];
}
// $data['params'] = JsonTool::encode($data['params']);
echo $this->element(
'genericElements/SingleViews/single_view',
[
@ -28,6 +29,15 @@ echo $this->element(
return sprintf('<i class="fa-fw %s"></i> %s', $this->FontAwesome->getClass($row['icon']), h($row['name']));
}
],
[
'key' => __('Module Type'),
'path' => 'module_type'
],
[
'key' => __('Is MISP module'),
'type' => 'boolean',
'path' => 'is_misp_module'
],
[
'key' => __('Description'),
'path' => 'description'
@ -42,6 +52,11 @@ echo $this->element(
false => '<i class="fas fa-check"></i>'
],
],
[
'key' => __('Module Parameters'),
'type' => 'json',
'path' => 'params',
],
[
'key' => __('Workflow Execution Order'),
'requirement' => $data['module_type'] == 'trigger',

View File

@ -81,7 +81,7 @@ echo $this->element(
box-shadow: 0px 3px 6px 2px #33333311;
}
.restrict-height>.json_container_Data {
.restrict-height > div {
height: 200px;
overflow: auto;
resize: both;