chg: [wip] local tool interconnector, user browsing/searching added for misp connector
parent
3bf7f5a3e4
commit
7ed72c5469
|
@ -246,4 +246,34 @@ class LocalToolsController extends AppController
|
|||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function connectLocal($local_tool_id)
|
||||
{
|
||||
$params = [
|
||||
'local_tool_id' => $local_tool_id
|
||||
];
|
||||
$local_tool = $this->LocalTools->fetchConnection($local_tool_id);
|
||||
if ($this->request->is(['post', 'put'])) {
|
||||
$postParams = $this->ParamHandler->harvestParams(['target_tool_id']);
|
||||
if (empty($postParams['target_tool_id'])) {
|
||||
throw new MethodNotAllowedException(__('No target tool ID supplied.'));
|
||||
}
|
||||
|
||||
$params['target_tool_id'] = $postParams['target_tool_id'];
|
||||
$result = $this->LocalTools->encodeLocalConnection($params);
|
||||
// Send message to remote inbox
|
||||
debug($result);
|
||||
} else {
|
||||
$target_tools = $this->LocalTools->findConnectable($local_tool);
|
||||
debug($target_tools);
|
||||
if (empty($target_tools)) {
|
||||
throw new NotFoundException(__('No tools found to connect.'));
|
||||
}
|
||||
$this->set('data', [
|
||||
'remoteCerebrate' => $remoteCerebrate,
|
||||
'remoteTool' => $remoteTool,
|
||||
'local_tools' => $local_tools
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,6 +82,17 @@ class MispConnector extends CommonConnectorTools
|
|||
'sort',
|
||||
'direction'
|
||||
]
|
||||
],
|
||||
'usersAction' => [
|
||||
'type' => 'index',
|
||||
'scope' => 'child',
|
||||
'params' => [
|
||||
'quickFilter',
|
||||
'limit',
|
||||
'page',
|
||||
'sort',
|
||||
'direction'
|
||||
]
|
||||
]
|
||||
];
|
||||
public $version = '0.1';
|
||||
|
@ -397,6 +408,82 @@ class MispConnector extends CommonConnectorTools
|
|||
}
|
||||
}
|
||||
|
||||
public function usersAction(array $params): array
|
||||
{
|
||||
$params['validParams'] = [
|
||||
'limit' => 'limit',
|
||||
'page' => 'page',
|
||||
'quickFilter' => 'searchall'
|
||||
];
|
||||
$urlParams = h($params['connection']['id']) . '/usersAction';
|
||||
$response = $this->getData('/admin/users/index', $params);
|
||||
$data = $response->getJson();
|
||||
if (!empty($data)) {
|
||||
return [
|
||||
'type' => 'index',
|
||||
'data' => [
|
||||
'data' => $data,
|
||||
'skip_pagination' => 1,
|
||||
'top_bar' => [
|
||||
'children' => [
|
||||
[
|
||||
'type' => 'search',
|
||||
'button' => __('Filter'),
|
||||
'placeholder' => __('Enter value to search'),
|
||||
'data' => '',
|
||||
'searchKey' => 'value',
|
||||
'additionalUrlParams' => $urlParams,
|
||||
'quickFilter' => 'value'
|
||||
]
|
||||
]
|
||||
],
|
||||
'fields' => [
|
||||
[
|
||||
'name' => 'Id',
|
||||
'sort' => 'User.id',
|
||||
'data_path' => 'User.id',
|
||||
],
|
||||
[
|
||||
'name' => 'Organisation',
|
||||
'sort' => 'Organisation.name',
|
||||
'data_path' => 'Organisation.name',
|
||||
],
|
||||
[
|
||||
'name' => 'Email',
|
||||
'sort' => 'User.email',
|
||||
'data_path' => 'User.email',
|
||||
],
|
||||
[
|
||||
'name' => 'Role',
|
||||
'sort' => 'Role.name',
|
||||
'data_path' => 'Role.name'
|
||||
]
|
||||
],
|
||||
'actions' => [
|
||||
[
|
||||
'open_modal' => '/localTools/action/' . h($params['connection']['id']) . '/editUser?id={{0}}',
|
||||
'modal_params_data_path' => ['User.id'],
|
||||
'icon' => 'edit',
|
||||
'reload_url' => '/localTools/action/' . h($params['connection']['id']) . '/editAction'
|
||||
],
|
||||
[
|
||||
'open_modal' => '/localTools/action/' . h($params['connection']['id']) . '/deleteUser?id={{0}}',
|
||||
'modal_params_data_path' => ['User.id'],
|
||||
'icon' => 'trash',
|
||||
'reload_url' => '/localTools/action/' . h($params['connection']['id']) . '/serversAction'
|
||||
]
|
||||
],
|
||||
'title' => false,
|
||||
'description' => false,
|
||||
'pull' => 'right'
|
||||
]
|
||||
];
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function organisationsAction(array $params): array
|
||||
{
|
||||
$params['validParams'] = [
|
||||
|
@ -631,8 +718,7 @@ class MispConnector extends CommonConnectorTools
|
|||
'label' => __('Value'),
|
||||
'default' => h($response['value']),
|
||||
'type' => 'dropdown',
|
||||
'options' => $response['options'],
|
||||
|
||||
'options' => $response['options']
|
||||
]
|
||||
];
|
||||
} else {
|
||||
|
@ -648,7 +734,7 @@ class MispConnector extends CommonConnectorTools
|
|||
return [
|
||||
'data' => [
|
||||
'title' => __('Modify server setting'),
|
||||
'description' => __('Modify setting ({0}) on connected MISP instance.', $params['setting']),
|
||||
'description' => __('Modify setting ({0}) on selected MISP instance(s).', $params['setting']),
|
||||
'fields' => $fields,
|
||||
'submit' => [
|
||||
'action' => $params['request']->getParam('action')
|
||||
|
|
|
@ -95,6 +95,29 @@ class LocalToolsTable extends AppTable
|
|||
return $connectors;
|
||||
}
|
||||
|
||||
public function getInterconnectors(string $name = null): array
|
||||
{
|
||||
$connectors = [];
|
||||
$dirs = [
|
||||
ROOT . '/src/Lib/default/local_tool_interconnectors',
|
||||
ROOT . '/src/Lib/custom/local_tool_interconnectors'
|
||||
];
|
||||
foreach ($dirs as $dir) {
|
||||
$dir = new Folder($dir);
|
||||
$files = $dir->find('.*Interconnector\.php');
|
||||
foreach ($files as $file) {
|
||||
require_once($dir->pwd() . '/'. $file);
|
||||
$className = substr($file, 0, -4);
|
||||
$classNamespace = '\\' . $className . '\\' . $className;
|
||||
$tempClass = new $classNamespace;
|
||||
if (empty($name) || $tempClass->getConnectors()[0] === $name) {
|
||||
$connectors[$tempClass->getConnectors()[0]][] = new $classNamespace;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $connectors;
|
||||
}
|
||||
|
||||
public function extractMeta(array $connector_classes, bool $includeConnections = false): array
|
||||
{
|
||||
$connectors = [];
|
||||
|
@ -236,4 +259,25 @@ class LocalToolsTable extends AppTable
|
|||
}
|
||||
return $local_tools;
|
||||
}
|
||||
|
||||
public function findConnectable($local_tool): array
|
||||
{
|
||||
$connectors = $this->getInterconnectors($local_tool['connector']);
|
||||
$validTargets = [];
|
||||
if (!empty($connectors)) {
|
||||
foreach ($connectors[$local_tool['connector']] as $connector) {
|
||||
$validTargets[$connector['connects'][1]] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function fetchConnection($id): object
|
||||
{
|
||||
$connection = $this->find()->where(['id' => $id])->first();
|
||||
if (empty($connection)) {
|
||||
throw new NotFoundException(__('Local tool not found.'));
|
||||
}
|
||||
return $connection;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,6 +60,11 @@ echo $this->element('genericElements/IndexTable/index_table', [
|
|||
'url_params_data_paths' => ['id'],
|
||||
'icon' => 'eye'
|
||||
],
|
||||
[
|
||||
'open_modal' => '/localTools/connectLocal/[onclick_params_data_path]',
|
||||
'modal_params_data_path' => 'id',
|
||||
'icon' => 'plug'
|
||||
],
|
||||
[
|
||||
'open_modal' => '/localTools/edit/[onclick_params_data_path]',
|
||||
'modal_params_data_path' => 'id',
|
||||
|
|
Loading…
Reference in New Issue