/**
  * Gera relatório com histórico de coletas para o computador/classe escolhidos
  *
  * @param Request $request
  * @param $idComputador
  * @param $classe
  * @return Response
  */
 public function historicoAction(Request $request, $idComputador, $classe)
 {
     $em = $this->getDoctrine()->getManager();
     $locale = $request->getLocale();
     $logger = $this->get('logger');
     $historico = $em->getRepository('CacicCommonBundle:ComputadorColetaHistorico')->listar($limit = 100, $idComputador, $classe);
     $saida = array();
     foreach ($historico as $coletas) {
         #$logger->debug("333333333333333333333333333333 ".$coletas['nmPropertyName']. " ".$coletas['teClassPropertyValue']);
         $saida[$coletas['dtHrInclusao']->format('d-m-Y')][$coletas['nmPropertyName']] = TagValueHelper::getTableValues($coletas['teClassPropertyValue']);
     }
     return $this->render('CacicRelatorioBundle:Computador:historico.html.twig', array('saida' => $saida, 'classe' => $classe, 'idioma' => $locale));
 }
 public function getComputadorPreCole(Request $request, $te_so, $te_node_adress, $rede, $so, $ip_computador)
 {
     //recebe dados via POST, deCripata dados, e attribui a variaveis
     $computer_system = OldCacicHelper::deCrypt($request, $request->request->get('ComputerSystem'), true);
     $network_adapter = OldCacicHelper::deCrypt($request, $request->request->get('NetworkAdapterConfiguration'), true);
     $operating_system = OldCacicHelper::deCrypt($request, $request->request->get('OperatingSystem'), true);
     $te_versao_cacic = $request->request->get('te_versao_cacic');
     $te_versao_gercols = $request->request->get('te_versao_gercols');
     $data = new \DateTime('NOW');
     //armazena data Atual
     //vefifica se existe SO coletado se não, insere novo SO
     $computador = $this->findOneBy(array('teNodeAddress' => $te_node_adress, 'idSo' => $so->getIdSo()));
     //inserção de dado se for um novo computador
     if (empty($computador)) {
         $computador = new Computador();
         $computador->setTeNodeAddress($te_node_adress);
         $computador->setIdSo($so);
         $computador->setIdRede($rede);
         $computador->setDtHrInclusao($data);
         $computador->setTePalavraChave($request->get('PHP_AUTH_PW'));
         $computador->setAtivo(true);
         $this->getEntityManager()->persist($computador);
     }
     // Atualiza subrede se houve mudança de subrede para o computador
     #if ($computador->getIdRede() != $rede) {
     #error_log("Atualizando subrede paara o computador ".$computador->getTeIpComputador()." Antiga: ".$computador->getIdRede()->getNmRede()." | Nova: ".$rede->getNmRede());
     #    $computador->setIdRede($rede);
     #}
     $computador->setDtHrUltAcesso($data);
     $computador->setTeVersaoCacic($te_versao_cacic);
     $computador->setTeVersaoGercols($te_versao_gercols);
     $computador->setTeUltimoLogin(TagValueHelper::getValueFromTags('UserName', $computer_system));
     $computador->setTeIpComputador($ip_computador);
     $computador->setNmComputador(TagValueHelper::getValueFromTags('Caption', $computer_system));
     $computador->setAtivo(true);
     $this->getEntityManager()->persist($computador);
     $acoes = $this->getEntityManager()->getRepository('CacicCommonBundle:Acao')->findAll();
     //inserção ações de coleta a nova maquina
     foreach ($acoes as $acao) {
         $acao_so = $this->getEntityManager()->getRepository('CacicCommonBundle:AcaoSo')->findBy(array('rede' => $rede, 'so' => $so, 'acao' => $acao));
         if (empty($acao_so)) {
             $acao_so = new AcaoSo();
             $acao_so->setRede($rede);
             $acao_so->setSo($so);
             $acao_so->setAcao($acao);
             $this->getEntityManager()->persist($acao_so);
         }
     }
     //persistir dados
     $this->getEntityManager()->flush();
     return $computador;
 }
Example #3
0
 /**
  * [MODAL] Exibe dados do computador e informações sobre coleta
  */
 public function detalharAction($idComputador, Request $request)
 {
     $logger = $this->container->get('logger');
     //if ( ! $request->isXmlHttpRequest() ) // Verifica se é uma requisição AJAX
     //	throw $this->createNotFoundException( 'Página não encontrada!' );
     $d = $this->getDoctrine();
     $computador = $d->getRepository('CacicCommonBundle:Computador')->find((int) $idComputador);
     $ultimo_acesso = $d->getRepository('CacicCommonBundle:LogAcesso')->ultimoUserName($idComputador);
     if (!$computador) {
         throw $this->createNotFoundException('Página não encontrada!');
     }
     $usuario = $this->getUser()->getIdUsuario();
     $nivel = $this->getDoctrine()->getRepository('CacicCommonBundle:Usuario')->nivel($usuario);
     if ($request->get('ativar')) {
         if (!$this->get('security.context')->isGranted('ROLE_ADMIN')) {
             throw $this->createAccessDeniedException('Operação disponível somente para administradores');
         }
         $computador->setAtivo(true);
         $computador->setIdUsuarioExclusao(null);
         $computador->setDtHrExclusao(null);
         $d->getManager()->persist($computador);
         $d->getManager()->flush();
         $this->get('session')->getFlashBag()->add('success', 'Computador ativado com sucesso!');
         return $this->redirect($this->generateUrl($request->get('_route'), $request->get('_route_params')));
     }
     if ($request->get('desativar')) {
         if (!$this->get('security.context')->isGranted('ROLE_ADMIN')) {
             throw $this->createAccessDeniedException('Operação disponível somente para administradores');
         }
         $computador->setAtivo(false);
         $computador->setIdUsuarioExclusao($this->getUser());
         $computador->setDtHrExclusao(new \DateTime());
         $d->getManager()->persist($computador);
         $d->getManager()->flush();
         $this->get('session')->getFlashBag()->add('success', 'Computador ativado com sucesso!');
         return $this->redirect($this->generateUrl($request->get('_route'), $request->get('_route_params')));
     }
     if ($request->get('forcarColeta')) {
         if (!$this->get('security.context')->isGranted('ROLE_ADMIN')) {
             throw $this->createAccessDeniedException('Operação disponível somente para administradores');
         }
         $computador->setAtivo(true);
         $computador->setForcaColeta('true');
         $d->getManager()->persist($computador);
         $d->getManager()->flush();
         $this->get('session')->getFlashBag()->add('success', 'Coleta forçada com sucesso!');
         return $this->redirect($this->generateUrl($request->get('_route'), $request->get('_route_params')));
     }
     $coleta = $d->getRepository('CacicCommonBundle:ComputadorColeta')->getDadosColetaComputador($computador);
     $isNotebook = $computador->getIsNotebook();
     //$logger->debug("isNotebook%%%%%%%%%%% $isNotebook");
     $dadosColeta = array();
     // Inicializa o array que agrupa os dados de coleta por Classe
     $software = array();
     // Coloca a coleta de software num array separado
     $listaClasses = array();
     $listaSoftwares = array();
     foreach ($coleta as $v) {
         //$idClass = $v->getClassProperty()->getIdClass()->getIdClass();
         // Vamos tratar primeiro a exceção, para o caso da classe ser software
         $propriedade = $v[0]->getClassProperty();
         $classe = $propriedade->getIdClass()->getNmClassName();
         $nome_propriedade = $propriedade->getNmPropertyName();
         if ($classe == 'SoftwareList') {
             // O identificador do software está armazenado na propriedade
             // Coleta de Software
             $software[$nome_propriedade]['displayName'] = $v['displayName'];
             if (empty($v['displayName'])) {
                 // Alguns softwares não têm nome. É absurdo mas acontece
                 $software[$nome_propriedade]['displayName'] = $nome_propriedade;
             }
             $software[$nome_propriedade]['displayVersion'] = $v['displayVersion'];
             $software[$nome_propriedade]['URLInfoAbout'] = $v['URLInfoAbout'];
             $software[$nome_propriedade]['publisher'] = $v['publisher'];
         } else {
             // Outras coletas
             $dadosColeta[$classe][$nome_propriedade]['nmPropertyName'] = $propriedade->getNmPropertyName();
             $dadosColeta[$classe][$nome_propriedade]['tePropertyDescription'] = $propriedade->getTePropertyDescription();
             // Trata o valor antes de enviar
             $valor = TagValueHelper::getTableValues($v[0]->getTeClassPropertyValue());
             $dadosColeta[$classe][$nome_propriedade]['teClassPropertyValue'] = $valor;
         }
         //if ( array_key_exists( $idClass, $dadosColeta ) )
         //    $dadosColeta[ $idClass ] = array();
         //$dadosColeta[ $idClass ][] = $v;
     }
     // Única maneira de verificar se é ativo. Bug bizarro do PHP
     $sql = "SELECT (\n            CASE WHEN ativo = 'f' THEN 'falso'\n             ELSE 'verdadeiro'\n             END) as show_ativo FROM computador WHERE id_computador = {$idComputador}\n        ";
     $stmt = $d->getManager()->getConnection()->prepare($sql);
     $stmt->execute();
     $ativo = $stmt->fetchAll();
     $ativo = $ativo[0]['show_ativo'];
     return $this->render('CacicCommonBundle:Computador:detalhar.html.twig', array('computador' => $computador, 'ultimoAcesso' => $ultimo_acesso, 'dadosColeta' => $dadosColeta, 'software' => $software, 'ativo' => $ativo, 'nivel' => $nivel));
 }
Example #4
0
 /**
  *  Método responsável por enviar as configurações de Patrimônio necessarias ao Agente CACIC
  *  @param Symfony\Component\HttpFoundation\Request $request
  */
 public function mapaAction(Request $request)
 {
     $logger = $this->get('logger');
     $em = $this->getDoctrine()->getManager();
     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)) {
         $ip_computador = $request->getClientIp();
     }
     // 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
     $so = $em->getRepository('CacicCommonBundle:So')->createIfNotExist($te_so);
     $rede = $em->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta($ip_computador, $netmask);
     // Retorna falso por padrão
     $modPatrimonio = "false";
     if (empty($te_node_address) || empty($so)) {
         $this->get('logger')->error("Erro na operação de getMapa. IP = {$ip_computador} Máscara = {$netmask}. MAC = {$te_node_address}. SO = {$te_so}");
         $response = new Response();
         $response->headers->set('Content-Type', 'xml');
         return $this->render('CacicWSBundle:Default:mapa.xml.twig', array('mensagem' => "", 'modPatrimonio' => "false"), $response);
     }
     $computador = $em->getRepository('CacicCommonBundle:Computador')->getComputadorPreCole($request, $te_so, $te_node_address, $rede, $so, $ip_computador);
     $idComputador = $computador->getIdComputador();
     $logger->debug("Teste de Conexão GET-MAPA ! Ip do computador: {$ip_computador} Máscara da rede: {$netmask} MAC Address: {$te_node_address} ID Computador: {$idComputador}");
     $patr = $em->getRepository('CacicCommonBundle:AcaoRede')->findOneBy(array('rede' => $rede->getIdRede(), 'acao' => 'col_patr'));
     /**
      * Se o módulo estiver habilitado, verifica se existe coleta de patrimônio
      */
     if (!empty($patr)) {
         $result = $em->getRepository('CacicCommonBundle:ComputadorColeta')->getDadosColetaComputador($computador, 'Patrimonio');
         /**
          * Caso não exista nenhuma coleta, envia "true" para o agente.
          */
         if (empty($result)) {
             $logger->debug("COLETA DE PATRIMÔNIO INEXISTENTE!!! COLETANDO...");
             $modPatrimonio = "true";
         }
     }
     /**
      * Força coleta do patrimônio
      */
     $forcaPatrimonio = $computador->getForcaPatrimonio();
     if ($forcaPatrimonio == "S") {
         $logger->debug("COLETA FORÇADA DE PATRIMÔNIO: {$forcaPatrimonio}");
         $modPatrimonio = "true";
         $computador->setForcaPatrimonio('N');
         $em->persist($computador);
     }
     $em->flush();
     /**
      * Mensagem a ser exibida na tela de Pop-Up do patrimônio
      */
     $mensagem = $em->getRepository('CacicCommonBundle:ConfiguracaoPadrao')->findOneBy(array('idConfiguracao' => 'msg_popup_patrimonio'));
     if (!empty($mensagem)) {
         $mensagem = $mensagem->getVlConfiguracao();
     } else {
         $mensagem = "Pop-up de patrimônio";
     }
     //$mensagem = implode('',$mensagem);
     $logger->debug("RESULTADO DO PATRIMÔNIO: {$modPatrimonio}");
     // Retorna patrimônio
     $response = new Response();
     $response->headers->set('Content-Type', 'xml');
     return $this->render('CacicWSBundle:Default:mapa.xml.twig', array('mensagem' => $mensagem, 'modPatrimonio' => $modPatrimonio), $response);
 }
 /**
  *  Método responsável por verificar e e enviar os Hashes ao Agente CACIC
  *  @param Symfony\Component\HttpFoundation\Request $request
  */
 public function updateAction(Request $request)
 {
     $logger = $this->get('logger');
     OldCacicHelper::autenticaAgente($request);
     $strNetworkAdapterConfiguration = OldCacicHelper::deCrypt($request, $request->get('NetworkAdapterConfiguration'));
     $te_node_address = TagValueHelper::getValueFromTags('MACAddress', $strNetworkAdapterConfiguration);
     $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();
     }
     /**
      * 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');
     }
     /**
      * Executa atualização forçada se algum dos parâmetros obrigatórios estiver vazio
      */
     $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta($ip_computador, $netmask);
     $local = $rede->getIdLocal();
     $configs = $this->getDoctrine()->getRepository('CacicCommonBundle:ConfiguracaoLocal')->listarPorLocal($local->getIdLocal());
     $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta($ip_computador, $netmask);
     $redes_versoes_modulos = $this->getDoctrine()->getRepository('CacicCommonBundle:RedeVersaoModulo')->findBy(array('idRede' => $rede->getIdRede()));
     $nm_user_login_updates = OldCacicHelper::enCrypt($request, $rede->getNmUsuarioLoginServUpdates());
     $senha_serv_updates = OldCacicHelper::enCrypt($request, $rede->getTeSenhaLoginServUpdates());
     $logger->debug("Teste de Conexão GET-UPDATE! Ip do computador: {$ip_computador} Máscara da rede: {$netmask} MAC Address: {$te_node_address}");
     $response = new Response();
     $response->headers->set('Content-Type', 'xml');
     return $this->render('CacicWSBundle:Default:update.xml.twig', array('configs' => $configs, 'rede' => $rede, 'redes_versoes_modulos' => $redes_versoes_modulos, 'main_program' => OldCacicHelper::CACIC_MAIN_PROGRAM_NAME . '.exe', 'folder_name' => OldCacicHelper::CACIC_LOCAL_FOLDER_NAME, 'nm_user_login_updates' => $nm_user_login_updates, 'senha_serv_updates' => $senha_serv_updates, 'cs_compress' => $request->get('cs_compress'), 'cs_cipher' => $request->get('cs_cipher'), 'ws_folder' => OldCacicHelper::CACIC_WEB_SERVICES_FOLDER_NAME), $response);
 }
Example #6
0
 /**
  * Processa informações de coleta
  *
  * @param $strNewClassValues
  * @param $arrCollectsDefClasses
  * @param $strCollectType
  * @param $strClassName
  * @param $computador
  */
 public function coletaGeral($strNewClassValues, $arrCollectsDefClasses, $strCollectType, $strClassName, $computador)
 {
     $logger = $this->get('logger');
     $logger->debug("Processando classe WMI: {$strClassName}");
     // Armazeno todas as propriedades dessa classe enviadas pela requisição
     $arrTagsNames = TagValueHelper::getTagsFromValues($strNewClassValues);
     // Agora gravo todas as propriedades dessa classe na tabela de computadores
     foreach ($arrTagsNames as $classPropertyName) {
         $logger->debug("Processando a proriedade WMI {$classPropertyName} para a classe {$strClassName}");
         // Pega classe
         $idClass = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->findOneBy(array('nmClassName' => $strClassName));
         // Caso a propriedade ainda não esteja cadastrada no banco, crio na hora
         if (array_key_exists($classPropertyName, $arrCollectsDefClasses[$strCollectType][$strClassName])) {
             // Somente armazeno o valor que já existe
             $idClassProperty = $arrCollectsDefClasses[$strCollectType][$strClassName][$classPropertyName]['idClassProperty'];
             $logger->debug("Propriedade encontrada: {$classPropertyName} id_class_property = {$idClassProperty}. Apenas atualizar");
         } else {
             // Se não existir cria a propriedade
             $logger->info("Criando propriedade {$classPropertyName} para a classe {$strClassName}");
             $classPropertyObject = new ClassProperty();
             $classPropertyObject->setIdClass($idClass);
             $classPropertyObject->setNmPropertyName($classPropertyName);
             $classPropertyObject->setTePropertyDescription('On the fly created Property');
             $this->getDoctrine()->getManager()->persist($classPropertyObject);
             $this->getDoctrine()->getManager()->flush();
             // Finalmente adiciono no array de classes e propriedades
             $idClassProperty = $classPropertyObject->getIdClassProperty();
             $property = array('idClassProperty' => $idClassProperty, 'nmFunctionPreDb' => null);
             $arrCollectsDefClasses[$strCollectType][$strClassName][$classPropertyName] = $property;
         }
         //error_log("888888888888888888888888888888888888888888888: $strClassName | $idClassProperty | $classPropertyName");
         // Chama função que grava a propriedade
         $this->gerColsSetProperty($classPropertyName, $strNewClassValues, $idClassProperty, $computador);
     }
 }