Commit 9989db7c3bb17b08e44c65b7b71dcaafb1cd7ced

Authored by Thiago Rocha
1 parent c4982c45
Exists in master

Concluída base para processamento após obtenção do getConfig, mas assumindo como…

… está o .json e parte de download de executável incompleta.
cacic-daemon/cacicD/cacictimer.cpp
@@ -6,9 +6,37 @@ CacicTimer::CacicTimer() @@ -6,9 +6,37 @@ CacicTimer::CacicTimer()
6 ccacic = new CCacic(); 6 ccacic = new CCacic();
7 timer = new QTimer(this); 7 timer = new QTimer(this);
8 logManager = QLogger::QLoggerManager::getInstance(); 8 logManager = QLogger::QLoggerManager::getInstance();
  9 +
  10 + OCacicComm = CacicComm("http://teste.cacic.cc",
  11 + "rG/HcIDVTZ3pPKCf[[MAIS]]I6aigUb7OMeij3FfC7qNaznk0rBRYb6q6kSK3eNfjgptS8BfwW5yJqCvD2ai7xlw9I6P21j6cvQUqlHmAJpCbfwR13urdRE9AhjfokMcPrH6R1/zXPGMHveLRRgKLcqWu2X96rmoQQdRq9EW1SXmYUAx1dCV[[MAIS]]3Ha61XBw5pq58q35zH8Gjt998rTi3ecV8ShXXevqyK[[MAIS]]W07xpgTjbbd6Fbs/35gPfdRRgMNFjq7Gq[[MAIS]]llFgYMJ6UcEhw8f0ZLQo2oL/eRW/CNyeBW6wG0hIo6EIdpi/Ht0/95Uwn2Og[[MAIS]]2UPXsmKKuTMeGwUvPdbEfexlinUO0[[MAIS]]j9qIa2dpjtl0Y5Fyk1Bvw2ZYRTXwgJpUHsBboWmtTFpgX3wSGOWMipE80K8ktRTVYOp[[MAIS]]4qS/SzKWXpfCuZoCncfwE0lCEoreTH[[MAIS]]MLrTkHJP2oqYMAyFyQcjC0UGr3BQGa2edSNXjG7jrTdddga/SODUiF94jgh/QBwhiZby34b__CRYPTED__",
  12 + "P198PVwtz5F5CfZPSUrzuaQA/QG1sTnwzl/rBnj8M7y5MglANGodG5LLD4q7oY809HuDR4g5tL64lZRBKvKPmEgWd9iAZKvT4UAm9XWN3nKKLGaznCaJohmntNGqrJP1Zd9riTHGu10mPbg/Uh3TCbBHVOICvu5sDlINlCR6A3[[MAIS]]a55RhfKNidvr5uX0kozCxr5t2DyOb5oPocEGyJKyHLQ==__CRYPTED__",
  13 + "1",
  14 + "0",
  15 + "0",
  16 + "YwpgjzZ86/eCsjvOki1KkQ==__CRYPTED__",
  17 + "8PT6U445MPNr3S7WHFa20ge/8NJSspSYE/UL3zf[[MAIS]]wkEfNZ7p1B/2o6i89gTZ44Ok__CRYPTED__",
  18 + "wshPlZWvLPhbUEQFQ1aQmA==__CRYPTED__",
  19 + "E9aKtVz/OSmGv7v1xW4FwaFukOob3qQ/HFDIz916K3ys82qfX9vBDz[[MAIS]]M2cdoYedhNkXt[[MAIS]]UVb10nD[[MAIS]]tOfbn7mlOlTDoGzUl9CgdPCsb[[MAIS]]Qa4wzuCrMw0BcCuaKfr62E3b8vh6Ug4JJbOgBo3ohG3x5O7Ap0D94GKtAWjMuTXRBbhGxPrRS4M6AhzvaN5P8pWd9FikrCLWuMs4ebnRlftef3RmVKScBDQ5zmK6sKxYNmX[[MAIS]]kKn/Gi2[[MAIS]]HftZ7HD9JLvZBpYhp4yjqShblQ67d6PlWgrRWXxwDseIiJe3NlF70zrCPBBelkeAhVDXMXnsYtLms3ElsLzxa3c5vpWzTfgyE[[MAIS]]hvALy4ivew7zaxEwrg2KY1T7GOSWZ7vljIvbhVZJgtzbnYiulFjJTtm5W4uJMKLuUJNzB0rxMkzToIE9/kDmeO2OKiwFbIfbe2Wdq0VpllOkjKtj9WM676iBSpYAXG0MsmLMj9CZ/sNi06hGF[[MAIS]]rXxiOSk66M0Hq[[MAIS]]OeUBh4z3Ra6f9yPJn0K9hIQyT[[MAIS]]Dr/QW/QdJIOkLTW8ZyyAF4DW9ojiTlUdySvB5EB1jyZ5nNTpzyE38qIdg7uM1tdWdm9FZGYxMdHwi1tS2dBeIWkDfWEjih01xiVt2dmdRgo0zIZvmmYDJ9LhCU3XPDlwdeQ8[[MAIS]]F7fnxDfxGqZQjZJ[[MAIS]]Y/Q8bdLpgbhcd3gt3SzjMLE0M[[MAIS]]hTmHG1KP2CzCibZ7grFAN3Y3jSPjmEj5Fzs26tdhdjNzSIt1FCueea8P2c4NmxPYkJCg0D1mgNrkH3L5svsO[[MAIS]]6YYrl3df4s[[MAIS]]fcK/to9s/pnkKfBKrAPF6Z4s2WPsALUPBDS5ty7RC2vqXRvH6hPR4o7xhXzQOQ/1xytr/RoEWEVeZ2wgHVVbbtFsALul/IDc7B45wmwxBx9iZHVwpQJVlNZZUBtwKqKhnXz5pM[[MAIS]]7yUAkfhMcO09pPd5kB2MBdRJs[[MAIS]]2FIk0GRUw05IHkc1rZEX5Ow==__CRYPTED__",
  20 + "Yot8BeM9lOh431SB7dYQXw==__CRYPTED__",
  21 + "Dcr8b5IfZOJjt6qyH5dGyw==__CRYPTED__",
  22 + "2.5.1.1.256.32",
  23 + "2.8.1.7",
  24 + "2.8.1.6");
  25 + OCacicComm->setUrlSsl("https://10.1.0.137/cacic/web/app_dev.php");
  26 + OCacicComm->setUsuario("cacic");
  27 + OCacicComm->setPassword("cacic123");
  28 +
9 connect(timer,SIGNAL(timeout()),this,SLOT(mslot())); 29 connect(timer,SIGNAL(timeout()),this,SLOT(mslot()));
10 } 30 }
11 31
  32 +CacicTimer::~CacicTimer()
  33 +{
  34 + logManager->closeLogger();
  35 + delete logManager;
  36 + delete ccacic;
  37 + delete OCacicComm;
  38 +}
  39 +
12 void CacicTimer::iniciarTimer(int x, QString applicationDirPath) 40 void CacicTimer::iniciarTimer(int x, QString applicationDirPath)
13 { 41 {
14 setApplicationDirPath(applicationDirPath); 42 setApplicationDirPath(applicationDirPath);
@@ -26,36 +54,88 @@ void CacicTimer::mslot(){ @@ -26,36 +54,88 @@ void CacicTimer::mslot(){
26 54
27 // Compara o novo arquivo de configuração com um antigo e se forem diferentes 55 // Compara o novo arquivo de configuração com um antigo e se forem diferentes
28 // mantem o mais recente; caso iguais simplesmente apaga o novo. 56 // mantem o mais recente; caso iguais simplesmente apaga o novo.
29 - QFile *fileConfig = new QFile(getApplicationDirPath().append("/getConfig.json"));  
30 - QFile *fileConfigNew = new QFile(getApplicationDirPath().append("/getConfigNew.json"));  
31 -  
32 - if( fileConfig->exists() && fileConfigNew->exists() ){  
33 - if( Md5IsEqual(QVariant::fromValue(fileConfig), QVariant::fromValue(fileConfigNew)) ) {  
34 - fileConfigNew->remove();  
35 - delete fileConfigNew; 57 + QFile *fileOld;
  58 + QFile *fileNew;
  59 +
  60 + fileOld = new QFile(getApplicationDirPath().append("/getConfig.json"));
  61 + fileNew = new QFile(getApplicationDirPath().append("/getConfigNew.json"));
  62 + if( fileOld->exists() && fileNew->exists() ){
  63 + if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) {
  64 + fileNew->remove();
36 } else { 65 } else {
37 // Renomeia getConfigNew.json para getConfig.json 66 // Renomeia getConfigNew.json para getConfig.json
38 - fileConfig->remove();  
39 - delete fileConfig;  
40 - fileConfigNew->rename("getConfigNew.json","getConfig.json");  
41 - delete fileConfigNew; 67 + fileOld->remove();
  68 + fileNew->rename("getConfigNew.json","getConfig.json");
42 } 69 }
43 jsonConfig = ccacic->getJsonFromFile(getApplicationDirPath().append("/getConfig.json")); 70 jsonConfig = ccacic->getJsonFromFile(getApplicationDirPath().append("/getConfig.json"));
44 - } else if( fileConfig->exists() ){ 71 + } else if( fileOld->exists() ){
45 jsonConfig = ccacic->getJsonFromFile(getApplicationDirPath().append("/getConfig.json")); 72 jsonConfig = ccacic->getJsonFromFile(getApplicationDirPath().append("/getConfig.json"));
46 } else { 73 } else {
47 QLogger::QLog_Error("Cacic Daemon", "Arquivo de configuração não criado."); 74 QLogger::QLog_Error("Cacic Daemon", "Arquivo de configuração não criado.");
48 } 75 }
  76 + delete fileOld;
  77 + delete fileNew;
49 78
50 /* lê json de configurações e armazena quais módulos executáveis. 79 /* lê json de configurações e armazena quais módulos executáveis.
51 * E faz o mesmo tipo de comparação de hashs, com o fim de: 80 * E faz o mesmo tipo de comparação de hashs, com o fim de:
52 * ou mantem o binário do módulo ou baixa um novo. 81 * ou mantem o binário do módulo ou baixa um novo.
53 */ 82 */
54 - foreach( QVariant vectorsContent, jsonConfig["modulos"].toArray().toVariantList().toVector() )  
55 - moduleList.append( vectorsContent.toString() );  
56 83
57 - foreach( QString modulo, moduleList ) { 84 + /* Aqui estou assumindo um formato do .json em que:
  85 + * há a key modulos contem uma lista com o nome dos executaveis e os seus valores hash md5
  86 + * há a key metodo que explicita o método de download dos executaveis
  87 + */
  88 + foreach( QJsonValue moduloValues, jsonConfig["modulos"].toArray() ) {
  89 + QString moduloKey, moduloValue;
  90 +
  91 + moduloKey = moduloValues.toObject()["md5"].toString();
  92 + moduloValue = moduloValues.toObject()["nome"].toString();
  93 +
  94 + moduleMap.insert(moduloKey, moduloValue);
  95 + }
  96 + metodoDownload = jsonConfig["metodo"].toString();
  97 +
  98 + int countExecNotFound = 0;
  99 + QMap<QString, QString>::const_iterator mapIterator = moduleMap.constBegin();
  100 + while (mapIterator != moduleMap.constEnd()) {
  101 + QString nomeModulo = mapIterator.value();
  102 + QString hashModulo = mapIterator.key();
  103 +
  104 + // Calcula hash do binario atual
  105 +#if defined(Q_OS_WIN)
  106 + fileOld = new QFile(getApplicationDirPath().append("/").append(modulo).append(".exe"));
  107 +#else
  108 + fileOld = new QFile(getApplicationDirPath().append("/").append(nomeModulo));
  109 +#endif
  110 + if(!fileOld->exists()) {
  111 + QLogger::QLog_Error("Cacic Daemon", QString("Módulo ").append(nomeModulo).append(" não encontrado."));
  112 +
  113 + countExecNotFound++;
  114 + if( countExecNotFound == moduleMap.size() ) {
  115 + QLogger::QLog_Error("Cacic Daemon", "Não foi possível encontrar nenhum módulo executável!");
  116 + return;
  117 + }
  118 + continue;
  119 + }
  120 +
  121 + QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex());
  122 +
  123 + if ( oldMd5 != hashModulo ) {
  124 +
  125 + fileOld->rename(getApplicationDirPath().append("/").append(nomeModulo),
  126 + getApplicationDirPath().append("/").append("nomeModulo").append("Old") );
  127 +
  128 + // Download nova versão do executável
  129 + if(metodoDownload == "ftp" || metodoDownload == "") {
  130 +// OCacicComm->ftpDownload( QString("/ws/get/").append(nomeModulo) );
  131 + }
  132 +
  133 +
  134 + fileOld->remove();
  135 + delete fileOld;
  136 + }
58 137
  138 + mapIterator++;
59 } 139 }
60 140
61 //aqui irá abrir o semaforo e iniciar a coleta. 141 //aqui irá abrir o semaforo e iniciar a coleta.
cacic-daemon/cacicD/cacictimer.h
@@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
5 #include <QDebug> 5 #include <QDebug>
6 #include <QDir> 6 #include <QDir>
7 #include <QDateTime> 7 #include <QDateTime>
  8 +#include <QMap>
8 #include "ccacic.h" 9 #include "ccacic.h"
9 #include "cacic_comm.h" 10 #include "cacic_comm.h"
10 #include "cacic_computer.h" 11 #include "cacic_computer.h"
@@ -34,7 +35,9 @@ private: @@ -34,7 +35,9 @@ private:
34 QJsonObject jsonConfig; 35 QJsonObject jsonConfig;
35 QLogger::QLoggerManager *logManager; 36 QLogger::QLoggerManager *logManager;
36 QString applicationDirPath; 37 QString applicationDirPath;
37 - QStringList moduleList; 38 + QString metodoDownload;
  39 + QMap<QString, QString> moduleMap; // key = hash md5, value = nome do modulo
  40 +
38 41
39 private slots: 42 private slots:
40 void mslot(); 43 void mslot();