/** * @param Event $event * @return JsonResponse */ public function dayAction(Event $event) { $events = $this->getDoctrine()->getRepository('KoalamonIncidentDashboardBundle:Event')->findByRange($event->getEventIdentifier()->getIdentifier(), new \DateTime("- 1 day")); $stats = array(Event::STATUS_SUCCESS => array(), Event::STATUS_FAILURE => array()); foreach ($events as $event) { $hour = $event->getCreated()->format('G'); if (array_key_exists($hour, $stats[$event->getStatus()])) { $stats[$event->getStatus()][(int) $hour] = $stats[$event->getStatus()][(int) $hour] + 1; } else { $stats[$event->getStatus()][(int) $hour] = 1; } } $data = [['Status', 'Failure', 'Success', ['role' => 'annotation']]]; $currentHour = date('G'); for ($i = 24; $i > 0; $i--) { $theHour = ($currentHour + 24 - $i) % 24 + 1; $amPmHour = DateHelper::toAmPm($theHour); if ($theHour == 24) { $theHour = 0; } if (!array_key_exists($theHour, $stats[Event::STATUS_FAILURE])) { $stats[Event::STATUS_FAILURE][$theHour] = 0; } if (!array_key_exists($theHour, $stats[Event::STATUS_SUCCESS])) { $stats[Event::STATUS_SUCCESS][$theHour] = 0; } $data[] = array($amPmHour, $stats[Event::STATUS_FAILURE][$theHour], $stats[Event::STATUS_SUCCESS][$theHour], ''); } return new JsonResponse($data); }
public function closeAction(Incident $incident) { $this->assertUserRights(UserRole::ROLE_COLLABORATOR, $incident->getEventIdentifier()->getProject()); $eventIdentifier = $incident->getEventIdentifier(); $closeEvent = new Event(); $closeEvent->setEventIdentifier($eventIdentifier); $closeEvent->setSystem($eventIdentifier->getSystem()->getIdentifier()); $closeEvent->setStatus(Event::STATUS_SUCCESS); $closeEvent->setIsStatusChange(true); $closeEvent->setUnique($eventIdentifier->getLastEvent()->isUnique()); $closeEvent->setType($eventIdentifier->getLastEvent()->getType()); $closeEvent->setComponentId($eventIdentifier->getLastEvent()->getComponentId()); $closeEvent->setMessage('Manually closed by ' . $this->getUser()->getUsername() . '.'); if (!$incident->getAcknowledgedBy()) { $incident->setAcknowledgedBy($this->getUser()); } $em = $this->getDoctrine()->getManager(); $em->persist($incident); $em->flush(); $this->get('koalamon.project.helper')->addEvent($closeEvent); return new JsonResponse(['status' => 'success', 'message' => 'The incident was closed successfully.', 'event_identifier_id' => $eventIdentifier->getId()]); }
/** * @param Request $request * @return Response */ public function fileAction(Request $request, System $system) { $payload = file_get_contents('php://input'); $project = $this->getDoctrine()->getRepository('KoalamonIncidentDashboardBundle:Project')->findOneByApiKey($request->get("api_key")); if ($project == null) { return new JsonResponse(['status' => self::STATUS_FAILURE, 'message' => "No project with api_key " . $request->get("api_key") . ' found.']); } if ($project->isDeleted()) { return new JsonResponse(['status' => self::STATUS_FAILURE, 'message' => 'Project already deleted.']); } /** * Content of XML payload from ZAProxy result file * * site@name=uri * site@host=domain * alerts.alertitem.name string * alerts.alertitem.alert string (seems to be same as name) * alerts.alertitem.riskdesc string html encoded * alerts.alertitem.riskcode integer 0-3 * alerts.alertitem.confidence integer 0-3 * alerts.alertitem.count integer * alerts.alertitem.instances.instance.uri involved URIs * alerts.alertitem.solution (long text) string html encoded * alerts.alertitem.otherinfo (long text) string html encoded * alerts.alertitem.reference string html encoded * alerts.alertitem.cweid integer * alerts.alertitem.wascid integer */ $xml = simplexml_load_string($payload); $alerts = $xml->site->alerts->alertitem; $alertCount = count($alerts); $host = $xml->site['host']; $alertMessage = 'Found security issues (' . $alertCount . ') on ' . $host . '<br/><ul>' . PHP_EOL; foreach ($alerts as $alert) { $alertMessage .= '<li>' . $alert->count . 'x ' . $alert->name . ' (' . $alert->riskdesc . ')</li>' . PHP_EOL; } $alertMessage .= '</ul>'; $event = new Event(); $event->setSystem($system); $event->setStatus(self::STATUS_FAILURE); $event->setMessage($alertMessage); $event->setValue($alertCount); $this->get('koalamon.project.helper')->addEvent($event); return new Response(); }
/** * @return string */ public function getRerunUrl(Event $event) { $url = $this->rerunUrl; $url = str_replace('#system_id#', $event->getEventIdentifier()->getSystem()->getId(), $url); $url = str_replace('#system_identifier#', $event->getEventIdentifier()->getSystem()->getIdentifier(), $url); $url = str_replace('#tool_id#', $event->getEventIdentifier()->getTool()->getId(), $url); $url = str_replace('#tool_identifier#', $event->getEventIdentifier()->getTool()->getIdentifier(), $url); $url = str_replace('#project_api_key#', $event->getEventIdentifier()->getProject()->getApiKey(), $url); $url = str_replace('#event_id#', $event->getId(), $url); return $url; }
private function handleIncident(Event &$event, Event $lastEvent = null) { if ($event->getStatus() == Event::STATUS_FAILURE) { if (!$event->getIsStatusChange() && $event->getEventIdentifier()->getLastIncident()) { $incident = $event->getEventIdentifier()->getLastIncident(); $event->setIncident($incident); } else { $incident = new Incident($event); $incident->setEventIdentifier($event->getEventIdentifier()); $event->setIncident($incident); $event->getEventIdentifier()->setLastIncident($incident); } $incident->increaseEventCount(); $this->entityManager->persist($incident); $this->entityManager->persist($event); $this->entityManager->flush(); } else { if ($event->getIsStatusChange()) { if ($event->getEventIdentifier()->getLastIncident()) { $incident = $event->getEventIdentifier()->getLastIncident(); if ($lastEvent) { $incident->close(); } $this->entityManager->persist($incident); $this->entityManager->flush(); } } } }