Preview the index of a feed

pull/1050/head
Iglocska 2016-03-06 23:24:03 +01:00
parent e176540bd3
commit 03e19f6db0
2 changed files with 69 additions and 10 deletions

View File

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

View File

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