mirror of https://github.com/MISP/MISP
Merge branch 'pr-5295' into 2.4
commit
04a5d2a31f
|
@ -110,8 +110,13 @@ class ServersController extends AppController
|
|||
if (empty($combinedArgs['limit'])) {
|
||||
$combinedArgs['limit'] = 60;
|
||||
}
|
||||
$total_count = 0;
|
||||
$events = $this->Server->previewIndex($id, $this->Auth->user(), $combinedArgs, $total_count);
|
||||
try {
|
||||
list($events, $total_count) = $this->Server->previewIndex($id, $this->Auth->user(), $combinedArgs);
|
||||
} catch (Exception $e) {
|
||||
$this->Flash->error(__('Download failed.') . ' ' . $e->getMessage());
|
||||
$this->redirect(array('action' => 'index'));
|
||||
}
|
||||
|
||||
$this->loadModel('Event');
|
||||
$threat_levels = $this->Event->ThreatLevel->find('all');
|
||||
$this->set('threatLevels', Set::combine($threat_levels, '{n}.ThreatLevel.id', '{n}.ThreatLevel.name'));
|
||||
|
@ -122,11 +127,9 @@ class ServersController extends AppController
|
|||
$params['pageCount'] = ceil($total_count / $params['limit']);
|
||||
}
|
||||
$this->params->params['paging'] = array($this->modelClass => $params);
|
||||
if (is_array($events)) {
|
||||
if (count($events) > 60) {
|
||||
$customPagination->truncateByPagination($events, $params);
|
||||
}
|
||||
} else ($events = array());
|
||||
if (count($events) > 60) {
|
||||
$customPagination->truncateByPagination($events, $params);
|
||||
}
|
||||
$this->set('events', $events);
|
||||
$this->set('eventDescriptions', $this->Event->fieldDescriptions);
|
||||
$this->set('analysisLevels', $this->Event->analysisLevels);
|
||||
|
@ -150,12 +153,15 @@ class ServersController extends AppController
|
|||
if (empty($server)) {
|
||||
throw new NotFoundException('Invalid server ID.');
|
||||
}
|
||||
$event = $this->Server->previewEvent($serverId, $eventId);
|
||||
// work on this in the future to improve the feedback
|
||||
// 2 = wrong error code
|
||||
if (is_numeric($event)) {
|
||||
throw new NotFoundException('Invalid event.');
|
||||
try {
|
||||
$event = $this->Server->previewEvent($serverId, $eventId);
|
||||
} catch (NotFoundException $e) {
|
||||
throw new NotFoundException(__("Event '$eventId' not found."));
|
||||
} catch (Exception $e) {
|
||||
$this->Flash->error(__('Download failed.') . ' ' . $e->getMessage());
|
||||
$this->redirect(array('action' => 'previewIndex', $serverId));
|
||||
}
|
||||
|
||||
$this->loadModel('Event');
|
||||
$params = $this->Event->rearrangeEventForView($event, $this->passedArgs, $all);
|
||||
$this->params->params['paging'] = array('Server' => $params);
|
||||
|
|
|
@ -5131,23 +5131,16 @@ class Server extends AppModel
|
|||
return 2;
|
||||
}
|
||||
|
||||
|
||||
/* returns an array with the events
|
||||
* error codes:
|
||||
* 1: received non json response
|
||||
* 2: no route to host
|
||||
* 3: empty result set
|
||||
/**
|
||||
* Returns an array with the events
|
||||
* @param int $id
|
||||
* @param $user - not used
|
||||
* @param array $passedArgs
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function previewIndex($id, $user, $passedArgs, &$total_count = 0)
|
||||
public function previewIndex($id, $user, array $passedArgs)
|
||||
{
|
||||
$server = $this->find('first', array(
|
||||
'conditions' => array('Server.id' => $id),
|
||||
));
|
||||
if (empty($server)) {
|
||||
return 2;
|
||||
}
|
||||
$HttpSocket = $this->setupHttpSocket($server);
|
||||
$request = $this->setupSyncRequest($server);
|
||||
$validArgs = array_merge(array('sort', 'direction', 'page', 'limit'), $this->validEventIndexFilters);
|
||||
$urlParams = '';
|
||||
foreach ($validArgs as $v) {
|
||||
|
@ -5155,80 +5148,56 @@ class Server extends AppModel
|
|||
$urlParams .= '/' . $v . ':' . $passedArgs[$v];
|
||||
}
|
||||
}
|
||||
$uri = $server['Server']['url'] . '/events/index' . $urlParams;
|
||||
$response = $HttpSocket->get($uri, $data = '', $request);
|
||||
if (!empty($response->headers['X-Result-Count'])) {
|
||||
$temp = $response->headers['X-Result-Count'];
|
||||
$total_count = $temp;
|
||||
}
|
||||
if ($response->code == 200) {
|
||||
try {
|
||||
$events = json_decode($response->body, true);
|
||||
} catch (Exception $e) {
|
||||
return 1;
|
||||
|
||||
$relativeUri = '/events/index' . $urlParams;
|
||||
list($events, $response) = $this->serverGetRequest($id, $relativeUri);
|
||||
$totalCount = $response->getHeader('X-Result-Count') ?: 0;
|
||||
|
||||
foreach ($events as $k => $event) {
|
||||
if (!isset($event['Orgc'])) {
|
||||
$event['Orgc']['name'] = $event['orgc'];
|
||||
}
|
||||
if (!empty($events)) {
|
||||
foreach ($events as $k => $event) {
|
||||
if (!isset($event['Orgc'])) {
|
||||
$event['Orgc']['name'] = $event['orgc'];
|
||||
}
|
||||
if (!isset($event['Org'])) {
|
||||
$event['Org']['name'] = $event['org'];
|
||||
}
|
||||
if (!isset($event['EventTag'])) {
|
||||
$event['EventTag'] = array();
|
||||
}
|
||||
$events[$k] = array('Event' => $event);
|
||||
}
|
||||
} else {
|
||||
return 3;
|
||||
if (!isset($event['Org'])) {
|
||||
$event['Org']['name'] = $event['org'];
|
||||
}
|
||||
return $events;
|
||||
if (!isset($event['EventTag'])) {
|
||||
$event['EventTag'] = array();
|
||||
}
|
||||
$events[$k] = array('Event' => $event);
|
||||
}
|
||||
return 2;
|
||||
|
||||
return array($events, $totalCount);
|
||||
}
|
||||
|
||||
/* returns an array with the events
|
||||
* error codes:
|
||||
* 1: received non-json response
|
||||
* 2: no route to host
|
||||
/**
|
||||
* Returns an array with the event.
|
||||
* @param int $serverId
|
||||
* @param int $eventId
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function previewEvent($serverId, $eventId)
|
||||
{
|
||||
$server = $this->find('first', array(
|
||||
'conditions' => array('Server.id' => $serverId),
|
||||
));
|
||||
if (empty($server)) {
|
||||
return 2;
|
||||
$relativeUri = '/events/' . $eventId;
|
||||
list($event) = $this->serverGetRequest($serverId, $relativeUri);
|
||||
|
||||
if (!isset($event['Event']['Orgc'])) {
|
||||
$event['Event']['Orgc']['name'] = $event['Event']['orgc'];
|
||||
}
|
||||
$HttpSocket = $this->setupHttpSocket($server);
|
||||
$request = $this->setupSyncRequest($server);
|
||||
$uri = $server['Server']['url'] . '/events/' . $eventId;
|
||||
$response = $HttpSocket->get($uri, $data = '', $request);
|
||||
if ($response->code == 200) {
|
||||
try {
|
||||
$event = json_decode($response->body, true);
|
||||
} catch (Exception $e) {
|
||||
return 1;
|
||||
}
|
||||
if (!isset($event['Event']['Orgc'])) {
|
||||
$event['Event']['Orgc']['name'] = $event['Event']['orgc'];
|
||||
}
|
||||
if (isset($event['Event']['Orgc'][0])) {
|
||||
$event['Event']['Orgc'] = $event['Event']['Orgc'][0];
|
||||
}
|
||||
if (!isset($event['Event']['Org'])) {
|
||||
$event['Event']['Org']['name'] = $event['Event']['org'];
|
||||
}
|
||||
if (isset($event['Event']['Org'][0])) {
|
||||
$event['Event']['Org'] = $event['Event']['Org'][0];
|
||||
}
|
||||
if (!isset($event['Event']['EventTag'])) {
|
||||
$event['Event']['EventTag'] = array();
|
||||
}
|
||||
return $event;
|
||||
if (isset($event['Event']['Orgc'][0])) {
|
||||
$event['Event']['Orgc'] = $event['Event']['Orgc'][0];
|
||||
}
|
||||
return 2;
|
||||
if (!isset($event['Event']['Org'])) {
|
||||
$event['Event']['Org']['name'] = $event['Event']['org'];
|
||||
}
|
||||
if (isset($event['Event']['Org'][0])) {
|
||||
$event['Event']['Org'] = $event['Event']['Org'][0];
|
||||
}
|
||||
if (!isset($event['Event']['EventTag'])) {
|
||||
$event['Event']['EventTag'] = array();
|
||||
}
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
// Loops through all servers and checks which servers' push rules don't conflict with the given event.
|
||||
|
@ -5789,6 +5758,53 @@ class Server extends AppModel
|
|||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $serverId
|
||||
* @param string $relativeUri
|
||||
* @param HttpSocket|null $HttpSocket
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
private function serverGetRequest($serverId, $relativeUri, HttpSocket $HttpSocket = null)
|
||||
{
|
||||
$server = $this->find('first', array(
|
||||
'conditions' => array('Server.id' => $serverId),
|
||||
));
|
||||
if ($server === null) {
|
||||
throw new Exception(__("Server with ID '$serverId' not found."));
|
||||
}
|
||||
|
||||
if (!$HttpSocket) {
|
||||
$HttpSocket = $this->setupHttpSocket($server);
|
||||
}
|
||||
$request = $this->setupSyncRequest($server);
|
||||
|
||||
$uri = $server['Server']['url'] . $relativeUri;
|
||||
$response = $HttpSocket->get($uri, array(), $request);
|
||||
|
||||
if ($response === false) {
|
||||
throw new Exception(__("Could not reach '$uri'."));
|
||||
} else if ($response->code == 404) { // intentional !=
|
||||
throw new NotFoundException(__("Fetching the '$uri' failed with HTTP error 404: Not Found"));
|
||||
} else if ($response->code == 405) { // intentional !=
|
||||
$responseText = json_decode($response->body, true);
|
||||
if ($responseText !== null) {
|
||||
throw new Exception(sprintf(__("Fetching the '$uri' failed with HTTP error %s: %s"), $response->code, $responseText['message']));
|
||||
}
|
||||
}
|
||||
|
||||
if ($response->code != 200) { // intentional !=
|
||||
throw new Exception(sprintf(__("Fetching the '$uri' failed with HTTP error %s: %s"), $response->code, $response->reasonPhrase));
|
||||
}
|
||||
|
||||
$data = json_decode($response->body, true);
|
||||
if ($data === null) {
|
||||
throw new Exception(__('Could not parse JSON: ') . json_last_error_msg(), json_last_error());
|
||||
}
|
||||
|
||||
return array($data, $response);
|
||||
}
|
||||
|
||||
public function getRemoteUser($id)
|
||||
{
|
||||
$server = $this->find('first', array(
|
||||
|
|
Loading…
Reference in New Issue