mirror of https://github.com/MISP/MISP
Preview the index of a feed
parent
e176540bd3
commit
03e19f6db0
|
@ -98,7 +98,6 @@ class FeedsController extends AppController {
|
|||
$HttpSocket = $syncTool->setupHttpSocketFeed($this->Feed->data);
|
||||
$actions = $this->Feed->getNewEventUuids($this->Feed->data, $HttpSocket);
|
||||
$result = $this->Feed->downloadFromFeed($actions, $this->Feed->data, $HttpSocket, $this->Auth->user());
|
||||
|
||||
return new CakeResponse(array('body'=> json_encode(array('saved' => true, 'success' => 'Attribute added.')),'status'=>200));
|
||||
}
|
||||
|
||||
|
@ -134,9 +133,37 @@ class FeedsController extends AppController {
|
|||
$shortDist = array(0 => 'Organisation', 1 => 'Community', 2 => 'Connected', 3 => 'All', 4 => ' sharing Group');
|
||||
$this->set('shortDist', $shortDist);
|
||||
$this->set('id', $feedId);
|
||||
$this->set('feed', $this->Feed->data);
|
||||
$this->set('urlparams', $urlparams);
|
||||
$this->set('passedArgs', json_encode($passedArgs));
|
||||
$this->set('passedArgsArray', $passedArgs);
|
||||
}
|
||||
|
||||
|
||||
public function previewEvent($feedId, $eventUuid, $all = false) {
|
||||
$this->Feed->id = $feedId;
|
||||
if (!$this->Feed->exists()) throw new NotFoundException('Invalid feed.');
|
||||
$this->Feed->read();
|
||||
$event = $this->Feed->downloadEventFromFeed($this->Feed->data, $eventUuid, $this->Auth->user());
|
||||
$this->loadModel('Event');
|
||||
$params = $this->Event->rearrangeEventForView($event, $this->passedArgs, $all);
|
||||
$this->params->params['paging'] = array('Feed' => $params);
|
||||
$this->set('event', $event);
|
||||
$this->set('feed', $this->Feed->data);
|
||||
$this->loadModel('Event');
|
||||
$dataForView = array(
|
||||
'Attribute' => array('attrDescriptions' => 'fieldDescriptions', 'distributionDescriptions' => 'distributionDescriptions', 'distributionLevels' => 'distributionLevels'),
|
||||
'Event' => array('eventDescriptions' => 'fieldDescriptions', 'analysisLevels' => 'analysisLevels')
|
||||
);
|
||||
foreach ($dataForView as $m => $variables) {
|
||||
if ($m === 'Event') $currentModel = $this->Event;
|
||||
else if ($m === 'Attribute') $currentModel = $this->Event->Attribute;
|
||||
foreach ($variables as $alias => $variable) {
|
||||
$this->set($alias, $currentModel->{$variable});
|
||||
}
|
||||
}
|
||||
$threat_levels = $this->Event->ThreatLevel->find('all');
|
||||
$this->set('threatLevels', Set::combine($threat_levels, '{n}.ThreatLevel.id', '{n}.ThreatLevel.name'));
|
||||
$this->render('/Servers/preview_event');
|
||||
}
|
||||
}
|
|
@ -135,6 +135,43 @@ class Feed extends AppModel {
|
|||
return true;
|
||||
}
|
||||
|
||||
public function downloadEventFromFeed($feed, $uuid, $user) {
|
||||
$HttpSocket = $this->__setupHttpSocket($feed);
|
||||
$request = $this->__createFeedRequest();
|
||||
$uri = $feed['Feed']['url'] . '/' . $uuid . '.json';
|
||||
$response = $HttpSocket->get($uri, '', $request);
|
||||
if ($response->code != 200) {
|
||||
return false;
|
||||
} else {
|
||||
$filterRules = $this->__prepareFilterRules($feed);
|
||||
$event = $this->__prepareEvent($response->body, $filterRules);
|
||||
if ($event !== true) return $event;
|
||||
$this->Event = ClassRegistry::init('Event');
|
||||
return $this->Event->_add($event, true, $user);
|
||||
}
|
||||
}
|
||||
|
||||
private function __prepareEvent($body, $filterRules) {
|
||||
$event = json_decode($body, true);
|
||||
if (isset($event['response'])) $event = $event['response'];
|
||||
if (isset($event[0])) $event = $event[0];
|
||||
if (!isset($event['Event']['uuid'])) return false;
|
||||
if (!$this->__checkIfEventBlockedByFilter($event, $filterRules)) return 'blocked';
|
||||
return $event;
|
||||
}
|
||||
|
||||
private function __prepareFilterRules($feed) {
|
||||
$filterRules = false;
|
||||
if (isset($feed['Feed']['rules']) && !empty($feed['Feed']['rules'])) $filterRules = json_decode($feed['Feed']['rules'], true);
|
||||
return $filterRules;
|
||||
}
|
||||
|
||||
private function __setupHttpSocket($feed) {
|
||||
App::uses('SyncTool', 'Tools');
|
||||
$syncTool = new SyncTool();
|
||||
return ($syncTool->setupHttpSocketFeed($feed));
|
||||
}
|
||||
|
||||
private function __addEventFromFeed($HttpSocket, $feed, $uuid, $user, $filterRules) {
|
||||
$request = $this->__createFeedRequest();
|
||||
$uri = $feed['Feed']['url'] . '/' . $uuid . '.json';
|
||||
|
@ -142,11 +179,8 @@ class Feed extends AppModel {
|
|||
if ($response->code != 200) {
|
||||
return false;
|
||||
} else {
|
||||
$event = json_decode($response->body, true);
|
||||
if (!$this->__checkIfEventBlockedByFilter($event, $filterRules)) return 'blocked';
|
||||
if (isset($event['response'])) $event = $event['response'];
|
||||
if (isset($event[0])) $event = $event[0];
|
||||
if (!isset($event['Event']['uuid'])) return false;
|
||||
$filterRules = $this->__prepareFilterRules($feed);
|
||||
$event = $this->__prepareEvent($response->body, $filterRules);
|
||||
$this->Event = ClassRegistry::init('Event');
|
||||
return $this->Event->_add($event, true, $user);
|
||||
}
|
||||
|
@ -160,10 +194,8 @@ class Feed extends AppModel {
|
|||
if ($response->code != 200) {
|
||||
return false;
|
||||
} else {
|
||||
$event = json_decode($response->body, true);
|
||||
if (isset($event['response'])) $event = $event['response'];
|
||||
if (isset($event[0])) $event = $event[0];
|
||||
if (!isset($event['Event']['uuid'])) return false;
|
||||
$filterRules = $this->__prepareFilterRules($feed);
|
||||
$event = $this->__prepareEvent($response->body, $filterRules);
|
||||
$this->Event = ClassRegistry::init('Event');
|
||||
return $this->Event->_edit($event, $user, $uuid, $jobId = null);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue