mirror of https://github.com/MISP/MISP
new: [widget] Eventstream widget and index widget UI added
- EventStream - add a lightweight event index to your dashboard - configure filters for the events you're interested in (tags, orgs, published) - set the number of events to display (limit) - set the list of fields it should display (id, orgc, info, tags, threat_level, analysis, date) - Index widget UI - uses the generic index builder - build simple index like UIspull/7002/head
parent
74aaf2de0b
commit
e7a7f30ba2
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
|
||||
class EventStreamWidget
|
||||
{
|
||||
public $title = 'Event Stream';
|
||||
public $render = 'Index';
|
||||
public $width = 4;
|
||||
public $height = 2;
|
||||
public $params = [
|
||||
'tags' => 'A list of tagnames to filter on. Comma separated list, prepend each tag with an exclamation mark to negate it.',
|
||||
'orgs' => 'A list of organisation names to filter on. Comma separated list, prepend each tag with an exclamation mark to negate it.',
|
||||
'published' => 'Boolean flag to filter on published events only',
|
||||
'limit' => 'How many events should be listed? Defaults to 5',
|
||||
'fields' => 'A list of fields that should be displayed. Valid fields: id, orgc, info, tags, threat_level, analysis, date. Default field selection ["id", "orgc", "info"]'
|
||||
];
|
||||
public $description = 'Monitor incoming events based on your own filters.';
|
||||
public $cacheLifetime = false;
|
||||
public $autoRefreshDelay = 5;
|
||||
private $__default_fields = ['id', 'orgc', 'info'];
|
||||
|
||||
public function handler($user, $options = array())
|
||||
{
|
||||
$this->Event = ClassRegistry::init('Event');
|
||||
$params = [
|
||||
'metadata' => 1,
|
||||
'limit' => 5,
|
||||
'page' => 1,
|
||||
'order' => 'Event.id DESC'
|
||||
];
|
||||
$field_options = [
|
||||
'id' => [
|
||||
'name' => '#',
|
||||
'url' => Configure::read('MISP.baseurl') . '/events/view',
|
||||
'element' => 'links',
|
||||
'data_path' => 'Event.id',
|
||||
'url_params_data_paths' => 'Event.id'
|
||||
],
|
||||
'orgc' => [
|
||||
'name' => 'Org',
|
||||
'data_path' => 'Orgc',
|
||||
'element' => 'org'
|
||||
],
|
||||
'info' => [
|
||||
'name' => 'Info',
|
||||
'data_path' => 'Event.info',
|
||||
],
|
||||
'tags' => [
|
||||
'name' => 'Tags',
|
||||
'data_path' => 'EventTag',
|
||||
'element' => 'tags',
|
||||
'scope' => 'feeds'
|
||||
],
|
||||
'threat_level' => [
|
||||
'name' => 'Threat Level',
|
||||
'data_path' => 'ThreatLevel.name'
|
||||
],
|
||||
'analysis' => [
|
||||
'name' => 'Analysis',
|
||||
'data_path' => 'Event.analysis',
|
||||
'element' => 'array_lookup_field',
|
||||
'arrayData' => [__('Initial'), __('Ongoing'), __('Complete')]
|
||||
],
|
||||
'date' => [
|
||||
'name' => 'Date',
|
||||
'data_path' => 'Event.date'
|
||||
],
|
||||
];
|
||||
$fields = [];
|
||||
if (empty($options['fields'])) {
|
||||
$options['fields'] = $this->__default_fields;
|
||||
}
|
||||
foreach ($options['fields'] as $field) {
|
||||
if (!empty($field_options[$field])) {
|
||||
$fields[] = $field_options[$field];
|
||||
}
|
||||
}
|
||||
foreach (['published', 'limit', 'tags', 'orgs'] as $field) {
|
||||
if (!empty($options[$field])) {
|
||||
$params[$field] = $options[$field];
|
||||
}
|
||||
}
|
||||
$data = $this->Event->fetchEvent($user, $params);
|
||||
return [
|
||||
'data' => $data,
|
||||
'fields' => $fields
|
||||
];
|
||||
}
|
||||
|
||||
public function checkpermissions($user) {
|
||||
if (in_array($user['id'], [1, 2, 3])) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
echo $this->element('genericElements/IndexTable/index_table', [
|
||||
'data' => [
|
||||
'data' => $data['data'],
|
||||
'top_bar' => [],
|
||||
'fields' => $data['fields'],
|
||||
'title' => false,
|
||||
'description' => false,
|
||||
'pull' => 'right',
|
||||
'skip_pagination' => true,
|
||||
'actions' => []
|
||||
]
|
||||
]);
|
||||
?>
|
Loading…
Reference in New Issue