mirror of https://github.com/MISP/MISP
new: Added separation between enabled feeds and feeds enabled for caching
parent
f0a21033e2
commit
e89d7ebc16
|
@ -46,7 +46,7 @@ class AppController extends Controller {
|
|||
|
||||
public $helpers = array('Utility', 'OrgImg');
|
||||
|
||||
private $__queryVersion = '32';
|
||||
private $__queryVersion = '33';
|
||||
public $pyMispVersion = '2.4.89';
|
||||
public $phpmin = '5.6.5';
|
||||
public $phprec = '7.0.16';
|
||||
|
|
|
@ -31,7 +31,10 @@ class FeedsController extends AppController {
|
|||
if ($scope !== 'all') {
|
||||
if ($scope == 'enabled') {
|
||||
$this->paginate['conditions'][] = array(
|
||||
'Feed.enabled' => 1
|
||||
'OR' => array(
|
||||
'Feed.enabled' => 1,
|
||||
'Feed.caching_enabled' => 1
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$this->paginate['conditions'][] = array(
|
||||
|
@ -210,7 +213,7 @@ class FeedsController extends AppController {
|
|||
$this->request->data['Feed']['settings']['delimiter'] = ',';
|
||||
}
|
||||
$this->request->data['Feed']['settings'] = json_encode($this->request->data['Feed']['settings']);
|
||||
$fields = array('id', 'name', 'provider', 'enabled', 'rules', 'url', 'distribution', 'sharing_group_id', 'tag_id', 'fixed_event', 'event_id', 'publish', 'delta_merge', 'source_format', 'override_ids', 'settings', 'input_source', 'delete_local_file', 'lookup_visible', 'headers');
|
||||
$fields = array('id', 'name', 'provider', 'enabled', 'caching_enabled','rules', 'url', 'distribution', 'sharing_group_id', 'tag_id', 'fixed_event', 'event_id', 'publish', 'delta_merge', 'source_format', 'override_ids', 'settings', 'input_source', 'delete_local_file', 'lookup_visible', 'headers');
|
||||
$feed = array();
|
||||
foreach ($fields as $field) {
|
||||
if (isset($this->request->data['Feed'][$field])) {
|
||||
|
@ -686,7 +689,8 @@ class FeedsController extends AppController {
|
|||
}
|
||||
}
|
||||
|
||||
public function toggleSelected($enable = false, $feedList = false) {
|
||||
public function toggleSelected($enable = false, $cache = false, $feedList = false) {
|
||||
$field = $cache ? 'caching_enabled' : 'enabled';
|
||||
if (!empty($enable)) $enable = 1;
|
||||
else $enable = 0;
|
||||
try {
|
||||
|
@ -702,8 +706,8 @@ class FeedsController extends AppController {
|
|||
));
|
||||
$count = 0;
|
||||
foreach ($feeds as $feed) {
|
||||
if ($feed['Feed']['enabled'] != $enable) {
|
||||
$feed['Feed']['enabled'] = $enable;
|
||||
if ($feed['Feed'][$field] != $enable) {
|
||||
$feed['Feed'][$field] = $enable;
|
||||
$this->Feed->save($feed);
|
||||
$count++;
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ class AppModel extends Model {
|
|||
);
|
||||
|
||||
public $db_changes = array(
|
||||
1 => false, 2 => false, 3 => false, 4 => true
|
||||
1 => false, 2 => false, 3 => false, 4 => true, 5 => false
|
||||
);
|
||||
|
||||
function afterSave($created, $options = array()) {
|
||||
|
@ -134,6 +134,11 @@ class AppModel extends Model {
|
|||
$this->MispObject->removeOrphanedObjects();
|
||||
$this->updateDatabase($command);
|
||||
break;
|
||||
case 5:
|
||||
$this->updateDatabase($command);
|
||||
$this->Feed = Classregistry::init('Feed');
|
||||
$this->Feed->setEnableFeedCachingDefaults();
|
||||
break;
|
||||
default:
|
||||
$this->updateDatabase($command);
|
||||
break;
|
||||
|
@ -890,6 +895,9 @@ class AppModel extends Model {
|
|||
$sqlArray[] = 'ALTER TABLE `roles` ADD `max_execution_time` VARCHAR(255) COLLATE utf8_bin DEFAULT "";';
|
||||
$sqlArray[] = "ALTER TABLE `roles` ADD `restricted_to_site_admin` tinyint(1) NOT NULL DEFAULT 0;";
|
||||
break;
|
||||
case 5:
|
||||
$sqlArray[] = "ALTER TABLE `feeds` ADD `caching_enabled` BOOLEAN NOT NULL DEFAULT 0;";
|
||||
break;
|
||||
case 'fixNonEmptySharingGroupID':
|
||||
$sqlArray[] = 'UPDATE `events` SET `sharing_group_id` = 0 WHERE `distribution` != 4;';
|
||||
$sqlArray[] = 'UPDATE `attributes` SET `sharing_group_id` = 0 WHERE `distribution` != 4;';
|
||||
|
|
|
@ -714,6 +714,7 @@ class Feed extends AppModel {
|
|||
'provider' => $newFeed['provider'],
|
||||
'url' => $newFeed['url'],
|
||||
'enabled' => $newFeed['enabled'],
|
||||
'caching_enabled' => !empty($newFeed['caching_enabled']) ? $newFeed['caching_enabled'] : 0,
|
||||
'distribution' => 3,
|
||||
'sharing_group_id' => 0,
|
||||
'tag_id' => 0,
|
||||
|
@ -912,7 +913,7 @@ class Feed extends AppModel {
|
|||
|
||||
public function cacheFeedInitiator($user, $jobId = false, $scope = 'freetext') {
|
||||
$params = array(
|
||||
'conditions' => array('enabled' => 1),
|
||||
'conditions' => array('caching_enabled' => 1),
|
||||
'recursive' => -1,
|
||||
'fields' => array('source_format', 'input_source', 'url', 'id', 'settings')
|
||||
);
|
||||
|
@ -1179,4 +1180,19 @@ class Feed extends AppModel {
|
|||
$this->importFeeds($json, $user, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
public function setEnableFeedCachingDefaults() {
|
||||
$feeds = $this->find('all', array(
|
||||
'conditions' => array(
|
||||
'Feed.enabled' => 1
|
||||
),
|
||||
'recursive' => -1
|
||||
));
|
||||
if (empty($feeds)) return true;
|
||||
foreach ($feeds as $feed) {
|
||||
$feed['Feed']['caching_enabled'] = 1;
|
||||
$this->save($feed);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<p><?php echo __('Add a new MISP feed source.');?></p>
|
||||
<?php
|
||||
echo $this->Form->input('enabled', array());
|
||||
echo $this->Form->input('caching_enabled', array());
|
||||
?>
|
||||
<div class="input clear"></div>
|
||||
<?php
|
||||
|
|
|
@ -5,70 +5,78 @@
|
|||
?>
|
||||
<div class="feed index">
|
||||
<h2><?php echo __('Feed overlap analysis matrix');?></h2>
|
||||
<div>
|
||||
<table class="table table-striped table-hover table-condensed" style="width:100px;">
|
||||
<tr>
|
||||
<th> </th>
|
||||
<?php
|
||||
<?php
|
||||
if (count($feeds) > 2):
|
||||
?>
|
||||
<div>
|
||||
<table class="table table-striped table-hover table-condensed" style="width:100px;">
|
||||
<tr>
|
||||
<th> </th>
|
||||
<?php
|
||||
foreach ($feeds as $item):
|
||||
$popover = '';
|
||||
foreach ($feedTemplate as $element):
|
||||
$popover .= '<span class=\'bold\'>' . Inflector::humanize($element) . '</span>: <span class=\'bold blue\'>' . h($item['Feed'][$element]) . '</span><br />';
|
||||
endforeach;
|
||||
?>
|
||||
<th>
|
||||
<div data-toggle="popover" data-content="<?php echo $popover; ?>" data-trigger="hover">
|
||||
<?php echo h($item['Feed']['id']); ?>
|
||||
</div>
|
||||
</th>
|
||||
<?php
|
||||
endforeach;
|
||||
?>
|
||||
</tr>
|
||||
<?php
|
||||
foreach ($feeds as $item):
|
||||
$popover = '';
|
||||
foreach ($feedTemplate as $element):
|
||||
$popover .= '<span class=\'bold\'>' . Inflector::humanize($element) . '</span>: <span class=\'bold blue\'>' . h($item['Feed'][$element]) . '</span><br />';
|
||||
endforeach;
|
||||
?>
|
||||
<th>
|
||||
<div data-toggle="popover" data-content="<?php echo $popover; ?>" data-trigger="hover">
|
||||
<?php echo h($item['Feed']['id']); ?>
|
||||
</div>
|
||||
</th>
|
||||
<tr>
|
||||
<td class="short">
|
||||
<div data-toggle="popover" data-content="<?php echo $popover;?>" data-trigger="hover">
|
||||
<?php echo h($item['Feed']['id']) . ' ' . h($item['Feed']['name']); ?>
|
||||
</div>
|
||||
</td>
|
||||
<?php
|
||||
foreach ($feeds as $item2):
|
||||
$percentage = -1;
|
||||
$class = 'bold';
|
||||
foreach ($item['Feed']['ComparedFeed'] as $k => $v):
|
||||
if ($item2['Feed']['id'] == $v['id']):
|
||||
$percentage = $v['overlap_percentage'];
|
||||
if ($percentage <= 5) $class .= ' green';
|
||||
else if ($percentage <= 50) $class .= ' orange';
|
||||
else $class .= ' red';
|
||||
break;
|
||||
endif;
|
||||
endforeach;
|
||||
$title = '';
|
||||
if ($percentage == 0) $popover = __('None or less than 1% of the data of %s is contained in %s (%s matching values)', $item['Feed']['name'], $item2['Feed']['name'], $v['overlap_count']);
|
||||
else if ($percentage > 0) $popover = __('%s\% of the data of %s is contained in %s (%s matching values)',$percentage, $item['Feed']['name'], $item2['Feed']['name'], $v['overlap_count'])
|
||||
?>
|
||||
<td class="<?php echo h($class); ?>">
|
||||
<div data-toggle="popover" data-content="<?php echo h($popover);?>" data-trigger="hover">
|
||||
<?php echo (($percentage == -1) ? '-' : h($percentage) . '%');?>
|
||||
</div>
|
||||
</td>
|
||||
<?php
|
||||
endforeach;
|
||||
?>
|
||||
</tr>
|
||||
<?php
|
||||
endforeach;
|
||||
?>
|
||||
</tr>
|
||||
<?php
|
||||
foreach ($feeds as $item):
|
||||
$popover = '';
|
||||
foreach ($feedTemplate as $element):
|
||||
$popover .= '<span class=\'bold\'>' . Inflector::humanize($element) . '</span>: <span class=\'bold blue\'>' . h($item['Feed'][$element]) . '</span><br />';
|
||||
endforeach;
|
||||
?>
|
||||
<tr>
|
||||
<td class="short">
|
||||
<div data-toggle="popover" data-content="<?php echo $popover;?>" data-trigger="hover">
|
||||
<?php echo h($item['Feed']['id']) . ' ' . h($item['Feed']['name']); ?>
|
||||
</div>
|
||||
</td>
|
||||
<?php
|
||||
foreach ($feeds as $item2):
|
||||
$percentage = -1;
|
||||
$class = 'bold';
|
||||
foreach ($item['Feed']['ComparedFeed'] as $k => $v):
|
||||
if ($item2['Feed']['id'] == $v['id']):
|
||||
$percentage = $v['overlap_percentage'];
|
||||
if ($percentage <= 5) $class .= ' green';
|
||||
else if ($percentage <= 50) $class .= ' orange';
|
||||
else $class .= ' red';
|
||||
break;
|
||||
endif;
|
||||
endforeach;
|
||||
$title = '';
|
||||
if ($percentage == 0) $popover = __('None or less than 1% of the data of %s is contained in %s (%s matching values)', $item['Feed']['name'], $item2['Feed']['name'], $v['overlap_count']);
|
||||
else if ($percentage > 0) $popover = __('%s\% of the data of %s is contained in %s (%s matching values)',$percentage, $item['Feed']['name'], $item2['Feed']['name'], $v['overlap_count'])
|
||||
?>
|
||||
<td class="<?php echo h($class); ?>">
|
||||
<div data-toggle="popover" data-content="<?php echo h($popover);?>" data-trigger="hover">
|
||||
<?php echo (($percentage == -1) ? '-' : h($percentage) . '%');?>
|
||||
</div>
|
||||
</td>
|
||||
<?php
|
||||
endforeach;
|
||||
?>
|
||||
</tr>
|
||||
<?php
|
||||
endforeach;
|
||||
?>
|
||||
</table>
|
||||
</div>
|
||||
</table>
|
||||
</div>
|
||||
<?php
|
||||
else:
|
||||
echo '<p class="red bold">Not enough feeds cached. Make sure you have at least 2 feeds that are cached and available.</p>';
|
||||
endif;
|
||||
?>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<p><?php echo __('Edit a new MISP feed source.');?></p>
|
||||
<?php
|
||||
echo $this->Form->input('enabled', array());
|
||||
echo $this->Form->input('caching_enabled', array());
|
||||
?>
|
||||
<div class="input clear"></div>
|
||||
<?php
|
||||
|
|
|
@ -24,9 +24,10 @@
|
|||
</ul>
|
||||
</div>
|
||||
<div class="tabMenuFixedContainer" style="display:inline-block;">
|
||||
<span id="multi-delete-button" role="button" tabindex="0" aria-label="<?php echo __('Default feeds filter');?>" title="<?php echo __('Default feeds');?>" class=" hidden tabMenuFixed mass-select tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'default' ? 'tabMenuActive' : ''; ?>" onClick="multiSelectToggleFeeds(1);"><?php echo __('Enable Selected');?></span>
|
||||
<span id="multi-delete-button" role="button" tabindex="0" aria-label="<?php echo __('Default feeds filter');?>" title="<?php echo __('Default feeds');?>" class=" hidden tabMenuFixed mass-select tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'default' ? 'tabMenuActive' : ''; ?>" onClick="multiSelectToggleFeeds(0);"><?php echo __('Disable Selected');?></span>
|
||||
<span role="button" tabindex="0" aria-label="<?php echo __('Default feeds filter');?>" title="<?php echo __('Default feeds');?>" class="tabMenuFixed tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'default' ? 'tabMenuActive' : ''; ?>" onclick="window.location='/feeds/index/scope:default'"><?php echo __('Default feeds');?></span>
|
||||
<span id="multi-delete-button" role="button" tabindex="0" aria-label="<?php echo __('Enable selected');?>" title="<?php echo __('Enable selected');?>" class=" hidden tabMenuFixed mass-select tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'default' ? 'tabMenuActive' : ''; ?>" onClick="multiSelectToggleFeeds(1, 0);"><?php echo __('Enable Selected');?></span>
|
||||
<span id="multi-delete-button" role="button" tabindex="0" aria-label="<?php echo __('Disable selected');?>" title="<?php echo __('Disable selected');?>" class=" hidden tabMenuFixed mass-select tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'default' ? 'tabMenuActive' : ''; ?>" onClick="multiSelectToggleFeeds(0, 0);"><?php echo __('Disable Selected');?></span>
|
||||
<span id="multi-delete-button" role="button" tabindex="0" aria-label="<?php echo __('Enable caching for selected');?>" title="<?php echo __('Enable caching for selected');?>" class=" hidden tabMenuFixed mass-select tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'default' ? 'tabMenuActive' : ''; ?>" onClick="multiSelectToggleFeeds(1, 1);"><?php echo __('Enable Caching for Selected');?></span>
|
||||
<span id="multi-delete-button" role="button" tabindex="0" aria-label="<?php echo __('Disable caching for selected');?>" title="<?php echo __('Disable caching for selected');?>" class=" hidden tabMenuFixed mass-select tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'default' ? 'tabMenuActive' : ''; ?>" onClick="multiSelectToggleFeeds(0, 1);"><?php echo __('Disable Caching for Selected');?></span> <span role="button" tabindex="0" aria-label="<?php echo __('Default feeds filter');?>" title="<?php echo __('Default feeds');?>" class="tabMenuFixed tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'default' ? 'tabMenuActive' : ''; ?>" onclick="window.location='/feeds/index/scope:default'"><?php echo __('Default feeds');?></span>
|
||||
<span role="button" tabindex="0" aria-label="<?php echo __('Custom feeds filter');?>" title="<?php echo __('Custom feeds');?>" class="tabMenuFixed tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'custom' ? 'tabMenuActive' : ''; ?> " onclick="window.location='/feeds/index/scope:custom'"><?php echo __('Custom Feeds');?></span>
|
||||
<span role="button" tabindex="0" aria-label="<?php echo __('All feeds');?>" title="<?php echo __('All feeds');?>" class="tabMenuFixed tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'all' ? 'tabMenuActive' : ''; ?> " onclick="window.location='/feeds/index/scope:all'"><?php echo __('All Feeds');?></span>
|
||||
<span role="button" tabindex="0" aria-label="<?php echo __('Enabled feeds');?>" title="<?php echo __('Enabled feeds');?>" class="tabMenuFixed tabMenuFixedCenter tabMenuSides useCursorPointer <?php echo $scope == 'enabled' ? 'tabMenuActive' : ''; ?> " onclick="window.location='/feeds/index/scope:enabled'"><?php echo __('Enabled Feeds');?></span>
|
||||
|
@ -42,6 +43,7 @@
|
|||
<?php endif;?>
|
||||
<th><?php echo $this->Paginator->sort('id');?></th>
|
||||
<th><?php echo $this->Paginator->sort('enabled');?></th>
|
||||
<th><?php echo $this->Paginator->sort('caching_enabled');?></th>
|
||||
<th><?php echo $this->Paginator->sort('name');?></th>
|
||||
<th><?php echo $this->Paginator->sort('source_format', __('Feed Format'));?></th>
|
||||
<th><?php echo $this->Paginator->sort('provider');?></th>
|
||||
|
@ -105,6 +107,10 @@ foreach ($feeds as $item):
|
|||
>
|
||||
(<?php echo __('Rules');?>)
|
||||
</span>
|
||||
</td>
|
||||
<td class="short">
|
||||
<span class="<?php echo ($item['Feed']['caching_enabled'] ? 'icon-ok' : 'icon-remove'); ?>"></span>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
echo h($item['Feed']['name']);
|
||||
|
@ -190,7 +196,7 @@ foreach ($feeds as $item):
|
|||
else:
|
||||
echo __('Not cached');
|
||||
endif;
|
||||
if ($item['Feed']['enabled']):
|
||||
if ($item['Feed']['caching_enabled']):
|
||||
?>
|
||||
<a href="<?php echo $baseurl;?>/feeds/cacheFeeds/<?php echo h($item['Feed']['id']); ?>" title="Cache feed"><span class="icon-download-alt"></span></a>
|
||||
<?php
|
||||
|
|
|
@ -639,7 +639,7 @@ function multiSelectDeleteEvents() {
|
|||
});
|
||||
}
|
||||
|
||||
function multiSelectToggleFeeds(on) {
|
||||
function multiSelectToggleFeeds(on, cache) {
|
||||
var selected = [];
|
||||
$(".select").each(function() {
|
||||
if ($(this).is(":checked")) {
|
||||
|
@ -649,7 +649,7 @@ function multiSelectToggleFeeds(on) {
|
|||
}
|
||||
}
|
||||
});
|
||||
$.get("/feeds/toggleSelected/" + on + "/" + JSON.stringify(selected), function(data) {
|
||||
$.get("/feeds/toggleSelected/" + on + "/" + cache + "/" + JSON.stringify(selected), function(data) {
|
||||
$("#confirmation_box").html(data);
|
||||
openPopup("#confirmation_box");
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue