/** * Método responsável por Verificar comunicação entre Agente CACIC * @param Symfony\Component\HttpFoundation\Request $request */ public function testAction(Request $request) { $logger = $this->get('logger'); OldCacicHelper::autenticaAgente($request); $strNetworkAdapterConfiguration = OldCacicHelper::deCrypt($request, $request->get('NetworkAdapterConfiguration')); $strComputerSystem = OldCacicHelper::deCrypt($request, $request->get('ComputerSystem')); $strOperatingSystem = OldCacicHelper::deCrypt($request, $request->request->get('OperatingSystem')); $te_node_address = TagValueHelper::getValueFromTags('MACAddress', $strNetworkAdapterConfiguration); $netmask = TagValueHelper::getValueFromTags('IPSubnet', $strNetworkAdapterConfiguration); $te_so = $request->get('te_so'); $ultimo_login = TagValueHelper::getValueFromTags('UserName', $strComputerSystem); $ip_computador = $request->get('te_ip_computador'); $versaoAgente = $request->get('te_versao_cacic'); if (empty($ip_computador)) { $ip_computador = TagValueHelper::getValueFromTags('IPAddress', $strNetworkAdapterConfiguration); } if (empty($ip_computador) or $ip_computador == '127.0.0.1') { $ip_computador = $request->getClientIp(); } $logger->debug("Teste de Conexão GET-TEST! Ip do computador: {$ip_computador} Máscara da rede: {$netmask}"); // Caso não tenha encontrado, tenta pegar a variável da requisição if (empty($te_node_address)) { $te_node_address = $request->get('te_node_address'); } if (empty($netmask)) { $netmask = $request->get('netmask'); } //vefifica se existe SO coletado se não, insere novo SO if (!empty($te_so)) { $so = $this->getDoctrine()->getRepository('CacicCommonBundle:So')->createIfNotExist($te_so); } else { $so = null; } $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta($ip_computador, $netmask); if (empty($te_node_address) || empty($so)) { $this->get('logger')->error("Erro na operação de getTest. IP = {$ip_computador} Máscara = {$netmask}. MAC = {$te_node_address}. SO = {$te_so}"); $response = new Response(); $response->headers->set('Content-Type', 'xml'); $cacic_helper = new OldCacicHelper($this->get('kernel')); return $this->render('CacicWSBundle:Default:testUpdate.xml.twig', array('configs' => $cacic_helper->getTest($request), 'rede' => $rede, 'ws_folder' => OldCacicHelper::CACIC_WEB_SERVICES_FOLDER_NAME, 'cs_cipher' => $request->get('cs_cipher'), 'cs_compress' => $request->get('cs_compress')), $response); } #$logger->debug("444444444444444444444444444444444444: $netmask | ".$rede->getNmRede()); $computador = $this->getDoctrine()->getRepository('CacicCommonBundle:Computador')->getComputadorPreCole($request, $te_so, $te_node_address, $rede, $so, $ip_computador); //$local = $this->getDoctrine()->getRepository('CacicCommonBundle:Local')->findOneBy(array( 'idLocal' => $rede->getIdLocal() )); $local = $rede->getIdLocal(); //Debugging do Agente $debugging = TagValueHelper::getValueFromTags('DateToDebugging', $computador->getTeDebugging()) == date("Ymd") ? $computador->getTeDebugging() : (TagValueHelper::getValueFromTags('DateToDebugging', $local->getTeDebugging()) == date("Ymd") ? $local->getTeDebugging() : (TagValueHelper::getValueFromTags('DateToDebugging', $rede->getTeDebugging()) == date("Ymd") ? $rede->getTeDebugging() : '')); $debugging = $debugging ? TagValueHelper::getValueFromTags('DetailsToDebugging', $debugging) : ''; // Adiciona no log de acesso. REGRA: só adiciona se o último registro foi em data diferente da de hoje // TODO: Colocar um parâmetro que diz quantas vezes deve ser registrado o acesso por dia $data_acesso = new \DateTime(); $hoje = $data_acesso->format('Y-m-d'); $ultimo_acesso = $this->getDoctrine()->getRepository('CacicCommonBundle:LogAcesso')->ultimoAcesso($computador->getIdComputador()); //$ultimo_user_logado = $this->getDoctrine()->getRepository('CacicCommonBundle:LogUserLogado')->ultimoAcesso( $computador->getIdComputador() ); /** * Grava os registros na Tabela Log_User_Logado */ if (!empty($ultimo_login)) { $ultimo_user_logado = new LogUserLogado(); $ultimo_user_logado->setIdComputador($computador); $ultimo_user_logado->setData($data_acesso); $ultimo_user_logado->setUsuario($ultimo_login); $this->getDoctrine()->getManager()->persist($ultimo_user_logado); $this->getDoctrine()->getManager()->flush(); } else { $logger->error("ERRO NO GET-TEST: usuário logado não encontrado para o computador {$ip_computador}"); } if (empty($ultimo_acesso)) { // Se for o primeiro registro grava o acesso do computador $logger->debug("Último acesso não encontrado. Registrando acesso para o computador {$computador} em {$hoje}"); $log_acesso = new LogAcesso(); $log_acesso->setIdComputador($computador); $log_acesso->setData($data_acesso); /* * Grava o último usuário logado no banco apenas se não estiver vazio */ if (!empty($ultimo_login)) { $log_acesso->setUsuario($ultimo_login); } // Grava o log $this->getDoctrine()->getManager()->persist($log_acesso); $this->getDoctrine()->getManager()->flush(); } else { $dt_ultimo_acesso = $ultimo_acesso->getData()->format('Y-m-d'); // Só adiciono se a data de útimo acesso for diferente do dia de hoje if ($hoje != $dt_ultimo_acesso) { $logger->debug("Inserindo novo registro de acesso para o computador {$computador} em {$hoje}"); $log_acesso = new LogAcesso(); $log_acesso->setIdComputador($computador); $log_acesso->setData($data_acesso); /* * Grava o último usuário logado no banco apenas se não estiver vazio */ if (!empty($ultimo_login)) { $log_acesso->setUsuario($ultimo_login); } // Grava o log $this->getDoctrine()->getManager()->persist($log_acesso); $this->getDoctrine()->getManager()->flush(); } } $response = new Response(); $response->headers->set('Content-Type', 'xml'); $cacic_helper = new OldCacicHelper($this->get('kernel')); $testcoleta = '[forca_coleta]' . $computador->getForcaColeta() . '[/forca_coleta]'; return $this->render('CacicWSBundle:Default:test.xml.twig', array('configs' => $cacic_helper->getTest($request), 'computador' => $computador, 'rede' => $rede, 'testcoleta' => $testcoleta, 'debugging' => $debugging, 'ws_folder' => OldCacicHelper::CACIC_WEB_SERVICES_FOLDER_NAME, 'cs_cipher' => $request->get('cs_cipher'), 'cs_compress' => $request->get('cs_compress')), $response); }
/** * Método responsável por informar e coletar informações sobre dispositivos USB plugados na estação * @param Request $request */ public function gerColsSetUsbDetectAction(Request $request) { OldCacicHelper::autenticaAgente($request); $strNetworkAdapterConfiguration = OldCacicHelper::deCrypt($request, $request->get('NetworkAdapterConfiguration')); $data = new \DateTime('NOW'); $netmask = TagValueHelper::getValueFromTags('IPSubnet', $strNetworkAdapterConfiguration); $ip_computador = $request->get('te_ip_computador'); if (empty($ip_computador)) { $ip_computador = TagValueHelper::getValueFromTags('IPAddress', $strNetworkAdapterConfiguration); } if (empty($ip_computador) or $ip_computador == '127.0.0.1') { $ip_computador = $request->getClientIp(); } $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta($ip_computador, $netmask); $te_node_address = TagValueHelper::getValueFromTags('MACAddress', $strNetworkAdapterConfiguration); $te_so = $request->get('te_so'); $so = $this->getDoctrine()->getRepository('CacicCommonBundle:So')->findOneBy(array('teSo' => $te_so)); $computador = $this->getDoctrine()->getRepository('CacicCommonBundle:Computador')->getComputadorPreCole($request, $te_so, $te_node_address, $rede, $so, $ip_computador); $local = $computador->getIdRede()->getIdLocal(); $te_usb_info = OldCacicHelper::deCrypt($request, $request->get('te_usb_info')); if ($te_usb_info != '') { $arrUsbInfo = explode('_', $te_usb_info); $arrTeUsbFilter = $this->getDoctrine()->getRepository('CacicCommonBundle:ConfiguracaoLocal')->listarNotificacaoPropertyLocal($local->getIdLocal(), 'te_usb_filter'); $arrTeNotificarUtilizacaoUSB = $this->getDoctrine()->getRepository('CacicCommonBundle:ConfiguracaoLocal')->listarNotificacaoPropertyLocal($rede->getIdLocal(), 'te_notificar_utilizacao_usb'); $arrVendorData = $this->getDoctrine()->getRepository('CacicCommonBundle:UsbVendor ')->findBy(array('idVendor' => $arrUsbInfo[2])); if (empty($arrVendorData)) { $usb_vendor = new UsbVendor(); $usb_vendor->setIdUsbVendor($arrUsbInfo[2]); $usb_vendor->setNmUsbVendor('Fabricante de Dispositivos USB Desconhecido'); $arrVendorData = $usb_vendor; } $arrDeviceData = $this->getDoctrine()->getRepository('CacicCommonBundle:UsbDevice')->findBy(array('idDevice' => $arrUsbInfo[3], 'idVendor' => $arrUsbInfo[2])); if (empty($arrDeviceData)) { $usb_device = new UsbDevice(); $usb_device->setIdUsbVendor($arrVendorData); $usb_device->setIdDevice($arrUsbInfo[3]); $usb_device->setNmUsbDevice('Dispositivo USB Desconhecido'); $arrDeviceData = $usb_device; } $usb_log = new UsbLog(); $usb_log->setIdComputador($computador); $usb_log->getCsEvent($arrUsbInfo[0]); $usb_log->setDtEvent($arrUsbInfo[1]); $usb_log->setIdUsbDevice($arrDeviceData); if (trim($arrTeUsbFilter[0]['teUsbFilter']) != '' && trim($arrTeNotificarUtilizacaoUSB[0]['teNotificarUtilizacaoUsb']) != '') { $arrUSBfilter = explode('#', $arrTeUsbFilter[0]['te_usb_filter']); $strUSBkey = $arrUsbInfo[2] . "." . $arrUsbInfo[3]; $indexOf = array_search($strUSBkey, $arrUSBfilter); if ($indexOf != -1) { $strCorpoMail = ''; $strCorpoMail .= " Prezado administrador,\n\n"; $strCorpoMail .= " foi " . ($arrUsbInfo[0] == 'I' ? 'inserido' : 'removido') . " o dispositivo '(" . $arrVendorData[0]['id_vendor'] . ")" . $arrVendorData[0]['nm_vendor'] . " / (" . $arrDeviceData[0]['id_device'] . ")" . $arrDeviceData[0]['nm_device'] . ($arrUsbInfo[0] == 'I' ? 'n' : 'd') . "a esta��o de trabalho abaixo:\n\n"; $strCorpoMail .= " Nome...........: " . $computador->getNmComputador() . "\n"; $strCorpoMail .= " Endereço IP: " . $computador->getTeIpComputador() . "\n"; $strCorpoMail .= " Rede............: " . $rede['nmRede'] . " ('" . $rede['teIpRede'] . "')\n"; $strCorpoMail .= "\n\nPara visualizar mais informações sobre esse computador, acesse o endereço\nhttp://"; $strCorpoMail .= CACIC_PATH . '/relatorios/computador/computador.php?id_computador=' . $computador->getIdComputador(); $strCorpoMail .= "\n\n\n________________________________________________\n"; $strCorpoMail .= "CACIC - " . date('d/m/Y H:i') . "h \n"; // Manda mail para os administradores. //TODO verificar Boas Praticas mail($arrTeNotificarUtilizacaoUSB[0]['te_notificar_utilizacao_usb'], "[Sistema CACIC] ".($arrUsbInfo[0] == 'I'?'Inser��o':'Remo��o')." de Dispositivo USB Detectada", "$strCorpoMail", "From: cacic@{$_SERVER['SERVER_NAME']}"); } } $nm_device = OldCacicHelper::enCrypt($request, '(' . $arrVendorData[0]['id_vendor'] . ')' . $arrVendorData[0]['nm_vendor'] . ' - (' . $arrDeviceData[0]['id_device'] . ')' . $arrDeviceData[0]['nm_device']); } $this->getDoctrine()->getManager()->flush(); //persistencia dos dados no BD $response = new Response(); $response->headers->set('Content-Type', 'xml'); $cacic_helper = new OldCacicHelper($this->get('kernel')); return $this->render('CacicWSBundle:Coleta:setusb.xml.twig', array('configs' => $cacic_helper->getTest($request), 'computador' => $computador, 'rede' => $rede, 'ws_folder' => OldCacicHelper::CACIC_WEB_SERVICES_FOLDER_NAME, 'cs_cipher' => $request->get('cs_cipher'), 'cs_compress' => $request->get('cs_compress'), 'status' => 'OK', 'nm_device' => $nm_device), $response); }