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