new: Added separation between enabled feeds and feeds enabled for caching

pull/3134/head
iglocska 2018-03-30 23:30:54 +02:00
parent f0a21033e2
commit e89d7ebc16
9 changed files with 113 additions and 69 deletions

View File

@ -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';

View File

@ -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++;
}

View File

@ -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;';

View File

@ -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;
}
}

View File

@ -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

View File

@ -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>&nbsp;</th>
<?php
<?php
if (count($feeds) > 2):
?>
<div>
<table class="table table-striped table-hover table-condensed" style="width:100px;">
<tr>
<th>&nbsp;</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']); ?>&nbsp;
</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']); ?>&nbsp;
</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(){

View File

@ -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

View File

@ -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

View File

@ -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");
});