/** * 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 que registra o Acesso e identifica o computador * * @param Request $request * @return JsonResponse */ public function getTestAction(Request $request) { //1 - Verificar se computador existe $logger = $this->get('logger'); $status = $request->getContent(); $em = $this->getDoctrine()->getManager(); $logger->debug("JSON getTest:\n" . $status); $dados = json_decode($status, true); if (empty($dados)) { $logger->error("JSON INVÁLIDO!!!!!!!!!!!!!!!!!!! Erro no getTest"); // Retorna erro se o JSON for inválido $error_msg = '{ "message": "JSON Inválido", "codigo": 1 }'; $response = new JsonResponse(); $response->setStatusCode('500'); $response->setContent($error_msg); return $response; } $logger->debug("JSON get Test status \n" . print_r(json_decode($status, true), true)); // Identifica computador $computador = $this->getComputador($dados, $request); if (empty($computador)) { $logger->error("Erro na identificação do computador. Retorna mensagem de erro"); $error_msg = '{ "message": "Computador não identificado", "codigo": 2 }'; $response = new JsonResponse(); $response->setStatusCode('500'); $response->setContent($error_msg); return $response; } // 3 - Grava no log de acesso //Só adiciona se o último registro foi em data diferente da de hoje $data_acesso = new \DateTime(); $hoje = $data_acesso->format('Y-m-d'); $ultimo_acesso = $em->getRepository('CacicCommonBundle:LogAcesso')->ultimoAcesso($computador->getIdComputador()); 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 log $em->persist($log_acesso); } else { $dt_ultimo_acesso = $ultimo_acesso->getData()->format('Y-m-d'); // Adiciona 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 log $em->persist($log_acesso); } } # TODO: Grava log de acessos de usuario do computador caso não esteja vazio if (!empty($dados['computador']['usuario'])) { $log_usuario = new LogUserLogado(); $log_usuario->setIdComputador($computador); $log_usuario->setData(new \DateTime()); $log_usuario->setUsuario($dados['computador']['usuario']); $em->persist($log_usuario); } $em->flush(); $response = new JsonResponse(); $response->setStatusCode('200'); return $response; }