Commit 4ac208010963fc91925ac238c76c2542691c0250

Authored by Eric Menezes Noronha
1 parent ebd01e4b
Exists in master

Implementação da classe checkmodules. Quase completa, só realizar o teste na int…

…ra e corrigir os bugs
cacic-daemon/cacicD/cacictimer.cpp
... ... @@ -177,13 +177,7 @@ void CacicTimer::setApplicationDirPath(const QString &value)
177 177 }
178 178  
179 179  
180   -bool CacicTimer::Md5IsEqual(QVariant document01,QVariant document02){
181   - QString getconfigMD5 = QString(QCryptographicHash::hash(
182   - (document01.toByteArray()),QCryptographicHash::Md5).toHex());
183   - QString getconfigMD52 = QString(QCryptographicHash::hash(
184   - (document02.toByteArray()),QCryptographicHash::Md5).toHex());
185   - return getconfigMD5 == getconfigMD52;
186   -}
  180 +
187 181  
188 182 void CacicTimer::iniciarInstancias(){
189 183 logManager = QLogger::QLoggerManager::getInstance();
... ...
cacic-daemon/cacicD/cacictimer.h
... ... @@ -28,7 +28,6 @@ public:
28 28 void iniciarTimer();
29 29 bool getTest();
30 30 bool getConfig();
31   - bool Md5IsEqual(QVariant document01,QVariant document02);
32 31 void setApplicationDirPath(const QString &value);
33 32 QString getApplicationDirPath();
34 33 void setDirProgram(const QString &value);
... ...
cacic-teste/testcacic.cpp
... ... @@ -333,12 +333,13 @@ void CTestCacic::testEnviaColeta()
333 333 void CTestCacic::testGetModulesValues()
334 334 {
335 335 oCheckModules = new CheckModules(QDir::currentPath());
  336 + oCheckModules->start();
336 337 QVERIFY(false);
337 338 }
338 339  
339 340 void CTestCacic::cleanupTestCase()
340 341 {
341   - // OCacic.deleteFile("gpl-2.0.txt");
  342 + OCacic.deleteFile("gpl-2.0.txt");
342 343 OCacic.deleteFile("log01.txt");
343 344 OCacic.deleteFile("./log02.txt");
344 345 OCacic.deleteFile("../log03.txt");
... ... @@ -349,5 +350,5 @@ void CTestCacic::cleanupTestCase()
349 350 OCacic.deleteFolder("../logs");
350 351 OCacic.deleteFile("configRequest.json");
351 352 OCacic.deleteFile("teste.json");
352   -// OCacic.deleteFile("getConfig.json");
  353 + OCacic.deleteFile("getConfig.json");
353 354 }
... ...
src/cacic_comm.cpp
... ... @@ -4,10 +4,10 @@ CacicComm::CacicComm ()
4 4 {
5 5 }
6 6  
7   -CacicComm::CacicComm (QString urlGerente, QString operatingSystem, QString computerSystem, QString csCipher,
8   - QString csDebug, QString csCompress, QString httpUserAgent, QString moduleFolderName,
9   - QString moduleProgramName, QString networkConfiguration,QString phpAuthPw, QString phpAuthUser,
10   - QString so, QString cacicVersion, QString gercolsVersion)
  7 +CacicComm::CacicComm (const QString &urlGerente, const QString &operatingSystem, const QString &computerSystem, const QString &csCipher,
  8 + const QString &csDebug, const QString &csCompress, const QString &httpUserAgent, const QString &moduleFolderName,
  9 + const QString &moduleProgramName, const QString &networkConfiguration,const QString &phpAuthPw, const QString &phpAuthUser,
  10 + const QString &so, const QString &cacicVersion, const QString &gercolsVersion)
11 11 {
12 12 this->setUrlGerente(urlGerente);
13 13 params.addQueryItem("OperatingSystem", operatingSystem);
... ... @@ -159,6 +159,11 @@ bool CacicComm::fileDownload(const QString &mode, const QString &path, const QSt
159 159 QUrl url(urlGerente);
160 160 url.setScheme(mode);
161 161 url.setPath(path);
  162 + if (!this->ftpUser.isEmpty())
  163 + url.setUserName(ftpUser);
  164 + if (!this->ftpPass.isEmpty())
  165 + url.setPassword(ftpPass);
  166 +
162 167 request.setUrl(url);
163 168  
164 169 reply = manager.get(request);
... ... @@ -196,6 +201,11 @@ bool CacicComm::fileDownload(const QString &mode, const QString &urlServer, cons
196 201 QUrl url(urlServer);
197 202 url.setScheme(mode);
198 203 url.setPath(path);
  204 + if (!this->ftpUser.isEmpty())
  205 + url.setUserName(ftpUser);
  206 + if (!this->ftpPass.isEmpty())
  207 + url.setPassword(ftpPass);
  208 +
199 209 request.setUrl(url);
200 210  
201 211 reply = manager.get(request);
... ... @@ -208,6 +218,38 @@ bool CacicComm::fileDownload(const QString &mode, const QString &urlServer, cons
208 218 return true;
209 219 }
210 220  
  221 +void CacicComm::fileDownloadFinished(QNetworkReply* reply)
  222 +{
  223 + if (reply->size() > 0){
  224 + QTextStream out(fileHandler);
  225 + out << reply->readAll();
  226 + fileHandler->close();
  227 + reply->close();
  228 + } else {
  229 + qDebug() << "Falha ao baixar arquivo.";
  230 + }
  231 +}
  232 +
  233 +QString CacicComm::getFtpPass() const
  234 +{
  235 + return ftpPass;
  236 +}
  237 +
  238 +void CacicComm::setFtpPass(const QString &value)
  239 +{
  240 + ftpPass = value;
  241 +}
  242 +
  243 +QString CacicComm::getFtpUser() const
  244 +{
  245 + return ftpUser;
  246 +}
  247 +
  248 +void CacicComm::setFtpUser(const QString &value)
  249 +{
  250 + ftpUser = value;
  251 +}
  252 +
211 253 bool CacicComm::ftpDownload( const QString &path, const QString &pathDownload ){
212 254 return fileDownload("ftp", path, pathDownload);
213 255 }
... ... @@ -228,7 +270,7 @@ QString CacicComm::getUrlSsl (){
228 270 return this->urlSsl;
229 271 }
230 272  
231   -void CacicComm::setUrlSsl(QString value){
  273 +void CacicComm::setUrlSsl(const QString &value){
232 274 this->urlSsl = value;
233 275 }
234 276  
... ... @@ -251,7 +293,7 @@ QString CacicComm::getPassword()
251 293 return this->password;
252 294 }
253 295  
254   -void CacicComm::setPassword(QString value)
  296 +void CacicComm::setPassword(const QString &value)
255 297 {
256 298 this->password = value;
257 299 }
... ... @@ -260,15 +302,9 @@ QString CacicComm::getUsuario()
260 302 return this->usuario;
261 303 }
262 304  
263   -void CacicComm::setUsuario(QString value)
  305 +void CacicComm::setUsuario(const QString &value)
264 306 {
265 307 this->usuario = value;
266 308 }
267 309  
268   -void CacicComm::fileDownloadFinished(QNetworkReply* reply)
269   -{
270   - QTextStream out(fileHandler);
271   - out << reply->readAll();
272   - fileHandler->close();
273   - reply->close();
274   -}
  310 +
... ...
src/cacic_comm.h
... ... @@ -20,10 +20,10 @@ class CacicComm : public QObject{
20 20 public:
21 21  
22 22 CacicComm ();
23   - CacicComm (QString urlGerente, QString operatingSystem, QString computerSystem, QString csCipher,
24   - QString csDebug, QString csCompress, QString httpUserAgent, QString moduleFolderName,
25   - QString moduleProgramName, QString networkConfiguration,QString phpAuthPw, QString phpAuthUser,
26   - QString so, QString cacicVersion, QString gercolsVersion);
  23 + CacicComm (const QString &urlGerente, const QString &operatingSystem, const QString &computerSystem, const QString &csCipher,
  24 + const QString &csDebug, const QString &csCompress, const QString &httpUserAgent, const QString &moduleFolderName,
  25 + const QString &moduleProgramName, const QString &networkConfiguration,const QString &phpAuthPw, const QString &phpAuthUser,
  26 + const QString &so, const QString &cacicVersion, const QString &gercolsVersion);
27 27 QJsonObject comm(QString route, bool *ok, const QJsonObject &json = QJsonObject(), bool isSsl = false);
28 28 bool commStatus();
29 29 QJsonObject login(bool *ok);
... ... @@ -32,18 +32,20 @@ public:
32 32 bool httpDownload(const QString &path, const QString &pathDownload);
33 33 bool httpDownload(const QString &urlServer, const QString &path,const QString &pathDownload);
34 34 QString getUrlSsl ();
35   - void setUrlSsl(QString value);
  35 + void setUrlSsl(const QString &value);
36 36 QString getUrlGerente ();
37 37 void setUrlGerente(QString value);
38 38 QString getPassword();
39   - void setPassword(QString value);
  39 + void setPassword(const QString &value);
40 40 QString getUsuario();
41   - void setUsuario(QString value);
42   -
43   -
  41 + void setUsuario(const QString &value);
  42 + QString getFtpUser() const;
  43 + void setFtpUser(const QString &value);
  44 + QString getFtpPass() const;
  45 + void setFtpPass(const QString &value);
44 46  
45 47 signals:
46   -// void finished(QNetworkReply* reply);
  48 + void finished(QNetworkReply* reply);
47 49  
48 50 private slots:
49 51  
... ... @@ -60,6 +62,8 @@ private:
60 62 QString usuario;
61 63 QString password;
62 64 QString session;
  65 + QString ftpUser;
  66 + QString ftpPass;
63 67  
64 68 QFile *fileHandler;
65 69  
... ...
src/ccacic.cpp
... ... @@ -199,6 +199,22 @@ QString CCacic::deCrypt(std::string str_in, std::string iv) {
199 199 return QString::fromStdString(str_out);
200 200 }
201 201  
  202 +bool CCacic::Md5IsEqual(QVariant document01,QVariant document02){
  203 + QString file1 = QString(QCryptographicHash::hash(
  204 + (document01.toByteArray()),QCryptographicHash::Md5).toHex());
  205 + QString file2 = QString(QCryptographicHash::hash(
  206 + (document02.toByteArray()),QCryptographicHash::Md5).toHex());
  207 + return file1 == file2;
  208 +}
  209 +
  210 +bool CCacic::Md5IsEqual(QVariant document01,QString document02){
  211 + QString file1 = QString(QCryptographicHash::hash(
  212 + (document01.toByteArray()),QCryptographicHash::Md5).toHex());
  213 + QString file2 = document02;
  214 + return file1 == file2;
  215 +}
  216 +
  217 +
202 218 QString CCacic::startProcess(QString pathprogram, bool wait, bool *ok, QStringList arguments)
203 219 {
204 220 QProcess process;
... ...
src/ccacic.h
... ... @@ -17,6 +17,7 @@
17 17 #include "../src/crypto++/include/aes.h"
18 18 #include "../src/crypto++/include/base64.h"
19 19 #include "../src/crypto++/include/modes.h"
  20 +#include <QCryptographicHash>
20 21  
21 22 class CCacic
22 23 {
... ... @@ -60,6 +61,8 @@ public:
60 61 QString getChaveCrypt() const;
61 62 void setChaveCrypt(const QString &value);
62 63  
  64 + bool Md5IsEqual(QVariant document01, QVariant document02);
  65 + bool Md5IsEqual(QVariant document01, QString document02);
63 66 private:
64 67 QString cacicMainFolder;
65 68 QString mainModuleName;
... ...
src/checkmodules.cpp
... ... @@ -2,23 +2,83 @@
2 2  
3 3 CheckModules::CheckModules(const QString &workingPath)
4 4 {
  5 + oCacic.setCacicMainFolder(workingPath);
5 6 QJsonObject configFile;
6 7 configFile = oCacic.getJsonFromFile(workingPath + "/getConfig.json");
7 8 if (!configFile.isEmpty()) {
  9 + //pega url do gerente.
  10 + this->applicationUrl = configFile["agentcomputer"].toObject()["applicationUrl"].toString();
8 11 QJsonArray modulos;
  12 + //pega o jsonarray dos módulos
9 13 modulos = configFile["agentcomputer"].toObject()["modulos"].toArray();
10 14 foreach (QJsonValue modulo, modulos){
  15 + //grava o nome com o hash de cada modulo
11 16 modules[modulo.toObject()["nome"].toString()] = modulo.toObject()["hash"].toString();
12 17 }
13 18 }
14 19 //TODO: Completar constructor. Agora que tenho os nomes dos módulos e os hashs, fazer a verificação.
15   - qDebug() << modules;
  20 +
  21 + QDir tempPath(oCacic.getCacicMainFolder() + "/temp");
  22 + if (!tempPath.exists()){
  23 + qDebug() << "criando diretório temporário";
  24 + tempPath.mkdir(oCacic.getCacicMainFolder() + "/temp");
  25 + }
16 26 }
17 27  
18 28 bool CheckModules::start(){
  29 + if (!modules.isEmpty()){
  30 + QVariantMap::const_iterator i = modules.constBegin();
  31 + while (i != modules.constEnd()){
  32 + qDebug() << "Módulo: " << i.key() << " | Hash: " << i.value().toString();
  33 + this->verificaModulo(i.key(), i.value().toString());
  34 + i++;
  35 + }
  36 + }
19 37 return true;
20 38 }
21 39  
  40 +bool CheckModules::verificaModulo(const QString &moduloName, const QString &moduloHash)
  41 +{
  42 + QFile *modulo;
  43 + bool downloadOk = false;
  44 + //pega o arquivo do módulo selecionado
  45 + modulo = new QFile(oCacic.getCacicMainFolder() + "/" + moduloName);
  46 + //verifica se o módulo existe, se o tamaho é maior que 1 byte e se o hash é igual ao informado pelo json
  47 + if (!(modulo->exists() && modulo->size()>1 && oCacic.Md5IsEqual(QVariant::fromValue(modulo), moduloHash))){
  48 + QFile *novoModulo;
  49 + QJsonObject metodoDownload;
  50 + //verifica o tipo de download e tenta baixar o módulo para a pasta temporária.
  51 + metodoDownload = oCacic.getJsonFromFile("getConfig.json")["agentcomputer"].toObject()["metodoDownload"].toObject();
  52 + oCacicComm.setFtpUser(metodoDownload["usuario"].toString());
  53 + oCacicComm.setFtpPass(metodoDownload["senha"].toString());
  54 + if(metodoDownload["tipo"].toString() == "ftp"){
  55 + qDebug() << moduloName << "ftp download";
  56 + downloadOk = oCacicComm.ftpDownload(this->applicationUrl,
  57 + metodoDownload["path"].toString() + "/" + moduloName,
  58 + oCacic.getCacicMainFolder() + "/temp/");
  59 + } else if (metodoDownload["tipo"].toString() == "http"){
  60 + qDebug() << moduloName << "http download";
  61 + downloadOk = oCacicComm.httpDownload(this->applicationUrl,
  62 + metodoDownload["path"].toString() + "/" + moduloName,
  63 + oCacic.getCacicMainFolder() + "/temp/");
  64 + } else {
  65 + qDebug() << moduloName << "metodo de download incorreto";
  66 + return false;
  67 + }
  68 + //faz uma verificação do novo módulo.
  69 + novoModulo = new QFile(oCacic.getCacicMainFolder() + "/temp/" + moduloName);
  70 + if (!(novoModulo->exists() && novoModulo->size()>1 && oCacic.Md5IsEqual(QVariant::fromValue(modulo), moduloHash))){
  71 + qDebug() << moduloName << "falha no download..";
  72 + novoModulo->remove();
  73 + return false;
  74 + } else {
  75 + qDebug() << moduloName << "Sucesso!";
  76 + return true;
  77 + }
  78 +
  79 + }
  80 +}
  81 +
22 82 //QStringList CheckModules::verificaModulos(){
23 83 // // Compara o novo arquivo de configuração com um antigo e se forem diferentes
24 84 // // mantem o mais recente; caso iguais simplesmente apaga o novo.
... ...
src/checkmodules.h
... ... @@ -13,7 +13,10 @@ public:
13 13 bool start();
14 14 private:
15 15 CCacic oCacic;
  16 + CacicComm oCacicComm;
  17 + QString applicationUrl;
16 18 QVariantMap modules; //modules["name"] = hash;
  19 + bool verificaModulo(const QString &moduloName, const QString &moduloHash);
17 20 // void lerArquivoConfig(const QJsonObject& jsonConfig);
18 21 };
19 22  
... ...